; LLVM IR from Overload-Technologies/Overload :: Dependencies/assimp/code/Common (Importer)

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

%struct.aiMemoryInfo = type { i32, i32, i32, i32, i32, i32, i32, i32 }
%"class.Assimp::Importer" = type { ptr }
%"class.Assimp::ImporterPimpl" = type { ptr, i8, ptr, i8, %"class.std::vector", %"class.std::vector.0", ptr, %"class.std::__cxx11::basic_string", %"class.std::__exception_ptr::exception_ptr", %"class.std::map", %"class.std::map.11", %"class.std::map.16", %"class.std::map.21", %"class.std::map.26", i8, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Assimp::BaseImporter *, std::allocator<Assimp::BaseImporter *>>::_Vector_impl" }
%"struct.std::_Vector_base<Assimp::BaseImporter *, std::allocator<Assimp::BaseImporter *>>::_Vector_impl" = type { %"struct.std::_Vector_base<Assimp::BaseImporter *, std::allocator<Assimp::BaseImporter *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Assimp::BaseImporter *, std::allocator<Assimp::BaseImporter *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<Assimp::BaseProcess *, std::allocator<Assimp::BaseProcess *>>::_Vector_impl" }
%"struct.std::_Vector_base<Assimp::BaseProcess *, std::allocator<Assimp::BaseProcess *>>::_Vector_impl" = type { %"struct.std::_Vector_base<Assimp::BaseProcess *, std::allocator<Assimp::BaseProcess *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Assimp::BaseProcess *, std::allocator<Assimp::BaseProcess *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::__exception_ptr::exception_ptr" = type { ptr }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, int>, std::_Select1st<std::pair<const unsigned int, int>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, int>, std::_Select1st<std::pair<const unsigned int, int>>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map.11" = type { %"class.std::_Rb_tree.12" }
%"class.std::_Rb_tree.12" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, float>, std::_Select1st<std::pair<const unsigned int, float>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, float>, std::_Select1st<std::pair<const unsigned int, float>>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::map.16" = type { %"class.std::_Rb_tree.17" }
%"class.std::_Rb_tree.17" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const unsigned int, std::__cxx11::basic_string<char>>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const unsigned int, std::__cxx11::basic_string<char>>>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::map.21" = type { %"class.std::_Rb_tree.22" }
%"class.std::_Rb_tree.22" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, aiMatrix4x4t<float>>, std::_Select1st<std::pair<const unsigned int, aiMatrix4x4t<float>>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, aiMatrix4x4t<float>>, std::_Select1st<std::pair<const unsigned int, aiMatrix4x4t<float>>>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::map.26" = type { %"class.std::_Rb_tree.27" }
%"class.std::_Rb_tree.27" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, void *>, std::_Select1st<std::pair<const unsigned int, void *>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, void *>, std::_Select1st<std::pair<const unsigned int, void *>>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%struct.aiScene = type { i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, ptr, %struct.aiString, i32, ptr, ptr }
%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 }
%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 }
%struct.aiTexture = type <{ i32, i32, [9 x i8], [7 x i8], ptr, %struct.aiString, [4 x i8] }>
%struct.aiAnimation = type { %struct.aiString, double, double, i32, ptr, i32, ptr, i32, ptr }
%struct.aiNodeAnim = type { %struct.aiString, i32, ptr, i32, ptr, i32, ptr, i32, i32 }
%struct.aiMaterial = type { ptr, i32, i32 }
%struct.aiMaterialProperty = type { %struct.aiString, i32, i32, i32, i32, ptr }

@.str.1 = external hidden unnamed_addr constant [109 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [17 x i8], align 1

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK6Assimp8Importer21GetMemoryRequirementsER12aiMemoryInfo(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 4 dereferenceable(32) %1) #3 align 2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %struct.aiMemoryInfo, align 4
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %21 = load ptr, ptr %3, align 8
  %22 = getelementptr inbounds %"class.Assimp::Importer", ptr %21, i32 0, i32 0
  %23 = load ptr, ptr %22, align 8, !tbaa !9
  %24 = icmp ne ptr null, %23
  br i1 %24, label %26, label %25

25:                                               ; preds = %2
  call void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.10, ptr noundef @.str.1, i32 noundef 1180)
  br label %26

26:                                               ; preds = %25, %2
  %27 = phi i1 [ true, %2 ], [ false, %25 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr %5) #6
  call void @_ZN12aiMemoryInfoC2Ev(ptr noundef nonnull align 4 dereferenceable(32) %5) #6
  %28 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %28, ptr align 4 %5, i64 32, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 32, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #6
  %29 = getelementptr inbounds %"class.Assimp::Importer", ptr %21, i32 0, i32 0
  %30 = load ptr, ptr %29, align 8, !tbaa !9
  %31 = getelementptr inbounds %"class.Assimp::ImporterPimpl", ptr %30, i32 0, i32 6
  %32 = load ptr, ptr %31, align 8, !tbaa !14
  store ptr %32, ptr %6, align 8, !tbaa !5
  %33 = load ptr, ptr %6, align 8, !tbaa !5
  %34 = icmp ne ptr %33, null
  br i1 %34, label %36, label %35

35:                                               ; preds = %26
  store i32 1, ptr %7, align 4
  br label %567

36:                                               ; preds = %26
  %37 = load ptr, ptr %4, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.aiMemoryInfo, ptr %37, i32 0, i32 7
  store i32 1168, ptr %38, align 4, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  store i32 0, ptr %8, align 4, !tbaa !12
  br label %39

39:                                               ; preds = %304, %36
  %40 = load i32, ptr %8, align 4, !tbaa !12
  %41 = load ptr, ptr %6, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.aiScene, ptr %41, i32 0, i32 2
  %43 = load i32, ptr %42, align 8, !tbaa !51
  %44 = icmp ult i32 %40, %43
  br i1 %44, label %46, label %45

45:                                               ; preds = %39
  store i32 2, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  br label %307

46:                                               ; preds = %39
  %47 = load ptr, ptr %4, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.aiMemoryInfo, ptr %47, i32 0, i32 2
  %49 = load i32, ptr %48, align 4, !tbaa !54
  %50 = zext i32 %49 to i64
  %51 = add i64 %50, 1320
  %52 = trunc i64 %51 to i32
  store i32 %52, ptr %48, align 4, !tbaa !54
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.aiScene, ptr %53, i32 0, i32 3
  %55 = load ptr, ptr %54, align 8, !tbaa !55
  %56 = load i32, ptr %8, align 4, !tbaa !12
  %57 = zext i32 %56 to i64
  %58 = getelementptr inbounds ptr, ptr %55, i64 %57
  %59 = load ptr, ptr %58, align 8, !tbaa !5
  %60 = call noundef zeroext i1 @_ZNK6aiMesh12HasPositionsEv(ptr noundef nonnull align 8 dereferenceable(1320) %59)
  br i1 %60, label %61, label %79

61:                                               ; preds = %46
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.aiScene, ptr %62, i32 0, i32 3
  %64 = load ptr, ptr %63, align 8, !tbaa !55
  %65 = load i32, ptr %8, align 4, !tbaa !12
  %66 = zext i32 %65 to i64
  %67 = getelementptr inbounds ptr, ptr %64, i64 %66
  %68 = load ptr, ptr %67, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.aiMesh, ptr %68, i32 0, i32 1
  %70 = load i32, ptr %69, align 4, !tbaa !56
  %71 = zext i32 %70 to i64
  %72 = mul i64 12, %71
  %73 = load ptr, ptr %4, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.aiMemoryInfo, ptr %73, i32 0, i32 2
  %75 = load i32, ptr %74, align 4, !tbaa !54
  %76 = zext i32 %75 to i64
  %77 = add i64 %76, %72
  %78 = trunc i64 %77 to i32
  store i32 %78, ptr %74, align 4, !tbaa !54
  br label %79

79:                                               ; preds = %61, %46
  %80 = load ptr, ptr %6, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.aiScene, ptr %80, i32 0, i32 3
  %82 = load ptr, ptr %81, align 8, !tbaa !55
  %83 = load i32, ptr %8, align 4, !tbaa !12
  %84 = zext i32 %83 to i64
  %85 = getelementptr inbounds ptr, ptr %82, i64 %84
  %86 = load ptr, ptr %85, align 8, !tbaa !5
  %87 = call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %86)
  br i1 %87, label %88, label %106

88:                                               ; preds = %79
  %89 = load ptr, ptr %6, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.aiScene, ptr %89, i32 0, i32 3
  %91 = load ptr, ptr %90, align 8, !tbaa !55
  %92 = load i32, ptr %8, align 4, !tbaa !12
  %93 = zext i32 %92 to i64
  %94 = getelementptr inbounds ptr, ptr %91, i64 %93
  %95 = load ptr, ptr %94, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.aiMesh, ptr %95, i32 0, i32 1
  %97 = load i32, ptr %96, align 4, !tbaa !56
  %98 = zext i32 %97 to i64
  %99 = mul i64 12, %98
  %100 = load ptr, ptr %4, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.aiMemoryInfo, ptr %100, i32 0, i32 2
  %102 = load i32, ptr %101, align 4, !tbaa !54
  %103 = zext i32 %102 to i64
  %104 = add i64 %103, %99
  %105 = trunc i64 %104 to i32
  store i32 %105, ptr %101, align 4, !tbaa !54
  br label %106

106:                                              ; preds = %88, %79
  %107 = load ptr, ptr %6, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.aiScene, ptr %107, i32 0, i32 3
  %109 = load ptr, ptr %108, align 8, !tbaa !55
  %110 = load i32, ptr %8, align 4, !tbaa !12
  %111 = zext i32 %110 to i64
  %112 = getelementptr inbounds ptr, ptr %109, i64 %111
  %113 = load ptr, ptr %112, align 8, !tbaa !5
  %114 = call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %113)
  br i1 %114, label %115, label %134

115:                                              ; preds = %106
  %116 = load ptr, ptr %6, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.aiScene, ptr %116, i32 0, i32 3
  %118 = load ptr, ptr %117, align 8, !tbaa !55
  %119 = load i32, ptr %8, align 4, !tbaa !12
  %120 = zext i32 %119 to i64
  %121 = getelementptr inbounds ptr, ptr %118, i64 %120
  %122 = load ptr, ptr %121, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.aiMesh, ptr %122, i32 0, i32 1
  %124 = load i32, ptr %123, align 4, !tbaa !56
  %125 = zext i32 %124 to i64
  %126 = mul i64 12, %125
  %127 = mul i64 %126, 2
  %128 = load ptr, ptr %4, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.aiMemoryInfo, ptr %128, i32 0, i32 2
  %130 = load i32, ptr %129, align 4, !tbaa !54
  %131 = zext i32 %130 to i64
  %132 = add i64 %131, %127
  %133 = trunc i64 %132 to i32
  store i32 %133, ptr %129, align 4, !tbaa !54
  br label %134

134:                                              ; preds = %115, %106
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %135

135:                                              ; preds = %169, %134
  %136 = load i32, ptr %9, align 4, !tbaa !12
  %137 = icmp ult i32 %136, 8
  br i1 %137, label %139, label %138

138:                                              ; preds = %135
  store i32 5, ptr %7, align 4
  br label %172

139:                                              ; preds = %135
  %140 = load ptr, ptr %6, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.aiScene, ptr %140, i32 0, i32 3
  %142 = load ptr, ptr %141, align 8, !tbaa !55
  %143 = load i32, ptr %8, align 4, !tbaa !12
  %144 = zext i32 %143 to i64
  %145 = getelementptr inbounds ptr, ptr %142, i64 %144
  %146 = load ptr, ptr %145, align 8, !tbaa !5
  %147 = load i32, ptr %9, align 4, !tbaa !12
  %148 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %146, i32 noundef %147)
  br i1 %148, label %149, label %167

149:                                              ; preds = %139
  %150 = load ptr, ptr %6, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.aiScene, ptr %150, i32 0, i32 3
  %152 = load ptr, ptr %151, align 8, !tbaa !55
  %153 = load i32, ptr %8, align 4, !tbaa !12
  %154 = zext i32 %153 to i64
  %155 = getelementptr inbounds ptr, ptr %152, i64 %154
  %156 = load ptr, ptr %155, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.aiMesh, ptr %156, i32 0, i32 1
  %158 = load i32, ptr %157, align 4, !tbaa !56
  %159 = zext i32 %158 to i64
  %160 = mul i64 16, %159
  %161 = load ptr, ptr %4, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.aiMemoryInfo, ptr %161, i32 0, i32 2
  %163 = load i32, ptr %162, align 4, !tbaa !54
  %164 = zext i32 %163 to i64
  %165 = add i64 %164, %160
  %166 = trunc i64 %165 to i32
  store i32 %166, ptr %162, align 4, !tbaa !54
  br label %168

