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

; 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.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<aiFace, std::allocator<aiFace>>::_Vector_impl" }
%"struct.std::_Vector_base<aiFace, std::allocator<aiFace>>::_Vector_impl" = type { %"struct.std::_Vector_base<aiFace, std::allocator<aiFace>>::_Vector_impl_data" }
%"struct.std::_Vector_base<aiFace, std::allocator<aiFace>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.20" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.21" = type { ptr }
%struct.aiVertexWeight = type { i32, float }
%struct.aiString = type { i32, [1024 x i8] }
%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::SplitLargeMeshesProcess_Vertex" = type <{ %"class.Assimp::BaseProcess", i32, [4 x i8] }>
%"class.Assimp::BaseProcess" = type { ptr, ptr, ptr }
%class.aiColor4t = type { float, float, float, float }
%struct.aiFace = type { i32, ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::pair.22" = type { i32, float }
%struct.aiBone = type { %struct.aiString, i32, ptr, ptr, ptr, %class.aiMatrix4x4t }
%class.aiMatrix4x4t = type { float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }

; 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: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp30SplitLargeMeshesProcess_Vertex9SplitMeshEjP6aiMeshRSt6vectorISt4pairIS2_jESaIS5_EE(ptr noundef nonnull align 8 dereferenceable(28) %0, i32 noundef %1, ptr noundef %2, ptr noundef nonnull align 8 dereferenceable(24) %3) #5 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca %"class.std::vector.0", align 8
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %22 = alloca ptr, align 8
  %23 = alloca %"class.std::vector.10", align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca %"class.__gnu_cxx::__normal_iterator.20", align 8
  %38 = alloca %"class.__gnu_cxx::__normal_iterator.21", align 8
  %39 = alloca %"class.__gnu_cxx::__normal_iterator.21", align 8
  %40 = alloca ptr, align 8
  %41 = alloca %struct.aiVertexWeight, align 4
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca %struct.aiString, align 4
  %48 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !9
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  %49 = load ptr, ptr %5, align 8
  %50 = load ptr, ptr %7, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.aiMesh, ptr %50, i32 0, i32 1
  %52 = load i32, ptr %51, align 4, !tbaa !11
  %53 = getelementptr inbounds %"class.Assimp::SplitLargeMeshesProcess_Vertex", ptr %49, i32 0, i32 1
  %54 = load i32, ptr %53, align 8, !tbaa !18
  %55 = icmp ugt i32 %52, %54
  br i1 %55, label %56, label %919

56:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #10
  %57 = load ptr, ptr %7, align 8, !tbaa !5
  %58 = call noundef ptr @_ZN6Assimp28ComputeVertexBoneWeightTableEPK6aiMesh(ptr noundef %57)
  store ptr %58, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #10
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.aiMesh, ptr %59, i32 0, i32 1
  %61 = load i32, ptr %60, align 4, !tbaa !11
  %62 = getelementptr inbounds %"class.Assimp::SplitLargeMeshesProcess_Vertex", ptr %49, i32 0, i32 1
  %63 = load i32, ptr %62, align 8, !tbaa !18
  %64 = udiv i32 %61, %63
  %65 = add i32 %64, 1
  store i32 %65, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #10
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  %66 = load ptr, ptr %7, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.aiMesh, ptr %66, i32 0, i32 1
  %68 = load i32, ptr %67, align 4, !tbaa !11
  %69 = zext i32 %68 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #10
  store i32 -1, ptr %12, align 4, !tbaa !9
  invoke void @_ZNSt6vectorIjSaIjEE6resizeEmRKj(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %69, ptr noundef nonnull align 4 dereferenceable(4) %12)
          to label %70 unwind label %123

70:                                               ; preds = %56
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #10
  %71 = load ptr, ptr %7, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.aiMesh, ptr %71, i32 0, i32 2
  %73 = load i32, ptr %72, align 8, !tbaa !21
  %74 = load i32, ptr %10, align 4, !tbaa !9
  %75 = udiv i32 %73, %74
  store i32 %75, ptr %15, align 4, !tbaa !9
  %76 = load i32, ptr %15, align 4, !tbaa !9
  %77 = lshr i32 %76, 3
  %78 = load i32, ptr %15, align 4, !tbaa !9
  %79 = add i32 %78, %77
  store i32 %79, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #10
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %80

80:                                               ; preds = %895, %70
  br label %81

81:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #10
  %82 = getelementptr inbounds %"class.Assimp::SplitLargeMeshesProcess_Vertex", ptr %49, i32 0, i32 1
  %83 = load i32, ptr %82, align 8, !tbaa !18
  store i32 %83, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #10
  %84 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1320) #11
          to label %85 unwind label %127

85:                                               ; preds = %81
  call void @_ZN6aiMeshC2Ev(ptr noundef nonnull align 8 dereferenceable(1320) %84) #10
  store ptr %84, ptr %18, align 8, !tbaa !5
  %86 = load ptr, ptr %18, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.aiMesh, ptr %86, i32 0, i32 1
  store i32 0, ptr %87, align 4, !tbaa !11
  %88 = load ptr, ptr %7, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.aiMesh, ptr %88, i32 0, i32 13
  %90 = load i32, ptr %89, align 8, !tbaa !22
  %91 = load ptr, ptr %18, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.aiMesh, ptr %91, i32 0, i32 13
  store i32 %90, ptr %92, align 8, !tbaa !22
  %93 = load ptr, ptr %7, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.aiMesh, ptr %93, i32 0, i32 14
  %95 = load ptr, ptr %18, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.aiMesh, ptr %95, i32 0, i32 14
  %97 = invoke noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %96, ptr noundef nonnull align 4 dereferenceable(1028) %94)
          to label %98 unwind label %127

98:                                               ; preds = %85
  %99 = load ptr, ptr %7, align 8, !tbaa !5
  %100 = invoke noundef zeroext i1 @_ZNK6aiMesh8HasBonesEv(ptr noundef nonnull align 8 dereferenceable(1320) %99)
          to label %101 unwind label %127

101:                                              ; preds = %98
  br i1 %100, label %102, label %131

102:                                              ; preds = %101
  %103 = load ptr, ptr %7, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.aiMesh, ptr %103, i32 0, i32 11
  %105 = load i32, ptr %104, align 8, !tbaa !23
  %106 = zext i32 %105 to i64
  %107 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %106, i64 8)
  %108 = extractvalue { i64, i1 } %107, 1
  %109 = extractvalue { i64, i1 } %107, 0
  %110 = select i1 %108, i64 -1, i64 %109
  %111 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %110) #11
          to label %112 unwind label %127

112:                                              ; preds = %102
  %113 = load ptr, ptr %18, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.aiMesh, ptr %113, i32 0, i32 12
  store ptr %111, ptr %114, align 8, !tbaa !24
  %115 = load ptr, ptr %18, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.aiMesh, ptr %115, i32 0, i32 12
  %117 = load ptr, ptr %116, align 8, !tbaa !24
  %118 = load ptr, ptr %7, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.aiMesh, ptr %118, i32 0, i32 11
  %120 = load i32, ptr %119, align 8, !tbaa !23
  %121 = zext i32 %120 to i64
  %122 = mul i64 8, %121
  call void @llvm.memset.p0.i64(ptr align 8 %117, i8 0, i64 %122, i1 false)
  br label %131

123:                                              ; preds = %56
  %124 = landingpad { ptr, i32 }
          cleanup
  %125 = extractvalue { ptr, i32 } %124, 0
  store ptr %125, ptr %13, align 8
  %126 = extractvalue { ptr, i32 } %124, 1
  store i32 %126, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #10
  br label %918

127:                                              ; preds = %102, %98, %85, %81
  %128 = landingpad { ptr, i32 }
          cleanup
  %129 = extractvalue { ptr, i32 } %128, 0
  store ptr %129, ptr %13, align 8
  %130 = extractvalue { ptr, i32 } %128, 1
  store i32 %130, ptr %14, align 4
  br label %897

131:                                              ; preds = %112, %101
  %132 = load i32, ptr %16, align 4, !tbaa !9
  %133 = icmp ne i32 %132, 0
  br i1 %133, label %134, label %150

134:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #10
  store ptr %11, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #10
  %135 = load ptr, ptr %19, align 8, !tbaa !5
  %136 = call ptr @_ZNSt6vectorIjSaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %135) #10
  %137 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %20, i32 0, i32 0
  store ptr %136, ptr %137, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #10
  %138 = load ptr, ptr %19, align 8, !tbaa !5
  %139 = call ptr @_ZNSt6vectorIjSaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %138) #10
  %140 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %21, i32 0, i32 0
  store ptr %139, ptr %140, align 8
  br label %141

141:                                              ; preds = %147, %134
  %142 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPjSt6vectorIjSaIjEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  br i1 %142, label %144, label %143

143:                                              ; preds = %141
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #10
  br label %149

144:                                              ; preds = %141
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #10
  %145 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  store ptr %145, ptr %22, align 8, !tbaa !5
  %146 = load ptr, ptr %22, align 8, !tbaa !5
  store i32 -1, ptr %146, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  br label %147

147:                                              ; preds = %144
  %148 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  br label %141

149:                                              ; preds = %143
  br label %150

150:                                              ; preds = %149, %131
  call void @llvm.lifetime.start.p0(i64 24, ptr %23) #10
  call void @_ZNSt6vectorI6aiFaceSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %151 = load ptr, ptr %7, align 8, !tbaa !5
  %152 = invoke noundef zeroext i1 @_ZNK6aiMesh12HasPositionsEv(ptr noundef nonnull align 8 dereferenceable(1320) %151)
          to label %153 unwind label %173

153:                                              ; preds = %150
  br i1 %152, label %154, label %177

154:                                              ; preds = %153
  %155 = load i32, ptr %17, align 4, !tbaa !9
  %156 = zext i32 %155 to i64
  %157 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %156, i64 12)
  %158 = extractvalue { i64, i1 } %157, 1
  %159 = extractvalue { i64, i1 } %157, 0
  %160 = select i1 %158, i64 -1, i64 %159
  %161 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %160) #11
          to label %162 unwind label %173

162:                                              ; preds = %154
  %163 = icmp eq i64 %156, 0
  br i1 %163, label %170, label %164

164:                                              ; preds = %162
  %165 = getelementptr inbounds %class.aiVector3t, ptr %161, i64 %156
  br label %166

166:                                              ; preds = %166, %164
  %167 = phi ptr [ %161, %164 ], [ %168, %166 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %167) #10
  %168 = getelementptr inbounds %class.aiVector3t, ptr %167, i64 1
  %169 = icmp eq ptr %168, %165
  br i1 %169, label %170, label %166

170:                                              ; preds = %166, %162
  %171 = load ptr, ptr %18, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.aiMesh, ptr %171, i32 0, i32 3
  store ptr %161, ptr %172, align 8, !tbaa !25
  br label %177

173:                                              ; preds = %882, %829, %724, %324, %220, %204, %200, %181, %177, %154, %150
  %174 = landingpad { ptr, i32 }
          cleanup
  %175 = extractvalue { ptr, i32 } %174, 0
  store ptr %175, ptr %13, align 8
  %176 = extractvalue { ptr, i32 } %174, 1
  store i32 %176, ptr %14, align 4
  br label %896

177:                                              ; preds = %170, %153
  %178 = load ptr, ptr %7, align 8, !tbaa !5
  %179 = invoke noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %178)
          to label %180 unwind label %173

180:                                              ; preds = %177
  br i1 %179, label %181, label %200

181:                                              ; preds = %180
  %182 = load i32, ptr %17, align 4, !tbaa !9
  %183 = zext i32 %182 to i64
  %184 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %183, i64 12)
  %185 = extractvalue { i64, i1 } %184, 1
  %186 = extractvalue { i64, i1 } %184, 0
  %187 = select i1 %185, i64 -1, i64 %186
  %188 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %187) #11
          to label %189 unwind label %173

189:                                              ; preds = %181
  %190 = icmp eq i64 %183, 0
  br i1 %190, label %197, label %191

191:                                              ; preds = %189
  %192 = getelementptr inbounds %class.aiVector3t, ptr %188, i64 %183
  br label %193

193:                                              ; preds = %193, %191
  %194 = phi ptr [ %188, %191 ], [ %195, %193 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %194) #10
  %195 = getelementptr inbounds %class.aiVector3t, ptr %194, i64 1
  %196 = icmp eq ptr %195, %192
  br i1 %196, label %197, label %193

197:                                              ; preds = %193, %189
  %198 = load ptr, ptr %18, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.aiMesh, ptr %198, i32 0, i32 4
  store ptr %188, ptr %199, align 8, !tbaa !26
  br label %200

200:                                              ; preds = %197, %180
  %201 = load ptr, ptr %7, align 8, !tbaa !5
  %202 = invoke noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %201)
          to label %203 unwind label %173

203:                                              ; preds = %200
  br i1 %202, label %204, label %241

204:                                              ; preds = %203
  %205 = load i32, ptr %17, align 4, !tbaa !9
  %206 = zext i32 %205 to i64
  %207 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %206, i64 12)
  %208 = extractvalue { i64, i1 } %207, 1
  %209 = extractvalue { i64, i1 } %207, 0
  %210 = select i1 %208, i64 -1, i64 %209
  %211 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %210) #11
          to label %212 unwind label %173

212:                                              ; preds = %204
  %213 = icmp eq i64 %206, 0
  br i1 %213, label %220, label %214

214:                                              ; preds = %212
  %215 = getelementptr inbounds %class.aiVector3t, ptr %211, i64 %206
  br label %216

216:                                              ; preds = %216, %214
  %217 = phi ptr [ %211, %214 ], [ %218, %216 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %217) #10
  %218 = getelementptr inbounds %class.aiVector3t, ptr %217, i64 1
  %219 = icmp eq ptr %218, %215
  br i1 %219, label %220, label %216

220:                                              ; preds = %216, %212
  %221 = load ptr, ptr %18, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.aiMesh, ptr %221, i32 0, i32 5
  store ptr %211, ptr %222, align 8, !tbaa !27
  %223 = load i32, ptr %17, align 4, !tbaa !9
  %224 = zext i32 %223 to i64
  %225 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %224, i64 12)
  %226 = extractvalue { i64, i1 } %225, 1
  %227 = extractvalue { i64, i1 } %225, 0
  %228 = select i1 %226, i64 -1, i64 %227
  %229 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %228) #11
          to label %230 unwind label %173

230:                                              ; preds = %220
  %231 = icmp eq i64 %224, 0
  br i1 %231, label %238, label %232

232:                                              ; preds = %230
  %233 = getelementptr inbounds %class.aiVector3t, ptr %229, i64 %224
  br label %234

234:                                              ; preds = %234, %232
  %235 = phi ptr [ %229, %232 ], [ %236, %234 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %235) #10
  %236 = getelementptr inbounds %class.aiVector3t, ptr %235, i64 1
  %237 = icmp eq ptr %236, %233
  br i1 %237, label %238, label %234

238:                                              ; preds = %234, %230
  %239 = load ptr, ptr %18, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.aiMesh, ptr %239, i32 0, i32 6
  store ptr %229, ptr %240, align 8, !tbaa !28
  br label %241

241:                                              ; preds = %238, %203
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #10
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %242

242:                                              ; preds = %274, %241
  %243 = load ptr, ptr %7, align 8, !tbaa !5
  %244 = load i32, ptr %24, align 4, !tbaa !9
  %245 = invoke noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %243, i32 noundef %244)
          to label %246 unwind label %248

246:                                              ; preds = %242
  br i1 %245, label %252, label %247

247:                                              ; preds = %246
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #10
  br label %277

248:                                              ; preds = %252, %242
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %13, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #10
  br label %896

252:                                              ; preds = %246
  %253 = load i32, ptr %17, align 4, !tbaa !9
  %254 = zext i32 %253 to i64
  %255 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %254, i64 16)
  %256 = extractvalue { i64, i1 } %255, 1
  %257 = extractvalue { i64, i1 } %255, 0
  %258 = select i1 %256, i64 -1, i64 %257
  %259 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %258) #11
          to label %260 unwind label %248

260:                                              ; preds = %252
  %261 = icmp eq i64 %254, 0
  br i1 %261, label %268, label %262

262:                                              ; preds = %260
  %263 = getelementptr inbounds %class.aiColor4t, ptr %259, i64 %254
  br label %264

264:                                              ; preds = %264, %262
  %265 = phi ptr [ %259, %262 ], [ %266, %264 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %265) #10
  %266 = getelementptr inbounds %class.aiColor4t, ptr %265, i64 1
  %267 = icmp eq ptr %266, %263
  br i1 %267, label %268, label %264

