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

; 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.aiVertexWeight = type { i32, float }
%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.aiString = type { i32, [1024 x i8] }
%struct.aiAABB = type { %class.aiVector3t, %class.aiVector3t }
%class.aiVector3t = type { float, float, float }
%class.aiColor4t = type { float, float, float, float }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<aiVertexWeight, std::allocator<aiVertexWeight>>::_Vector_impl" }
%"struct.std::_Vector_base<aiVertexWeight, std::allocator<aiVertexWeight>>::_Vector_impl" = type { %"struct.std::_Vector_base<aiVertexWeight, std::allocator<aiVertexWeight>>::_Vector_impl_data" }
%"struct.std::_Vector_base<aiVertexWeight, std::allocator<aiVertexWeight>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%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.aiFace = type { i32, ptr }

@.str.1 = external hidden unnamed_addr constant [126 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [18 x i8], align 1

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN6Assimp24MakeVerboseFormatProcess17MakeVerboseFormatEP6aiMesh(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef %1) #2 align 2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca [8 x ptr], align 16
  %12 = alloca [8 x ptr], align 16
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca %struct.aiVertexWeight, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %28 = load ptr, ptr %3, align 8
  %29 = load ptr, ptr %4, align 8, !tbaa !5
  %30 = icmp ne ptr null, %29
  br i1 %30, label %32, label %31

31:                                               ; preds = %2
  call void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 75)
  br label %32

32:                                               ; preds = %31, %2
  %33 = phi i1 [ true, %2 ], [ false, %31 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #9
  %34 = load ptr, ptr %4, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.aiMesh, ptr %34, i32 0, i32 1
  %36 = load i32, ptr %35, align 4, !tbaa !9
  store i32 %36, ptr %5, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #9
  %37 = load ptr, ptr %4, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.aiMesh, ptr %37, i32 0, i32 2
  %39 = load i32, ptr %38, align 8, !tbaa !18
  %40 = mul i32 %39, 3
  store i32 %40, ptr %6, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  %41 = load i32, ptr %6, align 4, !tbaa !17
  %42 = zext i32 %41 to i64
  %43 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %42, i64 12)
  %44 = extractvalue { i64, i1 } %43, 1
  %45 = extractvalue { i64, i1 } %43, 0
  %46 = select i1 %44, i64 -1, i64 %45
  %47 = call noalias noundef nonnull ptr @_Znam(i64 noundef %46) #10
  %48 = icmp eq i64 %42, 0
  br i1 %48, label %55, label %49

49:                                               ; preds = %32
  %50 = getelementptr inbounds %class.aiVector3t, ptr %47, i64 %42
  br label %51

51:                                               ; preds = %51, %49
  %52 = phi ptr [ %47, %49 ], [ %53, %51 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %52) #9
  %53 = getelementptr inbounds %class.aiVector3t, ptr %52, i64 1
  %54 = icmp eq ptr %53, %50
  br i1 %54, label %55, label %51

55:                                               ; preds = %51, %32
  store ptr %47, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  store ptr null, ptr %8, align 8, !tbaa !5
  %56 = load ptr, ptr %4, align 8, !tbaa !5
  %57 = call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %56)
  br i1 %57, label %58, label %74

58:                                               ; preds = %55
  %59 = load i32, ptr %6, align 4, !tbaa !17
  %60 = zext i32 %59 to i64
  %61 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %60, i64 12)
  %62 = extractvalue { i64, i1 } %61, 1
  %63 = extractvalue { i64, i1 } %61, 0
  %64 = select i1 %62, i64 -1, i64 %63
  %65 = call noalias noundef nonnull ptr @_Znam(i64 noundef %64) #10
  %66 = icmp eq i64 %60, 0
  br i1 %66, label %73, label %67

67:                                               ; preds = %58
  %68 = getelementptr inbounds %class.aiVector3t, ptr %65, i64 %60
  br label %69

69:                                               ; preds = %69, %67
  %70 = phi ptr [ %65, %67 ], [ %71, %69 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %70) #9
  %71 = getelementptr inbounds %class.aiVector3t, ptr %70, i64 1
  %72 = icmp eq ptr %71, %68
  br i1 %72, label %73, label %69

73:                                               ; preds = %69, %58
  store ptr %65, ptr %8, align 8, !tbaa !5
  br label %74

74:                                               ; preds = %73, %55
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  store ptr null, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #9
  store ptr null, ptr %10, align 8, !tbaa !5
  %75 = load ptr, ptr %4, align 8, !tbaa !5
  %76 = call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %75)
  br i1 %76, label %77, label %108

77:                                               ; preds = %74
  %78 = load i32, ptr %6, align 4, !tbaa !17
  %79 = zext i32 %78 to i64
  %80 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %79, i64 12)
  %81 = extractvalue { i64, i1 } %80, 1
  %82 = extractvalue { i64, i1 } %80, 0
  %83 = select i1 %81, i64 -1, i64 %82
  %84 = call noalias noundef nonnull ptr @_Znam(i64 noundef %83) #10
  %85 = icmp eq i64 %79, 0
  br i1 %85, label %92, label %86

86:                                               ; preds = %77
  %87 = getelementptr inbounds %class.aiVector3t, ptr %84, i64 %79
  br label %88

88:                                               ; preds = %88, %86
  %89 = phi ptr [ %84, %86 ], [ %90, %88 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %89) #9
  %90 = getelementptr inbounds %class.aiVector3t, ptr %89, i64 1
  %91 = icmp eq ptr %90, %87
  br i1 %91, label %92, label %88

92:                                               ; preds = %88, %77
  store ptr %84, ptr %9, align 8, !tbaa !5
  %93 = load i32, ptr %6, align 4, !tbaa !17
  %94 = zext i32 %93 to i64
  %95 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %94, i64 12)
  %96 = extractvalue { i64, i1 } %95, 1
  %97 = extractvalue { i64, i1 } %95, 0
  %98 = select i1 %96, i64 -1, i64 %97
  %99 = call noalias noundef nonnull ptr @_Znam(i64 noundef %98) #10
  %100 = icmp eq i64 %94, 0
  br i1 %100, label %107, label %101

101:                                              ; preds = %92
  %102 = getelementptr inbounds %class.aiVector3t, ptr %99, i64 %94
  br label %103

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

107:                                              ; preds = %103, %92
  store ptr %99, ptr %10, align 8, !tbaa !5
  br label %108

108:                                              ; preds = %107, %74
  call void @llvm.lifetime.start.p0(i64 64, ptr %11) #9
  call void @llvm.memset.p0.i64(ptr align 16 %11, i8 0, i64 64, i1 false)
  call void @llvm.lifetime.start.p0(i64 64, ptr %12) #9
  call void @llvm.memset.p0.i64(ptr align 16 %12, i8 0, i64 64, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  store i32 0, ptr %13, align 4, !tbaa !17
  br label %109

109:                                              ; preds = %128, %108
  %110 = load ptr, ptr %4, align 8, !tbaa !5
  %111 = load i32, ptr %13, align 4, !tbaa !17
  %112 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %110, i32 noundef %111)
  br i1 %112, label %113, label %133

113:                                              ; preds = %109
  %114 = load i32, ptr %6, align 4, !tbaa !17
  %115 = zext i32 %114 to i64
  %116 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %115, i64 12)
  %117 = extractvalue { i64, i1 } %116, 1
  %118 = extractvalue { i64, i1 } %116, 0
  %119 = select i1 %117, i64 -1, i64 %118
  %120 = call noalias noundef nonnull ptr @_Znam(i64 noundef %119) #10
  %121 = icmp eq i64 %115, 0
  br i1 %121, label %128, label %122

122:                                              ; preds = %113
  %123 = getelementptr inbounds %class.aiVector3t, ptr %120, i64 %115
  br label %124

124:                                              ; preds = %124, %122
  %125 = phi ptr [ %120, %122 ], [ %126, %124 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %125) #9
  %126 = getelementptr inbounds %class.aiVector3t, ptr %125, i64 1
  %127 = icmp eq ptr %126, %123
  br i1 %127, label %128, label %124

128:                                              ; preds = %124, %113
  %129 = load i32, ptr %13, align 4, !tbaa !17
  %130 = add i32 %129, 1
  store i32 %130, ptr %13, align 4, !tbaa !17
  %131 = zext i32 %129 to i64
  %132 = getelementptr inbounds [8 x ptr], ptr %11, i64 0, i64 %131
  store ptr %120, ptr %132, align 8, !tbaa !5
  br label %109, !llvm.loop !19

133:                                              ; preds = %109
  store i32 0, ptr %13, align 4, !tbaa !17
  br label %134

134:                                              ; preds = %153, %133
  %135 = load ptr, ptr %4, align 8, !tbaa !5
  %136 = load i32, ptr %13, align 4, !tbaa !17
  %137 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %135, i32 noundef %136)
  br i1 %137, label %138, label %158

138:                                              ; preds = %134
  %139 = load i32, ptr %6, align 4, !tbaa !17
  %140 = zext i32 %139 to i64
  %141 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %140, i64 16)
  %142 = extractvalue { i64, i1 } %141, 1
  %143 = extractvalue { i64, i1 } %141, 0
  %144 = select i1 %142, i64 -1, i64 %143
  %145 = call noalias noundef nonnull ptr @_Znam(i64 noundef %144) #10
  %146 = icmp eq i64 %140, 0
  br i1 %146, label %153, label %147

147:                                              ; preds = %138
  %148 = getelementptr inbounds %class.aiColor4t, ptr %145, i64 %140
  br label %149

149:                                              ; preds = %149, %147
  %150 = phi ptr [ %145, %147 ], [ %151, %149 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %150) #9
  %151 = getelementptr inbounds %class.aiColor4t, ptr %150, i64 1
  %152 = icmp eq ptr %151, %148
  br i1 %152, label %153, label %149

153:                                              ; preds = %149, %138
  %154 = load i32, ptr %13, align 4, !tbaa !17
  %155 = add i32 %154, 1
  store i32 %155, ptr %13, align 4, !tbaa !17
  %156 = zext i32 %154 to i64
  %157 = getelementptr inbounds [8 x ptr], ptr %12, i64 0, i64 %156
  store ptr %145, ptr %157, align 8, !tbaa !5
  br label %134, !llvm.loop !21

158:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  %159 = load ptr, ptr %4, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.aiMesh, ptr %159, i32 0, i32 11
  %161 = load i32, ptr %160, align 8, !tbaa !22
  %162 = zext i32 %161 to i64
  %163 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %162, i64 24)
  %164 = extractvalue { i64, i1 } %163, 1
  %165 = extractvalue { i64, i1 } %163, 0
  %166 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %165, i64 8)
  %167 = extractvalue { i64, i1 } %166, 1
  %168 = or i1 %164, %167
  %169 = extractvalue { i64, i1 } %166, 0
  %170 = select i1 %168, i64 -1, i64 %169
  %171 = call noalias noundef nonnull ptr @_Znam(i64 noundef %170) #10
  store i64 %162, ptr %171, align 16
  %172 = getelementptr inbounds i8, ptr %171, i64 8
  %173 = icmp eq i64 %162, 0
  br i1 %173, label %180, label %174