167:                                              ; preds = %139
  store i32 5, ptr %7, align 4
  br label %172

168:                                              ; preds = %149
  br label %169

169:                                              ; preds = %168
  %170 = load i32, ptr %9, align 4, !tbaa !12
  %171 = add i32 %170, 1
  store i32 %171, ptr %9, align 4, !tbaa !12
  br label %135, !llvm.loop !62

172:                                              ; preds = %167, %138
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  br label %173

173:                                              ; preds = %172
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  store i32 0, ptr %10, align 4, !tbaa !12
  br label %174

174:                                              ; preds = %208, %173
  %175 = load i32, ptr %10, align 4, !tbaa !12
  %176 = icmp ult i32 %175, 8
  br i1 %176, label %178, label %177

177:                                              ; preds = %174
  store i32 8, ptr %7, align 4
  br label %211

178:                                              ; preds = %174
  %179 = load ptr, ptr %6, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.aiScene, ptr %179, i32 0, i32 3
  %181 = load ptr, ptr %180, align 8, !tbaa !55
  %182 = load i32, ptr %8, align 4, !tbaa !12
  %183 = zext i32 %182 to i64
  %184 = getelementptr inbounds ptr, ptr %181, i64 %183
  %185 = load ptr, ptr %184, align 8, !tbaa !5
  %186 = load i32, ptr %10, align 4, !tbaa !12
  %187 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %185, i32 noundef %186)
  br i1 %187, label %188, label %206

188:                                              ; preds = %178
  %189 = load ptr, ptr %6, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.aiScene, ptr %189, i32 0, i32 3
  %191 = load ptr, ptr %190, align 8, !tbaa !55
  %192 = load i32, ptr %8, align 4, !tbaa !12
  %193 = zext i32 %192 to i64
  %194 = getelementptr inbounds ptr, ptr %191, i64 %193
  %195 = load ptr, ptr %194, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.aiMesh, ptr %195, i32 0, i32 1
  %197 = load i32, ptr %196, align 4, !tbaa !56
  %198 = zext i32 %197 to i64
  %199 = mul i64 12, %198
  %200 = load ptr, ptr %4, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.aiMemoryInfo, ptr %200, i32 0, i32 2
  %202 = load i32, ptr %201, align 4, !tbaa !54
  %203 = zext i32 %202 to i64
  %204 = add i64 %203, %199
  %205 = trunc i64 %204 to i32
  store i32 %205, ptr %201, align 4, !tbaa !54
  br label %207

206:                                              ; preds = %178
  store i32 8, ptr %7, align 4
  br label %211

207:                                              ; preds = %188
  br label %208

208:                                              ; preds = %207
  %209 = load i32, ptr %10, align 4, !tbaa !12
  %210 = add i32 %209, 1
  store i32 %210, ptr %10, align 4, !tbaa !12
  br label %174, !llvm.loop !64

211:                                              ; preds = %206, %177
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  br label %212

212:                                              ; preds = %211
  %213 = load ptr, ptr %6, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.aiScene, ptr %213, i32 0, i32 3
  %215 = load ptr, ptr %214, align 8, !tbaa !55
  %216 = load i32, ptr %8, align 4, !tbaa !12
  %217 = zext i32 %216 to i64
  %218 = getelementptr inbounds ptr, ptr %215, i64 %217
  %219 = load ptr, ptr %218, align 8, !tbaa !5
  %220 = call noundef zeroext i1 @_ZNK6aiMesh8HasBonesEv(ptr noundef nonnull align 8 dereferenceable(1320) %219)
  br i1 %220, label %221, label %286

221:                                              ; preds = %212
  %222 = load ptr, ptr %6, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.aiScene, ptr %222, i32 0, i32 3
  %224 = load ptr, ptr %223, align 8, !tbaa !55
  %225 = load i32, ptr %8, align 4, !tbaa !12
  %226 = zext i32 %225 to i64
  %227 = getelementptr inbounds ptr, ptr %224, i64 %226
  %228 = load ptr, ptr %227, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.aiMesh, ptr %228, i32 0, i32 11
  %230 = load i32, ptr %229, align 8, !tbaa !65
  %231 = zext i32 %230 to i64
  %232 = mul i64 8, %231
  %233 = load ptr, ptr %4, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.aiMemoryInfo, ptr %233, i32 0, i32 2
  %235 = load i32, ptr %234, align 4, !tbaa !54
  %236 = zext i32 %235 to i64
  %237 = add i64 %236, %232
  %238 = trunc i64 %237 to i32
  store i32 %238, ptr %234, align 4, !tbaa !54
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  store i32 0, ptr %11, align 4, !tbaa !12
  br label %239

239:                                              ; preds = %282, %221
  %240 = load i32, ptr %11, align 4, !tbaa !12
  %241 = load ptr, ptr %6, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.aiScene, ptr %241, i32 0, i32 3
  %243 = load ptr, ptr %242, align 8, !tbaa !55
  %244 = load i32, ptr %8, align 4, !tbaa !12
  %245 = zext i32 %244 to i64
  %246 = getelementptr inbounds ptr, ptr %243, i64 %245
  %247 = load ptr, ptr %246, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.aiMesh, ptr %247, i32 0, i32 11
  %249 = load i32, ptr %248, align 8, !tbaa !65
  %250 = icmp ult i32 %240, %249
  br i1 %250, label %252, label %251

251:                                              ; preds = %239
  store i32 11, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  br label %285

252:                                              ; preds = %239
  %253 = load ptr, ptr %4, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.aiMemoryInfo, ptr %253, i32 0, i32 2
  %255 = load i32, ptr %254, align 4, !tbaa !54
  %256 = zext i32 %255 to i64
  %257 = add i64 %256, 1120
  %258 = trunc i64 %257 to i32
  store i32 %258, ptr %254, align 4, !tbaa !54
  %259 = load ptr, ptr %6, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.aiScene, ptr %259, i32 0, i32 3
  %261 = load ptr, ptr %260, align 8, !tbaa !55
  %262 = load i32, ptr %8, align 4, !tbaa !12
  %263 = zext i32 %262 to i64
  %264 = getelementptr inbounds ptr, ptr %261, i64 %263
  %265 = load ptr, ptr %264, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.aiMesh, ptr %265, i32 0, i32 12
  %267 = load ptr, ptr %266, align 8, !tbaa !66
  %268 = load i32, ptr %11, align 4, !tbaa !12
  %269 = zext i32 %268 to i64
  %270 = getelementptr inbounds ptr, ptr %267, i64 %269
  %271 = load ptr, ptr %270, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.aiBone, ptr %271, i32 0, i32 1
  %273 = load i32, ptr %272, align 4, !tbaa !67
  %274 = zext i32 %273 to i64
  %275 = mul i64 %274, 8
  %276 = load ptr, ptr %4, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.aiMemoryInfo, ptr %276, i32 0, i32 2
  %278 = load i32, ptr %277, align 4, !tbaa !54
  %279 = zext i32 %278 to i64
  %280 = add i64 %279, %275
  %281 = trunc i64 %280 to i32
  store i32 %281, ptr %277, align 4, !tbaa !54
  br label %282

282:                                              ; preds = %252
  %283 = load i32, ptr %11, align 4, !tbaa !12
  %284 = add i32 %283, 1
  store i32 %284, ptr %11, align 4, !tbaa !12
  br label %239, !llvm.loop !70

285:                                              ; preds = %251
  br label %286

286:                                              ; preds = %285, %212
  %287 = load ptr, ptr %6, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.aiScene, ptr %287, i32 0, i32 3
  %289 = load ptr, ptr %288, align 8, !tbaa !55
  %290 = load i32, ptr %8, align 4, !tbaa !12
  %291 = zext i32 %290 to i64
  %292 = getelementptr inbounds ptr, ptr %289, i64 %291
  %293 = load ptr, ptr %292, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.aiMesh, ptr %293, i32 0, i32 2
  %295 = load i32, ptr %294, align 8, !tbaa !71
  %296 = zext i32 %295 to i64
  %297 = mul i64 28, %296
  %298 = load ptr, ptr %4, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.aiMemoryInfo, ptr %298, i32 0, i32 2
  %300 = load i32, ptr %299, align 4, !tbaa !54
  %301 = zext i32 %300 to i64
  %302 = add i64 %301, %297
  %303 = trunc i64 %302 to i32
  store i32 %303, ptr %299, align 4, !tbaa !54
  br label %304

304:                                              ; preds = %286
  %305 = load i32, ptr %8, align 4, !tbaa !12
  %306 = add i32 %305, 1
  store i32 %306, ptr %8, align 4, !tbaa !12
  br label %39, !llvm.loop !72

307:                                              ; preds = %45
  %308 = load ptr, ptr %4, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.aiMemoryInfo, ptr %308, i32 0, i32 2
  %310 = load i32, ptr %309, align 4, !tbaa !54
  %311 = load ptr, ptr %4, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.aiMemoryInfo, ptr %311, i32 0, i32 7
  %313 = load i32, ptr %312, align 4, !tbaa !49
  %314 = add i32 %313, %310
  store i32 %314, ptr %312, align 4, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  store i32 0, ptr %12, align 4, !tbaa !12
  br label %315

315:                                              ; preds = %362, %307
  %316 = load i32, ptr %12, align 4, !tbaa !12
  %317 = load ptr, ptr %6, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.aiScene, ptr %317, i32 0, i32 8
  %319 = load i32, ptr %318, align 8, !tbaa !73
  %320 = icmp ult i32 %316, %319
  br i1 %320, label %322, label %321

321:                                              ; preds = %315
  store i32 14, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  br label %365

322:                                              ; preds = %315
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %323 = load ptr, ptr %6, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.aiScene, ptr %323, i32 0, i32 9
  %325 = load ptr, ptr %324, align 8, !tbaa !74
  %326 = load i32, ptr %12, align 4, !tbaa !12
  %327 = zext i32 %326 to i64
  %328 = getelementptr inbounds ptr, ptr %325, i64 %327
  %329 = load ptr, ptr %328, align 8, !tbaa !5
  store ptr %329, ptr %13, align 8, !tbaa !5
  %330 = load ptr, ptr %4, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.aiMemoryInfo, ptr %330, i32 0, i32 0
  %332 = load i32, ptr %331, align 4, !tbaa !75
  %333 = zext i32 %332 to i64
  %334 = add i64 %333, 1064
  %335 = trunc i64 %334 to i32
  store i32 %335, ptr %331, align 4, !tbaa !75
  %336 = load ptr, ptr %13, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.aiTexture, ptr %336, i32 0, i32 1
  %338 = load i32, ptr %337, align 4, !tbaa !76
  %339 = icmp ne i32 %338, 0
  br i1 %339, label %340, label %353

340:                                              ; preds = %322
  %341 = load ptr, ptr %13, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.aiTexture, ptr %341, i32 0, i32 1
  %343 = load i32, ptr %342, align 4, !tbaa !76
  %344 = mul i32 4, %343
  %345 = load ptr, ptr %13, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.aiTexture, ptr %345, i32 0, i32 0
  %347 = load i32, ptr %346, align 8, !tbaa !78
  %348 = mul i32 %344, %347
  %349 = load ptr, ptr %4, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.aiMemoryInfo, ptr %349, i32 0, i32 0
  %351 = load i32, ptr %350, align 4, !tbaa !75
  %352 = add i32 %351, %348
  store i32 %352, ptr %350, align 4, !tbaa !75
  br label %361

353:                                              ; preds = %322
  %354 = load ptr, ptr %13, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.aiTexture, ptr %354, i32 0, i32 0
  %356 = load i32, ptr %355, align 8, !tbaa !78
  %357 = load ptr, ptr %4, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.aiMemoryInfo, ptr %357, i32 0, i32 0
  %359 = load i32, ptr %358, align 4, !tbaa !75
  %360 = add i32 %359, %356
  store i32 %360, ptr %358, align 4, !tbaa !75
  br label %361

361:                                              ; preds = %353, %340
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  br label %362

362:                                              ; preds = %361
  %363 = load i32, ptr %12, align 4, !tbaa !12
  %364 = add i32 %363, 1
  store i32 %364, ptr %12, align 4, !tbaa !12
  br label %315, !llvm.loop !79