268:                                              ; preds = %264, %260
  %269 = load ptr, ptr %18, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.aiMesh, ptr %269, i32 0, i32 7
  %271 = load i32, ptr %24, align 4, !tbaa !9
  %272 = zext i32 %271 to i64
  %273 = getelementptr inbounds [8 x ptr], ptr %270, i64 0, i64 %272
  store ptr %259, ptr %273, align 8, !tbaa !5
  br label %274

274:                                              ; preds = %268
  %275 = load i32, ptr %24, align 4, !tbaa !9
  %276 = add i32 %275, 1
  store i32 %276, ptr %24, align 4, !tbaa !9
  br label %242, !llvm.loop !29

277:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #10
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %278

278:                                              ; preds = %321, %277
  %279 = load ptr, ptr %7, align 8, !tbaa !5
  %280 = load i32, ptr %25, align 4, !tbaa !9
  %281 = invoke noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %279, i32 noundef %280)
          to label %282 unwind label %284

282:                                              ; preds = %278
  br i1 %281, label %288, label %283

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

284:                                              ; preds = %288, %278
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %13, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #10
  br label %896

288:                                              ; preds = %282
  %289 = load ptr, ptr %7, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.aiMesh, ptr %289, i32 0, i32 9
  %291 = load i32, ptr %25, align 4, !tbaa !9
  %292 = zext i32 %291 to i64
  %293 = getelementptr inbounds [8 x i32], ptr %290, i64 0, i64 %292
  %294 = load i32, ptr %293, align 4, !tbaa !9
  %295 = load ptr, ptr %18, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.aiMesh, ptr %295, i32 0, i32 9
  %297 = load i32, ptr %25, align 4, !tbaa !9
  %298 = zext i32 %297 to i64
  %299 = getelementptr inbounds [8 x i32], ptr %296, i64 0, i64 %298
  store i32 %294, ptr %299, align 4, !tbaa !9
  %300 = load i32, ptr %17, align 4, !tbaa !9
  %301 = zext i32 %300 to i64
  %302 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %301, i64 12)
  %303 = extractvalue { i64, i1 } %302, 1
  %304 = extractvalue { i64, i1 } %302, 0
  %305 = select i1 %303, i64 -1, i64 %304
  %306 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %305) #11
          to label %307 unwind label %284

307:                                              ; preds = %288
  %308 = icmp eq i64 %301, 0
  br i1 %308, label %315, label %309

309:                                              ; preds = %307
  %310 = getelementptr inbounds %class.aiVector3t, ptr %306, i64 %301
  br label %311

311:                                              ; preds = %311, %309
  %312 = phi ptr [ %306, %309 ], [ %313, %311 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %312) #10
  %313 = getelementptr inbounds %class.aiVector3t, ptr %312, i64 1
  %314 = icmp eq ptr %313, %310
  br i1 %314, label %315, label %311

315:                                              ; preds = %311, %307
  %316 = load ptr, ptr %18, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.aiMesh, ptr %316, i32 0, i32 8
  %318 = load i32, ptr %25, align 4, !tbaa !9
  %319 = zext i32 %318 to i64
  %320 = getelementptr inbounds [8 x ptr], ptr %317, i64 0, i64 %319
  store ptr %306, ptr %320, align 8, !tbaa !5
  br label %321

321:                                              ; preds = %315
  %322 = load i32, ptr %25, align 4, !tbaa !9
  %323 = add i32 %322, 1
  store i32 %323, ptr %25, align 4, !tbaa !9
  br label %278, !llvm.loop !31

324:                                              ; preds = %283
  %325 = load i32, ptr %15, align 4, !tbaa !9
  %326 = zext i32 %325 to i64
  invoke void @_ZNSt6vectorI6aiFaceSaIS0_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %326)
          to label %327 unwind label %173

327:                                              ; preds = %324
  br label %328

328:                                              ; preds = %721, %327
  %329 = load i32, ptr %16, align 4, !tbaa !9
  %330 = load ptr, ptr %7, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.aiMesh, ptr %330, i32 0, i32 2
  %332 = load i32, ptr %331, align 8, !tbaa !21
  %333 = icmp ult i32 %329, %332
  br i1 %333, label %334, label %724

334:                                              ; preds = %328
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #10
  %335 = load ptr, ptr %7, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.aiMesh, ptr %335, i32 0, i32 10
  %337 = load ptr, ptr %336, align 8, !tbaa !32
  %338 = load i32, ptr %16, align 4, !tbaa !9
  %339 = zext i32 %338 to i64
  %340 = getelementptr inbounds %struct.aiFace, ptr %337, i64 %339
  %341 = getelementptr inbounds %struct.aiFace, ptr %340, i32 0, i32 0
  %342 = load i32, ptr %341, align 8, !tbaa !33
  store i32 %342, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #10
  store i32 0, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #10
  store i32 0, ptr %28, align 4, !tbaa !9
  br label %343

343:                                              ; preds = %370, %334
  %344 = load i32, ptr %28, align 4, !tbaa !9
  %345 = load i32, ptr %26, align 4, !tbaa !9
  %346 = icmp ult i32 %344, %345
  br i1 %346, label %348, label %347

347:                                              ; preds = %343
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #10
  br label %373

348:                                              ; preds = %343
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #10
  %349 = load ptr, ptr %7, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.aiMesh, ptr %349, i32 0, i32 10
  %351 = load ptr, ptr %350, align 8, !tbaa !32
  %352 = load i32, ptr %16, align 4, !tbaa !9
  %353 = zext i32 %352 to i64
  %354 = getelementptr inbounds %struct.aiFace, ptr %351, i64 %353
  %355 = getelementptr inbounds %struct.aiFace, ptr %354, i32 0, i32 1
  %356 = load ptr, ptr %355, align 8, !tbaa !35
  %357 = load i32, ptr %28, align 4, !tbaa !9
  %358 = zext i32 %357 to i64
  %359 = getelementptr inbounds i32, ptr %356, i64 %358
  %360 = load i32, ptr %359, align 4, !tbaa !9
  store i32 %360, ptr %29, align 4, !tbaa !9
  %361 = load i32, ptr %29, align 4, !tbaa !9
  %362 = zext i32 %361 to i64
  %363 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %362) #10
  %364 = load i32, ptr %363, align 4, !tbaa !9
  %365 = icmp eq i32 -1, %364
  br i1 %365, label %366, label %369

366:                                              ; preds = %348
  %367 = load i32, ptr %27, align 4, !tbaa !9
  %368 = add i32 %367, 1
  store i32 %368, ptr %27, align 4, !tbaa !9
  br label %369

369:                                              ; preds = %366, %348
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #10
  br label %370

370:                                              ; preds = %369
  %371 = load i32, ptr %28, align 4, !tbaa !9
  %372 = add i32 %371, 1
  store i32 %372, ptr %28, align 4, !tbaa !9
  br label %343, !llvm.loop !36

373:                                              ; preds = %347
  %374 = load ptr, ptr %18, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.aiMesh, ptr %374, i32 0, i32 1
  %376 = load i32, ptr %375, align 4, !tbaa !11
  %377 = load i32, ptr %27, align 4, !tbaa !9
  %378 = add i32 %376, %377
  %379 = load i32, ptr %17, align 4, !tbaa !9
  %380 = icmp ugt i32 %378, %379
  br i1 %380, label %381, label %382

381:                                              ; preds = %373
  store i32 13, ptr %30, align 4
  br label %719

382:                                              ; preds = %373
  %383 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6aiFaceSaIS0_EE12emplace_backIJEEERS0_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %23)
          to label %384 unwind label %402

384:                                              ; preds = %382
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #10
  %385 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6aiFaceSaIS0_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  store ptr %385, ptr %31, align 8, !tbaa !5
  %386 = load i32, ptr %26, align 4, !tbaa !9
  %387 = load ptr, ptr %31, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.aiFace, ptr %387, i32 0, i32 0
  store i32 %386, ptr %388, align 8, !tbaa !33
  %389 = load i32, ptr %26, align 4, !tbaa !9
  %390 = zext i32 %389 to i64
  %391 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %390, i64 4)
  %392 = extractvalue { i64, i1 } %391, 1
  %393 = extractvalue { i64, i1 } %391, 0
  %394 = select i1 %392, i64 -1, i64 %393
  %395 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %394) #11
          to label %396 unwind label %406

396:                                              ; preds = %384
  %397 = load ptr, ptr %31, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.aiFace, ptr %397, i32 0, i32 1
  store ptr %395, ptr %398, align 8, !tbaa !35
  %399 = load ptr, ptr %31, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.aiFace, ptr %399, i32 0, i32 0
  %401 = load i32, ptr %400, align 8, !tbaa !33
  switch i32 %401, label %425 [
    i32 1, label %410
    i32 2, label %415
    i32 3, label %420
  ]

402:                                              ; preds = %382
  %403 = landingpad { ptr, i32 }
          cleanup
  %404 = extractvalue { ptr, i32 } %403, 0
  store ptr %404, ptr %13, align 8
  %405 = extractvalue { ptr, i32 } %403, 1
  store i32 %405, ptr %14, align 4
  br label %723

406:                                              ; preds = %384
  %407 = landingpad { ptr, i32 }
          cleanup
  %408 = extractvalue { ptr, i32 } %407, 0
  store ptr %408, ptr %13, align 8
  %409 = extractvalue { ptr, i32 } %407, 1
  store i32 %409, ptr %14, align 4
  br label %722

410:                                              ; preds = %396
  %411 = load ptr, ptr %18, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.aiMesh, ptr %411, i32 0, i32 0
  %413 = load i32, ptr %412, align 8, !tbaa !37
  %414 = or i32 %413, 1
  store i32 %414, ptr %412, align 8, !tbaa !37
  br label %430

415:                                              ; preds = %396
  %416 = load ptr, ptr %18, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.aiMesh, ptr %416, i32 0, i32 0
  %418 = load i32, ptr %417, align 8, !tbaa !37
  %419 = or i32 %418, 2
  store i32 %419, ptr %417, align 8, !tbaa !37
  br label %430

420:                                              ; preds = %396
  %421 = load ptr, ptr %18, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.aiMesh, ptr %421, i32 0, i32 0
  %423 = load i32, ptr %422, align 8, !tbaa !37
  %424 = or i32 %423, 4
  store i32 %424, ptr %422, align 8, !tbaa !37
  br label %430

425:                                              ; preds = %396
  %426 = load ptr, ptr %18, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.aiMesh, ptr %426, i32 0, i32 0
  %428 = load i32, ptr %427, align 8, !tbaa !37
  %429 = or i32 %428, 8
  store i32 %429, ptr %427, align 8, !tbaa !37
  br label %430

430:                                              ; preds = %425, %420, %415, %410
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #10
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %431

431:                                              ; preds = %704, %430
  %432 = load i32, ptr %32, align 4, !tbaa !9
  %433 = load i32, ptr %26, align 4, !tbaa !9
  %434 = icmp ult i32 %432, %433
  br i1 %434, label %436, label %435

435:                                              ; preds = %431
  store i32 18, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  br label %708

436:                                              ; preds = %431
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #10
  %437 = load ptr, ptr %7, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.aiMesh, ptr %437, i32 0, i32 10
  %439 = load ptr, ptr %438, align 8, !tbaa !32
  %440 = load i32, ptr %16, align 4, !tbaa !9
  %441 = zext i32 %440 to i64
  %442 = getelementptr inbounds %struct.aiFace, ptr %439, i64 %441
  %443 = getelementptr inbounds %struct.aiFace, ptr %442, i32 0, i32 1
  %444 = load ptr, ptr %443, align 8, !tbaa !35
  %445 = load i32, ptr %32, align 4, !tbaa !9
  %446 = zext i32 %445 to i64
  %447 = getelementptr inbounds i32, ptr %444, i64 %446
  %448 = load i32, ptr %447, align 4, !tbaa !9
  store i32 %448, ptr %33, align 4, !tbaa !9
  %449 = load i32, ptr %33, align 4, !tbaa !9
  %450 = zext i32 %449 to i64
  %451 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %450) #10
  %452 = load i32, ptr %451, align 4, !tbaa !9
  %453 = icmp ne i32 -1, %452
  br i1 %453, label %454, label %465

454:                                              ; preds = %436
  %455 = load i32, ptr %33, align 4, !tbaa !9
  %456 = zext i32 %455 to i64
  %457 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %456) #10
  %458 = load i32, ptr %457, align 4, !tbaa !9
  %459 = load ptr, ptr %31, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.aiFace, ptr %459, i32 0, i32 1
  %461 = load ptr, ptr %460, align 8, !tbaa !35
  %462 = load i32, ptr %32, align 4, !tbaa !9
  %463 = zext i32 %462 to i64
  %464 = getelementptr inbounds i32, ptr %461, i64 %463
  store i32 %458, ptr %464, align 4, !tbaa !9
  store i32 20, ptr %30, align 4
  br label %701

465:                                              ; preds = %436
  %466 = load ptr, ptr %7, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.aiMesh, ptr %466, i32 0, i32 3
  %468 = load ptr, ptr %467, align 8, !tbaa !25
  %469 = load i32, ptr %33, align 4, !tbaa !9
  %470 = zext i32 %469 to i64
  %471 = getelementptr inbounds %class.aiVector3t, ptr %468, i64 %470
  %472 = load ptr, ptr %18, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.aiMesh, ptr %472, i32 0, i32 3
  %474 = load ptr, ptr %473, align 8, !tbaa !25
  %475 = load ptr, ptr %18, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.aiMesh, ptr %475, i32 0, i32 1
  %477 = load i32, ptr %476, align 4, !tbaa !11
  %478 = zext i32 %477 to i64
  %479 = getelementptr inbounds %class.aiVector3t, ptr %474, i64 %478
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %479, ptr align 4 %471, i64 12, i1 false), !tbaa.struct !38
  %480 = load ptr, ptr %7, align 8, !tbaa !5
  %481 = invoke noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %480)
          to label %482 unwind label %498

482:                                              ; preds = %465
  br i1 %481, label %483, label %502

483:                                              ; preds = %482
  %484 = load ptr, ptr %7, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.aiMesh, ptr %484, i32 0, i32 4
  %486 = load ptr, ptr %485, align 8, !tbaa !26
  %487 = load i32, ptr %33, align 4, !tbaa !9
  %488 = zext i32 %487 to i64
  %489 = getelementptr inbounds %class.aiVector3t, ptr %486, i64 %488
  %490 = load ptr, ptr %18, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.aiMesh, ptr %490, i32 0, i32 4
  %492 = load ptr, ptr %491, align 8, !tbaa !26
  %493 = load ptr, ptr %18, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.aiMesh, ptr %493, i32 0, i32 1
  %495 = load i32, ptr %494, align 4, !tbaa !11
  %496 = zext i32 %495 to i64
  %497 = getelementptr inbounds %class.aiVector3t, ptr %492, i64 %496
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %497, ptr align 4 %489, i64 12, i1 false), !tbaa.struct !38
  br label %502

498:                                              ; preds = %502, %465
  %499 = landingpad { ptr, i32 }
          cleanup
  %500 = extractvalue { ptr, i32 } %499, 0
  store ptr %500, ptr %13, align 8
  %501 = extractvalue { ptr, i32 } %499, 1
  store i32 %501, ptr %14, align 4
  br label %707

502:                                              ; preds = %483, %482
  %503 = load ptr, ptr %7, align 8, !tbaa !5
  %504 = invoke noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %503)
          to label %505 unwind label %498

505:                                              ; preds = %502
  br i1 %504, label %506, label %535

506:                                              ; preds = %505
  %507 = load ptr, ptr %7, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.aiMesh, ptr %507, i32 0, i32 5
  %509 = load ptr, ptr %508, align 8, !tbaa !27
  %510 = load i32, ptr %33, align 4, !tbaa !9
  %511 = zext i32 %510 to i64
  %512 = getelementptr inbounds %class.aiVector3t, ptr %509, i64 %511
  %513 = load ptr, ptr %18, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.aiMesh, ptr %513, i32 0, i32 5
  %515 = load ptr, ptr %514, align 8, !tbaa !27
  %516 = load ptr, ptr %18, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.aiMesh, ptr %516, i32 0, i32 1
  %518 = load i32, ptr %517, align 4, !tbaa !11
  %519 = zext i32 %518 to i64
  %520 = getelementptr inbounds %class.aiVector3t, ptr %515, i64 %519
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %520, ptr align 4 %512, i64 12, i1 false), !tbaa.struct !38
  %521 = load ptr, ptr %7, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.aiMesh, ptr %521, i32 0, i32 6
  %523 = load ptr, ptr %522, align 8, !tbaa !28
  %524 = load i32, ptr %33, align 4, !tbaa !9
  %525 = zext i32 %524 to i64
  %526 = getelementptr inbounds %class.aiVector3t, ptr %523, i64 %525
  %527 = load ptr, ptr %18, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct.aiMesh, ptr %527, i32 0, i32 6
  %529 = load ptr, ptr %528, align 8, !tbaa !28
  %530 = load ptr, ptr %18, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.aiMesh, ptr %530, i32 0, i32 1
  %532 = load i32, ptr %531, align 4, !tbaa !11
  %533 = zext i32 %532 to i64
  %534 = getelementptr inbounds %class.aiVector3t, ptr %529, i64 %533
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %534, ptr align 4 %526, i64 12, i1 false), !tbaa.struct !38
  br label %535