174:                                              ; preds = %158
  %175 = getelementptr inbounds %"class.std::vector", ptr %172, i64 %162
  br label %176

176:                                              ; preds = %176, %174
  %177 = phi ptr [ %172, %174 ], [ %178, %176 ]
  call void @_ZNSt6vectorI14aiVertexWeightSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %177) #9
  %178 = getelementptr inbounds %"class.std::vector", ptr %177, i64 1
  %179 = icmp eq ptr %178, %175
  br i1 %179, label %180, label %176

180:                                              ; preds = %176, %158
  store ptr %172, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #9
  store i32 0, ptr %15, align 4, !tbaa !17
  br label %181

181:                                              ; preds = %204, %180
  %182 = load i32, ptr %15, align 4, !tbaa !17
  %183 = load ptr, ptr %4, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.aiMesh, ptr %183, i32 0, i32 11
  %185 = load i32, ptr %184, align 8, !tbaa !22
  %186 = icmp ult i32 %182, %185
  br i1 %186, label %188, label %187

187:                                              ; preds = %181
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  br label %207

188:                                              ; preds = %181
  %189 = load ptr, ptr %14, align 8, !tbaa !5
  %190 = load i32, ptr %15, align 4, !tbaa !17
  %191 = zext i32 %190 to i64
  %192 = getelementptr inbounds %"class.std::vector", ptr %189, i64 %191
  %193 = load ptr, ptr %4, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.aiMesh, ptr %193, i32 0, i32 12
  %195 = load ptr, ptr %194, align 8, !tbaa !23
  %196 = load i32, ptr %15, align 4, !tbaa !17
  %197 = zext i32 %196 to i64
  %198 = getelementptr inbounds ptr, ptr %195, i64 %197
  %199 = load ptr, ptr %198, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.aiBone, ptr %199, i32 0, i32 1
  %201 = load i32, ptr %200, align 4, !tbaa !24
  %202 = mul i32 %201, 3
  %203 = zext i32 %202 to i64
  call void @_ZNSt6vectorI14aiVertexWeightSaIS0_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %192, i64 noundef %203)
  br label %204

204:                                              ; preds = %188
  %205 = load i32, ptr %15, align 4, !tbaa !17
  %206 = add i32 %205, 1
  store i32 %206, ptr %15, align 4, !tbaa !17
  br label %181, !llvm.loop !27

207:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #9
  store i32 0, ptr %16, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  store i32 0, ptr %17, align 4, !tbaa !17
  br label %208

208:                                              ; preds = %440, %207
  %209 = load i32, ptr %17, align 4, !tbaa !17
  %210 = load ptr, ptr %4, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.aiMesh, ptr %210, i32 0, i32 2
  %212 = load i32, ptr %211, align 8, !tbaa !18
  %213 = icmp ult i32 %209, %212
  br i1 %213, label %215, label %214

214:                                              ; preds = %208
  store i32 9, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  br label %443

215:                                              ; preds = %208
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %216 = load ptr, ptr %4, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.aiMesh, ptr %216, i32 0, i32 10
  %218 = load ptr, ptr %217, align 8, !tbaa !28
  %219 = load i32, ptr %17, align 4, !tbaa !17
  %220 = zext i32 %219 to i64
  %221 = getelementptr inbounds %struct.aiFace, ptr %218, i64 %220
  store ptr %221, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  store i32 0, ptr %20, align 4, !tbaa !17
  br label %222

222:                                              ; preds = %434, %215
  %223 = load i32, ptr %20, align 4, !tbaa !17
  %224 = load ptr, ptr %19, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.aiFace, ptr %224, i32 0, i32 0
  %226 = load i32, ptr %225, align 8, !tbaa !29
  %227 = icmp ult i32 %223, %226
  br i1 %227, label %229, label %228

228:                                              ; preds = %222
  store i32 12, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  br label %439

229:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  store i32 0, ptr %21, align 4, !tbaa !17
  br label %230

230:                                              ; preds = %291, %229
  %231 = load i32, ptr %21, align 4, !tbaa !17
  %232 = load ptr, ptr %4, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.aiMesh, ptr %232, i32 0, i32 11
  %234 = load i32, ptr %233, align 8, !tbaa !22
  %235 = icmp ult i32 %231, %234
  br i1 %235, label %237, label %236

236:                                              ; preds = %230
  store i32 15, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  br label %294

237:                                              ; preds = %230
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  store i32 0, ptr %22, align 4, !tbaa !17
  br label %238

238:                                              ; preds = %287, %237
  %239 = load i32, ptr %22, align 4, !tbaa !17
  %240 = load ptr, ptr %4, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.aiMesh, ptr %240, i32 0, i32 12
  %242 = load ptr, ptr %241, align 8, !tbaa !23
  %243 = load i32, ptr %21, align 4, !tbaa !17
  %244 = zext i32 %243 to i64
  %245 = getelementptr inbounds ptr, ptr %242, i64 %244
  %246 = load ptr, ptr %245, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.aiBone, ptr %246, i32 0, i32 1
  %248 = load i32, ptr %247, align 4, !tbaa !24
  %249 = icmp ult i32 %239, %248
  br i1 %249, label %251, label %250

250:                                              ; preds = %238
  store i32 18, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  br label %290

251:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %252 = load ptr, ptr %4, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.aiMesh, ptr %252, i32 0, i32 12
  %254 = load ptr, ptr %253, align 8, !tbaa !23
  %255 = load i32, ptr %21, align 4, !tbaa !17
  %256 = zext i32 %255 to i64
  %257 = getelementptr inbounds ptr, ptr %254, i64 %256
  %258 = load ptr, ptr %257, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.aiBone, ptr %258, i32 0, i32 4
  %260 = load ptr, ptr %259, align 8, !tbaa !31
  %261 = load i32, ptr %22, align 4, !tbaa !17
  %262 = zext i32 %261 to i64
  %263 = getelementptr inbounds %struct.aiVertexWeight, ptr %260, i64 %262
  store ptr %263, ptr %23, align 8, !tbaa !5
  %264 = load ptr, ptr %19, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.aiFace, ptr %264, i32 0, i32 1
  %266 = load ptr, ptr %265, align 8, !tbaa !32
  %267 = load i32, ptr %20, align 4, !tbaa !17
  %268 = zext i32 %267 to i64
  %269 = getelementptr inbounds i32, ptr %266, i64 %268
  %270 = load i32, ptr %269, align 4, !tbaa !17
  %271 = load ptr, ptr %23, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.aiVertexWeight, ptr %271, i32 0, i32 0
  %273 = load i32, ptr %272, align 4, !tbaa !33
  %274 = icmp eq i32 %270, %273
  br i1 %274, label %275, label %286

275:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  call void @_ZN14aiVertexWeightC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %24) #9
  %276 = load i32, ptr %16, align 4, !tbaa !17
  %277 = getelementptr inbounds %struct.aiVertexWeight, ptr %24, i32 0, i32 0
  store i32 %276, ptr %277, align 4, !tbaa !33
  %278 = load ptr, ptr %23, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.aiVertexWeight, ptr %278, i32 0, i32 1
  %280 = load float, ptr %279, align 4, !tbaa !35
  %281 = getelementptr inbounds %struct.aiVertexWeight, ptr %24, i32 0, i32 1
  store float %280, ptr %281, align 4, !tbaa !35
  %282 = load ptr, ptr %14, align 8, !tbaa !5
  %283 = load i32, ptr %21, align 4, !tbaa !17
  %284 = zext i32 %283 to i64
  %285 = getelementptr inbounds %"class.std::vector", ptr %282, i64 %284
  call void @_ZNSt6vectorI14aiVertexWeightSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %285, ptr noundef nonnull align 4 dereferenceable(8) %24)
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  br label %286

286:                                              ; preds = %275, %251
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  br label %287

287:                                              ; preds = %286
  %288 = load i32, ptr %22, align 4, !tbaa !17
  %289 = add i32 %288, 1
  store i32 %289, ptr %22, align 4, !tbaa !17
  br label %238, !llvm.loop !36

290:                                              ; preds = %250
  br label %291

291:                                              ; preds = %290
  %292 = load i32, ptr %21, align 4, !tbaa !17
  %293 = add i32 %292, 1
  store i32 %293, ptr %21, align 4, !tbaa !17
  br label %230, !llvm.loop !37

294:                                              ; preds = %236
  %295 = load ptr, ptr %4, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.aiMesh, ptr %295, i32 0, i32 3
  %297 = load ptr, ptr %296, align 8, !tbaa !38
  %298 = load ptr, ptr %19, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.aiFace, ptr %298, i32 0, i32 1
  %300 = load ptr, ptr %299, align 8, !tbaa !32
  %301 = load i32, ptr %20, align 4, !tbaa !17
  %302 = zext i32 %301 to i64
  %303 = getelementptr inbounds i32, ptr %300, i64 %302
  %304 = load i32, ptr %303, align 4, !tbaa !17
  %305 = zext i32 %304 to i64
  %306 = getelementptr inbounds %class.aiVector3t, ptr %297, i64 %305
  %307 = load ptr, ptr %7, align 8, !tbaa !5
  %308 = load i32, ptr %16, align 4, !tbaa !17
  %309 = zext i32 %308 to i64
  %310 = getelementptr inbounds %class.aiVector3t, ptr %307, i64 %309
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %310, ptr align 4 %306, i64 12, i1 false), !tbaa.struct !39
  %311 = load ptr, ptr %4, align 8, !tbaa !5
  %312 = call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %311)
  br i1 %312, label %313, label %330

313:                                              ; preds = %294
  %314 = load ptr, ptr %4, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.aiMesh, ptr %314, i32 0, i32 4
  %316 = load ptr, ptr %315, align 8, !tbaa !41
  %317 = load ptr, ptr %19, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.aiFace, ptr %317, i32 0, i32 1
  %319 = load ptr, ptr %318, align 8, !tbaa !32
  %320 = load i32, ptr %20, align 4, !tbaa !17
  %321 = zext i32 %320 to i64
  %322 = getelementptr inbounds i32, ptr %319, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !17
  %324 = zext i32 %323 to i64
  %325 = getelementptr inbounds %class.aiVector3t, ptr %316, i64 %324
  %326 = load ptr, ptr %8, align 8, !tbaa !5
  %327 = load i32, ptr %16, align 4, !tbaa !17
  %328 = zext i32 %327 to i64
  %329 = getelementptr inbounds %class.aiVector3t, ptr %326, i64 %328
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %329, ptr align 4 %325, i64 12, i1 false), !tbaa.struct !39
  br label %330