365:                                              ; preds = %321
  %366 = load ptr, ptr %4, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.aiMemoryInfo, ptr %366, i32 0, i32 0
  %368 = load i32, ptr %367, align 4, !tbaa !75
  %369 = load ptr, ptr %4, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.aiMemoryInfo, ptr %369, i32 0, i32 7
  %371 = load i32, ptr %370, align 4, !tbaa !49
  %372 = add i32 %371, %368
  store i32 %372, ptr %370, align 4, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  store i32 0, ptr %14, align 4, !tbaa !12
  br label %373

373:                                              ; preds = %452, %365
  %374 = load i32, ptr %14, align 4, !tbaa !12
  %375 = load ptr, ptr %6, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.aiScene, ptr %375, i32 0, i32 6
  %377 = load i32, ptr %376, align 8, !tbaa !80
  %378 = icmp ult i32 %374, %377
  br i1 %378, label %380, label %379

379:                                              ; preds = %373
  store i32 17, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %455

380:                                              ; preds = %373
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %381 = load ptr, ptr %6, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.aiScene, ptr %381, i32 0, i32 7
  %383 = load ptr, ptr %382, align 8, !tbaa !81
  %384 = load i32, ptr %14, align 4, !tbaa !12
  %385 = zext i32 %384 to i64
  %386 = getelementptr inbounds ptr, ptr %383, i64 %385
  %387 = load ptr, ptr %386, align 8, !tbaa !5
  store ptr %387, ptr %15, align 8, !tbaa !5
  %388 = load ptr, ptr %4, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.aiMemoryInfo, ptr %388, i32 0, i32 4
  %390 = load i32, ptr %389, align 4, !tbaa !82
  %391 = zext i32 %390 to i64
  %392 = add i64 %391, 1096
  %393 = trunc i64 %392 to i32
  store i32 %393, ptr %389, align 4, !tbaa !82
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  store i32 0, ptr %16, align 4, !tbaa !12
  br label %394

394:                                              ; preds = %448, %380
  %395 = load i32, ptr %16, align 4, !tbaa !12
  %396 = load ptr, ptr %15, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.aiAnimation, ptr %396, i32 0, i32 3
  %398 = load i32, ptr %397, align 8, !tbaa !83
  %399 = icmp ult i32 %395, %398
  br i1 %399, label %401, label %400

400:                                              ; preds = %394
  store i32 20, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  br label %451

401:                                              ; preds = %394
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %402 = load ptr, ptr %15, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.aiAnimation, ptr %402, i32 0, i32 4
  %404 = load ptr, ptr %403, align 8, !tbaa !86
  %405 = load i32, ptr %16, align 4, !tbaa !12
  %406 = zext i32 %405 to i64
  %407 = getelementptr inbounds ptr, ptr %404, i64 %406
  %408 = load ptr, ptr %407, align 8, !tbaa !5
  store ptr %408, ptr %17, align 8, !tbaa !5
  %409 = load ptr, ptr %4, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.aiMemoryInfo, ptr %409, i32 0, i32 4
  %411 = load i32, ptr %410, align 4, !tbaa !82
  %412 = zext i32 %411 to i64
  %413 = add i64 %412, 1080
  %414 = trunc i64 %413 to i32
  store i32 %414, ptr %410, align 4, !tbaa !82
  %415 = load ptr, ptr %17, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.aiNodeAnim, ptr %415, i32 0, i32 1
  %417 = load i32, ptr %416, align 4, !tbaa !87
  %418 = zext i32 %417 to i64
  %419 = mul i64 %418, 24
  %420 = load ptr, ptr %4, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.aiMemoryInfo, ptr %420, i32 0, i32 4
  %422 = load i32, ptr %421, align 4, !tbaa !82
  %423 = zext i32 %422 to i64
  %424 = add i64 %423, %419
  %425 = trunc i64 %424 to i32
  store i32 %425, ptr %421, align 4, !tbaa !82
  %426 = load ptr, ptr %17, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.aiNodeAnim, ptr %426, i32 0, i32 5
  %428 = load i32, ptr %427, align 8, !tbaa !90
  %429 = zext i32 %428 to i64
  %430 = mul i64 %429, 24
  %431 = load ptr, ptr %4, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.aiMemoryInfo, ptr %431, i32 0, i32 4
  %433 = load i32, ptr %432, align 4, !tbaa !82
  %434 = zext i32 %433 to i64
  %435 = add i64 %434, %430
  %436 = trunc i64 %435 to i32
  store i32 %436, ptr %432, align 4, !tbaa !82
  %437 = load ptr, ptr %17, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.aiNodeAnim, ptr %437, i32 0, i32 3
  %439 = load i32, ptr %438, align 8, !tbaa !91
  %440 = zext i32 %439 to i64
  %441 = mul i64 %440, 32
  %442 = load ptr, ptr %4, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.aiMemoryInfo, ptr %442, i32 0, i32 4
  %444 = load i32, ptr %443, align 4, !tbaa !82
  %445 = zext i32 %444 to i64
  %446 = add i64 %445, %441
  %447 = trunc i64 %446 to i32
  store i32 %447, ptr %443, align 4, !tbaa !82
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  br label %448

448:                                              ; preds = %401
  %449 = load i32, ptr %16, align 4, !tbaa !12
  %450 = add i32 %449, 1
  store i32 %450, ptr %16, align 4, !tbaa !12
  br label %394, !llvm.loop !92

451:                                              ; preds = %400
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  br label %452

452:                                              ; preds = %451
  %453 = load i32, ptr %14, align 4, !tbaa !12
  %454 = add i32 %453, 1
  store i32 %454, ptr %14, align 4, !tbaa !12
  br label %373, !llvm.loop !93

455:                                              ; preds = %379
  %456 = load ptr, ptr %4, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.aiMemoryInfo, ptr %456, i32 0, i32 4
  %458 = load i32, ptr %457, align 4, !tbaa !82
  %459 = load ptr, ptr %4, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.aiMemoryInfo, ptr %459, i32 0, i32 7
  %461 = load i32, ptr %460, align 4, !tbaa !49
  %462 = add i32 %461, %458
  store i32 %462, ptr %460, align 4, !tbaa !49
  %463 = load ptr, ptr %6, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.aiScene, ptr %463, i32 0, i32 12
  %465 = load i32, ptr %464, align 8, !tbaa !94
  %466 = zext i32 %465 to i64
  %467 = mul i64 1084, %466
  %468 = trunc i64 %467 to i32
  %469 = load ptr, ptr %4, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.aiMemoryInfo, ptr %469, i32 0, i32 5
  store i32 %468, ptr %470, align 4, !tbaa !95
  %471 = load ptr, ptr %4, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.aiMemoryInfo, ptr %471, i32 0, i32 7
  %473 = load i32, ptr %472, align 4, !tbaa !49
  %474 = add i32 %473, %468
  store i32 %474, ptr %472, align 4, !tbaa !49
  %475 = load ptr, ptr %6, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.aiScene, ptr %475, i32 0, i32 10
  %477 = load i32, ptr %476, align 8, !tbaa !96
  %478 = zext i32 %477 to i64
  %479 = mul i64 1132, %478
  %480 = trunc i64 %479 to i32
  %481 = load ptr, ptr %4, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.aiMemoryInfo, ptr %481, i32 0, i32 6
  store i32 %480, ptr %482, align 4, !tbaa !97
  %483 = load ptr, ptr %4, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.aiMemoryInfo, ptr %483, i32 0, i32 7
  %485 = load i32, ptr %484, align 4, !tbaa !49
  %486 = add i32 %485, %480
  store i32 %486, ptr %484, align 4, !tbaa !49
  %487 = load ptr, ptr %4, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.aiMemoryInfo, ptr %487, i32 0, i32 3
  %489 = load ptr, ptr %6, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.aiScene, ptr %489, i32 0, i32 1
  %491 = load ptr, ptr %490, align 8, !tbaa !98
  call void @_Z13AddNodeWeightRjPK6aiNode(ptr noundef nonnull align 4 dereferenceable(4) %488, ptr noundef %491)
  %492 = load ptr, ptr %4, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.aiMemoryInfo, ptr %492, i32 0, i32 3
  %494 = load i32, ptr %493, align 4, !tbaa !99
  %495 = load ptr, ptr %4, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.aiMemoryInfo, ptr %495, i32 0, i32 7
  %497 = load i32, ptr %496, align 4, !tbaa !49
  %498 = add i32 %497, %494
  store i32 %498, ptr %496, align 4, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  store i32 0, ptr %18, align 4, !tbaa !12
  br label %499

499:                                              ; preds = %556, %455
  %500 = load i32, ptr %18, align 4, !tbaa !12
  %501 = load ptr, ptr %6, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.aiScene, ptr %501, i32 0, i32 4
  %503 = load i32, ptr %502, align 8, !tbaa !100
  %504 = icmp ult i32 %500, %503
  br i1 %504, label %506, label %505

505:                                              ; preds = %499
  store i32 23, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  br label %559

506:                                              ; preds = %499
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %507 = load ptr, ptr %6, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.aiScene, ptr %507, i32 0, i32 5
  %509 = load ptr, ptr %508, align 8, !tbaa !101
  %510 = load i32, ptr %18, align 4, !tbaa !12
  %511 = zext i32 %510 to i64
  %512 = getelementptr inbounds ptr, ptr %509, i64 %511
  %513 = load ptr, ptr %512, align 8, !tbaa !5
  store ptr %513, ptr %19, align 8, !tbaa !5
  %514 = load ptr, ptr %4, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.aiMemoryInfo, ptr %514, i32 0, i32 1
  %516 = load i32, ptr %515, align 4, !tbaa !102
  %517 = zext i32 %516 to i64
  %518 = add i64 %517, 16
  %519 = trunc i64 %518 to i32
  store i32 %519, ptr %515, align 4, !tbaa !102
  %520 = load ptr, ptr %19, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.aiMaterial, ptr %520, i32 0, i32 2
  %522 = load i32, ptr %521, align 4, !tbaa !103
  %523 = zext i32 %522 to i64
  %524 = mul i64 %523, 8
  %525 = load ptr, ptr %4, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct.aiMemoryInfo, ptr %525, i32 0, i32 1
  %527 = load i32, ptr %526, align 4, !tbaa !102
  %528 = zext i32 %527 to i64
  %529 = add i64 %528, %524
  %530 = trunc i64 %529 to i32
  store i32 %530, ptr %526, align 4, !tbaa !102
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  store i32 0, ptr %20, align 4, !tbaa !12
  br label %531

531:                                              ; preds = %552, %506
  %532 = load i32, ptr %20, align 4, !tbaa !12
  %533 = load ptr, ptr %19, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.aiMaterial, ptr %533, i32 0, i32 1
  %535 = load i32, ptr %534, align 8, !tbaa !105
  %536 = icmp ult i32 %532, %535
  br i1 %536, label %538, label %537

537:                                              ; preds = %531
  store i32 26, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %555

538:                                              ; preds = %531
  %539 = load ptr, ptr %19, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.aiMaterial, ptr %539, i32 0, i32 0
  %541 = load ptr, ptr %540, align 8, !tbaa !106
  %542 = load i32, ptr %20, align 4, !tbaa !12
  %543 = zext i32 %542 to i64
  %544 = getelementptr inbounds ptr, ptr %541, i64 %543
  %545 = load ptr, ptr %544, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.aiMaterialProperty, ptr %545, i32 0, i32 3
  %547 = load i32, ptr %546, align 4, !tbaa !107
  %548 = load ptr, ptr %4, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.aiMemoryInfo, ptr %548, i32 0, i32 1
  %550 = load i32, ptr %549, align 4, !tbaa !102
  %551 = add i32 %550, %547
  store i32 %551, ptr %549, align 4, !tbaa !102
  br label %552

552:                                              ; preds = %538
  %553 = load i32, ptr %20, align 4, !tbaa !12
  %554 = add i32 %553, 1
  store i32 %554, ptr %20, align 4, !tbaa !12
  br label %531, !llvm.loop !110

555:                                              ; preds = %537
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  br label %556

556:                                              ; preds = %555
  %557 = load i32, ptr %18, align 4, !tbaa !12
  %558 = add i32 %557, 1
  store i32 %558, ptr %18, align 4, !tbaa !12
  br label %499, !llvm.loop !111

559:                                              ; preds = %505
  %560 = load ptr, ptr %4, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.aiMemoryInfo, ptr %560, i32 0, i32 1
  %562 = load i32, ptr %561, align 4, !tbaa !102
  %563 = load ptr, ptr %4, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.aiMemoryInfo, ptr %563, i32 0, i32 7
  %565 = load i32, ptr %564, align 4, !tbaa !49
  %566 = add i32 %565, %562
  store i32 %566, ptr %564, align 4, !tbaa !49
  store i32 0, ptr %7, align 4
  br label %567