535:                                              ; preds = %506, %505
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #10
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %536

536:                                              ; preds = %571, %535
  %537 = load i32, ptr %34, align 4, !tbaa !9
  %538 = icmp ult i32 %537, 8
  br i1 %538, label %540, label %539

539:                                              ; preds = %536
  store i32 21, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  br label %574

540:                                              ; preds = %536
  %541 = load ptr, ptr %7, align 8, !tbaa !5
  %542 = load i32, ptr %34, align 4, !tbaa !9
  %543 = invoke noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %541, i32 noundef %542)
          to label %544 unwind label %566

544:                                              ; preds = %540
  br i1 %543, label %545, label %570

545:                                              ; preds = %544
  %546 = load ptr, ptr %7, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.aiMesh, ptr %546, i32 0, i32 8
  %548 = load i32, ptr %34, align 4, !tbaa !9
  %549 = zext i32 %548 to i64
  %550 = getelementptr inbounds [8 x ptr], ptr %547, i64 0, i64 %549
  %551 = load ptr, ptr %550, align 8, !tbaa !5
  %552 = load i32, ptr %33, align 4, !tbaa !9
  %553 = zext i32 %552 to i64
  %554 = getelementptr inbounds %class.aiVector3t, ptr %551, i64 %553
  %555 = load ptr, ptr %18, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.aiMesh, ptr %555, i32 0, i32 8
  %557 = load i32, ptr %34, align 4, !tbaa !9
  %558 = zext i32 %557 to i64
  %559 = getelementptr inbounds [8 x ptr], ptr %556, i64 0, i64 %558
  %560 = load ptr, ptr %559, align 8, !tbaa !5
  %561 = load ptr, ptr %18, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.aiMesh, ptr %561, i32 0, i32 1
  %563 = load i32, ptr %562, align 4, !tbaa !11
  %564 = zext i32 %563 to i64
  %565 = getelementptr inbounds %class.aiVector3t, ptr %560, i64 %564
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %565, ptr align 4 %554, i64 12, i1 false), !tbaa.struct !38
  br label %570

566:                                              ; preds = %540
  %567 = landingpad { ptr, i32 }
          cleanup
  %568 = extractvalue { ptr, i32 } %567, 0
  store ptr %568, ptr %13, align 8
  %569 = extractvalue { ptr, i32 } %567, 1
  store i32 %569, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  br label %707

570:                                              ; preds = %545, %544
  br label %571

571:                                              ; preds = %570
  %572 = load i32, ptr %34, align 4, !tbaa !9
  %573 = add i32 %572, 1
  store i32 %573, ptr %34, align 4, !tbaa !9
  br label %536, !llvm.loop !40

574:                                              ; preds = %539
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #10
  store i32 0, ptr %35, align 4, !tbaa !9
  br label %575

575:                                              ; preds = %610, %574
  %576 = load i32, ptr %35, align 4, !tbaa !9
  %577 = icmp ult i32 %576, 8
  br i1 %577, label %579, label %578

578:                                              ; preds = %575
  store i32 24, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #10
  br label %613

579:                                              ; preds = %575
  %580 = load ptr, ptr %7, align 8, !tbaa !5
  %581 = load i32, ptr %35, align 4, !tbaa !9
  %582 = invoke noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %580, i32 noundef %581)
          to label %583 unwind label %605

583:                                              ; preds = %579
  br i1 %582, label %584, label %609

584:                                              ; preds = %583
  %585 = load ptr, ptr %7, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.aiMesh, ptr %585, i32 0, i32 7
  %587 = load i32, ptr %35, align 4, !tbaa !9
  %588 = zext i32 %587 to i64
  %589 = getelementptr inbounds [8 x ptr], ptr %586, i64 0, i64 %588
  %590 = load ptr, ptr %589, align 8, !tbaa !5
  %591 = load i32, ptr %33, align 4, !tbaa !9
  %592 = zext i32 %591 to i64
  %593 = getelementptr inbounds %class.aiColor4t, ptr %590, i64 %592
  %594 = load ptr, ptr %18, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.aiMesh, ptr %594, i32 0, i32 7
  %596 = load i32, ptr %35, align 4, !tbaa !9
  %597 = zext i32 %596 to i64
  %598 = getelementptr inbounds [8 x ptr], ptr %595, i64 0, i64 %597
  %599 = load ptr, ptr %598, align 8, !tbaa !5
  %600 = load ptr, ptr %18, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.aiMesh, ptr %600, i32 0, i32 1
  %602 = load i32, ptr %601, align 4, !tbaa !11
  %603 = zext i32 %602 to i64
  %604 = getelementptr inbounds %class.aiColor4t, ptr %599, i64 %603
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %604, ptr align 4 %593, i64 16, i1 false), !tbaa.struct !41
  br label %609

605:                                              ; preds = %579
  %606 = landingpad { ptr, i32 }
          cleanup
  %607 = extractvalue { ptr, i32 } %606, 0
  store ptr %607, ptr %13, align 8
  %608 = extractvalue { ptr, i32 } %606, 1
  store i32 %608, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #10
  br label %707

609:                                              ; preds = %584, %583
  br label %610

610:                                              ; preds = %609
  %611 = load i32, ptr %35, align 4, !tbaa !9
  %612 = add i32 %611, 1
  store i32 %612, ptr %35, align 4, !tbaa !9
  br label %575, !llvm.loop !42

613:                                              ; preds = %578
  %614 = load ptr, ptr %18, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.aiMesh, ptr %614, i32 0, i32 1
  %616 = load i32, ptr %615, align 4, !tbaa !11
  %617 = load ptr, ptr %31, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.aiFace, ptr %617, i32 0, i32 1
  %619 = load ptr, ptr %618, align 8, !tbaa !35
  %620 = load i32, ptr %32, align 4, !tbaa !9
  %621 = zext i32 %620 to i64
  %622 = getelementptr inbounds i32, ptr %619, i64 %621
  store i32 %616, ptr %622, align 4, !tbaa !9
  %623 = load ptr, ptr %9, align 8, !tbaa !5
  %624 = icmp ne ptr %623, null
  br i1 %624, label %625, label %690

625:                                              ; preds = %613
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #10
  %626 = load ptr, ptr %9, align 8, !tbaa !5
  %627 = load ptr, ptr %18, align 8, !tbaa !5
  %628 = getelementptr inbounds %struct.aiMesh, ptr %627, i32 0, i32 1
  %629 = load i32, ptr %628, align 4, !tbaa !11
  %630 = zext i32 %629 to i64
  %631 = getelementptr inbounds %"class.std::vector.15", ptr %626, i64 %630
  store ptr %631, ptr %36, align 8, !tbaa !5
  %632 = load ptr, ptr %36, align 8, !tbaa !5
  %633 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIjfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %632) #10
  br i1 %633, label %689, label %634

634:                                              ; preds = %625
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #10
  %635 = load ptr, ptr %36, align 8, !tbaa !5
  %636 = call ptr @_ZNSt6vectorISt4pairIjfESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %635) #10
  %637 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.21", ptr %38, i32 0, i32 0
  store ptr %636, ptr %637, align 8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIjfESt6vectorIS2_SaIS2_EEEC2IPS2_vEERKNS0_IT_S7_EE(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %38) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  br label %638

638:                                              ; preds = %681, %634
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #10
  %639 = load ptr, ptr %36, align 8, !tbaa !5
  %640 = call ptr @_ZNSt6vectorISt4pairIjfESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %639) #10
  %641 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.21", ptr %39, i32 0, i32 0
  store ptr %640, ptr %641, align 8
  %642 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairIjfEPS2_St6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T1_EERKNS9_IT0_SB_EE(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %39) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  br i1 %642, label %644, label %643

643:                                              ; preds = %638
  store i32 27, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  br label %688

644:                                              ; preds = %638
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #10
  %645 = load ptr, ptr %18, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.aiMesh, ptr %645, i32 0, i32 12
  %647 = load ptr, ptr %646, align 8, !tbaa !24
  %648 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIjfESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %37) #10
  %649 = getelementptr inbounds %"struct.std::pair.22", ptr %648, i32 0, i32 0
  %650 = load i32, ptr %649, align 4, !tbaa !43
  %651 = zext i32 %650 to i64
  %652 = getelementptr inbounds ptr, ptr %647, i64 %651
  %653 = load ptr, ptr %652, align 8, !tbaa !5
  store ptr %653, ptr %40, align 8, !tbaa !5
  %654 = load ptr, ptr %40, align 8, !tbaa !5
  %655 = icmp eq ptr null, %654
  br i1 %655, label %656, label %671

656:                                              ; preds = %644
  %657 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 24) #11
          to label %658 unwind label %667

658:                                              ; preds = %656
  call void @llvm.memset.p0.i64(ptr align 16 %657, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorI14aiVertexWeightSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %657) #10
  store ptr %657, ptr %40, align 8, !tbaa !5
  %659 = load ptr, ptr %18, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.aiMesh, ptr %659, i32 0, i32 12
  %661 = load ptr, ptr %660, align 8, !tbaa !24
  %662 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIjfESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %37) #10
  %663 = getelementptr inbounds %"struct.std::pair.22", ptr %662, i32 0, i32 0
  %664 = load i32, ptr %663, align 4, !tbaa !43
  %665 = zext i32 %664 to i64
  %666 = getelementptr inbounds ptr, ptr %661, i64 %665
  store ptr %657, ptr %666, align 8, !tbaa !5
  br label %671

667:                                              ; preds = %656
  %668 = landingpad { ptr, i32 }
          cleanup
  %669 = extractvalue { ptr, i32 } %668, 0
  store ptr %669, ptr %13, align 8
  %670 = extractvalue { ptr, i32 } %668, 1
  store i32 %670, ptr %14, align 4
  br label %687

671:                                              ; preds = %658, %644
  %672 = load ptr, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #10
  %673 = load ptr, ptr %18, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.aiMesh, ptr %673, i32 0, i32 1
  %675 = load i32, ptr %674, align 4, !tbaa !11
  %676 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIjfESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %37) #10
  %677 = getelementptr inbounds %"struct.std::pair.22", ptr %676, i32 0, i32 1
  %678 = load float, ptr %677, align 4, !tbaa !45
  invoke void @_ZN14aiVertexWeightC2Ejf(ptr noundef nonnull align 4 dereferenceable(8) %41, i32 noundef %675, float noundef %678)
          to label %679 unwind label %683

679:                                              ; preds = %671
  invoke void @_ZNSt6vectorI14aiVertexWeightSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %672, ptr noundef nonnull align 4 dereferenceable(8) %41)
          to label %680 unwind label %683

680:                                              ; preds = %679
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %681

681:                                              ; preds = %680
  %682 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIjfESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %37) #10
  br label %638, !llvm.loop !46

683:                                              ; preds = %679, %671
  %684 = landingpad { ptr, i32 }
          cleanup
  %685 = extractvalue { ptr, i32 } %684, 0
  store ptr %685, ptr %13, align 8
  %686 = extractvalue { ptr, i32 } %684, 1
  store i32 %686, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  br label %687

687:                                              ; preds = %683, %667
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  br label %707

688:                                              ; preds = %643
  br label %689

689:                                              ; preds = %688, %625
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  br label %690

690:                                              ; preds = %689, %613
  %691 = load ptr, ptr %18, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.aiMesh, ptr %691, i32 0, i32 1
  %693 = load i32, ptr %692, align 4, !tbaa !11
  %694 = load i32, ptr %33, align 4, !tbaa !9
  %695 = zext i32 %694 to i64
  %696 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %695) #10
  store i32 %693, ptr %696, align 4, !tbaa !9
  %697 = load ptr, ptr %18, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.aiMesh, ptr %697, i32 0, i32 1
  %699 = load i32, ptr %698, align 4, !tbaa !11
  %700 = add i32 %699, 1
  store i32 %700, ptr %698, align 4, !tbaa !11
  store i32 0, ptr %30, align 4
  br label %701

701:                                              ; preds = %690, %454
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  %702 = load i32, ptr %30, align 4
  switch i32 %702, label %928 [
    i32 0, label %703
    i32 20, label %704
  ]

703:                                              ; preds = %701
  br label %704

704:                                              ; preds = %703, %701
  %705 = load i32, ptr %32, align 4, !tbaa !9
  %706 = add i32 %705, 1
  store i32 %706, ptr %32, align 4, !tbaa !9
  br label %431, !llvm.loop !47

707:                                              ; preds = %687, %605, %566, %498
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  br label %722

708:                                              ; preds = %435
  %709 = load i32, ptr %16, align 4, !tbaa !9
  %710 = add i32 %709, 1
  store i32 %710, ptr %16, align 4, !tbaa !9
  %711 = load ptr, ptr %18, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.aiMesh, ptr %711, i32 0, i32 1
  %713 = load i32, ptr %712, align 4, !tbaa !11
  %714 = load i32, ptr %17, align 4, !tbaa !9
  %715 = icmp eq i32 %713, %714
  br i1 %715, label %716, label %717

716:                                              ; preds = %708
  store i32 13, ptr %30, align 4
  br label %718

717:                                              ; preds = %708
  store i32 0, ptr %30, align 4
  br label %718

718:                                              ; preds = %717, %716
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  br label %719

719:                                              ; preds = %718, %381
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #10
  %720 = load i32, ptr %30, align 4
  switch i32 %720, label %928 [
    i32 0, label %721
    i32 13, label %724
  ]

721:                                              ; preds = %719
  br label %328, !llvm.loop !48

722:                                              ; preds = %707, %406
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  br label %723

723:                                              ; preds = %722, %402
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #10
  br label %896

724:                                              ; preds = %719, %328
  %725 = load ptr, ptr %7, align 8, !tbaa !5
  %726 = invoke noundef zeroext i1 @_ZNK6aiMesh8HasBonesEv(ptr noundef nonnull align 8 dereferenceable(1320) %725)
          to label %727 unwind label %173

727:                                              ; preds = %724
  br i1 %726, label %728, label %829

728:                                              ; preds = %727
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  %729 = load ptr, ptr %18, align 8, !tbaa !5
  %730 = getelementptr inbounds %struct.aiMesh, ptr %729, i32 0, i32 12
  %731 = load ptr, ptr %730, align 8, !tbaa !24
  store ptr %731, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #10
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %732

732:                                              ; preds = %825, %728
  %733 = load i32, ptr %43, align 4, !tbaa !9
  %734 = load ptr, ptr %7, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.aiMesh, ptr %734, i32 0, i32 11
  %736 = load i32, ptr %735, align 8, !tbaa !23
  %737 = icmp ult i32 %733, %736
  br i1 %737, label %739, label %738

738:                                              ; preds = %732
  store i32 30, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  br label %828

739:                                              ; preds = %732
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  %740 = load ptr, ptr %18, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.aiMesh, ptr %740, i32 0, i32 12
  %742 = load ptr, ptr %741, align 8, !tbaa !24
  %743 = load i32, ptr %43, align 4, !tbaa !9
  %744 = zext i32 %743 to i64
  %745 = getelementptr inbounds ptr, ptr %742, i64 %744
  %746 = load ptr, ptr %745, align 8, !tbaa !5
  store ptr %746, ptr %44, align 8, !tbaa !5
  %747 = load ptr, ptr %44, align 8, !tbaa !5
  %748 = icmp ne ptr null, %747
  br i1 %748, label %749, label %824

749:                                              ; preds = %739
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #10
  %750 = load ptr, ptr %7, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.aiMesh, ptr %750, i32 0, i32 12
  %752 = load ptr, ptr %751, align 8, !tbaa !24
  %753 = load i32, ptr %43, align 4, !tbaa !9
  %754 = zext i32 %753 to i64
  %755 = getelementptr inbounds ptr, ptr %752, i64 %754
  %756 = load ptr, ptr %755, align 8, !tbaa !5
  store ptr %756, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #10
  store ptr null, ptr %46, align 8, !tbaa !5
  %757 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1120) #11
          to label %758 unwind label %815