330:                                              ; preds = %313, %294
  %331 = load ptr, ptr %4, align 8, !tbaa !5
  %332 = call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %331)
  br i1 %332, label %333, label %366

333:                                              ; preds = %330
  %334 = load ptr, ptr %4, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.aiMesh, ptr %334, i32 0, i32 5
  %336 = load ptr, ptr %335, align 8, !tbaa !42
  %337 = load ptr, ptr %19, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.aiFace, ptr %337, i32 0, i32 1
  %339 = load ptr, ptr %338, align 8, !tbaa !32
  %340 = load i32, ptr %20, align 4, !tbaa !17
  %341 = zext i32 %340 to i64
  %342 = getelementptr inbounds i32, ptr %339, i64 %341
  %343 = load i32, ptr %342, align 4, !tbaa !17
  %344 = zext i32 %343 to i64
  %345 = getelementptr inbounds %class.aiVector3t, ptr %336, i64 %344
  %346 = load ptr, ptr %9, align 8, !tbaa !5
  %347 = load i32, ptr %16, align 4, !tbaa !17
  %348 = zext i32 %347 to i64
  %349 = getelementptr inbounds %class.aiVector3t, ptr %346, i64 %348
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %349, ptr align 4 %345, i64 12, i1 false), !tbaa.struct !39
  %350 = load ptr, ptr %4, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.aiMesh, ptr %350, i32 0, i32 6
  %352 = load ptr, ptr %351, align 8, !tbaa !43
  %353 = load ptr, ptr %19, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.aiFace, ptr %353, i32 0, i32 1
  %355 = load ptr, ptr %354, align 8, !tbaa !32
  %356 = load i32, ptr %20, align 4, !tbaa !17
  %357 = zext i32 %356 to i64
  %358 = getelementptr inbounds i32, ptr %355, i64 %357
  %359 = load i32, ptr %358, align 4, !tbaa !17
  %360 = zext i32 %359 to i64
  %361 = getelementptr inbounds %class.aiVector3t, ptr %352, i64 %360
  %362 = load ptr, ptr %10, align 8, !tbaa !5
  %363 = load i32, ptr %16, align 4, !tbaa !17
  %364 = zext i32 %363 to i64
  %365 = getelementptr inbounds %class.aiVector3t, ptr %362, i64 %364
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %365, ptr align 4 %361, i64 12, i1 false), !tbaa.struct !39
  br label %366

366:                                              ; preds = %333, %330
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  store i32 0, ptr %25, align 4, !tbaa !17
  br label %367

367:                                              ; preds = %371, %366
  %368 = load ptr, ptr %4, align 8, !tbaa !5
  %369 = load i32, ptr %25, align 4, !tbaa !17
  %370 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %368, i32 noundef %369)
  br i1 %370, label %371, label %396

371:                                              ; preds = %367
  %372 = load ptr, ptr %4, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.aiMesh, ptr %372, i32 0, i32 8
  %374 = load i32, ptr %25, align 4, !tbaa !17
  %375 = zext i32 %374 to i64
  %376 = getelementptr inbounds [8 x ptr], ptr %373, i64 0, i64 %375
  %377 = load ptr, ptr %376, align 8, !tbaa !5
  %378 = load ptr, ptr %19, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.aiFace, ptr %378, i32 0, i32 1
  %380 = load ptr, ptr %379, align 8, !tbaa !32
  %381 = load i32, ptr %20, align 4, !tbaa !17
  %382 = zext i32 %381 to i64
  %383 = getelementptr inbounds i32, ptr %380, i64 %382
  %384 = load i32, ptr %383, align 4, !tbaa !17
  %385 = zext i32 %384 to i64
  %386 = getelementptr inbounds %class.aiVector3t, ptr %377, i64 %385
  %387 = load i32, ptr %25, align 4, !tbaa !17
  %388 = zext i32 %387 to i64
  %389 = getelementptr inbounds [8 x ptr], ptr %11, i64 0, i64 %388
  %390 = load ptr, ptr %389, align 8, !tbaa !5
  %391 = load i32, ptr %16, align 4, !tbaa !17
  %392 = zext i32 %391 to i64
  %393 = getelementptr inbounds %class.aiVector3t, ptr %390, i64 %392
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %393, ptr align 4 %386, i64 12, i1 false), !tbaa.struct !39
  %394 = load i32, ptr %25, align 4, !tbaa !17
  %395 = add i32 %394, 1
  store i32 %395, ptr %25, align 4, !tbaa !17
  br label %367, !llvm.loop !44

396:                                              ; preds = %367
  store i32 0, ptr %25, align 4, !tbaa !17
  br label %397

397:                                              ; preds = %401, %396
  %398 = load ptr, ptr %4, align 8, !tbaa !5
  %399 = load i32, ptr %25, align 4, !tbaa !17
  %400 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %398, i32 noundef %399)
  br i1 %400, label %401, label %426

401:                                              ; preds = %397
  %402 = load ptr, ptr %4, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.aiMesh, ptr %402, i32 0, i32 7
  %404 = load i32, ptr %25, align 4, !tbaa !17
  %405 = zext i32 %404 to i64
  %406 = getelementptr inbounds [8 x ptr], ptr %403, i64 0, i64 %405
  %407 = load ptr, ptr %406, align 8, !tbaa !5
  %408 = load ptr, ptr %19, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.aiFace, ptr %408, i32 0, i32 1
  %410 = load ptr, ptr %409, align 8, !tbaa !32
  %411 = load i32, ptr %20, align 4, !tbaa !17
  %412 = zext i32 %411 to i64
  %413 = getelementptr inbounds i32, ptr %410, i64 %412
  %414 = load i32, ptr %413, align 4, !tbaa !17
  %415 = zext i32 %414 to i64
  %416 = getelementptr inbounds %class.aiColor4t, ptr %407, i64 %415
  %417 = load i32, ptr %25, align 4, !tbaa !17
  %418 = zext i32 %417 to i64
  %419 = getelementptr inbounds [8 x ptr], ptr %12, i64 0, i64 %418
  %420 = load ptr, ptr %419, align 8, !tbaa !5
  %421 = load i32, ptr %16, align 4, !tbaa !17
  %422 = zext i32 %421 to i64
  %423 = getelementptr inbounds %class.aiColor4t, ptr %420, i64 %422
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %423, ptr align 4 %416, i64 16, i1 false), !tbaa.struct !45
  %424 = load i32, ptr %25, align 4, !tbaa !17
  %425 = add i32 %424, 1
  store i32 %425, ptr %25, align 4, !tbaa !17
  br label %397, !llvm.loop !46

426:                                              ; preds = %397
  %427 = load i32, ptr %16, align 4, !tbaa !17
  %428 = load ptr, ptr %19, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.aiFace, ptr %428, i32 0, i32 1
  %430 = load ptr, ptr %429, align 8, !tbaa !32
  %431 = load i32, ptr %20, align 4, !tbaa !17
  %432 = zext i32 %431 to i64
  %433 = getelementptr inbounds i32, ptr %430, i64 %432
  store i32 %427, ptr %433, align 4, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %434

434:                                              ; preds = %426
  %435 = load i32, ptr %20, align 4, !tbaa !17
  %436 = add i32 %435, 1
  store i32 %436, ptr %20, align 4, !tbaa !17
  %437 = load i32, ptr %16, align 4, !tbaa !17
  %438 = add i32 %437, 1
  store i32 %438, ptr %16, align 4, !tbaa !17
  br label %222, !llvm.loop !47

439:                                              ; preds = %228
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  br label %440

440:                                              ; preds = %439
  %441 = load i32, ptr %17, align 4, !tbaa !17
  %442 = add i32 %441, 1
  store i32 %442, ptr %17, align 4, !tbaa !17
  br label %208, !llvm.loop !48

443:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  store i32 0, ptr %26, align 4, !tbaa !17
  br label %444

444:                                              ; preds = %541, %443
  %445 = load i32, ptr %26, align 4, !tbaa !17
  %446 = load ptr, ptr %4, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.aiMesh, ptr %446, i32 0, i32 11
  %448 = load i32, ptr %447, align 8, !tbaa !22
  %449 = icmp ult i32 %445, %448
  br i1 %449, label %451, label %450

450:                                              ; preds = %444
  store i32 25, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  br label %544

451:                                              ; preds = %444
  %452 = load ptr, ptr %4, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.aiMesh, ptr %452, i32 0, i32 12
  %454 = load ptr, ptr %453, align 8, !tbaa !23
  %455 = load i32, ptr %26, align 4, !tbaa !17
  %456 = zext i32 %455 to i64
  %457 = getelementptr inbounds ptr, ptr %454, i64 %456
  %458 = load ptr, ptr %457, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.aiBone, ptr %458, i32 0, i32 4
  %460 = load ptr, ptr %459, align 8, !tbaa !31
  %461 = icmp eq ptr %460, null
  br i1 %461, label %463, label %462

462:                                              ; preds = %451
  call void @_ZdaPv(ptr noundef %460) #11
  br label %463

463:                                              ; preds = %462, %451
  %464 = load ptr, ptr %14, align 8, !tbaa !5
  %465 = load i32, ptr %26, align 4, !tbaa !17
  %466 = zext i32 %465 to i64
  %467 = getelementptr inbounds %"class.std::vector", ptr %464, i64 %466
  %468 = call noundef zeroext i1 @_ZNKSt6vectorI14aiVertexWeightSaIS0_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %467) #9
  br i1 %468, label %531, label %469

469:                                              ; preds = %463
  %470 = load ptr, ptr %14, align 8, !tbaa !5
  %471 = load i32, ptr %26, align 4, !tbaa !17
  %472 = zext i32 %471 to i64
  %473 = getelementptr inbounds %"class.std::vector", ptr %470, i64 %472
  %474 = call noundef i64 @_ZNKSt6vectorI14aiVertexWeightSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %473) #9
  %475 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %474, i64 8)
  %476 = extractvalue { i64, i1 } %475, 1
  %477 = extractvalue { i64, i1 } %475, 0
  %478 = select i1 %476, i64 -1, i64 %477
  %479 = call noalias noundef nonnull ptr @_Znam(i64 noundef %478) #10
  %480 = icmp eq i64 %474, 0
  br i1 %480, label %487, label %481

481:                                              ; preds = %469
  %482 = getelementptr inbounds %struct.aiVertexWeight, ptr %479, i64 %474
  br label %483

483:                                              ; preds = %483, %481
  %484 = phi ptr [ %479, %481 ], [ %485, %483 ]
  call void @_ZN14aiVertexWeightC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %484) #9
  %485 = getelementptr inbounds %struct.aiVertexWeight, ptr %484, i64 1
  %486 = icmp eq ptr %485, %482
  br i1 %486, label %487, label %483