567:                                              ; preds = %559, %35
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #6
  %568 = load i32, ptr %7, align 4
  switch i32 %568, label %570 [
    i32 0, label %569
    i32 1, label %569
  ]

569:                                              ; preds = %567, %567
  ret void

570:                                              ; preds = %567
  unreachable
}

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z13AddNodeWeightRjPK6aiNode(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef) #5

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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, !6, i64 0}
!10 = !{!"_ZTSN6Assimp8ImporterE", !6, i64 0}
!11 = !{i64 0, i64 4, !12, i64 4, i64 4, !12, i64 8, i64 4, !12, i64 12, i64 4, !12, i64 16, i64 4, !12, i64 20, i64 4, !12, i64 24, i64 4, !12, i64 28, i64 4, !12}
!12 = !{!13, !13, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!15, !6, i64 80}
!15 = !{!"_ZTSN6Assimp13ImporterPimplE", !6, i64 0, !16, i64 8, !6, i64 16, !16, i64 24, !17, i64 32, !21, i64 56, !6, i64 80, !25, i64 88, !28, i64 120, !29, i64 128, !37, i64 176, !40, i64 224, !43, i64 272, !46, i64 320, !16, i64 368, !6, i64 376}
!16 = !{!"bool", !7, i64 0}
!17 = !{!"_ZTSSt6vectorIPN6Assimp12BaseImporterESaIS2_EE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseIPN6Assimp12BaseImporterESaIS2_EE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp12BaseImporterESaIS2_EE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp12BaseImporterESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!21 = !{!"_ZTSSt6vectorIPN6Assimp11BaseProcessESaIS2_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIPN6Assimp11BaseProcessESaIS2_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp11BaseProcessESaIS2_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp11BaseProcessESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !26, i64 0, !27, i64 8, !7, i64 16}
!26 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!27 = !{!"long", !7, i64 0}
!28 = !{!"_ZTSNSt15__exception_ptr13exception_ptrE", !6, i64 0}
!29 = !{!"_ZTSSt3mapIjiSt4lessIjESaISt4pairIKjiEEE", !30, i64 0}
!30 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE", !31, i64 0}
!31 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE13_Rb_tree_implIS6_Lb1EEE", !32, i64 0, !34, i64 8}
!32 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIjEE", !33, i64 0}
!33 = !{!"_ZTSSt4lessIjE"}
!34 = !{!"_ZTSSt15_Rb_tree_header", !35, i64 0, !27, i64 32}
!35 = !{!"_ZTSSt18_Rb_tree_node_base", !36, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!36 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!37 = !{!"_ZTSSt3mapIjfSt4lessIjESaISt4pairIKjfEEE", !38, i64 0}
!38 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKjfESt10_Select1stIS2_ESt4lessIjESaIS2_EE", !39, i64 0}
!39 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKjfESt10_Select1stIS2_ESt4lessIjESaIS2_EE13_Rb_tree_implIS6_Lb1EEE", !32, i64 0, !34, i64 8}
!40 = !{!"_ZTSSt3mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIjESaISt4pairIKjS5_EEE", !41, i64 0}
!41 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESt10_Select1stIS8_ESt4lessIjESaIS8_EE", !42, i64 0}
!42 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESt10_Select1stIS8_ESt4lessIjESaIS8_EE13_Rb_tree_implISC_Lb1EEE", !32, i64 0, !34, i64 8}
!43 = !{!"_ZTSSt3mapIj12aiMatrix4x4tIfESt4lessIjESaISt4pairIKjS1_EEE", !44, i64 0}
!44 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKj12aiMatrix4x4tIfEESt10_Select1stIS4_ESt4lessIjESaIS4_EE", !45, i64 0}
!45 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKj12aiMatrix4x4tIfEESt10_Select1stIS4_ESt4lessIjESaIS4_EE13_Rb_tree_implIS8_Lb1EEE", !32, i64 0, !34, i64 8}
!46 = !{!"_ZTSSt3mapIjPvSt4lessIjESaISt4pairIKjS0_EEE", !47, i64 0}
!47 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKjPvESt10_Select1stIS3_ESt4lessIjESaIS3_EE", !48, i64 0}
!48 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKjPvESt10_Select1stIS3_ESt4lessIjESaIS3_EE13_Rb_tree_implIS7_Lb1EEE", !32, i64 0, !34, i64 8}
!49 = !{!50, !13, i64 28}
!50 = !{!"_ZTS12aiMemoryInfo", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28}
!51 = !{!52, !13, i64 16}
!52 = !{!"_ZTS7aiScene", !13, i64 0, !6, i64 8, !13, i64 16, !6, i64 24, !13, i64 32, !6, i64 40, !13, i64 48, !6, i64 56, !13, i64 64, !6, i64 72, !13, i64 80, !6, i64 88, !13, i64 96, !6, i64 104, !6, i64 112, !53, i64 120, !13, i64 1148, !6, i64 1152, !6, i64 1160}
!53 = !{!"_ZTS8aiString", !13, i64 0, !7, i64 4}
!54 = !{!50, !13, i64 8}
!55 = !{!52, !6, i64 24}
!56 = !{!57, !13, i64 4}
!57 = !{!"_ZTS6aiMesh", !13, i64 0, !13, i64 4, !13, 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, !13, i64 216, !6, i64 224, !13, i64 232, !53, i64 236, !13, i64 1264, !6, i64 1272, !58, i64 1280, !59, i64 1284, !6, i64 1312}
!58 = !{!"_ZTS16aiMorphingMethod", !7, i64 0}
!59 = !{!"_ZTS6aiAABB", !60, i64 0, !60, i64 12}
!60 = !{!"_ZTS10aiVector3tIfE", !61, i64 0, !61, i64 4, !61, i64 8}
!61 = !{!"float", !7, i64 0}
!62 = distinct !{!62, !63}
!63 = !{!"llvm.loop.mustprogress"}
!64 = distinct !{!64, !63}
!65 = !{!57, !13, i64 216}
!66 = !{!57, !6, i64 224}
!67 = !{!68, !13, i64 1028}
!68 = !{!"_ZTS6aiBone", !53, i64 0, !13, i64 1028, !6, i64 1032, !6, i64 1040, !6, i64 1048, !69, i64 1056}
!69 = !{!"_ZTS12aiMatrix4x4tIfE", !61, i64 0, !61, i64 4, !61, i64 8, !61, i64 12, !61, i64 16, !61, i64 20, !61, i64 24, !61, i64 28, !61, i64 32, !61, i64 36, !61, i64 40, !61, i64 44, !61, i64 48, !61, i64 52, !61, i64 56, !61, i64 60}
!70 = distinct !{!70, !63}
!71 = !{!57, !13, i64 8}
!72 = distinct !{!72, !63}
!73 = !{!52, !13, i64 64}
!74 = !{!52, !6, i64 72}
!75 = !{!50, !13, i64 0}
!76 = !{!77, !13, i64 4}
!77 = !{!"_ZTS9aiTexture", !13, i64 0, !13, i64 4, !7, i64 8, !6, i64 24, !53, i64 32}
!78 = !{!77, !13, i64 0}
!79 = distinct !{!79, !63}
!80 = !{!52, !13, i64 48}
!81 = !{!52, !6, i64 56}
!82 = !{!50, !13, i64 16}
!83 = !{!84, !13, i64 1048}
!84 = !{!"_ZTS11aiAnimation", !53, i64 0, !85, i64 1032, !85, i64 1040, !13, i64 1048, !6, i64 1056, !13, i64 1064, !6, i64 1072, !13, i64 1080, !6, i64 1088}
!85 = !{!"double", !7, i64 0}
!86 = !{!84, !6, i64 1056}
!87 = !{!88, !13, i64 1028}
!88 = !{!"_ZTS10aiNodeAnim", !53, i64 0, !13, i64 1028, !6, i64 1032, !13, i64 1040, !6, i64 1048, !13, i64 1056, !6, i64 1064, !89, i64 1072, !89, i64 1076}
!89 = !{!"_ZTS15aiAnimBehaviour", !7, i64 0}
!90 = !{!88, !13, i64 1056}
!91 = !{!88, !13, i64 1040}
!92 = distinct !{!92, !63}
!93 = distinct !{!93, !63}
!94 = !{!52, !13, i64 96}
!95 = !{!50, !13, i64 20}
!96 = !{!52, !13, i64 80}
!97 = !{!50, !13, i64 24}
!98 = !{!52, !6, i64 8}
!99 = !{!50, !13, i64 12}
!100 = !{!52, !13, i64 32}
!101 = !{!52, !6, i64 40}
!102 = !{!50, !13, i64 4}
!103 = !{!104, !13, i64 12}
!104 = !{!"_ZTS10aiMaterial", !6, i64 0, !13, i64 8, !13, i64 12}
!105 = !{!104, !13, i64 8}
!106 = !{!104, !6, i64 0}
!107 = !{!108, !13, i64 1036}
!108 = !{!"_ZTS18aiMaterialProperty", !53, i64 0, !13, i64 1028, !13, i64 1032, !13, i64 1036, !109, i64 1040, !6, i64 1048}
!109 = !{!"_ZTS18aiPropertyTypeInfo", !7, i64 0}
!110 = distinct !{!110, !63}
!111 = distinct !{!111, !63}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.aiMemoryInfo = type { i32, i32, i32, i32, i32, i32, i32, i32 }

@.str.1 = external hidden unnamed_addr constant [109 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [17 x i8], align 1

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK6Assimp8Importer21GetMemoryRequirementsER12aiMemoryInfo(ptr nocapture noundef nonnull readonly align 8 dereferenceable(8) %0, ptr noundef nonnull align 4 dereferenceable(32) %1) local_unnamed_addr #3 align 2 {
  %3 = alloca %struct.aiMemoryInfo, align 4
  %4 = load ptr, ptr %0, align 8, !tbaa !5
  %.not = icmp eq ptr %4, null
  br i1 %.not, label %5, label %6

5:                                                ; preds = %2
  tail call void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, i32 noundef 1180)
  br label %6

6:                                                ; preds = %5, %2
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #6
  call void @_ZN12aiMemoryInfoC2Ev(ptr noundef nonnull align 4 dereferenceable(32) %3) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(32) %1, ptr noundef nonnull align 4 dereferenceable(32) %3, i64 32, i1 false), !tbaa.struct !10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #6
  %7 = load ptr, ptr %0, align 8, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %7, i64 80
  %9 = load ptr, ptr %8, align 8, !tbaa !13
  %.not127 = icmp eq ptr %9, null
  br i1 %.not127, label %432, label %10

10:                                               ; preds = %6
  %11 = getelementptr inbounds i8, ptr %1, i64 28
  store i32 1168, ptr %11, align 4, !tbaa !48
  %12 = getelementptr inbounds i8, ptr %9, i64 16
  %13 = load i32, ptr %12, align 8, !tbaa !50
  %.not167 = icmp eq i32 %13, 0
  %.phi.trans.insert238 = getelementptr inbounds i8, ptr %1, i64 8
  br i1 %.not167, label %.._crit_edge_crit_edge, label %.lr.ph133

.._crit_edge_crit_edge:                           ; preds = %10
  %.pre239 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  br label %._crit_edge

.lr.ph133:                                        ; preds = %10
  %14 = getelementptr inbounds i8, ptr %9, i64 24
  %.pre = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %.pre205 = load ptr, ptr %14, align 8, !tbaa !54
  br label %23

._crit_edge.loopexit:                             ; preds = %.loopexit
  %.pre240 = load i32, ptr %11, align 4, !tbaa !48
  br label %._crit_edge

._crit_edge:                                      ; preds = %.._crit_edge_crit_edge, %._crit_edge.loopexit
  %15 = phi i32 [ 1168, %.._crit_edge_crit_edge ], [ %.pre240, %._crit_edge.loopexit ]
  %16 = phi i32 [ %.pre239, %.._crit_edge_crit_edge ], [ %262, %._crit_edge.loopexit ]
  %17 = add i32 %15, %16
  %18 = getelementptr inbounds i8, ptr %9, i64 64
  %19 = load i32, ptr %18, align 8, !tbaa !55
  %.not169 = icmp eq i32 %19, 0
  %.pre241 = load i32, ptr %1, align 4, !tbaa !56
  br i1 %.not169, label %._crit_edge._crit_edge, label %.lr.ph139

.lr.ph139:                                        ; preds = %._crit_edge
  %20 = getelementptr inbounds i8, ptr %9, i64 72
  %21 = load ptr, ptr %20, align 8, !tbaa !57
  %wide.trip.count183 = zext i32 %19 to i64
  %xtraiter259 = and i64 %wide.trip.count183, 1
  %22 = icmp eq i32 %19, 1
  br i1 %22, label %._crit_edge140.unr-lcssa, label %.lr.ph139.new