758:                                              ; preds = %749
  call void @_ZN6aiBoneC2Ev(ptr noundef nonnull align 8 dereferenceable(1120) %757) #10
  store ptr %757, ptr %46, align 8, !tbaa !5
  %759 = load ptr, ptr %42, align 8, !tbaa !5
  %760 = getelementptr inbounds ptr, ptr %759, i32 1
  store ptr %760, ptr %42, align 8, !tbaa !5
  store ptr %757, ptr %759, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1028, ptr %47) #10
  %761 = load ptr, ptr %45, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.aiBone, ptr %761, i32 0, i32 0
  invoke void @_ZN8aiStringC2ERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %47, ptr noundef nonnull align 4 dereferenceable(1028) %762)
          to label %763 unwind label %819

763:                                              ; preds = %758
  %764 = load ptr, ptr %46, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.aiBone, ptr %764, i32 0, i32 0
  %766 = invoke noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %765, ptr noundef nonnull align 4 dereferenceable(1028) %47)
          to label %767 unwind label %819

767:                                              ; preds = %763
  call void @llvm.lifetime.end.p0(i64 1028, ptr %47) #10
  %768 = load ptr, ptr %45, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.aiBone, ptr %768, i32 0, i32 5
  %770 = load ptr, ptr %46, align 8, !tbaa !5
  %771 = getelementptr inbounds %struct.aiBone, ptr %770, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %771, ptr align 8 %769, i64 64, i1 false), !tbaa.struct !49
  %772 = load ptr, ptr %44, align 8, !tbaa !5
  %773 = call noundef i64 @_ZNKSt6vectorI14aiVertexWeightSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %772) #10
  %774 = trunc i64 %773 to i32
  %775 = load ptr, ptr %46, align 8, !tbaa !5
  %776 = getelementptr inbounds %struct.aiBone, ptr %775, i32 0, i32 1
  store i32 %774, ptr %776, align 4, !tbaa !50
  %777 = load ptr, ptr %46, align 8, !tbaa !5
  %778 = getelementptr inbounds %struct.aiBone, ptr %777, i32 0, i32 1
  %779 = load i32, ptr %778, align 4, !tbaa !50
  %780 = zext i32 %779 to i64
  %781 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %780, i64 8)
  %782 = extractvalue { i64, i1 } %781, 1
  %783 = extractvalue { i64, i1 } %781, 0
  %784 = select i1 %782, i64 -1, i64 %783
  %785 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %784) #11
          to label %786 unwind label %815

786:                                              ; preds = %767
  %787 = icmp eq i64 %780, 0
  br i1 %787, label %794, label %788

788:                                              ; preds = %786
  %789 = getelementptr inbounds %struct.aiVertexWeight, ptr %785, i64 %780
  br label %790

790:                                              ; preds = %790, %788
  %791 = phi ptr [ %785, %788 ], [ %792, %790 ]
  call void @_ZN14aiVertexWeightC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %791) #10
  %792 = getelementptr inbounds %struct.aiVertexWeight, ptr %791, i64 1
  %793 = icmp eq ptr %792, %789
  br i1 %793, label %794, label %790

794:                                              ; preds = %790, %786
  %795 = load ptr, ptr %46, align 8, !tbaa !5
  %796 = getelementptr inbounds %struct.aiBone, ptr %795, i32 0, i32 4
  store ptr %785, ptr %796, align 8, !tbaa !53
  %797 = load ptr, ptr %46, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct.aiBone, ptr %797, i32 0, i32 4
  %799 = load ptr, ptr %798, align 8, !tbaa !53
  %800 = load ptr, ptr %44, align 8, !tbaa !5
  %801 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI14aiVertexWeightSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %800, i64 noundef 0) #10
  %802 = load ptr, ptr %46, align 8, !tbaa !5
  %803 = getelementptr inbounds %struct.aiBone, ptr %802, i32 0, i32 1
  %804 = load i32, ptr %803, align 4, !tbaa !50
  %805 = zext i32 %804 to i64
  %806 = mul i64 %805, 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %799, ptr align 4 %801, i64 %806, i1 false)
  %807 = load ptr, ptr %44, align 8, !tbaa !5
  %808 = icmp eq ptr %807, null
  br i1 %808, label %810, label %809

809:                                              ; preds = %794
  call void @_ZNSt6vectorI14aiVertexWeightSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %807) #10
  call void @_ZdlPvm(ptr noundef %807, i64 noundef 24) #12
  br label %810

810:                                              ; preds = %809, %794
  %811 = load ptr, ptr %18, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct.aiMesh, ptr %811, i32 0, i32 11
  %813 = load i32, ptr %812, align 8, !tbaa !23
  %814 = add i32 %813, 1
  store i32 %814, ptr %812, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  br label %824

815:                                              ; preds = %767, %749
  %816 = landingpad { ptr, i32 }
          cleanup
  %817 = extractvalue { ptr, i32 } %816, 0
  store ptr %817, ptr %13, align 8
  %818 = extractvalue { ptr, i32 } %816, 1
  store i32 %818, ptr %14, align 4
  br label %823

819:                                              ; preds = %763, %758
  %820 = landingpad { ptr, i32 }
          cleanup
  %821 = extractvalue { ptr, i32 } %820, 0
  store ptr %821, ptr %13, align 8
  %822 = extractvalue { ptr, i32 } %820, 1
  store i32 %822, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 1028, ptr %47) #10
  br label %823

823:                                              ; preds = %819, %815
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  br label %896

824:                                              ; preds = %810, %739
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  br label %825

825:                                              ; preds = %824
  %826 = load i32, ptr %43, align 4, !tbaa !9
  %827 = add i32 %826, 1
  store i32 %827, ptr %43, align 4, !tbaa !9
  br label %732, !llvm.loop !54

828:                                              ; preds = %738
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  br label %829

829:                                              ; preds = %828, %727
  %830 = call noundef i64 @_ZNKSt6vectorI6aiFaceSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %831 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %830, i64 16)
  %832 = extractvalue { i64, i1 } %831, 1
  %833 = extractvalue { i64, i1 } %831, 0
  %834 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %833, i64 8)
  %835 = extractvalue { i64, i1 } %834, 1
  %836 = or i1 %832, %835
  %837 = extractvalue { i64, i1 } %834, 0
  %838 = select i1 %836, i64 -1, i64 %837
  %839 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %838) #11
          to label %840 unwind label %173

840:                                              ; preds = %829
  store i64 %830, ptr %839, align 16
  %841 = getelementptr inbounds i8, ptr %839, i64 8
  %842 = icmp eq i64 %830, 0
  br i1 %842, label %849, label %843

843:                                              ; preds = %840
  %844 = getelementptr inbounds %struct.aiFace, ptr %841, i64 %830
  br label %845

845:                                              ; preds = %845, %843
  %846 = phi ptr [ %841, %843 ], [ %847, %845 ]
  call void @_ZN6aiFaceC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %846) #10
  %847 = getelementptr inbounds %struct.aiFace, ptr %846, i64 1
  %848 = icmp eq ptr %847, %844
  br i1 %848, label %849, label %845

849:                                              ; preds = %845, %840
  %850 = load ptr, ptr %18, align 8, !tbaa !5
  %851 = getelementptr inbounds %struct.aiMesh, ptr %850, i32 0, i32 10
  store ptr %841, ptr %851, align 8, !tbaa !32
  %852 = call noundef i64 @_ZNKSt6vectorI6aiFaceSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  %853 = trunc i64 %852 to i32
  %854 = load ptr, ptr %18, align 8, !tbaa !5
  %855 = getelementptr inbounds %struct.aiMesh, ptr %854, i32 0, i32 2
  store i32 %853, ptr %855, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #10
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %856

856:                                              ; preds = %875, %849
  %857 = load i32, ptr %48, align 4, !tbaa !9
  %858 = load ptr, ptr %18, align 8, !tbaa !5
  %859 = getelementptr inbounds %struct.aiMesh, ptr %858, i32 0, i32 2
  %860 = load i32, ptr %859, align 8, !tbaa !21
  %861 = icmp ult i32 %857, %860
  br i1 %861, label %863, label %862

862:                                              ; preds = %856
  store i32 33, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #10
  br label %882

863:                                              ; preds = %856
  %864 = load i32, ptr %48, align 4, !tbaa !9
  %865 = zext i32 %864 to i64
  %866 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6aiFaceSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %865) #10
  %867 = load ptr, ptr %18, align 8, !tbaa !5
  %868 = getelementptr inbounds %struct.aiMesh, ptr %867, i32 0, i32 10
  %869 = load ptr, ptr %868, align 8, !tbaa !32
  %870 = load i32, ptr %48, align 4, !tbaa !9
  %871 = zext i32 %870 to i64
  %872 = getelementptr inbounds %struct.aiFace, ptr %869, i64 %871
  %873 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN6aiFaceaSERKS_(ptr noundef nonnull align 8 dereferenceable(16) %872, ptr noundef nonnull align 8 dereferenceable(16) %866)
          to label %874 unwind label %878

874:                                              ; preds = %863
  br label %875

875:                                              ; preds = %874
  %876 = load i32, ptr %48, align 4, !tbaa !9
  %877 = add i32 %876, 1
  store i32 %877, ptr %48, align 4, !tbaa !9
  br label %856, !llvm.loop !55

878:                                              ; preds = %863
  %879 = landingpad { ptr, i32 }
          cleanup
  %880 = extractvalue { ptr, i32 } %879, 0
  store ptr %880, ptr %13, align 8
  %881 = extractvalue { ptr, i32 } %879, 1
  store i32 %881, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #10
  br label %896

882:                                              ; preds = %862
  %883 = load ptr, ptr %8, align 8, !tbaa !5
  %884 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZNSt6vectorISt4pairIP6aiMeshjESaIS3_EE12emplace_backIJRS2_RjEEERS3_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %883, ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %885 unwind label %173

885:                                              ; preds = %882
  %886 = load i32, ptr %16, align 4, !tbaa !9
  %887 = load ptr, ptr %7, align 8, !tbaa !5
  %888 = getelementptr inbounds %struct.aiMesh, ptr %887, i32 0, i32 2
  %889 = load i32, ptr %888, align 8, !tbaa !21
  %890 = icmp eq i32 %886, %889
  br i1 %890, label %891, label %892

891:                                              ; preds = %885
  store i32 3, ptr %30, align 4
  br label %893

892:                                              ; preds = %885
  store i32 0, ptr %30, align 4
  br label %893

893:                                              ; preds = %892, %891
  call void @_ZNSt6vectorI6aiFaceSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #10
  %894 = load i32, ptr %30, align 4
  switch i32 %894, label %928 [
    i32 0, label %895
    i32 3, label %898
  ]

895:                                              ; preds = %893
  br label %80, !llvm.loop !56

896:                                              ; preds = %878, %823, %723, %284, %248, %173
  call void @_ZNSt6vectorI6aiFaceSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #10
  br label %897

897:                                              ; preds = %896, %127
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  br label %918

898:                                              ; preds = %893
  %899 = load ptr, ptr %9, align 8, !tbaa !5
  %900 = icmp eq ptr %899, null
  br i1 %900, label %913, label %901

901:                                              ; preds = %898
  %902 = getelementptr inbounds i8, ptr %899, i64 -8
  %903 = load i64, ptr %902, align 8
  %904 = getelementptr inbounds %"class.std::vector.15", ptr %899, i64 %903
  %905 = icmp eq ptr %899, %904
  br i1 %905, label %910, label %906

906:                                              ; preds = %906, %901
  %907 = phi ptr [ %904, %901 ], [ %908, %906 ]
  %908 = getelementptr inbounds %"class.std::vector.15", ptr %907, i64 -1
  call void @_ZNSt6vectorISt4pairIjfESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %908) #10
  %909 = icmp eq ptr %908, %899
  br i1 %909, label %910, label %906

910:                                              ; preds = %906, %901
  %911 = mul i64 24, %903
  %912 = add i64 %911, 8
  call void @_ZdaPvm(ptr noundef %902, i64 noundef %912) #12
  br label %913

913:                                              ; preds = %910, %898
  %914 = load ptr, ptr %7, align 8, !tbaa !5
  %915 = icmp eq ptr %914, null
  br i1 %915, label %917, label %916

916:                                              ; preds = %913
  call void @_ZN6aiMeshD2Ev(ptr noundef nonnull align 8 dereferenceable(1320) %914) #10
  call void @_ZdlPvm(ptr noundef %914, i64 noundef 1320) #12
  br label %917

917:                                              ; preds = %916, %913
  store i32 1, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #10
  br label %922

918:                                              ; preds = %897, %123
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #10
  br label %923

919:                                              ; preds = %4
  %920 = load ptr, ptr %8, align 8, !tbaa !5
  %921 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNSt6vectorISt4pairIP6aiMeshjESaIS3_EE12emplace_backIJRS2_RjEEERS3_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %920, ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 4 dereferenceable(4) %6)
  br label %922

922:                                              ; preds = %919, %917
  ret void

923:                                              ; preds = %918
  %924 = load ptr, ptr %13, align 8
  %925 = load i32, ptr %14, align 4
  %926 = insertvalue { ptr, i32 } poison, ptr %924, 0
  %927 = insertvalue { ptr, i32 } %926, i32 %925, 1
  resume { ptr, i32 } %927

928:                                              ; preds = %893, %719, %701
  unreachable
}