487:                                              ; preds = %483, %469
  %488 = load ptr, ptr %4, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.aiMesh, ptr %488, i32 0, i32 12
  %490 = load ptr, ptr %489, align 8, !tbaa !23
  %491 = load i32, ptr %26, align 4, !tbaa !17
  %492 = zext i32 %491 to i64
  %493 = getelementptr inbounds ptr, ptr %490, i64 %492
  %494 = load ptr, ptr %493, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.aiBone, ptr %494, i32 0, i32 4
  store ptr %479, ptr %495, align 8, !tbaa !31
  %496 = load ptr, ptr %14, align 8, !tbaa !5
  %497 = load i32, ptr %26, align 4, !tbaa !17
  %498 = zext i32 %497 to i64
  %499 = getelementptr inbounds %"class.std::vector", ptr %496, i64 %498
  %500 = call noundef i64 @_ZNKSt6vectorI14aiVertexWeightSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %499) #9
  %501 = trunc i64 %500 to i32
  %502 = load ptr, ptr %4, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.aiMesh, ptr %502, i32 0, i32 12
  %504 = load ptr, ptr %503, align 8, !tbaa !23
  %505 = load i32, ptr %26, align 4, !tbaa !17
  %506 = zext i32 %505 to i64
  %507 = getelementptr inbounds ptr, ptr %504, i64 %506
  %508 = load ptr, ptr %507, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.aiBone, ptr %508, i32 0, i32 1
  store i32 %501, ptr %509, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  %510 = load ptr, ptr %14, align 8, !tbaa !5
  %511 = load i32, ptr %26, align 4, !tbaa !17
  %512 = zext i32 %511 to i64
  %513 = getelementptr inbounds %"class.std::vector", ptr %510, i64 %512
  %514 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI14aiVertexWeightSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %513, i64 noundef 0) #9
  store ptr %514, ptr %27, align 8, !tbaa !5
  %515 = load ptr, ptr %4, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.aiMesh, ptr %515, i32 0, i32 12
  %517 = load ptr, ptr %516, align 8, !tbaa !23
  %518 = load i32, ptr %26, align 4, !tbaa !17
  %519 = zext i32 %518 to i64
  %520 = getelementptr inbounds ptr, ptr %517, i64 %519
  %521 = load ptr, ptr %520, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.aiBone, ptr %521, i32 0, i32 4
  %523 = load ptr, ptr %522, align 8, !tbaa !31
  %524 = load ptr, ptr %27, align 8, !tbaa !5
  %525 = load ptr, ptr %14, align 8, !tbaa !5
  %526 = load i32, ptr %26, align 4, !tbaa !17
  %527 = zext i32 %526 to i64
  %528 = getelementptr inbounds %"class.std::vector", ptr %525, i64 %527
  %529 = call noundef i64 @_ZNKSt6vectorI14aiVertexWeightSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %528) #9
  %530 = mul i64 8, %529
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %523, ptr align 4 %524, i64 %530, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  br label %540

531:                                              ; preds = %463
  %532 = load ptr, ptr %4, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.aiMesh, ptr %532, i32 0, i32 12
  %534 = load ptr, ptr %533, align 8, !tbaa !23
  %535 = load i32, ptr %26, align 4, !tbaa !17
  %536 = zext i32 %535 to i64
  %537 = getelementptr inbounds ptr, ptr %534, i64 %536
  %538 = load ptr, ptr %537, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.aiBone, ptr %538, i32 0, i32 4
  store ptr null, ptr %539, align 8, !tbaa !31
  br label %540

540:                                              ; preds = %531, %487
  br label %541

541:                                              ; preds = %540
  %542 = load i32, ptr %26, align 4, !tbaa !17
  %543 = add i32 %542, 1
  store i32 %543, ptr %26, align 4, !tbaa !17
  br label %444, !llvm.loop !49

544:                                              ; preds = %450
  %545 = load ptr, ptr %14, align 8, !tbaa !5
  %546 = icmp eq ptr %545, null
  br i1 %546, label %559, label %547

547:                                              ; preds = %544
  %548 = getelementptr inbounds i8, ptr %545, i64 -8
  %549 = load i64, ptr %548, align 8
  %550 = getelementptr inbounds %"class.std::vector", ptr %545, i64 %549
  %551 = icmp eq ptr %545, %550
  br i1 %551, label %556, label %552

552:                                              ; preds = %552, %547
  %553 = phi ptr [ %550, %547 ], [ %554, %552 ]
  %554 = getelementptr inbounds %"class.std::vector", ptr %553, i64 -1
  call void @_ZNSt6vectorI14aiVertexWeightSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %554) #9
  %555 = icmp eq ptr %554, %545
  br i1 %555, label %556, label %552

556:                                              ; preds = %552, %547
  %557 = mul i64 24, %549
  %558 = add i64 %557, 8
  call void @_ZdaPvm(ptr noundef %548, i64 noundef %558) #11
  br label %559

559:                                              ; preds = %556, %544
  %560 = load ptr, ptr %4, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.aiMesh, ptr %560, i32 0, i32 3
  %562 = load ptr, ptr %561, align 8, !tbaa !38
  %563 = icmp eq ptr %562, null
  br i1 %563, label %565, label %564

564:                                              ; preds = %559
  call void @_ZdaPv(ptr noundef %562) #11
  br label %565

565:                                              ; preds = %564, %559
  %566 = load ptr, ptr %7, align 8, !tbaa !5
  %567 = load ptr, ptr %4, align 8, !tbaa !5
  %568 = getelementptr inbounds %struct.aiMesh, ptr %567, i32 0, i32 3
  store ptr %566, ptr %568, align 8, !tbaa !38
  store i32 0, ptr %13, align 4, !tbaa !17
  br label %569

569:                                              ; preds = %582, %565
  %570 = load ptr, ptr %4, align 8, !tbaa !5
  %571 = load i32, ptr %13, align 4, !tbaa !17
  %572 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %570, i32 noundef %571)
  br i1 %572, label %573, label %594

573:                                              ; preds = %569
  %574 = load ptr, ptr %4, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.aiMesh, ptr %574, i32 0, i32 8
  %576 = load i32, ptr %13, align 4, !tbaa !17
  %577 = zext i32 %576 to i64
  %578 = getelementptr inbounds [8 x ptr], ptr %575, i64 0, i64 %577
  %579 = load ptr, ptr %578, align 8, !tbaa !5
  %580 = icmp eq ptr %579, null
  br i1 %580, label %582, label %581

581:                                              ; preds = %573
  call void @_ZdaPv(ptr noundef %579) #11
  br label %582

582:                                              ; preds = %581, %573
  %583 = load i32, ptr %13, align 4, !tbaa !17
  %584 = zext i32 %583 to i64
  %585 = getelementptr inbounds [8 x ptr], ptr %11, i64 0, i64 %584
  %586 = load ptr, ptr %585, align 8, !tbaa !5
  %587 = load ptr, ptr %4, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.aiMesh, ptr %587, i32 0, i32 8
  %589 = load i32, ptr %13, align 4, !tbaa !17
  %590 = zext i32 %589 to i64
  %591 = getelementptr inbounds [8 x ptr], ptr %588, i64 0, i64 %590
  store ptr %586, ptr %591, align 8, !tbaa !5
  %592 = load i32, ptr %13, align 4, !tbaa !17
  %593 = add i32 %592, 1
  store i32 %593, ptr %13, align 4, !tbaa !17
  br label %569, !llvm.loop !50

594:                                              ; preds = %569
  store i32 0, ptr %13, align 4, !tbaa !17
  br label %595

595:                                              ; preds = %608, %594
  %596 = load ptr, ptr %4, align 8, !tbaa !5
  %597 = load i32, ptr %13, align 4, !tbaa !17
  %598 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %596, i32 noundef %597)
  br i1 %598, label %599, label %620

599:                                              ; preds = %595
  %600 = load ptr, ptr %4, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.aiMesh, ptr %600, i32 0, i32 7
  %602 = load i32, ptr %13, align 4, !tbaa !17
  %603 = zext i32 %602 to i64
  %604 = getelementptr inbounds [8 x ptr], ptr %601, i64 0, i64 %603
  %605 = load ptr, ptr %604, align 8, !tbaa !5
  %606 = icmp eq ptr %605, null
  br i1 %606, label %608, label %607

607:                                              ; preds = %599
  call void @_ZdaPv(ptr noundef %605) #11
  br label %608

608:                                              ; preds = %607, %599
  %609 = load i32, ptr %13, align 4, !tbaa !17
  %610 = zext i32 %609 to i64
  %611 = getelementptr inbounds [8 x ptr], ptr %12, i64 0, i64 %610
  %612 = load ptr, ptr %611, align 8, !tbaa !5
  %613 = load ptr, ptr %4, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.aiMesh, ptr %613, i32 0, i32 7
  %615 = load i32, ptr %13, align 4, !tbaa !17
  %616 = zext i32 %615 to i64
  %617 = getelementptr inbounds [8 x ptr], ptr %614, i64 0, i64 %616
  store ptr %612, ptr %617, align 8, !tbaa !5
  %618 = load i32, ptr %13, align 4, !tbaa !17
  %619 = add i32 %618, 1
  store i32 %619, ptr %13, align 4, !tbaa !17
  br label %595, !llvm.loop !51

620:                                              ; preds = %595
  %621 = load i32, ptr %6, align 4, !tbaa !17
  %622 = load ptr, ptr %4, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.aiMesh, ptr %622, i32 0, i32 1
  store i32 %621, ptr %623, align 4, !tbaa !9
  %624 = load ptr, ptr %4, align 8, !tbaa !5
  %625 = call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %624)
  br i1 %625, label %626, label %636

626:                                              ; preds = %620
  %627 = load ptr, ptr %4, align 8, !tbaa !5
  %628 = getelementptr inbounds %struct.aiMesh, ptr %627, i32 0, i32 4
  %629 = load ptr, ptr %628, align 8, !tbaa !41
  %630 = icmp eq ptr %629, null
  br i1 %630, label %632, label %631

631:                                              ; preds = %626
  call void @_ZdaPv(ptr noundef %629) #11
  br label %632

632:                                              ; preds = %631, %626
  %633 = load ptr, ptr %8, align 8, !tbaa !5
  %634 = load ptr, ptr %4, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.aiMesh, ptr %634, i32 0, i32 4
  store ptr %633, ptr %635, align 8, !tbaa !41
  br label %636

636:                                              ; preds = %632, %620
  %637 = load ptr, ptr %4, align 8, !tbaa !5
  %638 = call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %637)
  br i1 %638, label %639, label %658