.lr.ph139.new:                                    ; preds = %.lr.ph139
  %unroll_iter263 = and i64 %wide.trip.count183, 4294967294
  br label %284

23:                                               ; preds = %.lr.ph133, %.loopexit
  %24 = phi ptr [ %.pre205, %.lr.ph133 ], [ %.pre233, %.loopexit ]
  %25 = phi i32 [ %.pre, %.lr.ph133 ], [ %262, %.loopexit ]
  %indvars.iv177 = phi i64 [ 0, %.lr.ph133 ], [ %indvars.iv.next178, %.loopexit ]
  %26 = add i32 %25, 1320
  store i32 %26, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %27 = getelementptr inbounds ptr, ptr %24, i64 %indvars.iv177
  %28 = load ptr, ptr %27, align 8, !tbaa !58
  %29 = call noundef zeroext i1 @_ZNK6aiMesh12HasPositionsEv(ptr noundef nonnull align 8 dereferenceable(1320) %28)
  %.pre206 = load ptr, ptr %14, align 8, !tbaa !54
  %30 = getelementptr inbounds ptr, ptr %.pre206, i64 %indvars.iv177
  %31 = load ptr, ptr %30, align 8, !tbaa !58
  br i1 %29, label %32, label %._crit_edge207

32:                                               ; preds = %23
  %33 = getelementptr inbounds i8, ptr %31, i64 4
  %34 = load i32, ptr %33, align 4, !tbaa !59
  %35 = mul i32 %34, 12
  %36 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %37 = add i32 %35, %36
  store i32 %37, ptr %.phi.trans.insert238, align 4, !tbaa !53
  br label %._crit_edge207

._crit_edge207:                                   ; preds = %23, %32
  %38 = call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %31)
  %.pre209 = load ptr, ptr %14, align 8, !tbaa !54
  %39 = getelementptr inbounds ptr, ptr %.pre209, i64 %indvars.iv177
  %40 = load ptr, ptr %39, align 8, !tbaa !58
  br i1 %38, label %41, label %._crit_edge210

41:                                               ; preds = %._crit_edge207
  %42 = getelementptr inbounds i8, ptr %40, i64 4
  %43 = load i32, ptr %42, align 4, !tbaa !59
  %44 = mul i32 %43, 12
  %45 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %46 = add i32 %44, %45
  store i32 %46, ptr %.phi.trans.insert238, align 4, !tbaa !53
  br label %._crit_edge210

._crit_edge210:                                   ; preds = %._crit_edge207, %41
  %47 = call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %40)
  %.pre213 = load ptr, ptr %14, align 8, !tbaa !54
  %48 = getelementptr inbounds ptr, ptr %.pre213, i64 %indvars.iv177
  %49 = load ptr, ptr %48, align 8, !tbaa !58
  br i1 %47, label %50, label %._crit_edge214

50:                                               ; preds = %._crit_edge210
  %51 = getelementptr inbounds i8, ptr %49, i64 4
  %52 = load i32, ptr %51, align 4, !tbaa !59
  %53 = mul i32 %52, 24
  %54 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %55 = add i32 %53, %54
  store i32 %55, ptr %.phi.trans.insert238, align 4, !tbaa !53
  br label %._crit_edge214

._crit_edge214:                                   ; preds = %._crit_edge210, %50
  %56 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %49, i32 noundef 0)
  %.pre224 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %56, label %57, label %128

57:                                               ; preds = %._crit_edge214
  %58 = getelementptr inbounds ptr, ptr %.pre224, i64 %indvars.iv177
  %59 = load ptr, ptr %58, align 8, !tbaa !58
  %60 = getelementptr inbounds i8, ptr %59, i64 4
  %61 = load i32, ptr %60, align 4, !tbaa !59
  %62 = shl i32 %61, 4
  %63 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %64 = add i32 %62, %63
  store i32 %64, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %65 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %59, i32 noundef 1)
  %.pre223 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %65, label %66, label %128

66:                                               ; preds = %57
  %67 = getelementptr inbounds ptr, ptr %.pre223, i64 %indvars.iv177
  %68 = load ptr, ptr %67, align 8, !tbaa !58
  %69 = getelementptr inbounds i8, ptr %68, i64 4
  %70 = load i32, ptr %69, align 4, !tbaa !59
  %71 = shl i32 %70, 4
  %72 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %73 = add i32 %71, %72
  store i32 %73, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %74 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %68, i32 noundef 2)
  %.pre222 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %74, label %75, label %128

75:                                               ; preds = %66
  %76 = getelementptr inbounds ptr, ptr %.pre222, i64 %indvars.iv177
  %77 = load ptr, ptr %76, align 8, !tbaa !58
  %78 = getelementptr inbounds i8, ptr %77, i64 4
  %79 = load i32, ptr %78, align 4, !tbaa !59
  %80 = shl i32 %79, 4
  %81 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %82 = add i32 %80, %81
  store i32 %82, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %83 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %77, i32 noundef 3)
  %.pre221 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %83, label %84, label %128

84:                                               ; preds = %75
  %85 = getelementptr inbounds ptr, ptr %.pre221, i64 %indvars.iv177
  %86 = load ptr, ptr %85, align 8, !tbaa !58
  %87 = getelementptr inbounds i8, ptr %86, i64 4
  %88 = load i32, ptr %87, align 4, !tbaa !59
  %89 = shl i32 %88, 4
  %90 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %91 = add i32 %89, %90
  store i32 %91, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %92 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %86, i32 noundef 4)
  %.pre220 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %92, label %93, label %128

93:                                               ; preds = %84
  %94 = getelementptr inbounds ptr, ptr %.pre220, i64 %indvars.iv177
  %95 = load ptr, ptr %94, align 8, !tbaa !58
  %96 = getelementptr inbounds i8, ptr %95, i64 4
  %97 = load i32, ptr %96, align 4, !tbaa !59
  %98 = shl i32 %97, 4
  %99 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %100 = add i32 %98, %99
  store i32 %100, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %101 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %95, i32 noundef 5)
  %.pre219 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %101, label %102, label %128

102:                                              ; preds = %93
  %103 = getelementptr inbounds ptr, ptr %.pre219, i64 %indvars.iv177
  %104 = load ptr, ptr %103, align 8, !tbaa !58
  %105 = getelementptr inbounds i8, ptr %104, i64 4
  %106 = load i32, ptr %105, align 4, !tbaa !59
  %107 = shl i32 %106, 4
  %108 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %109 = add i32 %107, %108
  store i32 %109, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %110 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %104, i32 noundef 6)
  %.pre218 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %110, label %111, label %128

111:                                              ; preds = %102
  %112 = getelementptr inbounds ptr, ptr %.pre218, i64 %indvars.iv177
  %113 = load ptr, ptr %112, align 8, !tbaa !58
  %114 = getelementptr inbounds i8, ptr %113, i64 4
  %115 = load i32, ptr %114, align 4, !tbaa !59
  %116 = shl i32 %115, 4
  %117 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %118 = add i32 %116, %117
  store i32 %118, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %119 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %113, i32 noundef 7)
  %.pre217 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %119, label %120, label %128

120:                                              ; preds = %111
  %121 = getelementptr inbounds ptr, ptr %.pre217, i64 %indvars.iv177
  %122 = load ptr, ptr %121, align 8, !tbaa !58
  %123 = getelementptr inbounds i8, ptr %122, i64 4
  %124 = load i32, ptr %123, align 4, !tbaa !59
  %125 = shl i32 %124, 4
  %126 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %127 = add i32 %125, %126
  store i32 %127, ptr %.phi.trans.insert238, align 4, !tbaa !53
  br label %128

128:                                              ; preds = %120, %111, %102, %93, %84, %75, %66, %57, %._crit_edge214
  %129 = phi ptr [ %.pre217, %120 ], [ %.pre217, %111 ], [ %.pre218, %102 ], [ %.pre219, %93 ], [ %.pre220, %84 ], [ %.pre221, %75 ], [ %.pre222, %66 ], [ %.pre223, %57 ], [ %.pre224, %._crit_edge214 ]
  %130 = getelementptr inbounds ptr, ptr %129, i64 %indvars.iv177
  %131 = load ptr, ptr %130, align 8, !tbaa !58
  %132 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %131, i32 noundef 0)
  %.pre232 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %132, label %133, label %204

133:                                              ; preds = %128
  %134 = getelementptr inbounds ptr, ptr %.pre232, i64 %indvars.iv177
  %135 = load ptr, ptr %134, align 8, !tbaa !58
  %136 = getelementptr inbounds i8, ptr %135, i64 4
  %137 = load i32, ptr %136, align 4, !tbaa !59
  %138 = mul i32 %137, 12
  %139 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %140 = add i32 %138, %139
  store i32 %140, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %141 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %135, i32 noundef 1)
  %.pre231 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %141, label %142, label %204

142:                                              ; preds = %133
  %143 = getelementptr inbounds ptr, ptr %.pre231, i64 %indvars.iv177
  %144 = load ptr, ptr %143, align 8, !tbaa !58
  %145 = getelementptr inbounds i8, ptr %144, i64 4
  %146 = load i32, ptr %145, align 4, !tbaa !59
  %147 = mul i32 %146, 12
  %148 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %149 = add i32 %147, %148
  store i32 %149, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %150 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %144, i32 noundef 2)
  %.pre230 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %150, label %151, label %204

151:                                              ; preds = %142
  %152 = getelementptr inbounds ptr, ptr %.pre230, i64 %indvars.iv177
  %153 = load ptr, ptr %152, align 8, !tbaa !58
  %154 = getelementptr inbounds i8, ptr %153, i64 4
  %155 = load i32, ptr %154, align 4, !tbaa !59
  %156 = mul i32 %155, 12
  %157 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %158 = add i32 %156, %157
  store i32 %158, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %159 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %153, i32 noundef 3)
  %.pre229 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %159, label %160, label %204

160:                                              ; preds = %151
  %161 = getelementptr inbounds ptr, ptr %.pre229, i64 %indvars.iv177
  %162 = load ptr, ptr %161, align 8, !tbaa !58
  %163 = getelementptr inbounds i8, ptr %162, i64 4
  %164 = load i32, ptr %163, align 4, !tbaa !59
  %165 = mul i32 %164, 12
  %166 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %167 = add i32 %165, %166
  store i32 %167, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %168 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %162, i32 noundef 4)
  %.pre228 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %168, label %169, label %204

169:                                              ; preds = %160
  %170 = getelementptr inbounds ptr, ptr %.pre228, i64 %indvars.iv177
  %171 = load ptr, ptr %170, align 8, !tbaa !58
  %172 = getelementptr inbounds i8, ptr %171, i64 4
  %173 = load i32, ptr %172, align 4, !tbaa !59
  %174 = mul i32 %173, 12
  %175 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %176 = add i32 %174, %175
  store i32 %176, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %177 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %171, i32 noundef 5)
  %.pre227 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %177, label %178, label %204

178:                                              ; preds = %169
  %179 = getelementptr inbounds ptr, ptr %.pre227, i64 %indvars.iv177
  %180 = load ptr, ptr %179, align 8, !tbaa !58
  %181 = getelementptr inbounds i8, ptr %180, i64 4
  %182 = load i32, ptr %181, align 4, !tbaa !59
  %183 = mul i32 %182, 12
  %184 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %185 = add i32 %183, %184
  store i32 %185, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %186 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %180, i32 noundef 6)
  %.pre226 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %186, label %187, label %204

187:                                              ; preds = %178
  %188 = getelementptr inbounds ptr, ptr %.pre226, i64 %indvars.iv177
  %189 = load ptr, ptr %188, align 8, !tbaa !58
  %190 = getelementptr inbounds i8, ptr %189, i64 4
  %191 = load i32, ptr %190, align 4, !tbaa !59
  %192 = mul i32 %191, 12
  %193 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %194 = add i32 %192, %193
  store i32 %194, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %195 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %189, i32 noundef 7)
  %.pre225 = load ptr, ptr %14, align 8, !tbaa !54
  br i1 %195, label %196, label %204

196:                                              ; preds = %187
  %197 = getelementptr inbounds ptr, ptr %.pre225, i64 %indvars.iv177
  %198 = load ptr, ptr %197, align 8, !tbaa !58
  %199 = getelementptr inbounds i8, ptr %198, i64 4
  %200 = load i32, ptr %199, align 4, !tbaa !59
  %201 = mul i32 %200, 12
  %202 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %203 = add i32 %201, %202
  store i32 %203, ptr %.phi.trans.insert238, align 4, !tbaa !53
  br label %204