declare noundef ptr @_ZN6Assimp28ComputeVertexBoneWeightTableEPK6aiMesh(ptr noundef) #7

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { 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 #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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #9 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 4}
!12 = !{!"_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, !14, i64 1280, !15, i64 1284, !6, i64 1312}
!13 = !{!"_ZTS8aiString", !10, i64 0, !7, i64 4}
!14 = !{!"_ZTS16aiMorphingMethod", !7, i64 0}
!15 = !{!"_ZTS6aiAABB", !16, i64 0, !16, i64 12}
!16 = !{!"_ZTS10aiVector3tIfE", !17, i64 0, !17, i64 4, !17, i64 8}
!17 = !{!"float", !7, i64 0}
!18 = !{!19, !10, i64 24}
!19 = !{!"_ZTSN6Assimp30SplitLargeMeshesProcess_VertexE", !20, i64 0, !10, i64 24}
!20 = !{!"_ZTSN6Assimp11BaseProcessE", !6, i64 8, !6, i64 16}
!21 = !{!12, !10, i64 8}
!22 = !{!12, !10, i64 232}
!23 = !{!12, !10, i64 216}
!24 = !{!12, !6, i64 224}
!25 = !{!12, !6, i64 16}
!26 = !{!12, !6, i64 24}
!27 = !{!12, !6, i64 32}
!28 = !{!12, !6, i64 40}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = !{!12, !6, i64 208}
!33 = !{!34, !10, i64 0}
!34 = !{!"_ZTS6aiFace", !10, i64 0, !6, i64 8}
!35 = !{!34, !6, i64 8}
!36 = distinct !{!36, !30}
!37 = !{!12, !10, i64 0}
!38 = !{i64 0, i64 4, !39, i64 4, i64 4, !39, i64 8, i64 4, !39}
!39 = !{!17, !17, i64 0}
!40 = distinct !{!40, !30}
!41 = !{i64 0, i64 4, !39, i64 4, i64 4, !39, i64 8, i64 4, !39, i64 12, i64 4, !39}
!42 = distinct !{!42, !30}
!43 = !{!44, !10, i64 0}
!44 = !{!"_ZTSSt4pairIjfE", !10, i64 0, !17, i64 4}
!45 = !{!44, !17, i64 4}
!46 = distinct !{!46, !30}
!47 = distinct !{!47, !30}
!48 = distinct !{!48, !30}
!49 = !{i64 0, i64 4, !39, i64 4, i64 4, !39, i64 8, i64 4, !39, i64 12, i64 4, !39, i64 16, i64 4, !39, i64 20, i64 4, !39, i64 24, i64 4, !39, i64 28, i64 4, !39, i64 32, i64 4, !39, i64 36, i64 4, !39, i64 40, i64 4, !39, i64 44, i64 4, !39, i64 48, i64 4, !39, i64 52, i64 4, !39, i64 56, i64 4, !39, i64 60, i64 4, !39}
!50 = !{!51, !10, i64 1028}
!51 = !{!"_ZTS6aiBone", !13, i64 0, !10, i64 1028, !6, i64 1032, !6, i64 1040, !6, i64 1048, !52, i64 1056}
!52 = !{!"_ZTS12aiMatrix4x4tIfE", !17, i64 0, !17, i64 4, !17, i64 8, !17, i64 12, !17, i64 16, !17, i64 20, !17, i64 24, !17, i64 28, !17, i64 32, !17, i64 36, !17, i64 40, !17, i64 44, !17, i64 48, !17, i64 52, !17, i64 56, !17, i64 60}
!53 = !{!51, !6, i64 1048}
!54 = distinct !{!54, !30}
!55 = distinct !{!55, !30}
!56 = distinct !{!56, !30}


; 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.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<aiFace, std::allocator<aiFace>>::_Vector_impl" }
%"struct.std::_Vector_base<aiFace, std::allocator<aiFace>>::_Vector_impl" = type { %"struct.std::_Vector_base<aiFace, std::allocator<aiFace>>::_Vector_impl_data" }
%"struct.std::_Vector_base<aiFace, std::allocator<aiFace>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.20" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.21" = type { ptr }
%struct.aiVertexWeight = type { i32, float }
%struct.aiString = type { i32, [1024 x i8] }
%class.aiVector3t = type { float, float, float }
%class.aiColor4t = type { float, float, float, float }
%struct.aiFace = type { i32, ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, float>, std::allocator<std::pair<unsigned int, float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@switch.table._ZN6Assimp30SplitLargeMeshesProcess_Vertex9SplitMeshEjP6aiMeshRSt6vectorISt4pairIS2_jESaIS5_EE = private unnamed_addr constant [3 x i32] [i32 1, i32 2, i32 4], align 4

; 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: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #1

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028), ptr noundef nonnull align 4 dereferenceable(1028)) local_unnamed_addr #2 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp30SplitLargeMeshesProcess_Vertex9SplitMeshEjP6aiMeshRSt6vectorISt4pairIS2_jESaIS5_EE(ptr nocapture noundef nonnull readonly align 8 dereferenceable(28) %0, i32 noundef %1, ptr noundef %2, ptr noundef nonnull align 8 dereferenceable(24) %3) local_unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca %"class.std::vector.0", align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %12 = alloca %"class.std::vector.10", align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.20", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.21", align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator.21", align 8
  %16 = alloca %struct.aiVertexWeight, align 4
  %17 = alloca %struct.aiString, align 4
  store i32 %1, ptr %5, align 4, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !9
  %18 = getelementptr inbounds i8, ptr %2, i64 4
  %19 = load i32, ptr %18, align 4, !tbaa !11
  %20 = getelementptr inbounds i8, ptr %0, i64 24
  %21 = load i32, ptr %20, align 8, !tbaa !18
  %22 = icmp ugt i32 %19, %21
  br i1 %22, label %23, label %676

23:                                               ; preds = %4
  %24 = tail call noundef ptr @_ZN6Assimp28ComputeVertexBoneWeightTableEPK6aiMesh(ptr noundef nonnull %2)
  %25 = load i32, ptr %18, align 4, !tbaa !11
  %26 = load i32, ptr %20, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #9
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  %27 = load i32, ptr %18, align 4, !tbaa !11
  %28 = zext i32 %27 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #9
  store i32 -1, ptr %8, align 4, !tbaa !5
  invoke void @_ZNSt6vectorIjSaIjEE6resizeEmRKj(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %28, ptr noundef nonnull align 4 dereferenceable(4) %8)
          to label %29 unwind label %64

29:                                               ; preds = %23
  %30 = udiv i32 %25, %26
  %31 = add i32 %30, 1
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #9
  %32 = getelementptr inbounds i8, ptr %2, i64 8
  %33 = load i32, ptr %32, align 8, !tbaa !21
  %34 = udiv i32 %33, %31
  %35 = lshr i32 %34, 3
  %36 = add i32 %35, %34
  %37 = zext i32 %36 to i64
  %.not148 = icmp eq ptr %24, null
  br label %38

38:                                               ; preds = %653, %29
  %39 = phi ptr [ %2, %29 ], [ %654, %653 ]
  %.0118 = phi i32 [ 0, %29 ], [ %.3121, %653 ]
  %40 = load i32, ptr %20, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #9
  %41 = invoke noalias noundef nonnull dereferenceable(1320) ptr @_Znwm(i64 noundef 1320) #10
          to label %42 unwind label %66

42:                                               ; preds = %38
  call void @_ZN6aiMeshC2Ev(ptr noundef nonnull align 8 dereferenceable(1320) %41) #9
  store ptr %41, ptr %9, align 8, !tbaa !9
  %43 = getelementptr inbounds i8, ptr %41, i64 4
  store i32 0, ptr %43, align 4, !tbaa !11
  %44 = getelementptr inbounds i8, ptr %39, i64 232
  %45 = load i32, ptr %44, align 8, !tbaa !22
  %46 = getelementptr inbounds i8, ptr %41, i64 232
  store i32 %45, ptr %46, align 8, !tbaa !22
  %47 = getelementptr inbounds i8, ptr %39, i64 236
  %48 = getelementptr inbounds i8, ptr %41, i64 236
  %49 = call noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %48, ptr noundef nonnull align 4 dereferenceable(1028) %47)
  %50 = load ptr, ptr %6, align 8, !tbaa !9
  %51 = call noundef zeroext i1 @_ZNK6aiMesh8HasBonesEv(ptr noundef nonnull align 8 dereferenceable(1320) %50)
  br i1 %51, label %52, label %68

52:                                               ; preds = %42
  %53 = getelementptr inbounds i8, ptr %50, i64 216
  %54 = load i32, ptr %53, align 8, !tbaa !23
  %55 = zext i32 %54 to i64
  %56 = shl nuw nsw i64 %55, 3
  %57 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %56) #10
          to label %58 unwind label %66

58:                                               ; preds = %52
  %59 = load ptr, ptr %9, align 8, !tbaa !9
  %60 = getelementptr inbounds i8, ptr %59, i64 224
  store ptr %57, ptr %60, align 8, !tbaa !24
  %61 = load i32, ptr %53, align 8, !tbaa !23
  %62 = zext i32 %61 to i64
  %63 = shl nuw nsw i64 %62, 3
  call void @llvm.memset.p0.i64(ptr nonnull align 8 %57, i8 0, i64 %63, i1 false)
  br label %68

64:                                               ; preds = %23
  %65 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #9
  br label %675

66:                                               ; preds = %52, %38
  %67 = landingpad { ptr, i32 }
          cleanup
  br label %659

68:                                               ; preds = %58, %42
  %.not = icmp eq i32 %.0118, 0
  br i1 %.not, label %76, label %69

69:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #9
  %70 = call ptr @_ZNSt6vectorIjSaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  store ptr %70, ptr %10, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #9
  %71 = call ptr @_ZNSt6vectorIjSaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  store ptr %71, ptr %11, align 8
  %72 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPjSt6vectorIjSaIjEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #9
  br i1 %72, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph, %69
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #9
  br label %76

.lr.ph:                                           ; preds = %69, %.lr.ph
  %73 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #9
  store i32 -1, ptr %73, align 4, !tbaa !5
  %74 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #9
  %75 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPjSt6vectorIjSaIjEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #9
  br i1 %75, label %.lr.ph, label %._crit_edge

76:                                               ; preds = %._crit_edge, %68
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #9
  call void @_ZNSt6vectorI6aiFaceSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #9
  %77 = call noundef zeroext i1 @_ZNK6aiMesh12HasPositionsEv(ptr noundef nonnull align 8 dereferenceable(1320) %50)
  br i1 %77, label %78, label %94

78:                                               ; preds = %76
  %79 = zext i32 %40 to i64
  %80 = mul nuw nsw i64 %79, 12
  %81 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %80) #10
          to label %82 unwind label %92

82:                                               ; preds = %78
  %83 = icmp eq i32 %40, 0
  br i1 %83, label %.loopexit172, label %84

84:                                               ; preds = %82
  %85 = getelementptr inbounds %class.aiVector3t, ptr %81, i64 %79
  br label %86

86:                                               ; preds = %86, %84
  %87 = phi ptr [ %81, %84 ], [ %88, %86 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %87) #9
  %88 = getelementptr inbounds i8, ptr %87, i64 12
  %89 = icmp eq ptr %88, %85
  br i1 %89, label %.loopexit172, label %86

.loopexit172:                                     ; preds = %86, %82
  %90 = load ptr, ptr %9, align 8, !tbaa !9
  %91 = getelementptr inbounds i8, ptr %90, i64 16
  store ptr %81, ptr %91, align 8, !tbaa !25
  br label %94

92:                                               ; preds = %._crit_edge200, %.loopexit166, %._crit_edge178, %.loopexit170, %112, %96, %78
  %93 = landingpad { ptr, i32 }
          cleanup
  br label %658

94:                                               ; preds = %.loopexit172, %76
  %95 = call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %50)
  br i1 %95, label %96, label %110

96:                                               ; preds = %94
  %97 = zext i32 %40 to i64
  %98 = mul nuw nsw i64 %97, 12
  %99 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %98) #10
          to label %100 unwind label %92

100:                                              ; preds = %96
  %101 = icmp eq i32 %40, 0
  br i1 %101, label %.loopexit171, label %102

102:                                              ; preds = %100
  %103 = getelementptr inbounds %class.aiVector3t, ptr %99, i64 %97
  br label %104

104:                                              ; preds = %104, %102
  %105 = phi ptr [ %99, %102 ], [ %106, %104 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %105) #9
  %106 = getelementptr inbounds i8, ptr %105, i64 12
  %107 = icmp eq ptr %106, %103
  br i1 %107, label %.loopexit171, label %104

.loopexit171:                                     ; preds = %104, %100
  %108 = load ptr, ptr %9, align 8, !tbaa !9
  %109 = getelementptr inbounds i8, ptr %108, i64 24
  store ptr %99, ptr %109, align 8, !tbaa !26
  br label %110

110:                                              ; preds = %.loopexit171, %94
  %111 = call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %50)
  br i1 %111, label %112, label %136

112:                                              ; preds = %110
  %113 = zext i32 %40 to i64
  %114 = mul nuw nsw i64 %113, 12
  %115 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %114) #10
          to label %116 unwind label %92

116:                                              ; preds = %112
  %117 = icmp eq i32 %40, 0
  br i1 %117, label %.loopexit170, label %118

118:                                              ; preds = %116
  %119 = getelementptr inbounds %class.aiVector3t, ptr %115, i64 %113
  br label %120

120:                                              ; preds = %120, %118
  %121 = phi ptr [ %115, %118 ], [ %122, %120 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %121) #9
  %122 = getelementptr inbounds i8, ptr %121, i64 12
  %123 = icmp eq ptr %122, %119
  br i1 %123, label %.loopexit170, label %120

.loopexit170:                                     ; preds = %120, %116
  %124 = load ptr, ptr %9, align 8, !tbaa !9
  %125 = getelementptr inbounds i8, ptr %124, i64 32
  store ptr %115, ptr %125, align 8, !tbaa !27
  %126 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %114) #10
          to label %127 unwind label %92

127:                                              ; preds = %.loopexit170
  br i1 %117, label %.loopexit169, label %128

128:                                              ; preds = %127
  %129 = getelementptr inbounds %class.aiVector3t, ptr %126, i64 %113
  br label %130

130:                                              ; preds = %130, %128
  %131 = phi ptr [ %126, %128 ], [ %132, %130 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %131) #9
  %132 = getelementptr inbounds i8, ptr %131, i64 12
  %133 = icmp eq ptr %132, %129
  br i1 %133, label %.loopexit169.loopexit, label %130

.loopexit169.loopexit:                            ; preds = %130
  %.pre = load ptr, ptr %9, align 8, !tbaa !9
  br label %.loopexit169

.loopexit169:                                     ; preds = %.loopexit169.loopexit, %127
  %134 = phi ptr [ %.pre, %.loopexit169.loopexit ], [ %124, %127 ]
  %135 = getelementptr inbounds i8, ptr %134, i64 40
  store ptr %126, ptr %135, align 8, !tbaa !28
  br label %136

136:                                              ; preds = %.loopexit169, %110
  %137 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %50, i32 noundef 0)
  br i1 %137, label %.lr.ph175, label %.preheader168

.lr.ph175:                                        ; preds = %136
  %138 = zext i32 %40 to i64
  %139 = shl nuw nsw i64 %138, 4
  %140 = icmp eq i32 %40, 0
  br label %148

.preheader168:                                    ; preds = %.loopexit164, %136
  %141 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %50, i32 noundef 0)
  br i1 %141, label %.lr.ph177, label %._crit_edge178

.lr.ph177:                                        ; preds = %.preheader168
  %142 = zext i32 %40 to i64
  %143 = mul nuw nsw i64 %142, 12
  %144 = icmp eq i32 %40, 0
  %145 = getelementptr inbounds i8, ptr %50, i64 176
  br label %166

146:                                              ; preds = %148
  %147 = landingpad { ptr, i32 }
          cleanup
  br label %658

148:                                              ; preds = %.lr.ph175, %.loopexit164
  %.0123173 = phi i32 [ 0, %.lr.ph175 ], [ %161, %.loopexit164 ]
  %149 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %139) #10
          to label %150 unwind label %146

150:                                              ; preds = %148
  br i1 %140, label %.loopexit164, label %151

151:                                              ; preds = %150
  %152 = getelementptr inbounds %class.aiColor4t, ptr %149, i64 %138
  br label %153

153:                                              ; preds = %153, %151
  %154 = phi ptr [ %149, %151 ], [ %155, %153 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %154) #9
  %155 = getelementptr inbounds i8, ptr %154, i64 16
  %156 = icmp eq ptr %155, %152
  br i1 %156, label %.loopexit164, label %153

.loopexit164:                                     ; preds = %153, %150
  %157 = load ptr, ptr %9, align 8, !tbaa !9
  %158 = getelementptr inbounds i8, ptr %157, i64 48
  %159 = zext i32 %.0123173 to i64
  %160 = getelementptr inbounds [8 x ptr], ptr %158, i64 0, i64 %159
  store ptr %149, ptr %160, align 8, !tbaa !9
  %161 = add i32 %.0123173, 1
  %162 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %50, i32 noundef %161)
  br i1 %162, label %148, label %.preheader168, !llvm.loop !29

._crit_edge178:                                   ; preds = %.loopexit163, %.preheader168
  invoke void @_ZNSt6vectorI6aiFaceSaIS0_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %37)
          to label %.preheader167.preheader unwind label %92

.preheader167.preheader:                          ; preds = %._crit_edge178
  %163 = zext i32 %.0118 to i64
  br label %.preheader167

164:                                              ; preds = %166
  %165 = landingpad { ptr, i32 }
          cleanup
  br label %658

166:                                              ; preds = %.lr.ph177, %.loopexit163
  %.0127176 = phi i32 [ 0, %.lr.ph177 ], [ %184, %.loopexit163 ]
  %167 = zext i32 %.0127176 to i64
  %168 = getelementptr inbounds [8 x i32], ptr %145, i64 0, i64 %167
  %169 = load i32, ptr %168, align 4, !tbaa !5
  %170 = load ptr, ptr %9, align 8, !tbaa !9
  %171 = getelementptr inbounds i8, ptr %170, i64 176
  %172 = getelementptr inbounds [8 x i32], ptr %171, i64 0, i64 %167
  store i32 %169, ptr %172, align 4, !tbaa !5
  %173 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %143) #10
          to label %174 unwind label %164

174:                                              ; preds = %166
  br i1 %144, label %.loopexit163, label %175

175:                                              ; preds = %174
  %176 = getelementptr inbounds %class.aiVector3t, ptr %173, i64 %142
  br label %177

177:                                              ; preds = %177, %175
  %178 = phi ptr [ %173, %175 ], [ %179, %177 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %178) #9
  %179 = getelementptr inbounds i8, ptr %178, i64 12
  %180 = icmp eq ptr %179, %176
  br i1 %180, label %.loopexit163.loopexit, label %177

.loopexit163.loopexit:                            ; preds = %177
  %.pre230 = load ptr, ptr %9, align 8, !tbaa !9
  br label %.loopexit163

.loopexit163:                                     ; preds = %.loopexit163.loopexit, %174
  %181 = phi ptr [ %.pre230, %.loopexit163.loopexit ], [ %170, %174 ]
  %182 = getelementptr inbounds i8, ptr %181, i64 112
  %183 = getelementptr inbounds [8 x ptr], ptr %182, i64 0, i64 %167
  store ptr %173, ptr %183, align 8, !tbaa !9
  %184 = add i32 %.0127176, 1
  %185 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %50, i32 noundef %184)
  br i1 %185, label %166, label %._crit_edge178, !llvm.loop !31