639:                                              ; preds = %636
  %640 = load ptr, ptr %4, align 8, !tbaa !5
  %641 = getelementptr inbounds %struct.aiMesh, ptr %640, i32 0, i32 5
  %642 = load ptr, ptr %641, align 8, !tbaa !42
  %643 = icmp eq ptr %642, null
  br i1 %643, label %645, label %644

644:                                              ; preds = %639
  call void @_ZdaPv(ptr noundef %642) #11
  br label %645

645:                                              ; preds = %644, %639
  %646 = load ptr, ptr %9, align 8, !tbaa !5
  %647 = load ptr, ptr %4, align 8, !tbaa !5
  %648 = getelementptr inbounds %struct.aiMesh, ptr %647, i32 0, i32 5
  store ptr %646, ptr %648, align 8, !tbaa !42
  %649 = load ptr, ptr %4, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.aiMesh, ptr %649, i32 0, i32 6
  %651 = load ptr, ptr %650, align 8, !tbaa !43
  %652 = icmp eq ptr %651, null
  br i1 %652, label %654, label %653

653:                                              ; preds = %645
  call void @_ZdaPv(ptr noundef %651) #11
  br label %654

654:                                              ; preds = %653, %645
  %655 = load ptr, ptr %10, align 8, !tbaa !5
  %656 = load ptr, ptr %4, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.aiMesh, ptr %656, i32 0, i32 6
  store ptr %655, ptr %657, align 8, !tbaa !43
  br label %658

658:                                              ; preds = %654, %636
  %659 = load ptr, ptr %4, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.aiMesh, ptr %659, i32 0, i32 1
  %661 = load i32, ptr %660, align 4, !tbaa !9
  %662 = load i32, ptr %5, align 4, !tbaa !17
  %663 = icmp ne i32 %661, %662
  store i32 1, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #9
  ret i1 %663
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { builtin nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 4}
!10 = !{!"_ZTS6aiMesh", !11, i64 0, !11, i64 4, !11, 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, !11, i64 216, !6, i64 224, !11, i64 232, !12, i64 236, !11, i64 1264, !6, i64 1272, !13, i64 1280, !14, i64 1284, !6, i64 1312}
!11 = !{!"int", !7, i64 0}
!12 = !{!"_ZTS8aiString", !11, i64 0, !7, i64 4}
!13 = !{!"_ZTS16aiMorphingMethod", !7, i64 0}
!14 = !{!"_ZTS6aiAABB", !15, i64 0, !15, i64 12}
!15 = !{!"_ZTS10aiVector3tIfE", !16, i64 0, !16, i64 4, !16, i64 8}
!16 = !{!"float", !7, i64 0}
!17 = !{!11, !11, i64 0}
!18 = !{!10, !11, i64 8}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = !{!10, !11, i64 216}
!23 = !{!10, !6, i64 224}
!24 = !{!25, !11, i64 1028}
!25 = !{!"_ZTS6aiBone", !12, i64 0, !11, i64 1028, !6, i64 1032, !6, i64 1040, !6, i64 1048, !26, i64 1056}
!26 = !{!"_ZTS12aiMatrix4x4tIfE", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12, !16, i64 16, !16, i64 20, !16, i64 24, !16, i64 28, !16, i64 32, !16, i64 36, !16, i64 40, !16, i64 44, !16, i64 48, !16, i64 52, !16, i64 56, !16, i64 60}
!27 = distinct !{!27, !20}
!28 = !{!10, !6, i64 208}
!29 = !{!30, !11, i64 0}
!30 = !{!"_ZTS6aiFace", !11, i64 0, !6, i64 8}
!31 = !{!25, !6, i64 1048}
!32 = !{!30, !6, i64 8}
!33 = !{!34, !11, i64 0}
!34 = !{!"_ZTS14aiVertexWeight", !11, i64 0, !16, i64 4}
!35 = !{!34, !16, i64 4}
!36 = distinct !{!36, !20}
!37 = distinct !{!37, !20}
!38 = !{!10, !6, i64 16}
!39 = !{i64 0, i64 4, !40, i64 4, i64 4, !40, i64 8, i64 4, !40}
!40 = !{!16, !16, i64 0}
!41 = !{!10, !6, i64 24}
!42 = !{!10, !6, i64 32}
!43 = !{!10, !6, i64 40}
!44 = distinct !{!44, !20}
!45 = !{i64 0, i64 4, !40, i64 4, i64 4, !40, i64 8, i64 4, !40, i64 12, i64 4, !40}
!46 = distinct !{!46, !20}
!47 = distinct !{!47, !20}
!48 = distinct !{!48, !20}
!49 = distinct !{!49, !20}
!50 = distinct !{!50, !20}
!51 = distinct !{!51, !20}


; 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.aiVertexWeight = type { i32, float }
%class.aiVector3t = type { float, float, float }
%class.aiColor4t = type { float, float, float, float }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<aiVertexWeight, std::allocator<aiVertexWeight>>::_Vector_impl" }
%"struct.std::_Vector_base<aiVertexWeight, std::allocator<aiVertexWeight>>::_Vector_impl" = type { %"struct.std::_Vector_base<aiVertexWeight, std::allocator<aiVertexWeight>>::_Vector_impl_data" }
%"struct.std::_Vector_base<aiVertexWeight, std::allocator<aiVertexWeight>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.aiFace = type { i32, ptr }

@.str.1 = external hidden unnamed_addr constant [126 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [18 x i8], align 1

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN6Assimp24MakeVerboseFormatProcess17MakeVerboseFormatEP6aiMesh(ptr nocapture noundef nonnull readnone align 8 dereferenceable(24) %0, ptr noundef %1) local_unnamed_addr #2 align 2 {
  %3 = alloca [8 x ptr], align 16
  %4 = alloca [8 x ptr], align 16
  %5 = alloca %struct.aiVertexWeight, align 4
  %.not = icmp eq ptr %1, null
  br i1 %.not, label %6, label %7

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

7:                                                ; preds = %6, %2
  %8 = getelementptr inbounds i8, ptr %1, i64 4
  %9 = load i32, ptr %8, align 4, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %1, i64 8
  %11 = load i32, ptr %10, align 8, !tbaa !16
  %12 = mul i32 %11, 3
  %13 = zext i32 %12 to i64
  %14 = mul nuw nsw i64 %13, 12
  %15 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %14) #8
  %16 = icmp eq i32 %11, 0
  br i1 %16, label %.loopexit194, label %17

17:                                               ; preds = %7
  %18 = getelementptr inbounds %class.aiVector3t, ptr %15, i64 %13
  br label %19

19:                                               ; preds = %19, %17
  %20 = phi ptr [ %15, %17 ], [ %21, %19 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %20) #9
  %21 = getelementptr inbounds i8, ptr %20, i64 12
  %22 = icmp eq ptr %21, %18
  br i1 %22, label %.loopexit194, label %19

.loopexit194:                                     ; preds = %19, %7
  %23 = tail call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %1)
  br i1 %23, label %24, label %.loopexit193

24:                                               ; preds = %.loopexit194
  %25 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %14) #8
  br i1 %16, label %.loopexit193, label %26

26:                                               ; preds = %24
  %27 = getelementptr inbounds %class.aiVector3t, ptr %25, i64 %13
  br label %28

28:                                               ; preds = %28, %26
  %29 = phi ptr [ %25, %26 ], [ %30, %28 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %29) #9
  %30 = getelementptr inbounds i8, ptr %29, i64 12
  %31 = icmp eq ptr %30, %27
  br i1 %31, label %.loopexit193, label %28

.loopexit193:                                     ; preds = %28, %24, %.loopexit194
  %.0 = phi ptr [ null, %.loopexit194 ], [ %25, %24 ], [ %25, %28 ]
  %32 = tail call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %1)
  br i1 %32, label %33, label %.loopexit192

33:                                               ; preds = %.loopexit193
  %34 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %14) #8
  br i1 %16, label %.thread, label %36

.thread:                                          ; preds = %33
  %35 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %14) #8
  br label %.loopexit192

36:                                               ; preds = %33
  %37 = getelementptr inbounds %class.aiVector3t, ptr %34, i64 %13
  br label %38

38:                                               ; preds = %38, %36
  %39 = phi ptr [ %34, %36 ], [ %40, %38 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %39) #9
  %40 = getelementptr inbounds i8, ptr %39, i64 12
  %41 = icmp eq ptr %40, %37
  br i1 %41, label %42, label %38

42:                                               ; preds = %38
  %43 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %14) #8
  %44 = getelementptr inbounds %class.aiVector3t, ptr %43, i64 %13
  br label %45

45:                                               ; preds = %45, %42
  %46 = phi ptr [ %43, %42 ], [ %47, %45 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %46) #9
  %47 = getelementptr inbounds i8, ptr %46, i64 12
  %48 = icmp eq ptr %47, %44
  br i1 %48, label %.loopexit192, label %45

.loopexit192:                                     ; preds = %45, %.thread, %.loopexit193
  %.0159 = phi ptr [ null, %.loopexit193 ], [ %35, %.thread ], [ %43, %45 ]
  %.0155 = phi ptr [ null, %.loopexit193 ], [ %34, %.thread ], [ %34, %45 ]
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %3) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %3, i8 0, i64 64, i1 false)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %4) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %4, i8 0, i64 64, i1 false)
  %49 = tail call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 0)
  br i1 %49, label %.lr.ph, label %.preheader190

.preheader190:                                    ; preds = %.loopexit191, %.loopexit192
  %50 = tail call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 0)
  br i1 %50, label %.lr.ph197, label %._crit_edge

.lr.ph197:                                        ; preds = %.preheader190
  %51 = shl nuw nsw i64 %13, 4
  br label %63

.lr.ph:                                           ; preds = %.loopexit192, %.loopexit191
  %.0164195 = phi i32 [ %59, %.loopexit191 ], [ 0, %.loopexit192 ]
  %52 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %14) #8
  br i1 %16, label %.loopexit191, label %53

53:                                               ; preds = %.lr.ph
  %54 = getelementptr inbounds %class.aiVector3t, ptr %52, i64 %13
  br label %55

55:                                               ; preds = %55, %53
  %56 = phi ptr [ %52, %53 ], [ %57, %55 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %56) #9
  %57 = getelementptr inbounds i8, ptr %56, i64 12
  %58 = icmp eq ptr %57, %54
  br i1 %58, label %.loopexit191, label %55

.loopexit191:                                     ; preds = %55, %.lr.ph
  %59 = add i32 %.0164195, 1
  %60 = zext i32 %.0164195 to i64
  %61 = getelementptr inbounds [8 x ptr], ptr %3, i64 0, i64 %60
  store ptr %52, ptr %61, align 8, !tbaa !17
  %62 = tail call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef %59)
  br i1 %62, label %.lr.ph, label %.preheader190, !llvm.loop !18