204:                                              ; preds = %196, %187, %178, %169, %160, %151, %142, %133, %128
  %205 = phi ptr [ %.pre225, %196 ], [ %.pre225, %187 ], [ %.pre226, %178 ], [ %.pre227, %169 ], [ %.pre228, %160 ], [ %.pre229, %151 ], [ %.pre230, %142 ], [ %.pre231, %133 ], [ %.pre232, %128 ]
  %206 = getelementptr inbounds ptr, ptr %205, i64 %indvars.iv177
  %207 = load ptr, ptr %206, align 8, !tbaa !58
  %208 = call noundef zeroext i1 @_ZNK6aiMesh8HasBonesEv(ptr noundef nonnull align 8 dereferenceable(1320) %207)
  %.pre233 = load ptr, ptr %14, align 8, !tbaa !54
  %209 = getelementptr inbounds ptr, ptr %.pre233, i64 %indvars.iv177
  %210 = load ptr, ptr %209, align 8, !tbaa !58
  br i1 %208, label %211, label %..loopexit_crit_edge234

..loopexit_crit_edge234:                          ; preds = %204
  %.pre237 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  br label %.loopexit

211:                                              ; preds = %204
  %212 = getelementptr inbounds i8, ptr %210, i64 216
  %213 = load i32, ptr %212, align 8, !tbaa !65
  %214 = shl i32 %213, 3
  %215 = load i32, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %216 = add i32 %214, %215
  %.not168 = icmp eq i32 %213, 0
  br i1 %.not168, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %211
  %217 = getelementptr inbounds i8, ptr %210, i64 224
  %218 = load ptr, ptr %217, align 8, !tbaa !66
  %wide.trip.count = zext i32 %213 to i64
  %xtraiter = and i64 %wide.trip.count, 3
  %219 = icmp ult i32 %213, 4
  br i1 %219, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %wide.trip.count, 4294967292
  br label %220

220:                                              ; preds = %220, %.lr.ph.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.new ], [ %indvars.iv.next.3, %220 ]
  %221 = phi i32 [ %216, %.lr.ph.new ], [ %249, %220 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %220 ]
  %222 = add i32 %221, 1120
  %223 = getelementptr inbounds ptr, ptr %218, i64 %indvars.iv
  %224 = load ptr, ptr %223, align 8, !tbaa !58
  %225 = getelementptr inbounds i8, ptr %224, i64 1028
  %226 = load i32, ptr %225, align 4, !tbaa !67
  %227 = shl i32 %226, 3
  %228 = add i32 %227, %222
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %229 = add i32 %228, 1120
  %230 = getelementptr inbounds ptr, ptr %218, i64 %indvars.iv.next
  %231 = load ptr, ptr %230, align 8, !tbaa !58
  %232 = getelementptr inbounds i8, ptr %231, i64 1028
  %233 = load i32, ptr %232, align 4, !tbaa !67
  %234 = shl i32 %233, 3
  %235 = add i32 %234, %229
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 2
  %236 = add i32 %235, 1120
  %237 = getelementptr inbounds ptr, ptr %218, i64 %indvars.iv.next.1
  %238 = load ptr, ptr %237, align 8, !tbaa !58
  %239 = getelementptr inbounds i8, ptr %238, i64 1028
  %240 = load i32, ptr %239, align 4, !tbaa !67
  %241 = shl i32 %240, 3
  %242 = add i32 %241, %236
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 3
  %243 = add i32 %242, 1120
  %244 = getelementptr inbounds ptr, ptr %218, i64 %indvars.iv.next.2
  %245 = load ptr, ptr %244, align 8, !tbaa !58
  %246 = getelementptr inbounds i8, ptr %245, i64 1028
  %247 = load i32, ptr %246, align 4, !tbaa !67
  %248 = shl i32 %247, 3
  %249 = add i32 %248, %243
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.loopexit.loopexit.unr-lcssa, label %220, !llvm.loop !70

.loopexit.loopexit.unr-lcssa:                     ; preds = %220, %.lr.ph
  %.lcssa255.ph = phi i32 [ poison, %.lr.ph ], [ %249, %220 ]
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next.3, %220 ]
  %.unr = phi i32 [ %216, %.lr.ph ], [ %249, %220 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit, label %.epil.preheader

.epil.preheader:                                  ; preds = %.loopexit.loopexit.unr-lcssa, %.epil.preheader
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.epil.preheader ], [ %indvars.iv.unr, %.loopexit.loopexit.unr-lcssa ]
  %250 = phi i32 [ %257, %.epil.preheader ], [ %.unr, %.loopexit.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.loopexit.loopexit.unr-lcssa ]
  %251 = add i32 %250, 1120
  %252 = getelementptr inbounds ptr, ptr %218, i64 %indvars.iv.epil
  %253 = load ptr, ptr %252, align 8, !tbaa !58
  %254 = getelementptr inbounds i8, ptr %253, i64 1028
  %255 = load i32, ptr %254, align 4, !tbaa !67
  %256 = shl i32 %255, 3
  %257 = add i32 %256, %251
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.loopexit, label %.epil.preheader, !llvm.loop !72

.loopexit:                                        ; preds = %.loopexit.loopexit.unr-lcssa, %.epil.preheader, %..loopexit_crit_edge234, %211
  %258 = phi i32 [ %.pre237, %..loopexit_crit_edge234 ], [ %216, %211 ], [ %.lcssa255.ph, %.loopexit.loopexit.unr-lcssa ], [ %257, %.epil.preheader ]
  %259 = getelementptr inbounds i8, ptr %210, i64 8
  %260 = load i32, ptr %259, align 8, !tbaa !74
  %261 = mul i32 %260, 28
  %262 = add i32 %261, %258
  store i32 %262, ptr %.phi.trans.insert238, align 4, !tbaa !53
  %indvars.iv.next178 = add nuw nsw i64 %indvars.iv177, 1
  %263 = load i32, ptr %12, align 8, !tbaa !50
  %264 = zext i32 %263 to i64
  %265 = icmp ult i64 %indvars.iv.next178, %264
  br i1 %265, label %23, label %._crit_edge.loopexit, !llvm.loop !75

._crit_edge140.unr-lcssa:                         ; preds = %308, %.lr.ph139
  %storemerge.lcssa.ph = phi i32 [ poison, %.lr.ph139 ], [ %storemerge.1, %308 ]
  %indvars.iv180.unr = phi i64 [ 0, %.lr.ph139 ], [ %indvars.iv.next181.1, %308 ]
  %storemerge135136.unr = phi i32 [ %.pre241, %.lr.ph139 ], [ %storemerge.1, %308 ]
  %lcmp.mod261.not = icmp eq i64 %xtraiter259, 0
  br i1 %lcmp.mod261.not, label %._crit_edge140, label %.epil.preheader258

.epil.preheader258:                               ; preds = %._crit_edge140.unr-lcssa
  %266 = getelementptr inbounds ptr, ptr %21, i64 %indvars.iv180.unr
  %267 = load ptr, ptr %266, align 8, !tbaa !58
  %268 = add i32 %storemerge135136.unr, 1064
  %269 = getelementptr inbounds i8, ptr %267, i64 4
  %270 = load i32, ptr %269, align 4, !tbaa !76
  %.not128.epil = icmp eq i32 %270, 0
  br i1 %.not128.epil, label %275, label %271

271:                                              ; preds = %.epil.preheader258
  %272 = shl i32 %270, 2
  %273 = load i32, ptr %267, align 8, !tbaa !78
  %274 = mul i32 %272, %273
  br label %._crit_edge140.epilog-lcssa

275:                                              ; preds = %.epil.preheader258
  %276 = load i32, ptr %267, align 8, !tbaa !78
  br label %._crit_edge140.epilog-lcssa

._crit_edge140.epilog-lcssa:                      ; preds = %275, %271
  %.pn.epil = phi i32 [ %276, %275 ], [ %274, %271 ]
  %storemerge.epil = add i32 %.pn.epil, %268
  br label %._crit_edge140

._crit_edge140:                                   ; preds = %._crit_edge140.unr-lcssa, %._crit_edge140.epilog-lcssa
  %storemerge.lcssa = phi i32 [ %storemerge.lcssa.ph, %._crit_edge140.unr-lcssa ], [ %storemerge.epil, %._crit_edge140.epilog-lcssa ]
  store i32 %storemerge.lcssa, ptr %1, align 4, !tbaa !56
  br label %._crit_edge._crit_edge

._crit_edge._crit_edge:                           ; preds = %._crit_edge, %._crit_edge140
  %277 = phi i32 [ %storemerge.lcssa, %._crit_edge140 ], [ %.pre241, %._crit_edge ]
  %278 = add i32 %277, %17
  %279 = getelementptr inbounds i8, ptr %9, i64 48
  %280 = load i32, ptr %279, align 8, !tbaa !79
  %.not170 = icmp eq i32 %280, 0
  br i1 %.not170, label %._crit_edge242, label %.lr.ph149

._crit_edge242:                                   ; preds = %._crit_edge._crit_edge
  %.phi.trans.insert243 = getelementptr inbounds i8, ptr %1, i64 16
  %.pre244 = load i32, ptr %.phi.trans.insert243, align 4, !tbaa !80
  br label %309

.lr.ph149:                                        ; preds = %._crit_edge._crit_edge
  %281 = getelementptr inbounds i8, ptr %9, i64 56
  %282 = load ptr, ptr %281, align 8, !tbaa !81
  %283 = getelementptr inbounds i8, ptr %1, i64 16
  %.promoted151 = load i32, ptr %283, align 4, !tbaa !80
  %wide.trip.count193 = zext i32 %280 to i64
  br label %333

284:                                              ; preds = %308, %.lr.ph139.new
  %indvars.iv180 = phi i64 [ 0, %.lr.ph139.new ], [ %indvars.iv.next181.1, %308 ]
  %storemerge135136 = phi i32 [ %.pre241, %.lr.ph139.new ], [ %storemerge.1, %308 ]
  %niter264 = phi i64 [ 0, %.lr.ph139.new ], [ %niter264.next.1, %308 ]
  %285 = getelementptr inbounds ptr, ptr %21, i64 %indvars.iv180
  %286 = load ptr, ptr %285, align 8, !tbaa !58
  %287 = add i32 %storemerge135136, 1064
  %288 = getelementptr inbounds i8, ptr %286, i64 4
  %289 = load i32, ptr %288, align 4, !tbaa !76
  %.not128 = icmp eq i32 %289, 0
  br i1 %.not128, label %294, label %290

290:                                              ; preds = %284
  %291 = shl i32 %289, 2
  %292 = load i32, ptr %286, align 8, !tbaa !78
  %293 = mul i32 %291, %292
  br label %296

294:                                              ; preds = %284
  %295 = load i32, ptr %286, align 8, !tbaa !78
  br label %296

296:                                              ; preds = %294, %290
  %.pn = phi i32 [ %295, %294 ], [ %293, %290 ]
  %storemerge = add i32 %.pn, %287
  %indvars.iv.next181 = or disjoint i64 %indvars.iv180, 1
  %297 = getelementptr inbounds ptr, ptr %21, i64 %indvars.iv.next181
  %298 = load ptr, ptr %297, align 8, !tbaa !58
  %299 = add i32 %storemerge, 1064
  %300 = getelementptr inbounds i8, ptr %298, i64 4
  %301 = load i32, ptr %300, align 4, !tbaa !76
  %.not128.1 = icmp eq i32 %301, 0
  br i1 %.not128.1, label %306, label %302

302:                                              ; preds = %296
  %303 = shl i32 %301, 2
  %304 = load i32, ptr %298, align 8, !tbaa !78
  %305 = mul i32 %303, %304
  br label %308

306:                                              ; preds = %296
  %307 = load i32, ptr %298, align 8, !tbaa !78
  br label %308

308:                                              ; preds = %306, %302
  %.pn.1 = phi i32 [ %307, %306 ], [ %305, %302 ]
  %storemerge.1 = add i32 %.pn.1, %299
  %indvars.iv.next181.1 = add nuw nsw i64 %indvars.iv180, 2
  %niter264.next.1 = add i64 %niter264, 2
  %niter264.ncmp.1 = icmp eq i64 %niter264.next.1, %unroll_iter263
  br i1 %niter264.ncmp.1, label %._crit_edge140.unr-lcssa, label %284, !llvm.loop !82

._crit_edge150:                                   ; preds = %._crit_edge145
  store i32 %.lcssa146152, ptr %283, align 4, !tbaa !80
  br label %309