.preheader167:                                    ; preds = %.preheader167.preheader, %._crit_edge192
  %186 = phi ptr [ %50, %.preheader167.preheader ], [ %236, %._crit_edge192 ]
  %187 = phi ptr [ %50, %.preheader167.preheader ], [ %237, %._crit_edge192 ]
  %188 = phi ptr [ %50, %.preheader167.preheader ], [ %238, %._crit_edge192 ]
  %indvars.iv219 = phi i64 [ %163, %.preheader167.preheader ], [ %indvars.iv.next220, %._crit_edge192 ]
  %189 = getelementptr inbounds i8, ptr %188, i64 8
  %190 = load i32, ptr %189, align 8, !tbaa !21
  %191 = zext i32 %190 to i64
  %192 = icmp ult i64 %indvars.iv219, %191
  br i1 %192, label %193, label %.thread

193:                                              ; preds = %.preheader167
  %194 = getelementptr inbounds i8, ptr %188, i64 208
  %195 = load ptr, ptr %194, align 8, !tbaa !32
  %196 = getelementptr inbounds %struct.aiFace, ptr %195, i64 %indvars.iv219
  %197 = load i32, ptr %196, align 8, !tbaa !33
  %.not201 = icmp eq i32 %197, 0
  br i1 %.not201, label %._crit_edge183, label %.lr.ph182.preheader

.lr.ph182.preheader:                              ; preds = %193
  %wide.trip.count = zext i32 %197 to i64
  %198 = getelementptr inbounds i8, ptr %187, i64 208
  br label %.lr.ph182

._crit_edge183:                                   ; preds = %.lr.ph182, %193
  %199 = phi ptr [ %188, %193 ], [ %187, %.lr.ph182 ]
  %.0129.lcssa = phi i32 [ 0, %193 ], [ %spec.select, %.lr.ph182 ]
  %200 = load ptr, ptr %9, align 8, !tbaa !9
  %201 = getelementptr inbounds i8, ptr %200, i64 4
  %202 = load i32, ptr %201, align 4, !tbaa !11
  %203 = add i32 %202, %.0129.lcssa
  %204 = icmp ugt i32 %203, %40
  br i1 %204, label %.thread, label %215

.lr.ph182:                                        ; preds = %.lr.ph182.preheader, %.lr.ph182
  %indvars.iv = phi i64 [ 0, %.lr.ph182.preheader ], [ %indvars.iv.next, %.lr.ph182 ]
  %.0129179 = phi i32 [ 0, %.lr.ph182.preheader ], [ %spec.select, %.lr.ph182 ]
  %205 = load ptr, ptr %198, align 8, !tbaa !32
  %206 = getelementptr inbounds %struct.aiFace, ptr %205, i64 %indvars.iv219, i32 1
  %207 = load ptr, ptr %206, align 8, !tbaa !35
  %208 = getelementptr inbounds i32, ptr %207, i64 %indvars.iv
  %209 = load i32, ptr %208, align 4, !tbaa !5
  %210 = zext i32 %209 to i64
  %211 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %210) #9
  %212 = load i32, ptr %211, align 4, !tbaa !5
  %213 = icmp eq i32 %212, -1
  %214 = zext i1 %213 to i32
  %spec.select = add i32 %.0129179, %214
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge183, label %.lr.ph182, !llvm.loop !36

215:                                              ; preds = %._crit_edge183
  %216 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6aiFaceSaIS0_EE12emplace_backIJEEERS0_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %12)
          to label %217 unwind label %228

217:                                              ; preds = %215
  %218 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6aiFaceSaIS0_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #9
  store i32 %197, ptr %218, align 8, !tbaa !33
  %219 = zext i32 %197 to i64
  %220 = shl nuw nsw i64 %219, 2
  %221 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %220) #10
          to label %222 unwind label %230

222:                                              ; preds = %217
  %223 = getelementptr inbounds i8, ptr %218, i64 8
  store ptr %221, ptr %223, align 8, !tbaa !35
  %224 = load i32, ptr %218, align 8, !tbaa !33
  %225 = load ptr, ptr %9, align 8, !tbaa !9
  %226 = load i32, ptr %225, align 8, !tbaa !37
  %switch.tableidx = add i32 %224, -1
  %227 = icmp ult i32 %switch.tableidx, 3
  br i1 %227, label %switch.lookup, label %233

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

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

switch.lookup:                                    ; preds = %222
  %232 = zext nneg i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [3 x i32], ptr @switch.table._ZN6Assimp30SplitLargeMeshesProcess_Vertex9SplitMeshEjP6aiMeshRSt6vectorISt4pairIS2_jESaIS5_EE, i64 0, i64 %232
  %switch.load = load i32, ptr %switch.gep, align 4
  br label %233

233:                                              ; preds = %222, %switch.lookup
  %.sink239 = phi i32 [ %switch.load, %switch.lookup ], [ 8, %222 ]
  %234 = or i32 %226, %.sink239
  store i32 %234, ptr %225, align 8, !tbaa !37
  br i1 %.not201, label %._crit_edge192, label %.lr.ph191

._crit_edge192.loopexit:                          ; preds = %557
  %.pre233 = load ptr, ptr %9, align 8, !tbaa !9
  br label %._crit_edge192

._crit_edge192:                                   ; preds = %._crit_edge192.loopexit, %233
  %235 = phi ptr [ %.pre233, %._crit_edge192.loopexit ], [ %225, %233 ]
  %236 = phi ptr [ %558, %._crit_edge192.loopexit ], [ %186, %233 ]
  %237 = phi ptr [ %558, %._crit_edge192.loopexit ], [ %187, %233 ]
  %238 = phi ptr [ %558, %._crit_edge192.loopexit ], [ %199, %233 ]
  %indvars.iv.next220 = add nuw nsw i64 %indvars.iv219, 1
  %239 = getelementptr inbounds i8, ptr %235, i64 4
  %240 = load i32, ptr %239, align 4, !tbaa !11
  %241 = icmp eq i32 %240, %40
  br i1 %241, label %.thread, label %.preheader167

.lr.ph191:                                        ; preds = %233, %557
  %242 = phi ptr [ %558, %557 ], [ %186, %233 ]
  %indvars.iv214 = phi i64 [ %indvars.iv.next215, %557 ], [ 0, %233 ]
  %243 = getelementptr inbounds i8, ptr %242, i64 208
  %244 = load ptr, ptr %243, align 8, !tbaa !32
  %245 = getelementptr inbounds %struct.aiFace, ptr %244, i64 %indvars.iv219, i32 1
  %246 = load ptr, ptr %245, align 8, !tbaa !35
  %247 = getelementptr inbounds i32, ptr %246, i64 %indvars.iv214
  %248 = load i32, ptr %247, align 4, !tbaa !5
  %249 = zext i32 %248 to i64
  %250 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %249) #9
  %251 = load i32, ptr %250, align 4, !tbaa !5
  %.not147 = icmp eq i32 %251, -1
  br i1 %.not147, label %257, label %252

252:                                              ; preds = %.lr.ph191
  %253 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %249) #9
  %254 = load i32, ptr %253, align 4, !tbaa !5
  %255 = load ptr, ptr %223, align 8, !tbaa !35
  %256 = getelementptr inbounds i32, ptr %255, i64 %indvars.iv214
  store i32 %254, ptr %256, align 4, !tbaa !5
  br label %557

257:                                              ; preds = %.lr.ph191
  %258 = getelementptr inbounds i8, ptr %242, i64 16
  %259 = load ptr, ptr %258, align 8, !tbaa !25
  %260 = getelementptr inbounds %class.aiVector3t, ptr %259, i64 %249
  %261 = load ptr, ptr %9, align 8, !tbaa !9
  %262 = getelementptr inbounds i8, ptr %261, i64 16
  %263 = load ptr, ptr %262, align 8, !tbaa !25
  %264 = getelementptr inbounds i8, ptr %261, i64 4
  %265 = load i32, ptr %264, align 4, !tbaa !11
  %266 = zext i32 %265 to i64
  %267 = getelementptr inbounds %class.aiVector3t, ptr %263, i64 %266
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %267, ptr noundef nonnull align 4 dereferenceable(12) %260, i64 12, i1 false), !tbaa.struct !38
  %268 = call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %242)
  %.pre231 = load ptr, ptr %6, align 8, !tbaa !9
  br i1 %268, label %269, label %280

269:                                              ; preds = %257
  %270 = getelementptr inbounds i8, ptr %.pre231, i64 24
  %271 = load ptr, ptr %270, align 8, !tbaa !26
  %272 = getelementptr inbounds %class.aiVector3t, ptr %271, i64 %249
  %273 = load ptr, ptr %9, align 8, !tbaa !9
  %274 = getelementptr inbounds i8, ptr %273, i64 24
  %275 = load ptr, ptr %274, align 8, !tbaa !26
  %276 = getelementptr inbounds i8, ptr %273, i64 4
  %277 = load i32, ptr %276, align 4, !tbaa !11
  %278 = zext i32 %277 to i64
  %279 = getelementptr inbounds %class.aiVector3t, ptr %275, i64 %278
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %279, ptr noundef nonnull align 4 dereferenceable(12) %272, i64 12, i1 false), !tbaa.struct !38
  br label %280

280:                                              ; preds = %269, %257
  %281 = call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231)
  br i1 %281, label %282, label %301

282:                                              ; preds = %280
  %283 = getelementptr inbounds i8, ptr %.pre231, i64 32
  %284 = load ptr, ptr %283, align 8, !tbaa !27
  %285 = getelementptr inbounds %class.aiVector3t, ptr %284, i64 %249
  %286 = load ptr, ptr %9, align 8, !tbaa !9
  %287 = getelementptr inbounds i8, ptr %286, i64 32
  %288 = load ptr, ptr %287, align 8, !tbaa !27
  %289 = getelementptr inbounds i8, ptr %286, i64 4
  %290 = load i32, ptr %289, align 4, !tbaa !11
  %291 = zext i32 %290 to i64
  %292 = getelementptr inbounds %class.aiVector3t, ptr %288, i64 %291
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %292, ptr noundef nonnull align 4 dereferenceable(12) %285, i64 12, i1 false), !tbaa.struct !38
  %293 = getelementptr inbounds i8, ptr %.pre231, i64 40
  %294 = load ptr, ptr %293, align 8, !tbaa !28
  %295 = getelementptr inbounds %class.aiVector3t, ptr %294, i64 %249
  %296 = getelementptr inbounds i8, ptr %286, i64 40
  %297 = load ptr, ptr %296, align 8, !tbaa !28
  %298 = load i32, ptr %289, align 4, !tbaa !11
  %299 = zext i32 %298 to i64
  %300 = getelementptr inbounds %class.aiVector3t, ptr %297, i64 %299
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %300, ptr noundef nonnull align 4 dereferenceable(12) %295, i64 12, i1 false), !tbaa.struct !38
  br label %301

301:                                              ; preds = %282, %280
  %302 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 0)
  br i1 %302, label %303, label %314

303:                                              ; preds = %301
  %304 = getelementptr inbounds i8, ptr %.pre231, i64 112
  %305 = load ptr, ptr %304, align 8, !tbaa !9
  %306 = getelementptr inbounds %class.aiVector3t, ptr %305, i64 %249
  %307 = load ptr, ptr %9, align 8, !tbaa !9
  %308 = getelementptr inbounds i8, ptr %307, i64 112
  %309 = load ptr, ptr %308, align 8, !tbaa !9
  %310 = getelementptr inbounds i8, ptr %307, i64 4
  %311 = load i32, ptr %310, align 4, !tbaa !11
  %312 = zext i32 %311 to i64
  %313 = getelementptr inbounds %class.aiVector3t, ptr %309, i64 %312
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %313, ptr noundef nonnull align 4 dereferenceable(12) %306, i64 12, i1 false), !tbaa.struct !38
  br label %314

314:                                              ; preds = %301, %303
  %315 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 1)
  br i1 %315, label %316, label %327

316:                                              ; preds = %314
  %317 = getelementptr inbounds i8, ptr %.pre231, i64 120
  %318 = load ptr, ptr %317, align 8, !tbaa !9
  %319 = getelementptr inbounds %class.aiVector3t, ptr %318, i64 %249
  %320 = load ptr, ptr %9, align 8, !tbaa !9
  %321 = getelementptr inbounds i8, ptr %320, i64 120
  %322 = load ptr, ptr %321, align 8, !tbaa !9
  %323 = getelementptr inbounds i8, ptr %320, i64 4
  %324 = load i32, ptr %323, align 4, !tbaa !11
  %325 = zext i32 %324 to i64
  %326 = getelementptr inbounds %class.aiVector3t, ptr %322, i64 %325
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %326, ptr noundef nonnull align 4 dereferenceable(12) %319, i64 12, i1 false), !tbaa.struct !38
  br label %327

327:                                              ; preds = %316, %314
  %328 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 2)
  br i1 %328, label %329, label %340

329:                                              ; preds = %327
  %330 = getelementptr inbounds i8, ptr %.pre231, i64 128
  %331 = load ptr, ptr %330, align 8, !tbaa !9
  %332 = getelementptr inbounds %class.aiVector3t, ptr %331, i64 %249
  %333 = load ptr, ptr %9, align 8, !tbaa !9
  %334 = getelementptr inbounds i8, ptr %333, i64 128
  %335 = load ptr, ptr %334, align 8, !tbaa !9
  %336 = getelementptr inbounds i8, ptr %333, i64 4
  %337 = load i32, ptr %336, align 4, !tbaa !11
  %338 = zext i32 %337 to i64
  %339 = getelementptr inbounds %class.aiVector3t, ptr %335, i64 %338
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %339, ptr noundef nonnull align 4 dereferenceable(12) %332, i64 12, i1 false), !tbaa.struct !38
  br label %340

340:                                              ; preds = %329, %327
  %341 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 3)
  br i1 %341, label %342, label %353

342:                                              ; preds = %340
  %343 = getelementptr inbounds i8, ptr %.pre231, i64 136
  %344 = load ptr, ptr %343, align 8, !tbaa !9
  %345 = getelementptr inbounds %class.aiVector3t, ptr %344, i64 %249
  %346 = load ptr, ptr %9, align 8, !tbaa !9
  %347 = getelementptr inbounds i8, ptr %346, i64 136
  %348 = load ptr, ptr %347, align 8, !tbaa !9
  %349 = getelementptr inbounds i8, ptr %346, i64 4
  %350 = load i32, ptr %349, align 4, !tbaa !11
  %351 = zext i32 %350 to i64
  %352 = getelementptr inbounds %class.aiVector3t, ptr %348, i64 %351
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %352, ptr noundef nonnull align 4 dereferenceable(12) %345, i64 12, i1 false), !tbaa.struct !38
  br label %353

353:                                              ; preds = %342, %340
  %354 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 4)
  br i1 %354, label %355, label %366

355:                                              ; preds = %353
  %356 = getelementptr inbounds i8, ptr %.pre231, i64 144
  %357 = load ptr, ptr %356, align 8, !tbaa !9
  %358 = getelementptr inbounds %class.aiVector3t, ptr %357, i64 %249
  %359 = load ptr, ptr %9, align 8, !tbaa !9
  %360 = getelementptr inbounds i8, ptr %359, i64 144
  %361 = load ptr, ptr %360, align 8, !tbaa !9
  %362 = getelementptr inbounds i8, ptr %359, i64 4
  %363 = load i32, ptr %362, align 4, !tbaa !11
  %364 = zext i32 %363 to i64
  %365 = getelementptr inbounds %class.aiVector3t, ptr %361, i64 %364
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %365, ptr noundef nonnull align 4 dereferenceable(12) %358, i64 12, i1 false), !tbaa.struct !38
  br label %366

366:                                              ; preds = %355, %353
  %367 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 5)
  br i1 %367, label %368, label %379

368:                                              ; preds = %366
  %369 = getelementptr inbounds i8, ptr %.pre231, i64 152
  %370 = load ptr, ptr %369, align 8, !tbaa !9
  %371 = getelementptr inbounds %class.aiVector3t, ptr %370, i64 %249
  %372 = load ptr, ptr %9, align 8, !tbaa !9
  %373 = getelementptr inbounds i8, ptr %372, i64 152
  %374 = load ptr, ptr %373, align 8, !tbaa !9
  %375 = getelementptr inbounds i8, ptr %372, i64 4
  %376 = load i32, ptr %375, align 4, !tbaa !11
  %377 = zext i32 %376 to i64
  %378 = getelementptr inbounds %class.aiVector3t, ptr %374, i64 %377
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %378, ptr noundef nonnull align 4 dereferenceable(12) %371, i64 12, i1 false), !tbaa.struct !38
  br label %379

379:                                              ; preds = %368, %366
  %380 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 6)
  br i1 %380, label %381, label %392