63:                                               ; preds = %.lr.ph197, %.loopexit189
  %.1165196 = phi i32 [ 0, %.lr.ph197 ], [ %71, %.loopexit189 ]
  %64 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %51) #8
  br i1 %16, label %.loopexit189, label %65

65:                                               ; preds = %63
  %66 = getelementptr inbounds %class.aiColor4t, ptr %64, i64 %13
  br label %67

67:                                               ; preds = %67, %65
  %68 = phi ptr [ %64, %65 ], [ %69, %67 ]
  tail call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %68) #9
  %69 = getelementptr inbounds i8, ptr %68, i64 16
  %70 = icmp eq ptr %69, %66
  br i1 %70, label %.loopexit189, label %67

.loopexit189:                                     ; preds = %67, %63
  %71 = add i32 %.1165196, 1
  %72 = zext i32 %.1165196 to i64
  %73 = getelementptr inbounds [8 x ptr], ptr %4, i64 0, i64 %72
  store ptr %64, ptr %73, align 8, !tbaa !17
  %74 = tail call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef %71)
  br i1 %74, label %63, label %._crit_edge, !llvm.loop !20

._crit_edge:                                      ; preds = %.loopexit189, %.preheader190
  %75 = getelementptr inbounds i8, ptr %1, i64 216
  %76 = load i32, ptr %75, align 8, !tbaa !21
  %77 = zext i32 %76 to i64
  %78 = mul nuw nsw i64 %77, 24
  %79 = add nuw nsw i64 %78, 8
  %80 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %79) #8
  store i64 %77, ptr %80, align 16
  %.ptr = getelementptr inbounds i8, ptr %80, i64 8
  %81 = icmp eq i32 %76, 0
  br i1 %81, label %.preheader187, label %82

82:                                               ; preds = %._crit_edge
  %83 = getelementptr inbounds %"class.std::vector", ptr %.ptr, i64 %77
  br label %84

84:                                               ; preds = %84, %82
  %85 = phi ptr [ %.ptr, %82 ], [ %86, %84 ]
  tail call void @_ZNSt6vectorI14aiVertexWeightSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %85) #9
  %86 = getelementptr inbounds i8, ptr %85, i64 24
  %87 = icmp eq ptr %86, %83
  br i1 %87, label %.loopexit188, label %84

.loopexit188:                                     ; preds = %84
  %.pre = load i32, ptr %75, align 8, !tbaa !21
  %.not227 = icmp eq i32 %.pre, 0
  br i1 %.not227, label %.preheader187, label %.lr.ph200

.lr.ph200:                                        ; preds = %.loopexit188
  %88 = getelementptr inbounds i8, ptr %1, i64 224
  br label %100

.preheader187:                                    ; preds = %100, %._crit_edge, %.loopexit188
  %89 = phi i32 [ 0, %.loopexit188 ], [ 0, %._crit_edge ], [ %109, %100 ]
  %90 = load i32, ptr %10, align 8, !tbaa !16
  %.not228 = icmp eq i32 %90, 0
  br i1 %.not228, label %.preheader183, label %.lr.ph217

.lr.ph217:                                        ; preds = %.preheader187
  %91 = getelementptr inbounds i8, ptr %1, i64 208
  %92 = getelementptr inbounds i8, ptr %1, i64 224
  %93 = getelementptr inbounds i8, ptr %5, i64 4
  %94 = getelementptr inbounds i8, ptr %1, i64 16
  %95 = getelementptr inbounds i8, ptr %1, i64 24
  %96 = getelementptr inbounds i8, ptr %1, i64 32
  %97 = getelementptr inbounds i8, ptr %1, i64 40
  %98 = getelementptr inbounds i8, ptr %1, i64 112
  %99 = getelementptr inbounds i8, ptr %1, i64 48
  br label %114

100:                                              ; preds = %.lr.ph200, %100
  %indvars.iv = phi i64 [ 0, %.lr.ph200 ], [ %indvars.iv.next, %100 ]
  %101 = getelementptr inbounds %"class.std::vector", ptr %.ptr, i64 %indvars.iv
  %102 = load ptr, ptr %88, align 8, !tbaa !22
  %103 = getelementptr inbounds ptr, ptr %102, i64 %indvars.iv
  %104 = load ptr, ptr %103, align 8, !tbaa !17
  %105 = getelementptr inbounds i8, ptr %104, i64 1028
  %106 = load i32, ptr %105, align 4, !tbaa !23
  %107 = mul i32 %106, 3
  %108 = zext i32 %107 to i64
  tail call void @_ZNSt6vectorI14aiVertexWeightSaIS0_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %101, i64 noundef %108)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %109 = load i32, ptr %75, align 8, !tbaa !21
  %110 = zext i32 %109 to i64
  %111 = icmp ult i64 %indvars.iv.next, %110
  br i1 %111, label %100, label %.preheader187, !llvm.loop !26

.preheader183.loopexit:                           ; preds = %._crit_edge214
  %.pre253 = load i32, ptr %75, align 8, !tbaa !21
  br label %.preheader183

.preheader183:                                    ; preds = %.preheader183.loopexit, %.preheader187
  %112 = phi i32 [ %.pre253, %.preheader183.loopexit ], [ %89, %.preheader187 ]
  %.not232 = icmp eq i32 %112, 0
  br i1 %.not232, label %._crit_edge220, label %.lr.ph219

.lr.ph219:                                        ; preds = %.preheader183
  %113 = getelementptr inbounds i8, ptr %1, i64 224
  br label %228

114:                                              ; preds = %.lr.ph217, %._crit_edge214
  %115 = phi i32 [ %90, %.lr.ph217 ], [ %121, %._crit_edge214 ]
  %indvars.iv243 = phi i64 [ 0, %.lr.ph217 ], [ %indvars.iv.next244, %._crit_edge214 ]
  %.0161215 = phi i32 [ 0, %.lr.ph217 ], [ %.1162.lcssa, %._crit_edge214 ]
  %116 = load ptr, ptr %91, align 8, !tbaa !27
  %117 = getelementptr inbounds %struct.aiFace, ptr %116, i64 %indvars.iv243
  %118 = load i32, ptr %117, align 8, !tbaa !28
  %.not229 = icmp eq i32 %118, 0
  br i1 %.not229, label %._crit_edge214, label %.preheader186.lr.ph

.preheader186.lr.ph:                              ; preds = %114
  %119 = getelementptr inbounds i8, ptr %117, i64 8
  br label %.preheader186

.preheader186:                                    ; preds = %.preheader186.lr.ph, %._crit_edge211
  %indvars.iv240 = phi i64 [ 0, %.preheader186.lr.ph ], [ %indvars.iv.next241, %._crit_edge211 ]
  %.1162212 = phi i32 [ %.0161215, %.preheader186.lr.ph ], [ %224, %._crit_edge211 ]
  %120 = load i32, ptr %75, align 8, !tbaa !21
  %.not230 = icmp eq i32 %120, 0
  br i1 %.not230, label %._crit_edge205, label %.preheader184.lr.ph

.preheader184.lr.ph:                              ; preds = %.preheader186
  %.pre249 = load ptr, ptr %92, align 8, !tbaa !22
  br label %.preheader184

._crit_edge214.loopexit:                          ; preds = %._crit_edge211
  %.pre252 = load i32, ptr %10, align 8, !tbaa !16
  br label %._crit_edge214

._crit_edge214:                                   ; preds = %._crit_edge214.loopexit, %114
  %121 = phi i32 [ %115, %114 ], [ %.pre252, %._crit_edge214.loopexit ]
  %.1162.lcssa = phi i32 [ %.0161215, %114 ], [ %224, %._crit_edge214.loopexit ]
  %indvars.iv.next244 = add nuw nsw i64 %indvars.iv243, 1
  %122 = zext i32 %121 to i64
  %123 = icmp ult i64 %indvars.iv.next244, %122
  br i1 %123, label %114, label %.preheader183.loopexit, !llvm.loop !30

.preheader184:                                    ; preds = %.preheader184.lr.ph, %._crit_edge203
  %124 = phi i32 [ %120, %.preheader184.lr.ph ], [ %141, %._crit_edge203 ]
  %125 = phi ptr [ %.pre249, %.preheader184.lr.ph ], [ %142, %._crit_edge203 ]
  %126 = phi ptr [ %.pre249, %.preheader184.lr.ph ], [ %143, %._crit_edge203 ]
  %indvars.iv237 = phi i64 [ 0, %.preheader184.lr.ph ], [ %indvars.iv.next238, %._crit_edge203 ]
  %127 = getelementptr inbounds ptr, ptr %126, i64 %indvars.iv237
  %128 = load ptr, ptr %127, align 8, !tbaa !17
  %129 = getelementptr inbounds i8, ptr %128, i64 1028
  %130 = load i32, ptr %129, align 4, !tbaa !23
  %.not231 = icmp eq i32 %130, 0
  br i1 %.not231, label %._crit_edge203, label %.lr.ph202

.lr.ph202:                                        ; preds = %.preheader184
  %131 = getelementptr inbounds %"class.std::vector", ptr %.ptr, i64 %indvars.iv237
  br label %146

._crit_edge205:                                   ; preds = %._crit_edge203, %.preheader186
  %132 = load ptr, ptr %94, align 8, !tbaa !31
  %133 = load ptr, ptr %119, align 8, !tbaa !32
  %134 = getelementptr inbounds i32, ptr %133, i64 %indvars.iv240
  %135 = load i32, ptr %134, align 4, !tbaa !33
  %136 = zext i32 %135 to i64
  %137 = getelementptr inbounds %class.aiVector3t, ptr %132, i64 %136
  %138 = zext i32 %.1162212 to i64
  %139 = getelementptr inbounds %class.aiVector3t, ptr %15, i64 %138
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %139, ptr noundef nonnull align 4 dereferenceable(12) %137, i64 12, i1 false), !tbaa.struct !34
  %140 = call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %1)
  br i1 %140, label %168, label %176

._crit_edge203.loopexit:                          ; preds = %160
  %.pre251 = load i32, ptr %75, align 8, !tbaa !21
  br label %._crit_edge203

._crit_edge203:                                   ; preds = %._crit_edge203.loopexit, %.preheader184
  %141 = phi i32 [ %.pre251, %._crit_edge203.loopexit ], [ %124, %.preheader184 ]
  %142 = phi ptr [ %161, %._crit_edge203.loopexit ], [ %125, %.preheader184 ]
  %143 = phi ptr [ %161, %._crit_edge203.loopexit ], [ %126, %.preheader184 ]
  %indvars.iv.next238 = add nuw nsw i64 %indvars.iv237, 1
  %144 = zext i32 %141 to i64
  %145 = icmp ult i64 %indvars.iv.next238, %144
  br i1 %145, label %.preheader184, label %._crit_edge205, !llvm.loop !36