309:                                              ; preds = %._crit_edge242, %._crit_edge150
  %310 = phi i32 [ %.pre244, %._crit_edge242 ], [ %.lcssa146152, %._crit_edge150 ]
  %311 = add i32 %310, %278
  %312 = getelementptr inbounds i8, ptr %9, i64 96
  %313 = load i32, ptr %312, align 8, !tbaa !83
  %314 = mul i32 %313, 1084
  %315 = getelementptr inbounds i8, ptr %1, i64 20
  store i32 %314, ptr %315, align 4, !tbaa !84
  %316 = add i32 %314, %311
  %317 = getelementptr inbounds i8, ptr %9, i64 80
  %318 = load i32, ptr %317, align 8, !tbaa !85
  %319 = mul i32 %318, 1132
  %320 = getelementptr inbounds i8, ptr %1, i64 24
  store i32 %319, ptr %320, align 4, !tbaa !86
  %321 = add i32 %319, %316
  store i32 %321, ptr %11, align 4, !tbaa !48
  %322 = getelementptr inbounds i8, ptr %1, i64 12
  %323 = getelementptr inbounds i8, ptr %9, i64 8
  %324 = load ptr, ptr %323, align 8, !tbaa !87
  call void @_Z13AddNodeWeightRjPK6aiNode(ptr noundef nonnull align 4 dereferenceable(4) %322, ptr noundef %324)
  %325 = load i32, ptr %322, align 4, !tbaa !88
  %326 = load i32, ptr %11, align 4, !tbaa !48
  %327 = add i32 %326, %325
  %328 = getelementptr inbounds i8, ptr %9, i64 32
  %329 = load i32, ptr %328, align 8, !tbaa !89
  %.not172 = icmp eq i32 %329, 0
  br i1 %.not172, label %._crit_edge245, label %.lr.ph162

._crit_edge245:                                   ; preds = %309
  %.phi.trans.insert246 = getelementptr inbounds i8, ptr %1, i64 4
  %.pre247 = load i32, ptr %.phi.trans.insert246, align 4, !tbaa !90
  br label %389

.lr.ph162:                                        ; preds = %309
  %330 = getelementptr inbounds i8, ptr %9, i64 40
  %331 = load ptr, ptr %330, align 8, !tbaa !91
  %332 = getelementptr inbounds i8, ptr %1, i64 4
  %.promoted164 = load i32, ptr %332, align 4, !tbaa !90
  %wide.trip.count203 = zext i32 %329 to i64
  br label %392

333:                                              ; preds = %.lr.ph149, %._crit_edge145
  %indvars.iv190 = phi i64 [ 0, %.lr.ph149 ], [ %indvars.iv.next191, %._crit_edge145 ]
  %.lcssa146153 = phi i32 [ %.promoted151, %.lr.ph149 ], [ %.lcssa146152, %._crit_edge145 ]
  %334 = getelementptr inbounds ptr, ptr %282, i64 %indvars.iv190
  %335 = load ptr, ptr %334, align 8, !tbaa !58
  %336 = add i32 %.lcssa146153, 1096
  %337 = getelementptr inbounds i8, ptr %335, i64 1048
  %338 = load i32, ptr %337, align 8, !tbaa !92
  %.not171 = icmp eq i32 %338, 0
  br i1 %.not171, label %._crit_edge145, label %.lr.ph144

.lr.ph144:                                        ; preds = %333
  %339 = getelementptr inbounds i8, ptr %335, i64 1056
  %340 = load ptr, ptr %339, align 8, !tbaa !95
  %wide.trip.count188 = zext i32 %338 to i64
  %xtraiter266 = and i64 %wide.trip.count188, 1
  %341 = icmp eq i32 %338, 1
  br i1 %341, label %._crit_edge145.loopexit.unr-lcssa, label %.lr.ph144.new

.lr.ph144.new:                                    ; preds = %.lr.ph144
  %unroll_iter271 = and i64 %wide.trip.count188, 4294967294
  br label %357

._crit_edge145.loopexit.unr-lcssa:                ; preds = %357, %.lr.ph144
  %.lcssa254.ph = phi i32 [ poison, %.lr.ph144 ], [ %388, %357 ]
  %indvars.iv185.unr = phi i64 [ 0, %.lr.ph144 ], [ %indvars.iv.next186.1, %357 ]
  %.unr268 = phi i32 [ %336, %.lr.ph144 ], [ %388, %357 ]
  %lcmp.mod269.not = icmp eq i64 %xtraiter266, 0
  br i1 %lcmp.mod269.not, label %._crit_edge145, label %._crit_edge145.loopexit.epilog-lcssa

._crit_edge145.loopexit.epilog-lcssa:             ; preds = %._crit_edge145.loopexit.unr-lcssa
  %342 = getelementptr inbounds ptr, ptr %340, i64 %indvars.iv185.unr
  %343 = load ptr, ptr %342, align 8, !tbaa !58
  %344 = add i32 %.unr268, 1080
  %345 = getelementptr inbounds i8, ptr %343, i64 1028
  %346 = load i32, ptr %345, align 4, !tbaa !96
  %347 = mul i32 %346, 24
  %348 = add i32 %347, %344
  %349 = getelementptr inbounds i8, ptr %343, i64 1056
  %350 = load i32, ptr %349, align 8, !tbaa !99
  %351 = mul i32 %350, 24
  %352 = add i32 %351, %348
  %353 = getelementptr inbounds i8, ptr %343, i64 1040
  %354 = load i32, ptr %353, align 8, !tbaa !100
  %355 = shl i32 %354, 5
  %356 = add i32 %355, %352
  br label %._crit_edge145

._crit_edge145:                                   ; preds = %._crit_edge145.loopexit.epilog-lcssa, %._crit_edge145.loopexit.unr-lcssa, %333
  %.lcssa146152 = phi i32 [ %336, %333 ], [ %.lcssa254.ph, %._crit_edge145.loopexit.unr-lcssa ], [ %356, %._crit_edge145.loopexit.epilog-lcssa ]
  %indvars.iv.next191 = add nuw nsw i64 %indvars.iv190, 1
  %exitcond194.not = icmp eq i64 %indvars.iv.next191, %wide.trip.count193
  br i1 %exitcond194.not, label %._crit_edge150, label %333, !llvm.loop !101

357:                                              ; preds = %357, %.lr.ph144.new
  %indvars.iv185 = phi i64 [ 0, %.lr.ph144.new ], [ %indvars.iv.next186.1, %357 ]
  %358 = phi i32 [ %336, %.lr.ph144.new ], [ %388, %357 ]
  %niter272 = phi i64 [ 0, %.lr.ph144.new ], [ %niter272.next.1, %357 ]
  %359 = getelementptr inbounds ptr, ptr %340, i64 %indvars.iv185
  %360 = load ptr, ptr %359, align 8, !tbaa !58
  %361 = add i32 %358, 1080
  %362 = getelementptr inbounds i8, ptr %360, i64 1028
  %363 = load i32, ptr %362, align 4, !tbaa !96
  %364 = mul i32 %363, 24
  %365 = add i32 %364, %361
  %366 = getelementptr inbounds i8, ptr %360, i64 1056
  %367 = load i32, ptr %366, align 8, !tbaa !99
  %368 = mul i32 %367, 24
  %369 = add i32 %368, %365
  %370 = getelementptr inbounds i8, ptr %360, i64 1040
  %371 = load i32, ptr %370, align 8, !tbaa !100
  %372 = shl i32 %371, 5
  %373 = add i32 %372, %369
  %indvars.iv.next186 = or disjoint i64 %indvars.iv185, 1
  %374 = getelementptr inbounds ptr, ptr %340, i64 %indvars.iv.next186
  %375 = load ptr, ptr %374, align 8, !tbaa !58
  %376 = add i32 %373, 1080
  %377 = getelementptr inbounds i8, ptr %375, i64 1028
  %378 = load i32, ptr %377, align 4, !tbaa !96
  %379 = mul i32 %378, 24
  %380 = add i32 %379, %376
  %381 = getelementptr inbounds i8, ptr %375, i64 1056
  %382 = load i32, ptr %381, align 8, !tbaa !99
  %383 = mul i32 %382, 24
  %384 = add i32 %383, %380
  %385 = getelementptr inbounds i8, ptr %375, i64 1040
  %386 = load i32, ptr %385, align 8, !tbaa !100
  %387 = shl i32 %386, 5
  %388 = add i32 %387, %384
  %indvars.iv.next186.1 = add nuw nsw i64 %indvars.iv185, 2
  %niter272.next.1 = add i64 %niter272, 2
  %niter272.ncmp.1 = icmp eq i64 %niter272.next.1, %unroll_iter271
  br i1 %niter272.ncmp.1, label %._crit_edge145.loopexit.unr-lcssa, label %357, !llvm.loop !102

._crit_edge163:                                   ; preds = %._crit_edge158
  store i32 %.lcssa159165, ptr %332, align 4, !tbaa !90
  br label %389

389:                                              ; preds = %._crit_edge245, %._crit_edge163
  %390 = phi i32 [ %.pre247, %._crit_edge245 ], [ %.lcssa159165, %._crit_edge163 ]
  %391 = add i32 %390, %327
  store i32 %391, ptr %11, align 4, !tbaa !48
  br label %432

392:                                              ; preds = %.lr.ph162, %._crit_edge158
  %indvars.iv200 = phi i64 [ 0, %.lr.ph162 ], [ %indvars.iv.next201, %._crit_edge158 ]
  %.lcssa159166 = phi i32 [ %.promoted164, %.lr.ph162 ], [ %.lcssa159165, %._crit_edge158 ]
  %393 = getelementptr inbounds ptr, ptr %331, i64 %indvars.iv200
  %394 = load ptr, ptr %393, align 8, !tbaa !58
  %395 = add i32 %.lcssa159166, 16
  %396 = getelementptr inbounds i8, ptr %394, i64 12
  %397 = load i32, ptr %396, align 4, !tbaa !103
  %398 = shl i32 %397, 3
  %399 = add i32 %398, %395
  %400 = getelementptr inbounds i8, ptr %394, i64 8
  %401 = load i32, ptr %400, align 8, !tbaa !105
  %.not173 = icmp eq i32 %401, 0
  br i1 %.not173, label %._crit_edge158, label %.lr.ph157

.lr.ph157:                                        ; preds = %392
  %402 = load ptr, ptr %394, align 8, !tbaa !106
  %wide.trip.count198 = zext i32 %401 to i64
  %xtraiter274 = and i64 %wide.trip.count198, 3
  %403 = icmp ult i32 %401, 4
  br i1 %403, label %._crit_edge158.loopexit.unr-lcssa, label %.lr.ph157.new

.lr.ph157.new:                                    ; preds = %.lr.ph157
  %unroll_iter279 = and i64 %wide.trip.count198, 4294967292
  br label %410

._crit_edge158.loopexit.unr-lcssa:                ; preds = %410, %.lr.ph157
  %.lcssa.ph = phi i32 [ poison, %.lr.ph157 ], [ %431, %410 ]
  %indvars.iv195.unr = phi i64 [ 0, %.lr.ph157 ], [ %indvars.iv.next196.3, %410 ]
  %.unr276 = phi i32 [ %399, %.lr.ph157 ], [ %431, %410 ]
  %lcmp.mod277.not = icmp eq i64 %xtraiter274, 0
  br i1 %lcmp.mod277.not, label %._crit_edge158, label %.epil.preheader273

.epil.preheader273:                               ; preds = %._crit_edge158.loopexit.unr-lcssa, %.epil.preheader273
  %indvars.iv195.epil = phi i64 [ %indvars.iv.next196.epil, %.epil.preheader273 ], [ %indvars.iv195.unr, %._crit_edge158.loopexit.unr-lcssa ]
  %404 = phi i32 [ %409, %.epil.preheader273 ], [ %.unr276, %._crit_edge158.loopexit.unr-lcssa ]
  %epil.iter275 = phi i64 [ %epil.iter275.next, %.epil.preheader273 ], [ 0, %._crit_edge158.loopexit.unr-lcssa ]
  %405 = getelementptr inbounds ptr, ptr %402, i64 %indvars.iv195.epil
  %406 = load ptr, ptr %405, align 8, !tbaa !58
  %407 = getelementptr inbounds i8, ptr %406, i64 1036
  %408 = load i32, ptr %407, align 4, !tbaa !107
  %409 = add i32 %404, %408
  %indvars.iv.next196.epil = add nuw nsw i64 %indvars.iv195.epil, 1
  %epil.iter275.next = add i64 %epil.iter275, 1
  %epil.iter275.cmp.not = icmp eq i64 %epil.iter275.next, %xtraiter274
  br i1 %epil.iter275.cmp.not, label %._crit_edge158, label %.epil.preheader273, !llvm.loop !110