381:                                              ; preds = %379
  %382 = getelementptr inbounds i8, ptr %.pre231, i64 160
  %383 = load ptr, ptr %382, align 8, !tbaa !9
  %384 = getelementptr inbounds %class.aiVector3t, ptr %383, i64 %249
  %385 = load ptr, ptr %9, align 8, !tbaa !9
  %386 = getelementptr inbounds i8, ptr %385, i64 160
  %387 = load ptr, ptr %386, align 8, !tbaa !9
  %388 = getelementptr inbounds i8, ptr %385, i64 4
  %389 = load i32, ptr %388, align 4, !tbaa !11
  %390 = zext i32 %389 to i64
  %391 = getelementptr inbounds %class.aiVector3t, ptr %387, i64 %390
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %391, ptr noundef nonnull align 4 dereferenceable(12) %384, i64 12, i1 false), !tbaa.struct !38
  br label %392

392:                                              ; preds = %381, %379
  %393 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 7)
  br i1 %393, label %394, label %.preheader161.preheader

394:                                              ; preds = %392
  %395 = getelementptr inbounds i8, ptr %.pre231, i64 168
  %396 = load ptr, ptr %395, align 8, !tbaa !9
  %397 = getelementptr inbounds %class.aiVector3t, ptr %396, i64 %249
  %398 = load ptr, ptr %9, align 8, !tbaa !9
  %399 = getelementptr inbounds i8, ptr %398, i64 168
  %400 = load ptr, ptr %399, align 8, !tbaa !9
  %401 = getelementptr inbounds i8, ptr %398, i64 4
  %402 = load i32, ptr %401, align 4, !tbaa !11
  %403 = zext i32 %402 to i64
  %404 = getelementptr inbounds %class.aiVector3t, ptr %400, i64 %403
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %404, ptr noundef nonnull align 4 dereferenceable(12) %397, i64 12, i1 false), !tbaa.struct !38
  br label %.preheader161.preheader

.preheader161.preheader:                          ; preds = %394, %392
  %405 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 0)
  br i1 %405, label %406, label %.preheader161.1

406:                                              ; preds = %.preheader161.preheader
  %407 = getelementptr inbounds i8, ptr %.pre231, i64 48
  %408 = load ptr, ptr %407, align 8, !tbaa !9
  %409 = getelementptr inbounds %class.aiColor4t, ptr %408, i64 %249
  %410 = load ptr, ptr %9, align 8, !tbaa !9
  %411 = getelementptr inbounds i8, ptr %410, i64 48
  %412 = load ptr, ptr %411, align 8, !tbaa !9
  %413 = getelementptr inbounds i8, ptr %410, i64 4
  %414 = load i32, ptr %413, align 4, !tbaa !11
  %415 = zext i32 %414 to i64
  %416 = getelementptr inbounds %class.aiColor4t, ptr %412, i64 %415
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %416, ptr noundef nonnull align 4 dereferenceable(16) %409, i64 16, i1 false), !tbaa.struct !40
  br label %.preheader161.1

.preheader161.1:                                  ; preds = %.preheader161.preheader, %406
  %417 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 1)
  br i1 %417, label %418, label %.preheader161.2

418:                                              ; preds = %.preheader161.1
  %419 = getelementptr inbounds i8, ptr %.pre231, i64 56
  %420 = load ptr, ptr %419, align 8, !tbaa !9
  %421 = getelementptr inbounds %class.aiColor4t, ptr %420, i64 %249
  %422 = load ptr, ptr %9, align 8, !tbaa !9
  %423 = getelementptr inbounds i8, ptr %422, i64 56
  %424 = load ptr, ptr %423, align 8, !tbaa !9
  %425 = getelementptr inbounds i8, ptr %422, i64 4
  %426 = load i32, ptr %425, align 4, !tbaa !11
  %427 = zext i32 %426 to i64
  %428 = getelementptr inbounds %class.aiColor4t, ptr %424, i64 %427
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %428, ptr noundef nonnull align 4 dereferenceable(16) %421, i64 16, i1 false), !tbaa.struct !40
  br label %.preheader161.2

.preheader161.2:                                  ; preds = %418, %.preheader161.1
  %429 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 2)
  br i1 %429, label %430, label %.preheader161.3

430:                                              ; preds = %.preheader161.2
  %431 = getelementptr inbounds i8, ptr %.pre231, i64 64
  %432 = load ptr, ptr %431, align 8, !tbaa !9
  %433 = getelementptr inbounds %class.aiColor4t, ptr %432, i64 %249
  %434 = load ptr, ptr %9, align 8, !tbaa !9
  %435 = getelementptr inbounds i8, ptr %434, i64 64
  %436 = load ptr, ptr %435, align 8, !tbaa !9
  %437 = getelementptr inbounds i8, ptr %434, i64 4
  %438 = load i32, ptr %437, align 4, !tbaa !11
  %439 = zext i32 %438 to i64
  %440 = getelementptr inbounds %class.aiColor4t, ptr %436, i64 %439
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %440, ptr noundef nonnull align 4 dereferenceable(16) %433, i64 16, i1 false), !tbaa.struct !40
  br label %.preheader161.3

.preheader161.3:                                  ; preds = %430, %.preheader161.2
  %441 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 3)
  br i1 %441, label %442, label %.preheader161.4

442:                                              ; preds = %.preheader161.3
  %443 = getelementptr inbounds i8, ptr %.pre231, i64 72
  %444 = load ptr, ptr %443, align 8, !tbaa !9
  %445 = getelementptr inbounds %class.aiColor4t, ptr %444, i64 %249
  %446 = load ptr, ptr %9, align 8, !tbaa !9
  %447 = getelementptr inbounds i8, ptr %446, i64 72
  %448 = load ptr, ptr %447, align 8, !tbaa !9
  %449 = getelementptr inbounds i8, ptr %446, i64 4
  %450 = load i32, ptr %449, align 4, !tbaa !11
  %451 = zext i32 %450 to i64
  %452 = getelementptr inbounds %class.aiColor4t, ptr %448, i64 %451
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %452, ptr noundef nonnull align 4 dereferenceable(16) %445, i64 16, i1 false), !tbaa.struct !40
  br label %.preheader161.4

.preheader161.4:                                  ; preds = %442, %.preheader161.3
  %453 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 4)
  br i1 %453, label %454, label %.preheader161.5

454:                                              ; preds = %.preheader161.4
  %455 = getelementptr inbounds i8, ptr %.pre231, i64 80
  %456 = load ptr, ptr %455, align 8, !tbaa !9
  %457 = getelementptr inbounds %class.aiColor4t, ptr %456, i64 %249
  %458 = load ptr, ptr %9, align 8, !tbaa !9
  %459 = getelementptr inbounds i8, ptr %458, i64 80
  %460 = load ptr, ptr %459, align 8, !tbaa !9
  %461 = getelementptr inbounds i8, ptr %458, i64 4
  %462 = load i32, ptr %461, align 4, !tbaa !11
  %463 = zext i32 %462 to i64
  %464 = getelementptr inbounds %class.aiColor4t, ptr %460, i64 %463
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %464, ptr noundef nonnull align 4 dereferenceable(16) %457, i64 16, i1 false), !tbaa.struct !40
  br label %.preheader161.5

.preheader161.5:                                  ; preds = %454, %.preheader161.4
  %465 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 5)
  br i1 %465, label %466, label %.preheader161.6

466:                                              ; preds = %.preheader161.5
  %467 = getelementptr inbounds i8, ptr %.pre231, i64 88
  %468 = load ptr, ptr %467, align 8, !tbaa !9
  %469 = getelementptr inbounds %class.aiColor4t, ptr %468, i64 %249
  %470 = load ptr, ptr %9, align 8, !tbaa !9
  %471 = getelementptr inbounds i8, ptr %470, i64 88
  %472 = load ptr, ptr %471, align 8, !tbaa !9
  %473 = getelementptr inbounds i8, ptr %470, i64 4
  %474 = load i32, ptr %473, align 4, !tbaa !11
  %475 = zext i32 %474 to i64
  %476 = getelementptr inbounds %class.aiColor4t, ptr %472, i64 %475
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %476, ptr noundef nonnull align 4 dereferenceable(16) %469, i64 16, i1 false), !tbaa.struct !40
  br label %.preheader161.6

.preheader161.6:                                  ; preds = %466, %.preheader161.5
  %477 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 6)
  br i1 %477, label %478, label %.preheader161.7

478:                                              ; preds = %.preheader161.6
  %479 = getelementptr inbounds i8, ptr %.pre231, i64 96
  %480 = load ptr, ptr %479, align 8, !tbaa !9
  %481 = getelementptr inbounds %class.aiColor4t, ptr %480, i64 %249
  %482 = load ptr, ptr %9, align 8, !tbaa !9
  %483 = getelementptr inbounds i8, ptr %482, i64 96
  %484 = load ptr, ptr %483, align 8, !tbaa !9
  %485 = getelementptr inbounds i8, ptr %482, i64 4
  %486 = load i32, ptr %485, align 4, !tbaa !11
  %487 = zext i32 %486 to i64
  %488 = getelementptr inbounds %class.aiColor4t, ptr %484, i64 %487
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %488, ptr noundef nonnull align 4 dereferenceable(16) %481, i64 16, i1 false), !tbaa.struct !40
  br label %.preheader161.7

.preheader161.7:                                  ; preds = %478, %.preheader161.6
  %489 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %.pre231, i32 noundef 7)
  %.pre232 = load ptr, ptr %9, align 8, !tbaa !9
  br i1 %489, label %490, label %500

490:                                              ; preds = %.preheader161.7
  %491 = getelementptr inbounds i8, ptr %.pre231, i64 104
  %492 = load ptr, ptr %491, align 8, !tbaa !9
  %493 = getelementptr inbounds %class.aiColor4t, ptr %492, i64 %249
  %494 = getelementptr inbounds i8, ptr %.pre232, i64 104
  %495 = load ptr, ptr %494, align 8, !tbaa !9
  %496 = getelementptr inbounds i8, ptr %.pre232, i64 4
  %497 = load i32, ptr %496, align 4, !tbaa !11
  %498 = zext i32 %497 to i64
  %499 = getelementptr inbounds %class.aiColor4t, ptr %495, i64 %498
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %499, ptr noundef nonnull align 4 dereferenceable(16) %493, i64 16, i1 false), !tbaa.struct !40
  br label %500

500:                                              ; preds = %490, %.preheader161.7
  %501 = getelementptr inbounds i8, ptr %.pre232, i64 4
  %502 = load i32, ptr %501, align 4, !tbaa !11
  %503 = load ptr, ptr %223, align 8, !tbaa !35
  %504 = getelementptr inbounds i32, ptr %503, i64 %indvars.iv214
  store i32 %502, ptr %504, align 4, !tbaa !5
  br i1 %.not148, label %548, label %505

505:                                              ; preds = %500
  %506 = zext i32 %502 to i64
  %507 = getelementptr inbounds %"class.std::vector.15", ptr %24, i64 %506
  %508 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIjfESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %507) #9
  br i1 %508, label %548, label %509

509:                                              ; preds = %505
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #9
  %510 = call ptr @_ZNSt6vectorISt4pairIjfESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %507) #9
  store ptr %510, ptr %14, align 8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIjfESt6vectorIS2_SaIS2_EEEC2IPS2_vEERKNS0_IT_S7_EE(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #9
  %511 = call ptr @_ZNSt6vectorISt4pairIjfESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %507) #9
  store ptr %511, ptr %15, align 8
  %512 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairIjfEPS2_St6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T1_EERKNS9_IT0_SB_EE(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  br i1 %512, label %.lr.ph187, label %._crit_edge188

._crit_edge188:                                   ; preds = %541, %509
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  br label %548

.lr.ph187:                                        ; preds = %509, %541
  %513 = load ptr, ptr %9, align 8, !tbaa !9
  %514 = getelementptr inbounds i8, ptr %513, i64 224
  %515 = load ptr, ptr %514, align 8, !tbaa !24
  %516 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIjfESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %517 = load i32, ptr %516, align 4, !tbaa !41
  %518 = zext i32 %517 to i64
  %519 = getelementptr inbounds ptr, ptr %515, i64 %518
  %520 = load ptr, ptr %519, align 8, !tbaa !9
  %521 = icmp eq ptr %520, null
  br i1 %521, label %522, label %534

522:                                              ; preds = %.lr.ph187
  %523 = invoke noalias noundef nonnull dereferenceable(24) ptr @_Znwm(i64 noundef 24) #10
          to label %524 unwind label %532

524:                                              ; preds = %522
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(24) %523, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorI14aiVertexWeightSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %523) #9
  %525 = load ptr, ptr %9, align 8, !tbaa !9
  %526 = getelementptr inbounds i8, ptr %525, i64 224
  %527 = load ptr, ptr %526, align 8, !tbaa !24
  %528 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIjfESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %529 = load i32, ptr %528, align 4, !tbaa !41
  %530 = zext i32 %529 to i64
  %531 = getelementptr inbounds ptr, ptr %527, i64 %530
  store ptr %523, ptr %531, align 8, !tbaa !9
  br label %534

532:                                              ; preds = %522
  %533 = landingpad { ptr, i32 }
          cleanup
  br label %547

534:                                              ; preds = %524, %.lr.ph187
  %.0115 = phi ptr [ %523, %524 ], [ %520, %.lr.ph187 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #9
  %535 = load ptr, ptr %9, align 8, !tbaa !9
  %536 = getelementptr inbounds i8, ptr %535, i64 4
  %537 = load i32, ptr %536, align 4, !tbaa !11
  %538 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIjfESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  %539 = getelementptr inbounds i8, ptr %538, i64 4
  %540 = load float, ptr %539, align 4, !tbaa !43
  call void @_ZN14aiVertexWeightC2Ejf(ptr noundef nonnull align 4 dereferenceable(8) %16, i32 noundef %537, float noundef %540)
  invoke void @_ZNSt6vectorI14aiVertexWeightSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %.0115, ptr noundef nonnull align 4 dereferenceable(8) %16)
          to label %541 unwind label %545