146:                                              ; preds = %.lr.ph202, %160
  %147 = phi ptr [ %125, %.lr.ph202 ], [ %161, %160 ]
  %indvars.iv234 = phi i64 [ 0, %.lr.ph202 ], [ %indvars.iv.next235, %160 ]
  %148 = phi ptr [ %128, %.lr.ph202 ], [ %163, %160 ]
  %149 = getelementptr inbounds i8, ptr %148, i64 1048
  %150 = load ptr, ptr %149, align 8, !tbaa !37
  %151 = getelementptr inbounds %struct.aiVertexWeight, ptr %150, i64 %indvars.iv234
  %152 = load ptr, ptr %119, align 8, !tbaa !32
  %153 = getelementptr inbounds i32, ptr %152, i64 %indvars.iv240
  %154 = load i32, ptr %153, align 4, !tbaa !33
  %155 = load i32, ptr %151, align 4, !tbaa !38
  %156 = icmp eq i32 %154, %155
  br i1 %156, label %157, label %160

157:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #9
  call void @_ZN14aiVertexWeightC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %5) #9
  store i32 %.1162212, ptr %5, align 4, !tbaa !38
  %158 = getelementptr inbounds i8, ptr %151, i64 4
  %159 = load float, ptr %158, align 4, !tbaa !40
  store float %159, ptr %93, align 4, !tbaa !40
  call void @_ZNSt6vectorI14aiVertexWeightSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %131, ptr noundef nonnull align 4 dereferenceable(8) %5)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #9
  %.pre250 = load ptr, ptr %92, align 8, !tbaa !22
  br label %160

160:                                              ; preds = %157, %146
  %161 = phi ptr [ %.pre250, %157 ], [ %147, %146 ]
  %indvars.iv.next235 = add nuw nsw i64 %indvars.iv234, 1
  %162 = getelementptr inbounds ptr, ptr %161, i64 %indvars.iv237
  %163 = load ptr, ptr %162, align 8, !tbaa !17
  %164 = getelementptr inbounds i8, ptr %163, i64 1028
  %165 = load i32, ptr %164, align 4, !tbaa !23
  %166 = zext i32 %165 to i64
  %167 = icmp ult i64 %indvars.iv.next235, %166
  br i1 %167, label %146, label %._crit_edge203.loopexit, !llvm.loop !41

168:                                              ; preds = %._crit_edge205
  %169 = load ptr, ptr %95, align 8, !tbaa !42
  %170 = load ptr, ptr %119, align 8, !tbaa !32
  %171 = getelementptr inbounds i32, ptr %170, i64 %indvars.iv240
  %172 = load i32, ptr %171, align 4, !tbaa !33
  %173 = zext i32 %172 to i64
  %174 = getelementptr inbounds %class.aiVector3t, ptr %169, i64 %173
  %175 = getelementptr inbounds %class.aiVector3t, ptr %.0, i64 %138
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %175, ptr noundef nonnull align 4 dereferenceable(12) %174, i64 12, i1 false), !tbaa.struct !34
  br label %176

176:                                              ; preds = %168, %._crit_edge205
  %177 = call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %1)
  br i1 %177, label %178, label %193

178:                                              ; preds = %176
  %179 = load ptr, ptr %96, align 8, !tbaa !43
  %180 = load ptr, ptr %119, align 8, !tbaa !32
  %181 = getelementptr inbounds i32, ptr %180, i64 %indvars.iv240
  %182 = load i32, ptr %181, align 4, !tbaa !33
  %183 = zext i32 %182 to i64
  %184 = getelementptr inbounds %class.aiVector3t, ptr %179, i64 %183
  %185 = getelementptr inbounds %class.aiVector3t, ptr %.0155, i64 %138
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %185, ptr noundef nonnull align 4 dereferenceable(12) %184, i64 12, i1 false), !tbaa.struct !34
  %186 = load ptr, ptr %97, align 8, !tbaa !44
  %187 = load ptr, ptr %119, align 8, !tbaa !32
  %188 = getelementptr inbounds i32, ptr %187, i64 %indvars.iv240
  %189 = load i32, ptr %188, align 4, !tbaa !33
  %190 = zext i32 %189 to i64
  %191 = getelementptr inbounds %class.aiVector3t, ptr %186, i64 %190
  %192 = getelementptr inbounds %class.aiVector3t, ptr %.0159, i64 %138
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %192, ptr noundef nonnull align 4 dereferenceable(12) %191, i64 12, i1 false), !tbaa.struct !34
  br label %193

193:                                              ; preds = %178, %176
  %194 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 0)
  br i1 %194, label %.lr.ph208, label %.preheader185

.preheader185:                                    ; preds = %.lr.ph208, %193
  %195 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 0)
  br i1 %195, label %.lr.ph210, label %._crit_edge211

.lr.ph208:                                        ; preds = %193, %.lr.ph208
  %.0154206 = phi i32 [ %207, %.lr.ph208 ], [ 0, %193 ]
  %196 = zext i32 %.0154206 to i64
  %197 = getelementptr inbounds [8 x ptr], ptr %98, i64 0, i64 %196
  %198 = load ptr, ptr %197, align 8, !tbaa !17
  %199 = load ptr, ptr %119, align 8, !tbaa !32
  %200 = getelementptr inbounds i32, ptr %199, i64 %indvars.iv240
  %201 = load i32, ptr %200, align 4, !tbaa !33
  %202 = zext i32 %201 to i64
  %203 = getelementptr inbounds %class.aiVector3t, ptr %198, i64 %202
  %204 = getelementptr inbounds [8 x ptr], ptr %3, i64 0, i64 %196
  %205 = load ptr, ptr %204, align 8, !tbaa !17
  %206 = getelementptr inbounds %class.aiVector3t, ptr %205, i64 %138
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %206, ptr noundef nonnull align 4 dereferenceable(12) %203, i64 12, i1 false), !tbaa.struct !34
  %207 = add i32 %.0154206, 1
  %208 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef %207)
  br i1 %208, label %.lr.ph208, label %.preheader185, !llvm.loop !45

.lr.ph210:                                        ; preds = %.preheader185, %.lr.ph210
  %.1209 = phi i32 [ %220, %.lr.ph210 ], [ 0, %.preheader185 ]
  %209 = zext i32 %.1209 to i64
  %210 = getelementptr inbounds [8 x ptr], ptr %99, i64 0, i64 %209
  %211 = load ptr, ptr %210, align 8, !tbaa !17
  %212 = load ptr, ptr %119, align 8, !tbaa !32
  %213 = getelementptr inbounds i32, ptr %212, i64 %indvars.iv240
  %214 = load i32, ptr %213, align 4, !tbaa !33
  %215 = zext i32 %214 to i64
  %216 = getelementptr inbounds %class.aiColor4t, ptr %211, i64 %215
  %217 = getelementptr inbounds [8 x ptr], ptr %4, i64 0, i64 %209
  %218 = load ptr, ptr %217, align 8, !tbaa !17
  %219 = getelementptr inbounds %class.aiColor4t, ptr %218, i64 %138
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %219, ptr noundef nonnull align 4 dereferenceable(16) %216, i64 16, i1 false), !tbaa.struct !46
  %220 = add i32 %.1209, 1
  %221 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef %220)
  br i1 %221, label %.lr.ph210, label %._crit_edge211, !llvm.loop !47

._crit_edge211:                                   ; preds = %.lr.ph210, %.preheader185
  %222 = load ptr, ptr %119, align 8, !tbaa !32
  %223 = getelementptr inbounds i32, ptr %222, i64 %indvars.iv240
  store i32 %.1162212, ptr %223, align 4, !tbaa !33
  %indvars.iv.next241 = add nuw nsw i64 %indvars.iv240, 1
  %224 = add i32 %.1162212, 1
  %225 = load i32, ptr %117, align 8, !tbaa !28
  %226 = zext i32 %225 to i64
  %227 = icmp ult i64 %indvars.iv.next241, %226
  br i1 %227, label %.preheader186, label %._crit_edge214.loopexit, !llvm.loop !48

228:                                              ; preds = %.lr.ph219, %275
  %indvars.iv246 = phi i64 [ 0, %.lr.ph219 ], [ %indvars.iv.next247, %275 ]
  %229 = load ptr, ptr %113, align 8, !tbaa !22
  %230 = getelementptr inbounds ptr, ptr %229, i64 %indvars.iv246
  %231 = load ptr, ptr %230, align 8, !tbaa !17
  %232 = getelementptr inbounds i8, ptr %231, i64 1048
  %233 = load ptr, ptr %232, align 8, !tbaa !37
  %234 = icmp eq ptr %233, null
  br i1 %234, label %236, label %235

235:                                              ; preds = %228
  call void @_ZdaPv(ptr noundef nonnull %233) #10
  br label %236

236:                                              ; preds = %235, %228
  %237 = getelementptr inbounds %"class.std::vector", ptr %.ptr, i64 %indvars.iv246
  %238 = call noundef zeroext i1 @_ZNKSt6vectorI14aiVertexWeightSaIS0_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %237) #9
  br i1 %238, label %270, label %239

239:                                              ; preds = %236
  %240 = call noundef i64 @_ZNKSt6vectorI14aiVertexWeightSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %237) #9
  %241 = icmp ugt i64 %240, 2305843009213693951
  %242 = shl nuw i64 %240, 3
  %243 = select i1 %241, i64 -1, i64 %242
  %244 = call noalias noundef nonnull ptr @_Znam(i64 noundef %243) #8
  %245 = icmp eq i64 %240, 0
  br i1 %245, label %.loopexit182, label %246

246:                                              ; preds = %239
  %247 = getelementptr inbounds %struct.aiVertexWeight, ptr %244, i64 %240
  br label %248

248:                                              ; preds = %248, %246
  %249 = phi ptr [ %244, %246 ], [ %250, %248 ]
  call void @_ZN14aiVertexWeightC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %249) #9
  %250 = getelementptr inbounds i8, ptr %249, i64 8
  %251 = icmp eq ptr %250, %247
  br i1 %251, label %.loopexit182, label %248