._crit_edge158:                                   ; preds = %._crit_edge158.loopexit.unr-lcssa, %.epil.preheader273, %392
  %.lcssa159165 = phi i32 [ %399, %392 ], [ %.lcssa.ph, %._crit_edge158.loopexit.unr-lcssa ], [ %409, %.epil.preheader273 ]
  %indvars.iv.next201 = add nuw nsw i64 %indvars.iv200, 1
  %exitcond204.not = icmp eq i64 %indvars.iv.next201, %wide.trip.count203
  br i1 %exitcond204.not, label %._crit_edge163, label %392, !llvm.loop !111

410:                                              ; preds = %410, %.lr.ph157.new
  %indvars.iv195 = phi i64 [ 0, %.lr.ph157.new ], [ %indvars.iv.next196.3, %410 ]
  %411 = phi i32 [ %399, %.lr.ph157.new ], [ %431, %410 ]
  %niter280 = phi i64 [ 0, %.lr.ph157.new ], [ %niter280.next.3, %410 ]
  %412 = getelementptr inbounds ptr, ptr %402, i64 %indvars.iv195
  %413 = load ptr, ptr %412, align 8, !tbaa !58
  %414 = getelementptr inbounds i8, ptr %413, i64 1036
  %415 = load i32, ptr %414, align 4, !tbaa !107
  %416 = add i32 %411, %415
  %indvars.iv.next196 = or disjoint i64 %indvars.iv195, 1
  %417 = getelementptr inbounds ptr, ptr %402, i64 %indvars.iv.next196
  %418 = load ptr, ptr %417, align 8, !tbaa !58
  %419 = getelementptr inbounds i8, ptr %418, i64 1036
  %420 = load i32, ptr %419, align 4, !tbaa !107
  %421 = add i32 %416, %420
  %indvars.iv.next196.1 = or disjoint i64 %indvars.iv195, 2
  %422 = getelementptr inbounds ptr, ptr %402, i64 %indvars.iv.next196.1
  %423 = load ptr, ptr %422, align 8, !tbaa !58
  %424 = getelementptr inbounds i8, ptr %423, i64 1036
  %425 = load i32, ptr %424, align 4, !tbaa !107
  %426 = add i32 %421, %425
  %indvars.iv.next196.2 = or disjoint i64 %indvars.iv195, 3
  %427 = getelementptr inbounds ptr, ptr %402, i64 %indvars.iv.next196.2
  %428 = load ptr, ptr %427, align 8, !tbaa !58
  %429 = getelementptr inbounds i8, ptr %428, i64 1036
  %430 = load i32, ptr %429, align 4, !tbaa !107
  %431 = add i32 %426, %430
  %indvars.iv.next196.3 = add nuw nsw i64 %indvars.iv195, 4
  %niter280.next.3 = add i64 %niter280, 4
  %niter280.ncmp.3 = icmp eq i64 %niter280.next.3, %unroll_iter279
  br i1 %niter280.ncmp.3, label %._crit_edge158.loopexit.unr-lcssa, label %410, !llvm.loop !112

432:                                              ; preds = %6, %389
  ret void
}

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320)) local_unnamed_addr #4 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 #4 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 #4 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z13AddNodeWeightRjPK6aiNode(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef) local_unnamed_addr #5

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "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 nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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, !7, i64 0}
!6 = !{!"_ZTSN6Assimp8ImporterE", !7, i64 0}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{i64 0, i64 4, !11, i64 4, i64 4, !11, i64 8, i64 4, !11, i64 12, i64 4, !11, i64 16, i64 4, !11, i64 20, i64 4, !11, i64 24, i64 4, !11, i64 28, i64 4, !11}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !8, i64 0}
!13 = !{!14, !7, i64 80}
!14 = !{!"_ZTSN6Assimp13ImporterPimplE", !7, i64 0, !15, i64 8, !7, i64 16, !15, i64 24, !16, i64 32, !20, i64 56, !7, i64 80, !24, i64 88, !27, i64 120, !28, i64 128, !36, i64 176, !39, i64 224, !42, i64 272, !45, i64 320, !15, i64 368, !7, i64 376}
!15 = !{!"bool", !8, i64 0}
!16 = !{!"_ZTSSt6vectorIPN6Assimp12BaseImporterESaIS2_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIPN6Assimp12BaseImporterESaIS2_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp12BaseImporterESaIS2_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp12BaseImporterESaIS2_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!20 = !{!"_ZTSSt6vectorIPN6Assimp11BaseProcessESaIS2_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIPN6Assimp11BaseProcessESaIS2_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp11BaseProcessESaIS2_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIPN6Assimp11BaseProcessESaIS2_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!24 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !25, i64 0, !26, i64 8, !8, i64 16}
!25 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !7, i64 0}
!26 = !{!"long", !8, i64 0}
!27 = !{!"_ZTSNSt15__exception_ptr13exception_ptrE", !7, i64 0}
!28 = !{!"_ZTSSt3mapIjiSt4lessIjESaISt4pairIKjiEEE", !29, i64 0}
!29 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE", !30, i64 0}
!30 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE13_Rb_tree_implIS6_Lb1EEE", !31, i64 0, !33, i64 8}
!31 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIjEE", !32, i64 0}
!32 = !{!"_ZTSSt4lessIjE"}
!33 = !{!"_ZTSSt15_Rb_tree_header", !34, i64 0, !26, i64 32}
!34 = !{!"_ZTSSt18_Rb_tree_node_base", !35, i64 0, !7, i64 8, !7, i64 16, !7, i64 24}
!35 = !{!"_ZTSSt14_Rb_tree_color", !8, i64 0}
!36 = !{!"_ZTSSt3mapIjfSt4lessIjESaISt4pairIKjfEEE", !37, i64 0}
!37 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKjfESt10_Select1stIS2_ESt4lessIjESaIS2_EE", !38, i64 0}
!38 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKjfESt10_Select1stIS2_ESt4lessIjESaIS2_EE13_Rb_tree_implIS6_Lb1EEE", !31, i64 0, !33, i64 8}
!39 = !{!"_ZTSSt3mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIjESaISt4pairIKjS5_EEE", !40, i64 0}
!40 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESt10_Select1stIS8_ESt4lessIjESaIS8_EE", !41, i64 0}
!41 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESt10_Select1stIS8_ESt4lessIjESaIS8_EE13_Rb_tree_implISC_Lb1EEE", !31, i64 0, !33, i64 8}
!42 = !{!"_ZTSSt3mapIj12aiMatrix4x4tIfESt4lessIjESaISt4pairIKjS1_EEE", !43, i64 0}
!43 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKj12aiMatrix4x4tIfEESt10_Select1stIS4_ESt4lessIjESaIS4_EE", !44, i64 0}
!44 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKj12aiMatrix4x4tIfEESt10_Select1stIS4_ESt4lessIjESaIS4_EE13_Rb_tree_implIS8_Lb1EEE", !31, i64 0, !33, i64 8}
!45 = !{!"_ZTSSt3mapIjPvSt4lessIjESaISt4pairIKjS0_EEE", !46, i64 0}
!46 = !{!"_ZTSSt8_Rb_treeIjSt4pairIKjPvESt10_Select1stIS3_ESt4lessIjESaIS3_EE", !47, i64 0}
!47 = !{!"_ZTSNSt8_Rb_treeIjSt4pairIKjPvESt10_Select1stIS3_ESt4lessIjESaIS3_EE13_Rb_tree_implIS7_Lb1EEE", !31, i64 0, !33, i64 8}
!48 = !{!49, !12, i64 28}
!49 = !{!"_ZTS12aiMemoryInfo", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28}
!50 = !{!51, !12, i64 16}
!51 = !{!"_ZTS7aiScene", !12, i64 0, !7, i64 8, !12, i64 16, !7, i64 24, !12, i64 32, !7, i64 40, !12, i64 48, !7, i64 56, !12, i64 64, !7, i64 72, !12, i64 80, !7, i64 88, !12, i64 96, !7, i64 104, !7, i64 112, !52, i64 120, !12, i64 1148, !7, i64 1152, !7, i64 1160}
!52 = !{!"_ZTS8aiString", !12, i64 0, !8, i64 4}
!53 = !{!49, !12, i64 8}
!54 = !{!51, !7, i64 24}
!55 = !{!51, !12, i64 64}
!56 = !{!49, !12, i64 0}
!57 = !{!51, !7, i64 72}
!58 = !{!7, !7, i64 0}
!59 = !{!60, !12, i64 4}
!60 = !{!"_ZTS6aiMesh", !12, i64 0, !12, i64 4, !12, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !8, i64 48, !8, i64 112, !8, i64 176, !7, i64 208, !12, i64 216, !7, i64 224, !12, i64 232, !52, i64 236, !12, i64 1264, !7, i64 1272, !61, i64 1280, !62, i64 1284, !7, i64 1312}
!61 = !{!"_ZTS16aiMorphingMethod", !8, i64 0}
!62 = !{!"_ZTS6aiAABB", !63, i64 0, !63, i64 12}
!63 = !{!"_ZTS10aiVector3tIfE", !64, i64 0, !64, i64 4, !64, i64 8}
!64 = !{!"float", !8, i64 0}
!65 = !{!60, !12, i64 216}
!66 = !{!60, !7, i64 224}
!67 = !{!68, !12, i64 1028}
!68 = !{!"_ZTS6aiBone", !52, i64 0, !12, i64 1028, !7, i64 1032, !7, i64 1040, !7, i64 1048, !69, i64 1056}
!69 = !{!"_ZTS12aiMatrix4x4tIfE", !64, i64 0, !64, i64 4, !64, i64 8, !64, i64 12, !64, i64 16, !64, i64 20, !64, i64 24, !64, i64 28, !64, i64 32, !64, i64 36, !64, i64 40, !64, i64 44, !64, i64 48, !64, i64 52, !64, i64 56, !64, i64 60}
!70 = distinct !{!70, !71}
!71 = !{!"llvm.loop.mustprogress"}
!72 = distinct !{!72, !73}
!73 = !{!"llvm.loop.unroll.disable"}
!74 = !{!60, !12, i64 8}
!75 = distinct !{!75, !71}
!76 = !{!77, !12, i64 4}
!77 = !{!"_ZTS9aiTexture", !12, i64 0, !12, i64 4, !8, i64 8, !7, i64 24, !52, i64 32}
!78 = !{!77, !12, i64 0}
!79 = !{!51, !12, i64 48}
!80 = !{!49, !12, i64 16}
!81 = !{!51, !7, i64 56}
!82 = distinct !{!82, !71}
!83 = !{!51, !12, i64 96}
!84 = !{!49, !12, i64 20}
!85 = !{!51, !12, i64 80}
!86 = !{!49, !12, i64 24}
!87 = !{!51, !7, i64 8}
!88 = !{!49, !12, i64 12}
!89 = !{!51, !12, i64 32}
!90 = !{!49, !12, i64 4}
!91 = !{!51, !7, i64 40}
!92 = !{!93, !12, i64 1048}
!93 = !{!"_ZTS11aiAnimation", !52, i64 0, !94, i64 1032, !94, i64 1040, !12, i64 1048, !7, i64 1056, !12, i64 1064, !7, i64 1072, !12, i64 1080, !7, i64 1088}
!94 = !{!"double", !8, i64 0}
!95 = !{!93, !7, i64 1056}
!96 = !{!97, !12, i64 1028}
!97 = !{!"_ZTS10aiNodeAnim", !52, i64 0, !12, i64 1028, !7, i64 1032, !12, i64 1040, !7, i64 1048, !12, i64 1056, !7, i64 1064, !98, i64 1072, !98, i64 1076}
!98 = !{!"_ZTS15aiAnimBehaviour", !8, i64 0}
!99 = !{!97, !12, i64 1056}
!100 = !{!97, !12, i64 1040}
!101 = distinct !{!101, !71}
!102 = distinct !{!102, !71}
!103 = !{!104, !12, i64 12}
!104 = !{!"_ZTS10aiMaterial", !7, i64 0, !12, i64 8, !12, i64 12}
!105 = !{!104, !12, i64 8}
!106 = !{!104, !7, i64 0}
!107 = !{!108, !12, i64 1036}
!108 = !{!"_ZTS18aiMaterialProperty", !52, i64 0, !12, i64 1028, !12, i64 1032, !12, i64 1036, !109, i64 1040, !7, i64 1048}
!109 = !{!"_ZTS18aiPropertyTypeInfo", !8, i64 0}
!110 = distinct !{!110, !73}
!111 = distinct !{!111, !71}
!112 = distinct !{!112, !71}


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