541:                                              ; preds = %534
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #9
  %542 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIjfESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #9
  %543 = call ptr @_ZNSt6vectorISt4pairIjfESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %507) #9
  store ptr %543, ptr %15, align 8
  %544 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairIjfEPS2_St6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T1_EERKNS9_IT0_SB_EE(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  br i1 %544, label %.lr.ph187, label %._crit_edge188, !llvm.loop !44

545:                                              ; preds = %534
  %546 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #9
  br label %547

547:                                              ; preds = %545, %532
  %.pn = phi { ptr, i32 } [ %546, %545 ], [ %533, %532 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  br label %658

548:                                              ; preds = %505, %._crit_edge188, %500
  %549 = load ptr, ptr %9, align 8, !tbaa !9
  %550 = getelementptr inbounds i8, ptr %549, i64 4
  %551 = load i32, ptr %550, align 4, !tbaa !11
  %552 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %249) #9
  store i32 %551, ptr %552, align 4, !tbaa !5
  %553 = load ptr, ptr %9, align 8, !tbaa !9
  %554 = getelementptr inbounds i8, ptr %553, i64 4
  %555 = load i32, ptr %554, align 4, !tbaa !11
  %556 = add i32 %555, 1
  store i32 %556, ptr %554, align 4, !tbaa !11
  br label %557

557:                                              ; preds = %548, %252
  %558 = phi ptr [ %.pre231, %548 ], [ %242, %252 ]
  %indvars.iv.next215 = add nuw nsw i64 %indvars.iv214, 1
  %exitcond218.not = icmp eq i64 %indvars.iv.next215, %219
  br i1 %exitcond218.not, label %._crit_edge192.loopexit, label %.lr.ph191, !llvm.loop !45

.thread:                                          ; preds = %._crit_edge192, %._crit_edge183, %.preheader167
  %559 = phi ptr [ %186, %.preheader167 ], [ %186, %._crit_edge183 ], [ %236, %._crit_edge192 ]
  %.3121.in = phi i64 [ %indvars.iv219, %.preheader167 ], [ %indvars.iv219, %._crit_edge183 ], [ %indvars.iv.next220, %._crit_edge192 ]
  %.3121 = trunc i64 %.3121.in to i32
  %560 = call noundef zeroext i1 @_ZNK6aiMesh8HasBonesEv(ptr noundef nonnull align 8 dereferenceable(1320) %559)
  br i1 %560, label %561, label %.loopexit166

561:                                              ; preds = %.thread
  %562 = load ptr, ptr %6, align 8, !tbaa !9
  %563 = getelementptr inbounds i8, ptr %562, i64 216
  %564 = load i32, ptr %563, align 8, !tbaa !23
  %.not203 = icmp eq i32 %564, 0
  br i1 %.not203, label %.loopexit166, label %.lr.ph196.preheader

.lr.ph196.preheader:                              ; preds = %561
  %565 = load ptr, ptr %9, align 8, !tbaa !9
  %566 = getelementptr inbounds i8, ptr %565, i64 224
  %567 = load ptr, ptr %566, align 8, !tbaa !24
  br label %.lr.ph196

.lr.ph196:                                        ; preds = %.lr.ph196.preheader, %610
  %568 = phi ptr [ %562, %.lr.ph196.preheader ], [ %611, %610 ]
  %569 = phi ptr [ %565, %.lr.ph196.preheader ], [ %612, %610 ]
  %indvars.iv222 = phi i64 [ 0, %.lr.ph196.preheader ], [ %indvars.iv.next223, %610 ]
  %.0113193 = phi ptr [ %567, %.lr.ph196.preheader ], [ %.1114, %610 ]
  %570 = getelementptr inbounds i8, ptr %569, i64 224
  %571 = load ptr, ptr %570, align 8, !tbaa !24
  %572 = getelementptr inbounds ptr, ptr %571, i64 %indvars.iv222
  %573 = load ptr, ptr %572, align 8, !tbaa !9
  %.not152 = icmp eq ptr %573, null
  br i1 %.not152, label %610, label %574

574:                                              ; preds = %.lr.ph196
  %575 = getelementptr inbounds i8, ptr %568, i64 224
  %576 = load ptr, ptr %575, align 8, !tbaa !24
  %577 = getelementptr inbounds ptr, ptr %576, i64 %indvars.iv222
  %578 = load ptr, ptr %577, align 8, !tbaa !9
  %579 = invoke noalias noundef nonnull dereferenceable(1120) ptr @_Znwm(i64 noundef 1120) #10
          to label %580 unwind label %608

580:                                              ; preds = %574
  call void @_ZN6aiBoneC2Ev(ptr noundef nonnull align 8 dereferenceable(1120) %579) #9
  %581 = getelementptr inbounds i8, ptr %.0113193, i64 8
  store ptr %579, ptr %.0113193, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1028, ptr nonnull %17) #9
  call void @_ZN8aiStringC2ERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %17, ptr noundef nonnull align 4 dereferenceable(1028) %578)
  %582 = call noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %579, ptr noundef nonnull align 4 dereferenceable(1028) %17)
  call void @llvm.lifetime.end.p0(i64 1028, ptr nonnull %17) #9
  %583 = getelementptr inbounds i8, ptr %578, i64 1056
  %584 = getelementptr inbounds i8, ptr %579, i64 1056
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %584, ptr noundef nonnull align 8 dereferenceable(64) %583, i64 64, i1 false), !tbaa.struct !46
  %585 = call noundef i64 @_ZNKSt6vectorI14aiVertexWeightSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %573) #9
  %586 = trunc i64 %585 to i32
  %587 = getelementptr inbounds i8, ptr %579, i64 1028
  store i32 %586, ptr %587, align 4, !tbaa !47
  %588 = and i64 %585, 4294967295
  %589 = shl nuw nsw i64 %588, 3
  %590 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %589) #10
          to label %591 unwind label %608

591:                                              ; preds = %580
  %592 = icmp eq i64 %588, 0
  br i1 %592, label %.loopexit162, label %593

593:                                              ; preds = %591
  %594 = getelementptr inbounds %struct.aiVertexWeight, ptr %590, i64 %588
  br label %595

595:                                              ; preds = %595, %593
  %596 = phi ptr [ %590, %593 ], [ %597, %595 ]
  call void @_ZN14aiVertexWeightC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %596) #9
  %597 = getelementptr inbounds i8, ptr %596, i64 8
  %598 = icmp eq ptr %597, %594
  br i1 %598, label %.loopexit162, label %595

.loopexit162:                                     ; preds = %595, %591
  %599 = getelementptr inbounds i8, ptr %579, i64 1048
  store ptr %590, ptr %599, align 8, !tbaa !50
  %600 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI14aiVertexWeightSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %573, i64 noundef 0) #9
  %601 = load i32, ptr %587, align 4, !tbaa !47
  %602 = zext i32 %601 to i64
  %603 = shl nuw nsw i64 %602, 3
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %590, ptr nonnull align 4 %600, i64 %603, i1 false)
  call void @_ZNSt6vectorI14aiVertexWeightSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %573) #9
  call void @_ZdlPvm(ptr noundef %573, i64 noundef 24) #11
  %604 = load ptr, ptr %9, align 8, !tbaa !9
  %605 = getelementptr inbounds i8, ptr %604, i64 216
  %606 = load i32, ptr %605, align 8, !tbaa !23
  %607 = add i32 %606, 1
  store i32 %607, ptr %605, align 8, !tbaa !23
  %.pre234 = load ptr, ptr %6, align 8, !tbaa !9
  br label %610

608:                                              ; preds = %580, %574
  %609 = landingpad { ptr, i32 }
          cleanup
  br label %658

610:                                              ; preds = %.loopexit162, %.lr.ph196
  %611 = phi ptr [ %.pre234, %.loopexit162 ], [ %568, %.lr.ph196 ]
  %612 = phi ptr [ %604, %.loopexit162 ], [ %569, %.lr.ph196 ]
  %.1114 = phi ptr [ %581, %.loopexit162 ], [ %.0113193, %.lr.ph196 ]
  %indvars.iv.next223 = add nuw nsw i64 %indvars.iv222, 1
  %613 = getelementptr inbounds i8, ptr %611, i64 216
  %614 = load i32, ptr %613, align 8, !tbaa !23
  %615 = zext i32 %614 to i64
  %616 = icmp ult i64 %indvars.iv.next223, %615
  br i1 %616, label %.lr.ph196, label %.loopexit166, !llvm.loop !51

.loopexit166:                                     ; preds = %610, %561, %.thread
  %617 = call noundef i64 @_ZNKSt6vectorI6aiFaceSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #9
  %618 = icmp ugt i64 %617, 1152921504606846975
  %619 = shl nuw i64 %617, 4
  %620 = or disjoint i64 %619, 8
  %621 = select i1 %618, i64 -1, i64 %620
  %622 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %621) #10
          to label %623 unwind label %92

623:                                              ; preds = %.loopexit166
  store i64 %617, ptr %622, align 16
  %624 = getelementptr inbounds i8, ptr %622, i64 8
  %625 = icmp eq i64 %617, 0
  br i1 %625, label %.loopexit165, label %626

626:                                              ; preds = %623
  %627 = getelementptr inbounds %struct.aiFace, ptr %624, i64 %617
  br label %628

628:                                              ; preds = %628, %626
  %629 = phi ptr [ %624, %626 ], [ %630, %628 ]
  call void @_ZN6aiFaceC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %629) #9
  %630 = getelementptr inbounds i8, ptr %629, i64 16
  %631 = icmp eq ptr %630, %627
  br i1 %631, label %.loopexit165, label %628

.loopexit165:                                     ; preds = %628, %623
  %632 = load ptr, ptr %9, align 8, !tbaa !9
  %633 = getelementptr inbounds i8, ptr %632, i64 208
  store ptr %624, ptr %633, align 8, !tbaa !32
  %634 = call noundef i64 @_ZNKSt6vectorI6aiFaceSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #9
  %635 = trunc i64 %634 to i32
  %636 = load ptr, ptr %9, align 8, !tbaa !9
  %637 = getelementptr inbounds i8, ptr %636, i64 8
  store i32 %635, ptr %637, align 8, !tbaa !21
  %.not204 = icmp eq i32 %635, 0
  br i1 %.not204, label %._crit_edge200, label %.lr.ph199

._crit_edge200:                                   ; preds = %645, %.loopexit165
  %638 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZNSt6vectorISt4pairIP6aiMeshjESaIS3_EE12emplace_backIJRS2_RjEEERS3_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 4 dereferenceable(4) %5)
          to label %653 unwind label %92

.lr.ph199:                                        ; preds = %.loopexit165, %645
  %indvars.iv226 = phi i64 [ %indvars.iv.next227, %645 ], [ 0, %.loopexit165 ]
  %639 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6aiFaceSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %indvars.iv226) #9
  %640 = load ptr, ptr %9, align 8, !tbaa !9
  %641 = getelementptr inbounds i8, ptr %640, i64 208
  %642 = load ptr, ptr %641, align 8, !tbaa !32
  %643 = getelementptr inbounds %struct.aiFace, ptr %642, i64 %indvars.iv226
  %644 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN6aiFaceaSERKS_(ptr noundef nonnull align 8 dereferenceable(16) %643, ptr noundef nonnull align 8 dereferenceable(16) %639)
          to label %645 unwind label %651

645:                                              ; preds = %.lr.ph199
  %indvars.iv.next227 = add nuw nsw i64 %indvars.iv226, 1
  %646 = load ptr, ptr %9, align 8, !tbaa !9
  %647 = getelementptr inbounds i8, ptr %646, i64 8
  %648 = load i32, ptr %647, align 8, !tbaa !21
  %649 = zext i32 %648 to i64
  %650 = icmp ult i64 %indvars.iv.next227, %649
  br i1 %650, label %.lr.ph199, label %._crit_edge200, !llvm.loop !52

651:                                              ; preds = %.lr.ph199
  %652 = landingpad { ptr, i32 }
          cleanup
  br label %658

653:                                              ; preds = %._crit_edge200
  %654 = load ptr, ptr %6, align 8, !tbaa !9
  %655 = getelementptr inbounds i8, ptr %654, i64 8
  %656 = load i32, ptr %655, align 8, !tbaa !21
  %657 = icmp eq i32 %656, %.3121
  call void @_ZNSt6vectorI6aiFaceSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #9
  br i1 %657, label %660, label %38

658:                                              ; preds = %228, %547, %230, %651, %608, %164, %146, %92
  %.pn153 = phi { ptr, i32 } [ %147, %146 ], [ %165, %164 ], [ %609, %608 ], [ %652, %651 ], [ %93, %92 ], [ %229, %228 ], [ %.pn, %547 ], [ %231, %230 ]
  call void @_ZNSt6vectorI6aiFaceSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #9
  br label %659

659:                                              ; preds = %658, %66
  %.pn153.pn = phi { ptr, i32 } [ %.pn153, %658 ], [ %67, %66 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #9
  br label %675

660:                                              ; preds = %653
  br i1 %.not148, label %.thread237, label %661

661:                                              ; preds = %660
  %662 = getelementptr inbounds i8, ptr %24, i64 -8
  %663 = load i64, ptr %662, align 8
  %664 = icmp eq i64 %663, 0
  br i1 %664, label %669, label %.preheader.preheader

.preheader.preheader:                             ; preds = %661
  %665 = getelementptr inbounds %"class.std::vector.15", ptr %24, i64 %663
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %.preheader
  %666 = phi ptr [ %667, %.preheader ], [ %665, %.preheader.preheader ]
  %667 = getelementptr inbounds i8, ptr %666, i64 -24
  call void @_ZNSt6vectorISt4pairIjfESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %667) #9
  %668 = icmp eq ptr %667, %24
  br i1 %668, label %.loopexit.loopexit, label %.preheader

.loopexit.loopexit:                               ; preds = %.preheader
  %.pre235.pre = load ptr, ptr %6, align 8, !tbaa !9
  br label %669

669:                                              ; preds = %661, %.loopexit.loopexit
  %.pre235 = phi ptr [ %.pre235.pre, %.loopexit.loopexit ], [ %654, %661 ]
  %670 = mul i64 %663, 24
  %671 = add i64 %670, 8
  call void @_ZdaPvm(ptr noundef nonnull %662, i64 noundef %671) #11
  %672 = icmp eq ptr %.pre235, null
  br i1 %672, label %674, label %.thread237

.thread237:                                       ; preds = %660, %669
  %673 = phi ptr [ %.pre235, %669 ], [ %654, %660 ]
  call void @_ZN6aiMeshD2Ev(ptr noundef nonnull align 8 dereferenceable(1320) %673) #9
  call void @_ZdlPvm(ptr noundef nonnull %673, i64 noundef 1320) #11
  br label %674

674:                                              ; preds = %.thread237, %669
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  br label %678

675:                                              ; preds = %659, %64
  %.pn153.pn.pn = phi { ptr, i32 } [ %.pn153.pn, %659 ], [ %65, %64 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  resume { ptr, i32 } %.pn153.pn.pn

676:                                              ; preds = %4
  %677 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNSt6vectorISt4pairIP6aiMeshjESaIS3_EE12emplace_backIJRS2_RjEEERS3_DpOT_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(4) %5)
  br label %678

678:                                              ; preds = %676, %674
  ret void
}

declare noundef ptr @_ZN6Assimp28ComputeVertexBoneWeightTableEPK6aiMesh(ptr noundef) local_unnamed_addr #6

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6aiFaceSaIS0_EE12emplace_backIJEEERS0_DpOT_(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN14aiVertexWeightC2Ejf(ptr noundef nonnull align 4 dereferenceable(8), i32 noundef, float noundef) unnamed_addr #2 align 2

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { 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 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 #6 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { 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, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !6, i64 4}
!12 = !{!"_ZTS6aiMesh", !6, i64 0, !6, i64 4, !6, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !7, i64 48, !7, i64 112, !7, i64 176, !10, i64 208, !6, i64 216, !10, i64 224, !6, i64 232, !13, i64 236, !6, i64 1264, !10, i64 1272, !14, i64 1280, !15, i64 1284, !10, i64 1312}
!13 = !{!"_ZTS8aiString", !6, i64 0, !7, i64 4}
!14 = !{!"_ZTS16aiMorphingMethod", !7, i64 0}
!15 = !{!"_ZTS6aiAABB", !16, i64 0, !16, i64 12}
!16 = !{!"_ZTS10aiVector3tIfE", !17, i64 0, !17, i64 4, !17, i64 8}
!17 = !{!"float", !7, i64 0}
!18 = !{!19, !6, i64 24}
!19 = !{!"_ZTSN6Assimp30SplitLargeMeshesProcess_VertexE", !20, i64 0, !6, i64 24}
!20 = !{!"_ZTSN6Assimp11BaseProcessE", !10, i64 8, !10, i64 16}
!21 = !{!12, !6, i64 8}
!22 = !{!12, !6, i64 232}
!23 = !{!12, !6, i64 216}
!24 = !{!12, !10, i64 224}
!25 = !{!12, !10, i64 16}
!26 = !{!12, !10, i64 24}
!27 = !{!12, !10, i64 32}
!28 = !{!12, !10, i64 40}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = !{!12, !10, i64 208}
!33 = !{!34, !6, i64 0}
!34 = !{!"_ZTS6aiFace", !6, i64 0, !10, i64 8}
!35 = !{!34, !10, i64 8}
!36 = distinct !{!36, !30}
!37 = !{!12, !6, i64 0}
!38 = !{i64 0, i64 4, !39, i64 4, i64 4, !39, i64 8, i64 4, !39}
!39 = !{!17, !17, i64 0}
!40 = !{i64 0, i64 4, !39, i64 4, i64 4, !39, i64 8, i64 4, !39, i64 12, i64 4, !39}
!41 = !{!42, !6, i64 0}
!42 = !{!"_ZTSSt4pairIjfE", !6, i64 0, !17, i64 4}
!43 = !{!42, !17, i64 4}
!44 = distinct !{!44, !30}
!45 = distinct !{!45, !30}
!46 = !{i64 0, i64 4, !39, i64 4, i64 4, !39, i64 8, i64 4, !39, i64 12, i64 4, !39, i64 16, i64 4, !39, i64 20, i64 4, !39, i64 24, i64 4, !39, i64 28, i64 4, !39, i64 32, i64 4, !39, i64 36, i64 4, !39, i64 40, i64 4, !39, i64 44, i64 4, !39, i64 48, i64 4, !39, i64 52, i64 4, !39, i64 56, i64 4, !39, i64 60, i64 4, !39}
!47 = !{!48, !6, i64 1028}
!48 = !{!"_ZTS6aiBone", !13, i64 0, !6, i64 1028, !10, i64 1032, !10, i64 1040, !10, i64 1048, !49, i64 1056}
!49 = !{!"_ZTS12aiMatrix4x4tIfE", !17, i64 0, !17, i64 4, !17, i64 8, !17, i64 12, !17, i64 16, !17, i64 20, !17, i64 24, !17, i64 28, !17, i64 32, !17, i64 36, !17, i64 40, !17, i64 44, !17, i64 48, !17, i64 52, !17, i64 56, !17, i64 60}
!50 = !{!48, !10, i64 1048}
!51 = distinct !{!51, !30}
!52 = distinct !{!52, !30}


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