.loopexit182:                                     ; preds = %248, %239
  %252 = load ptr, ptr %113, align 8, !tbaa !22
  %253 = getelementptr inbounds ptr, ptr %252, i64 %indvars.iv246
  %254 = load ptr, ptr %253, align 8, !tbaa !17
  %255 = getelementptr inbounds i8, ptr %254, i64 1048
  store ptr %244, ptr %255, align 8, !tbaa !37
  %256 = call noundef i64 @_ZNKSt6vectorI14aiVertexWeightSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %237) #9
  %257 = trunc i64 %256 to i32
  %258 = load ptr, ptr %113, align 8, !tbaa !22
  %259 = getelementptr inbounds ptr, ptr %258, i64 %indvars.iv246
  %260 = load ptr, ptr %259, align 8, !tbaa !17
  %261 = getelementptr inbounds i8, ptr %260, i64 1028
  store i32 %257, ptr %261, align 4, !tbaa !23
  %262 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI14aiVertexWeightSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %237, i64 noundef 0) #9
  %263 = load ptr, ptr %113, align 8, !tbaa !22
  %264 = getelementptr inbounds ptr, ptr %263, i64 %indvars.iv246
  %265 = load ptr, ptr %264, align 8, !tbaa !17
  %266 = getelementptr inbounds i8, ptr %265, i64 1048
  %267 = load ptr, ptr %266, align 8, !tbaa !37
  %268 = call noundef i64 @_ZNKSt6vectorI14aiVertexWeightSaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %237) #9
  %269 = shl i64 %268, 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %267, ptr nonnull align 4 %262, i64 %269, i1 false)
  br label %275

270:                                              ; preds = %236
  %271 = load ptr, ptr %113, align 8, !tbaa !22
  %272 = getelementptr inbounds ptr, ptr %271, i64 %indvars.iv246
  %273 = load ptr, ptr %272, align 8, !tbaa !17
  %274 = getelementptr inbounds i8, ptr %273, i64 1048
  store ptr null, ptr %274, align 8, !tbaa !37
  br label %275

275:                                              ; preds = %.loopexit182, %270
  %indvars.iv.next247 = add nuw nsw i64 %indvars.iv246, 1
  %276 = load i32, ptr %75, align 8, !tbaa !21
  %277 = zext i32 %276 to i64
  %278 = icmp ult i64 %indvars.iv.next247, %277
  br i1 %278, label %228, label %._crit_edge220, !llvm.loop !49

._crit_edge220:                                   ; preds = %275, %.preheader183
  %279 = load i64, ptr %80, align 8
  %.idx = mul i64 %279, 24
  %280 = icmp eq i64 %279, 0
  br i1 %280, label %.loopexit, label %.preheader181.preheader

.preheader181.preheader:                          ; preds = %._crit_edge220
  %281 = getelementptr i8, ptr %80, i64 %.idx
  %.ptr180 = getelementptr i8, ptr %281, i64 8
  br label %.preheader181

.preheader181:                                    ; preds = %.preheader181.preheader, %.preheader181
  %282 = phi ptr [ %283, %.preheader181 ], [ %.ptr180, %.preheader181.preheader ]
  %283 = getelementptr inbounds i8, ptr %282, i64 -24
  call void @_ZNSt6vectorI14aiVertexWeightSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %283) #9
  %284 = icmp eq ptr %283, %.ptr
  br i1 %284, label %.loopexit, label %.preheader181

.loopexit:                                        ; preds = %.preheader181, %._crit_edge220
  %285 = add i64 %.idx, 8
  call void @_ZdaPvm(ptr noundef nonnull %80, i64 noundef %285) #10
  %286 = getelementptr inbounds i8, ptr %1, i64 16
  %287 = load ptr, ptr %286, align 8, !tbaa !31
  %288 = icmp eq ptr %287, null
  br i1 %288, label %290, label %289

289:                                              ; preds = %.loopexit
  call void @_ZdaPv(ptr noundef nonnull %287) #10
  br label %290

290:                                              ; preds = %289, %.loopexit
  store ptr %15, ptr %286, align 8, !tbaa !31
  %291 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 0)
  br i1 %291, label %.lr.ph223, label %.preheader

.lr.ph223:                                        ; preds = %290
  %292 = getelementptr inbounds i8, ptr %1, i64 112
  br label %295

.preheader:                                       ; preds = %301, %290
  %293 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 0)
  br i1 %293, label %.lr.ph225, label %._crit_edge226

.lr.ph225:                                        ; preds = %.preheader
  %294 = getelementptr inbounds i8, ptr %1, i64 48
  br label %306

295:                                              ; preds = %.lr.ph223, %301
  %.2221 = phi i32 [ 0, %.lr.ph223 ], [ %304, %301 ]
  %296 = zext i32 %.2221 to i64
  %297 = getelementptr inbounds [8 x ptr], ptr %292, i64 0, i64 %296
  %298 = load ptr, ptr %297, align 8, !tbaa !17
  %299 = icmp eq ptr %298, null
  br i1 %299, label %301, label %300

300:                                              ; preds = %295
  call void @_ZdaPv(ptr noundef nonnull %298) #10
  br label %301

301:                                              ; preds = %300, %295
  %302 = getelementptr inbounds [8 x ptr], ptr %3, i64 0, i64 %296
  %303 = load ptr, ptr %302, align 8, !tbaa !17
  store ptr %303, ptr %297, align 8, !tbaa !17
  %304 = add i32 %.2221, 1
  %305 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef %304)
  br i1 %305, label %295, label %.preheader, !llvm.loop !50

306:                                              ; preds = %.lr.ph225, %312
  %.3224 = phi i32 [ 0, %.lr.ph225 ], [ %315, %312 ]
  %307 = zext i32 %.3224 to i64
  %308 = getelementptr inbounds [8 x ptr], ptr %294, i64 0, i64 %307
  %309 = load ptr, ptr %308, align 8, !tbaa !17
  %310 = icmp eq ptr %309, null
  br i1 %310, label %312, label %311

311:                                              ; preds = %306
  call void @_ZdaPv(ptr noundef nonnull %309) #10
  br label %312

312:                                              ; preds = %311, %306
  %313 = getelementptr inbounds [8 x ptr], ptr %4, i64 0, i64 %307
  %314 = load ptr, ptr %313, align 8, !tbaa !17
  store ptr %314, ptr %308, align 8, !tbaa !17
  %315 = add i32 %.3224, 1
  %316 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef %315)
  br i1 %316, label %306, label %._crit_edge226, !llvm.loop !51

._crit_edge226:                                   ; preds = %312, %.preheader
  store i32 %12, ptr %8, align 4, !tbaa !5
  %317 = call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %1)
  br i1 %317, label %318, label %324

318:                                              ; preds = %._crit_edge226
  %319 = getelementptr inbounds i8, ptr %1, i64 24
  %320 = load ptr, ptr %319, align 8, !tbaa !42
  %321 = icmp eq ptr %320, null
  br i1 %321, label %323, label %322

322:                                              ; preds = %318
  call void @_ZdaPv(ptr noundef nonnull %320) #10
  br label %323

323:                                              ; preds = %322, %318
  store ptr %.0, ptr %319, align 8, !tbaa !42
  br label %324

324:                                              ; preds = %323, %._crit_edge226
  %325 = call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %1)
  br i1 %325, label %326, label %337

326:                                              ; preds = %324
  %327 = getelementptr inbounds i8, ptr %1, i64 32
  %328 = load ptr, ptr %327, align 8, !tbaa !43
  %329 = icmp eq ptr %328, null
  br i1 %329, label %331, label %330

330:                                              ; preds = %326
  call void @_ZdaPv(ptr noundef nonnull %328) #10
  br label %331

331:                                              ; preds = %330, %326
  store ptr %.0155, ptr %327, align 8, !tbaa !43
  %332 = getelementptr inbounds i8, ptr %1, i64 40
  %333 = load ptr, ptr %332, align 8, !tbaa !44
  %334 = icmp eq ptr %333, null
  br i1 %334, label %336, label %335

335:                                              ; preds = %331
  call void @_ZdaPv(ptr noundef nonnull %333) #10
  br label %336

336:                                              ; preds = %335, %331
  store ptr %.0159, ptr %332, align 8, !tbaa !44
  br label %337

337:                                              ; preds = %336, %324
  %338 = load i32, ptr %8, align 4, !tbaa !5
  %339 = icmp ne i32 %338, %9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3) #9
  ret i1 %339
}

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12)) 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 nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

; 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 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320), i32 noundef) local_unnamed_addr #4 align 2

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

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { builtin allocsize(0) }
attributes #9 = { nounwind }
attributes #10 = { builtin nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 4}
!6 = !{!"_ZTS6aiMesh", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !8, i64 48, !8, i64 112, !8, i64 176, !10, i64 208, !7, i64 216, !10, i64 224, !7, i64 232, !11, i64 236, !7, i64 1264, !10, i64 1272, !12, i64 1280, !13, i64 1284, !10, i64 1312}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"_ZTS8aiString", !7, i64 0, !8, i64 4}
!12 = !{!"_ZTS16aiMorphingMethod", !8, i64 0}
!13 = !{!"_ZTS6aiAABB", !14, i64 0, !14, i64 12}
!14 = !{!"_ZTS10aiVector3tIfE", !15, i64 0, !15, i64 4, !15, i64 8}
!15 = !{!"float", !8, i64 0}
!16 = !{!6, !7, i64 8}
!17 = !{!10, !10, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = !{!6, !7, i64 216}
!22 = !{!6, !10, i64 224}
!23 = !{!24, !7, i64 1028}
!24 = !{!"_ZTS6aiBone", !11, i64 0, !7, i64 1028, !10, i64 1032, !10, i64 1040, !10, i64 1048, !25, i64 1056}
!25 = !{!"_ZTS12aiMatrix4x4tIfE", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12, !15, i64 16, !15, i64 20, !15, i64 24, !15, i64 28, !15, i64 32, !15, i64 36, !15, i64 40, !15, i64 44, !15, i64 48, !15, i64 52, !15, i64 56, !15, i64 60}
!26 = distinct !{!26, !19}
!27 = !{!6, !10, i64 208}
!28 = !{!29, !7, i64 0}
!29 = !{!"_ZTS6aiFace", !7, i64 0, !10, i64 8}
!30 = distinct !{!30, !19}
!31 = !{!6, !10, i64 16}
!32 = !{!29, !10, i64 8}
!33 = !{!7, !7, i64 0}
!34 = !{i64 0, i64 4, !35, i64 4, i64 4, !35, i64 8, i64 4, !35}
!35 = !{!15, !15, i64 0}
!36 = distinct !{!36, !19}
!37 = !{!24, !10, i64 1048}
!38 = !{!39, !7, i64 0}
!39 = !{!"_ZTS14aiVertexWeight", !7, i64 0, !15, i64 4}
!40 = !{!39, !15, i64 4}
!41 = distinct !{!41, !19}
!42 = !{!6, !10, i64 24}
!43 = !{!6, !10, i64 32}
!44 = !{!6, !10, i64 40}
!45 = distinct !{!45, !19}
!46 = !{i64 0, i64 4, !35, i64 4, i64 4, !35, i64 8, i64 4, !35, i64 12, i64 4, !35}
!47 = distinct !{!47, !19}
!48 = distinct !{!48, !19}
!49 = distinct !{!49, !19}
!50 = distinct !{!50, !19}
!51 = distinct !{!51, !19}


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