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

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

%"class.std::vector.6" = type { %"struct.std::_Vector_base.7" }
%"struct.std::_Vector_base.7" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.8" = type { i8 }
%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 }
%struct.aiFace = type { i32, ptr }
%class.aiColor4t = type { float, float, float, float }
%struct.aiBone = type { %struct.aiString, i32, ptr, ptr, ptr, %class.aiMatrix4x4t }
%class.aiMatrix4x4t = type { float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }

@.str.2 = external hidden unnamed_addr constant [122 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [31 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZN6Assimp11MakeSubmeshEPK6aiMeshRKSt6vectorIjSaIjEEj(ptr noundef %0, ptr noundef nonnull align 8 dereferenceable(24) %1, i32 noundef %2) #6 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca %"class.std::vector.6", align 8
  %9 = alloca i32, align 4
  %10 = alloca %"class.std::allocator.8", align 1
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i64, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca %"class.std::vector.6", align 8
  %32 = alloca i32, align 4
  %33 = alloca %"class.std::allocator.8", align 1
  %34 = alloca i32, align 4
  %35 = alloca ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca %struct.aiVertexWeight, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store i32 %2, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  %46 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 1320) #9
  call void @_ZN6aiMeshC2Ev(ptr noundef nonnull align 8 dereferenceable(1320) %46) #8
  store ptr %46, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #8
  %47 = load ptr, ptr %4, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.aiMesh, ptr %47, i32 0, i32 1
  %49 = load i32, ptr %48, align 4, !tbaa !11
  %50 = zext i32 %49 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  store i32 -1, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #8
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #8
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %50, ptr noundef nonnull align 4 dereferenceable(4) %9, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %51 unwind label %60

51:                                               ; preds = %3
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  store i64 0, ptr %13, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %52 = load ptr, ptr %5, align 8, !tbaa !5
  %53 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %52) #8
  store i64 %53, ptr %14, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %54

54:                                               ; preds = %112, %51
  %55 = load i32, ptr %15, align 4, !tbaa !9
  %56 = zext i32 %55 to i64
  %57 = load i64, ptr %14, align 8, !tbaa !18
  %58 = icmp ult i64 %56, %57
  br i1 %58, label %64, label %59

59:                                               ; preds = %54
  store i32 2, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  br label %115

60:                                               ; preds = %3
  %61 = landingpad { ptr, i32 }
          cleanup
  %62 = extractvalue { ptr, i32 } %61, 0
  store ptr %62, ptr %11, align 8
  %63 = extractvalue { ptr, i32 } %61, 1
  store i32 %63, ptr %12, align 4
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  br label %816

64:                                               ; preds = %54
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %65 = load ptr, ptr %4, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.aiMesh, ptr %65, i32 0, i32 10
  %67 = load ptr, ptr %66, align 8, !tbaa !20
  %68 = load ptr, ptr %5, align 8, !tbaa !5
  %69 = load i32, ptr %15, align 4, !tbaa !9
  %70 = zext i32 %69 to i64
  %71 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %68, i64 noundef %70) #8
  %72 = load i32, ptr %71, align 4, !tbaa !9
  %73 = zext i32 %72 to i64
  %74 = getelementptr inbounds %struct.aiFace, ptr %67, i64 %73
  store ptr %74, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %75

75:                                               ; preds = %108, %64
  %76 = load i32, ptr %18, align 4, !tbaa !9
  %77 = load ptr, ptr %17, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.aiFace, ptr %77, i32 0, i32 0
  %79 = load i32, ptr %78, align 8, !tbaa !21
  %80 = icmp ult i32 %76, %79
  br i1 %80, label %82, label %81

81:                                               ; preds = %75
  store i32 5, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  br label %111

82:                                               ; preds = %75
  %83 = load ptr, ptr %17, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.aiFace, ptr %83, i32 0, i32 1
  %85 = load ptr, ptr %84, align 8, !tbaa !23
  %86 = load i32, ptr %18, align 4, !tbaa !9
  %87 = zext i32 %86 to i64
  %88 = getelementptr inbounds i32, ptr %85, i64 %87
  %89 = load i32, ptr %88, align 4, !tbaa !9
  %90 = zext i32 %89 to i64
  %91 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %90) #8
  %92 = load i32, ptr %91, align 4, !tbaa !9
  %93 = icmp eq i32 %92, -1
  br i1 %93, label %94, label %107

94:                                               ; preds = %82
  %95 = load i64, ptr %13, align 8, !tbaa !18
  %96 = add i64 %95, 1
  store i64 %96, ptr %13, align 8, !tbaa !18
  %97 = trunc i64 %95 to i32
  %98 = load ptr, ptr %17, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.aiFace, ptr %98, i32 0, i32 1
  %100 = load ptr, ptr %99, align 8, !tbaa !23
  %101 = load i32, ptr %18, align 4, !tbaa !9
  %102 = zext i32 %101 to i64
  %103 = getelementptr inbounds i32, ptr %100, i64 %102
  %104 = load i32, ptr %103, align 4, !tbaa !9
  %105 = zext i32 %104 to i64
  %106 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %105) #8
  store i32 %97, ptr %106, align 4, !tbaa !9
  br label %107

107:                                              ; preds = %94, %82
  br label %108

108:                                              ; preds = %107
  %109 = load i32, ptr %18, align 4, !tbaa !9
  %110 = add i32 %109, 1
  store i32 %110, ptr %18, align 4, !tbaa !9
  br label %75, !llvm.loop !24

111:                                              ; preds = %81
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  br label %112

112:                                              ; preds = %111
  %113 = load i32, ptr %15, align 4, !tbaa !9
  %114 = add i32 %113, 1
  store i32 %114, ptr %15, align 4, !tbaa !9
  br label %54, !llvm.loop !26

115:                                              ; preds = %59
  %116 = load ptr, ptr %4, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.aiMesh, ptr %116, i32 0, i32 14
  %118 = load ptr, ptr %7, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.aiMesh, ptr %118, i32 0, i32 14
  %120 = invoke noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %119, ptr noundef nonnull align 4 dereferenceable(1028) %117)
          to label %121 unwind label %179

121:                                              ; preds = %115
  %122 = load ptr, ptr %4, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.aiMesh, ptr %122, i32 0, i32 13
  %124 = load i32, ptr %123, align 8, !tbaa !27
  %125 = load ptr, ptr %7, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.aiMesh, ptr %125, i32 0, i32 13
  store i32 %124, ptr %126, align 8, !tbaa !27
  %127 = load ptr, ptr %4, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.aiMesh, ptr %127, i32 0, i32 0
  %129 = load i32, ptr %128, align 8, !tbaa !28
  %130 = load ptr, ptr %7, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.aiMesh, ptr %130, i32 0, i32 0
  store i32 %129, ptr %131, align 8, !tbaa !28
  %132 = load ptr, ptr %5, align 8, !tbaa !5
  %133 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %132) #8
  %134 = trunc i64 %133 to i32
  %135 = load ptr, ptr %7, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.aiMesh, ptr %135, i32 0, i32 2
  store i32 %134, ptr %136, align 8, !tbaa !29
  %137 = load i64, ptr %13, align 8, !tbaa !18
  %138 = trunc i64 %137 to i32
  %139 = load ptr, ptr %7, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.aiMesh, ptr %139, i32 0, i32 1
  store i32 %138, ptr %140, align 4, !tbaa !11
  %141 = load i64, ptr %13, align 8, !tbaa !18
  %142 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %141, i64 12)
  %143 = extractvalue { i64, i1 } %142, 1
  %144 = extractvalue { i64, i1 } %142, 0
  %145 = select i1 %143, i64 -1, i64 %144
  %146 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %145) #9
          to label %147 unwind label %179

147:                                              ; preds = %121
  %148 = icmp eq i64 %141, 0
  br i1 %148, label %155, label %149

149:                                              ; preds = %147
  %150 = getelementptr inbounds %class.aiVector3t, ptr %146, i64 %141
  br label %151

151:                                              ; preds = %151, %149
  %152 = phi ptr [ %146, %149 ], [ %153, %151 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %152) #8
  %153 = getelementptr inbounds %class.aiVector3t, ptr %152, i64 1
  %154 = icmp eq ptr %153, %150
  br i1 %154, label %155, label %151

155:                                              ; preds = %151, %147
  %156 = load ptr, ptr %7, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.aiMesh, ptr %156, i32 0, i32 3
  store ptr %146, ptr %157, align 8, !tbaa !30
  %158 = load ptr, ptr %4, align 8, !tbaa !5
  %159 = invoke noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %158)
          to label %160 unwind label %179

160:                                              ; preds = %155
  br i1 %159, label %161, label %183

161:                                              ; preds = %160
  %162 = load i64, ptr %13, align 8, !tbaa !18
  %163 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %162, i64 12)
  %164 = extractvalue { i64, i1 } %163, 1
  %165 = extractvalue { i64, i1 } %163, 0
  %166 = select i1 %164, i64 -1, i64 %165
  %167 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %166) #9
          to label %168 unwind label %179

168:                                              ; preds = %161
  %169 = icmp eq i64 %162, 0
  br i1 %169, label %176, label %170

170:                                              ; preds = %168
  %171 = getelementptr inbounds %class.aiVector3t, ptr %167, i64 %162
  br label %172

172:                                              ; preds = %172, %170
  %173 = phi ptr [ %167, %170 ], [ %174, %172 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %173) #8
  %174 = getelementptr inbounds %class.aiVector3t, ptr %173, i64 1
  %175 = icmp eq ptr %174, %171
  br i1 %175, label %176, label %172

176:                                              ; preds = %172, %168
  %177 = load ptr, ptr %7, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.aiMesh, ptr %177, i32 0, i32 4
  store ptr %167, ptr %178, align 8, !tbaa !31
  br label %183

179:                                              ; preds = %301, %202, %187, %183, %161, %155, %121, %115
  %180 = landingpad { ptr, i32 }
          cleanup
  %181 = extractvalue { ptr, i32 } %180, 0
  store ptr %181, ptr %11, align 8
  %182 = extractvalue { ptr, i32 } %180, 1
  store i32 %182, ptr %12, align 4
  br label %815

183:                                              ; preds = %176, %160
  %184 = load ptr, ptr %4, align 8, !tbaa !5
  %185 = invoke noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %184)
          to label %186 unwind label %179

186:                                              ; preds = %183
  br i1 %185, label %187, label %222

187:                                              ; preds = %186
  %188 = load i64, ptr %13, align 8, !tbaa !18
  %189 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %188, i64 12)
  %190 = extractvalue { i64, i1 } %189, 1
  %191 = extractvalue { i64, i1 } %189, 0
  %192 = select i1 %190, i64 -1, i64 %191
  %193 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %192) #9
          to label %194 unwind label %179

194:                                              ; preds = %187
  %195 = icmp eq i64 %188, 0
  br i1 %195, label %202, label %196

196:                                              ; preds = %194
  %197 = getelementptr inbounds %class.aiVector3t, ptr %193, i64 %188
  br label %198

198:                                              ; preds = %198, %196
  %199 = phi ptr [ %193, %196 ], [ %200, %198 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %199) #8
  %200 = getelementptr inbounds %class.aiVector3t, ptr %199, i64 1
  %201 = icmp eq ptr %200, %197
  br i1 %201, label %202, label %198

202:                                              ; preds = %198, %194
  %203 = load ptr, ptr %7, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.aiMesh, ptr %203, i32 0, i32 5
  store ptr %193, ptr %204, align 8, !tbaa !32
  %205 = load i64, ptr %13, align 8, !tbaa !18
  %206 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %205, i64 12)
  %207 = extractvalue { i64, i1 } %206, 1
  %208 = extractvalue { i64, i1 } %206, 0
  %209 = select i1 %207, i64 -1, i64 %208
  %210 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %209) #9
          to label %211 unwind label %179

211:                                              ; preds = %202
  %212 = icmp eq i64 %205, 0
  br i1 %212, label %219, label %213

213:                                              ; preds = %211
  %214 = getelementptr inbounds %class.aiVector3t, ptr %210, i64 %205
  br label %215

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

219:                                              ; preds = %215, %211
  %220 = load ptr, ptr %7, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.aiMesh, ptr %220, i32 0, i32 6
  store ptr %210, ptr %221, align 8, !tbaa !33
  br label %222

222:                                              ; preds = %219, %186
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  store i64 0, ptr %19, align 8, !tbaa !18
  br label %223

223:                                              ; preds = %263, %222
  %224 = load ptr, ptr %4, align 8, !tbaa !5
  %225 = load i64, ptr %19, align 8, !tbaa !18
  %226 = trunc i64 %225 to i32
  %227 = invoke noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %224, i32 noundef %226)
          to label %228 unwind label %230

228:                                              ; preds = %223
  br i1 %227, label %234, label %229

229:                                              ; preds = %228
  store i32 8, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %266

230:                                              ; preds = %234, %223
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %11, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %815

234:                                              ; preds = %228
  %235 = load i64, ptr %13, align 8, !tbaa !18
  %236 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %235, i64 12)
  %237 = extractvalue { i64, i1 } %236, 1
  %238 = extractvalue { i64, i1 } %236, 0
  %239 = select i1 %237, i64 -1, i64 %238
  %240 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %239) #9
          to label %241 unwind label %230

241:                                              ; preds = %234
  %242 = icmp eq i64 %235, 0
  br i1 %242, label %249, label %243

243:                                              ; preds = %241
  %244 = getelementptr inbounds %class.aiVector3t, ptr %240, i64 %235
  br label %245

245:                                              ; preds = %245, %243
  %246 = phi ptr [ %240, %243 ], [ %247, %245 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %246) #8
  %247 = getelementptr inbounds %class.aiVector3t, ptr %246, i64 1
  %248 = icmp eq ptr %247, %244
  br i1 %248, label %249, label %245

249:                                              ; preds = %245, %241
  %250 = load ptr, ptr %7, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.aiMesh, ptr %250, i32 0, i32 8
  %252 = load i64, ptr %19, align 8, !tbaa !18
  %253 = getelementptr inbounds [8 x ptr], ptr %251, i64 0, i64 %252
  store ptr %240, ptr %253, align 8, !tbaa !5
  %254 = load ptr, ptr %4, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.aiMesh, ptr %254, i32 0, i32 9
  %256 = load i64, ptr %19, align 8, !tbaa !18
  %257 = getelementptr inbounds [8 x i32], ptr %255, i64 0, i64 %256
  %258 = load i32, ptr %257, align 4, !tbaa !9
  %259 = load ptr, ptr %7, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.aiMesh, ptr %259, i32 0, i32 9
  %261 = load i64, ptr %19, align 8, !tbaa !18
  %262 = getelementptr inbounds [8 x i32], ptr %260, i64 0, i64 %261
  store i32 %258, ptr %262, align 4, !tbaa !9
  br label %263

263:                                              ; preds = %249
  %264 = load i64, ptr %19, align 8, !tbaa !18
  %265 = add i64 %264, 1
  store i64 %265, ptr %19, align 8, !tbaa !18
  br label %223, !llvm.loop !34

266:                                              ; preds = %229
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  store i64 0, ptr %20, align 8, !tbaa !18
  br label %267

267:                                              ; preds = %298, %266
  %268 = load ptr, ptr %4, align 8, !tbaa !5
  %269 = load i64, ptr %20, align 8, !tbaa !18
  %270 = trunc i64 %269 to i32
  %271 = invoke noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %268, i32 noundef %270)
          to label %272 unwind label %274

272:                                              ; preds = %267
  br i1 %271, label %278, label %273

273:                                              ; preds = %272
  store i32 11, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %301

274:                                              ; preds = %278, %267
  %275 = landingpad { ptr, i32 }
          cleanup
  %276 = extractvalue { ptr, i32 } %275, 0
  store ptr %276, ptr %11, align 8
  %277 = extractvalue { ptr, i32 } %275, 1
  store i32 %277, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %815

278:                                              ; preds = %272
  %279 = load i64, ptr %13, align 8, !tbaa !18
  %280 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %279, i64 16)
  %281 = extractvalue { i64, i1 } %280, 1
  %282 = extractvalue { i64, i1 } %280, 0
  %283 = select i1 %281, i64 -1, i64 %282
  %284 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %283) #9
          to label %285 unwind label %274

285:                                              ; preds = %278
  %286 = icmp eq i64 %279, 0
  br i1 %286, label %293, label %287

287:                                              ; preds = %285
  %288 = getelementptr inbounds %class.aiColor4t, ptr %284, i64 %279
  br label %289

289:                                              ; preds = %289, %287
  %290 = phi ptr [ %284, %287 ], [ %291, %289 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %290) #8
  %291 = getelementptr inbounds %class.aiColor4t, ptr %290, i64 1
  %292 = icmp eq ptr %291, %288
  br i1 %292, label %293, label %289

293:                                              ; preds = %289, %285
  %294 = load ptr, ptr %7, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.aiMesh, ptr %294, i32 0, i32 7
  %296 = load i64, ptr %20, align 8, !tbaa !18
  %297 = getelementptr inbounds [8 x ptr], ptr %295, i64 0, i64 %296
  store ptr %284, ptr %297, align 8, !tbaa !5
  br label %298

298:                                              ; preds = %293
  %299 = load i64, ptr %20, align 8, !tbaa !18
  %300 = add i64 %299, 1
  store i64 %300, ptr %20, align 8, !tbaa !18
  br label %267, !llvm.loop !35

301:                                              ; preds = %273
  %302 = load i64, ptr %14, align 8, !tbaa !18
  %303 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %302, i64 16)
  %304 = extractvalue { i64, i1 } %303, 1
  %305 = extractvalue { i64, i1 } %303, 0
  %306 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %305, i64 8)
  %307 = extractvalue { i64, i1 } %306, 1
  %308 = or i1 %304, %307
  %309 = extractvalue { i64, i1 } %306, 0
  %310 = select i1 %308, i64 -1, i64 %309
  %311 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %310) #9
          to label %312 unwind label %179

312:                                              ; preds = %301
  store i64 %302, ptr %311, align 16
  %313 = getelementptr inbounds i8, ptr %311, i64 8
  %314 = icmp eq i64 %302, 0
  br i1 %314, label %321, label %315

315:                                              ; preds = %312
  %316 = getelementptr inbounds %struct.aiFace, ptr %313, i64 %302
  br label %317

317:                                              ; preds = %317, %315
  %318 = phi ptr [ %313, %315 ], [ %319, %317 ]
  call void @_ZN6aiFaceC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %318) #8
  %319 = getelementptr inbounds %struct.aiFace, ptr %318, i64 1
  %320 = icmp eq ptr %319, %316
  br i1 %320, label %321, label %317

321:                                              ; preds = %317, %312
  %322 = load ptr, ptr %7, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.aiMesh, ptr %322, i32 0, i32 10
  store ptr %313, ptr %323, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %324

324:                                              ; preds = %395, %321
  %325 = load i32, ptr %21, align 4, !tbaa !9
  %326 = zext i32 %325 to i64
  %327 = load i64, ptr %14, align 8, !tbaa !18
  %328 = icmp ult i64 %326, %327
  br i1 %328, label %330, label %329

329:                                              ; preds = %324
  store i32 14, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  br label %398

330:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %331 = load ptr, ptr %4, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.aiMesh, ptr %331, i32 0, i32 10
  %333 = load ptr, ptr %332, align 8, !tbaa !20
  %334 = load ptr, ptr %5, align 8, !tbaa !5
  %335 = load i32, ptr %21, align 4, !tbaa !9
  %336 = zext i32 %335 to i64
  %337 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %334, i64 noundef %336) #8
  %338 = load i32, ptr %337, align 4, !tbaa !9
  %339 = zext i32 %338 to i64
  %340 = getelementptr inbounds %struct.aiFace, ptr %333, i64 %339
  store ptr %340, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %341 = load ptr, ptr %7, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.aiMesh, ptr %341, i32 0, i32 10
  %343 = load ptr, ptr %342, align 8, !tbaa !20
  %344 = load i32, ptr %21, align 4, !tbaa !9
  %345 = zext i32 %344 to i64
  %346 = getelementptr inbounds %struct.aiFace, ptr %343, i64 %345
  store ptr %346, ptr %23, align 8, !tbaa !5
  %347 = load ptr, ptr %22, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.aiFace, ptr %347, i32 0, i32 0
  %349 = load i32, ptr %348, align 8, !tbaa !21
  %350 = load ptr, ptr %23, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.aiFace, ptr %350, i32 0, i32 0
  store i32 %349, ptr %351, align 8, !tbaa !21
  %352 = load ptr, ptr %23, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.aiFace, ptr %352, i32 0, i32 0
  %354 = load i32, ptr %353, align 8, !tbaa !21
  %355 = zext i32 %354 to i64
  %356 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %355, i64 4)
  %357 = extractvalue { i64, i1 } %356, 1
  %358 = extractvalue { i64, i1 } %356, 0
  %359 = select i1 %357, i64 -1, i64 %358
  %360 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %359) #9
          to label %361 unwind label %372

361:                                              ; preds = %330
  %362 = load ptr, ptr %23, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.aiFace, ptr %362, i32 0, i32 1
  store ptr %360, ptr %363, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  store i64 0, ptr %24, align 8, !tbaa !18
  br label %364

364:                                              ; preds = %391, %361
  %365 = load i64, ptr %24, align 8, !tbaa !18
  %366 = load ptr, ptr %23, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.aiFace, ptr %366, i32 0, i32 0
  %368 = load i32, ptr %367, align 8, !tbaa !21
  %369 = zext i32 %368 to i64
  %370 = icmp ult i64 %365, %369
  br i1 %370, label %376, label %371

371:                                              ; preds = %364
  store i32 17, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  br label %394

372:                                              ; preds = %330
  %373 = landingpad { ptr, i32 }
          cleanup
  %374 = extractvalue { ptr, i32 } %373, 0
  store ptr %374, ptr %11, align 8
  %375 = extractvalue { ptr, i32 } %373, 1
  store i32 %375, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  br label %815

376:                                              ; preds = %364
  %377 = load ptr, ptr %22, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.aiFace, ptr %377, i32 0, i32 1
  %379 = load ptr, ptr %378, align 8, !tbaa !23
  %380 = load i64, ptr %24, align 8, !tbaa !18
  %381 = getelementptr inbounds i32, ptr %379, i64 %380
  %382 = load i32, ptr %381, align 4, !tbaa !9
  %383 = zext i32 %382 to i64
  %384 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %383) #8
  %385 = load i32, ptr %384, align 4, !tbaa !9
  %386 = load ptr, ptr %23, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.aiFace, ptr %386, i32 0, i32 1
  %388 = load ptr, ptr %387, align 8, !tbaa !23
  %389 = load i64, ptr %24, align 8, !tbaa !18
  %390 = getelementptr inbounds i32, ptr %388, i64 %389
  store i32 %385, ptr %390, align 4, !tbaa !9
  br label %391

391:                                              ; preds = %376
  %392 = load i64, ptr %24, align 8, !tbaa !18
  %393 = add i64 %392, 1
  store i64 %393, ptr %24, align 8, !tbaa !18
  br label %364, !llvm.loop !36

394:                                              ; preds = %371
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %395

395:                                              ; preds = %394
  %396 = load i32, ptr %21, align 4, !tbaa !9
  %397 = add i32 %396, 1
  store i32 %397, ptr %21, align 4, !tbaa !9
  br label %324, !llvm.loop !37

398:                                              ; preds = %329
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %399

399:                                              ; preds = %548, %398
  %400 = load i32, ptr %25, align 4, !tbaa !9
  %401 = load ptr, ptr %4, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.aiMesh, ptr %401, i32 0, i32 1
  %403 = load i32, ptr %402, align 4, !tbaa !11
  %404 = icmp ult i32 %400, %403
  br i1 %404, label %406, label %405

405:                                              ; preds = %399
  store i32 20, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  br label %552

406:                                              ; preds = %399
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  %407 = load i32, ptr %25, align 4, !tbaa !9
  %408 = zext i32 %407 to i64
  %409 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %408) #8
  %410 = load i32, ptr %409, align 4, !tbaa !9
  store i32 %410, ptr %26, align 4, !tbaa !9
  %411 = load i32, ptr %26, align 4, !tbaa !9
  %412 = icmp eq i32 %411, -1
  br i1 %412, label %413, label %414

413:                                              ; preds = %406
  store i32 22, ptr %16, align 4
  br label %545

414:                                              ; preds = %406
  %415 = load ptr, ptr %4, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.aiMesh, ptr %415, i32 0, i32 3
  %417 = load ptr, ptr %416, align 8, !tbaa !30
  %418 = load i32, ptr %25, align 4, !tbaa !9
  %419 = zext i32 %418 to i64
  %420 = getelementptr inbounds %class.aiVector3t, ptr %417, i64 %419
  %421 = load ptr, ptr %7, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.aiMesh, ptr %421, i32 0, i32 3
  %423 = load ptr, ptr %422, align 8, !tbaa !30
  %424 = load i32, ptr %26, align 4, !tbaa !9
  %425 = zext i32 %424 to i64
  %426 = getelementptr inbounds %class.aiVector3t, ptr %423, i64 %425
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %426, ptr align 4 %420, i64 12, i1 false), !tbaa.struct !38
  %427 = load ptr, ptr %4, align 8, !tbaa !5
  %428 = invoke noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %427)
          to label %429 unwind label %443

429:                                              ; preds = %414
  br i1 %428, label %430, label %447

430:                                              ; preds = %429
  %431 = load ptr, ptr %4, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.aiMesh, ptr %431, i32 0, i32 4
  %433 = load ptr, ptr %432, align 8, !tbaa !31
  %434 = load i32, ptr %25, align 4, !tbaa !9
  %435 = zext i32 %434 to i64
  %436 = getelementptr inbounds %class.aiVector3t, ptr %433, i64 %435
  %437 = load ptr, ptr %7, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.aiMesh, ptr %437, i32 0, i32 4
  %439 = load ptr, ptr %438, align 8, !tbaa !31
  %440 = load i32, ptr %26, align 4, !tbaa !9
  %441 = zext i32 %440 to i64
  %442 = getelementptr inbounds %class.aiVector3t, ptr %439, i64 %441
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %442, ptr align 4 %436, i64 12, i1 false), !tbaa.struct !38
  br label %447

443:                                              ; preds = %447, %414
  %444 = landingpad { ptr, i32 }
          cleanup
  %445 = extractvalue { ptr, i32 } %444, 0
  store ptr %445, ptr %11, align 8
  %446 = extractvalue { ptr, i32 } %444, 1
  store i32 %446, ptr %12, align 4
  br label %551

447:                                              ; preds = %430, %429
  %448 = load ptr, ptr %4, align 8, !tbaa !5
  %449 = invoke noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %448)
          to label %450 unwind label %443

450:                                              ; preds = %447
  br i1 %449, label %451, label %476

451:                                              ; preds = %450
  %452 = load ptr, ptr %4, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.aiMesh, ptr %452, i32 0, i32 5
  %454 = load ptr, ptr %453, align 8, !tbaa !32
  %455 = load i32, ptr %25, align 4, !tbaa !9
  %456 = zext i32 %455 to i64
  %457 = getelementptr inbounds %class.aiVector3t, ptr %454, i64 %456
  %458 = load ptr, ptr %7, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.aiMesh, ptr %458, i32 0, i32 5
  %460 = load ptr, ptr %459, align 8, !tbaa !32
  %461 = load i32, ptr %26, align 4, !tbaa !9
  %462 = zext i32 %461 to i64
  %463 = getelementptr inbounds %class.aiVector3t, ptr %460, i64 %462
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %463, ptr align 4 %457, i64 12, i1 false), !tbaa.struct !38
  %464 = load ptr, ptr %4, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.aiMesh, ptr %464, i32 0, i32 6
  %466 = load ptr, ptr %465, align 8, !tbaa !33
  %467 = load i32, ptr %25, align 4, !tbaa !9
  %468 = zext i32 %467 to i64
  %469 = getelementptr inbounds %class.aiVector3t, ptr %466, i64 %468
  %470 = load ptr, ptr %7, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.aiMesh, ptr %470, i32 0, i32 6
  %472 = load ptr, ptr %471, align 8, !tbaa !33
  %473 = load i32, ptr %26, align 4, !tbaa !9
  %474 = zext i32 %473 to i64
  %475 = getelementptr inbounds %class.aiVector3t, ptr %472, i64 %474
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %475, ptr align 4 %469, i64 12, i1 false), !tbaa.struct !38
  br label %476

476:                                              ; preds = %451, %450
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  store i64 0, ptr %27, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %477 = load ptr, ptr %4, align 8, !tbaa !5
  %478 = invoke noundef i32 @_ZNK6aiMesh16GetNumUVChannelsEv(ptr noundef nonnull align 8 dereferenceable(1320) %477)
          to label %479 unwind label %486

479:                                              ; preds = %476
  %480 = zext i32 %478 to i64
  store i64 %480, ptr %28, align 8, !tbaa !18
  br label %481

481:                                              ; preds = %507, %479
  %482 = load i64, ptr %27, align 8, !tbaa !18
  %483 = load i64, ptr %28, align 8, !tbaa !18
  %484 = icmp ult i64 %482, %483
  br i1 %484, label %490, label %485

485:                                              ; preds = %481
  store i32 23, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br label %510

486:                                              ; preds = %476
  %487 = landingpad { ptr, i32 }
          cleanup
  %488 = extractvalue { ptr, i32 } %487, 0
  store ptr %488, ptr %11, align 8
  %489 = extractvalue { ptr, i32 } %487, 1
  store i32 %489, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br label %551

490:                                              ; preds = %481
  %491 = load ptr, ptr %4, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.aiMesh, ptr %491, i32 0, i32 8
  %493 = load i64, ptr %27, align 8, !tbaa !18
  %494 = getelementptr inbounds [8 x ptr], ptr %492, i64 0, i64 %493
  %495 = load ptr, ptr %494, align 8, !tbaa !5
  %496 = load i32, ptr %25, align 4, !tbaa !9
  %497 = zext i32 %496 to i64
  %498 = getelementptr inbounds %class.aiVector3t, ptr %495, i64 %497
  %499 = load ptr, ptr %7, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.aiMesh, ptr %499, i32 0, i32 8
  %501 = load i64, ptr %27, align 8, !tbaa !18
  %502 = getelementptr inbounds [8 x ptr], ptr %500, i64 0, i64 %501
  %503 = load ptr, ptr %502, align 8, !tbaa !5
  %504 = load i32, ptr %26, align 4, !tbaa !9
  %505 = zext i32 %504 to i64
  %506 = getelementptr inbounds %class.aiVector3t, ptr %503, i64 %505
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %506, ptr align 4 %498, i64 12, i1 false), !tbaa.struct !38
  br label %507

507:                                              ; preds = %490
  %508 = load i64, ptr %27, align 8, !tbaa !18
  %509 = add i64 %508, 1
  store i64 %509, ptr %27, align 8, !tbaa !18
  br label %481, !llvm.loop !40

510:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  store i64 0, ptr %29, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %511 = load ptr, ptr %4, align 8, !tbaa !5
  %512 = invoke noundef i32 @_ZNK6aiMesh19GetNumColorChannelsEv(ptr noundef nonnull align 8 dereferenceable(1320) %511)
          to label %513 unwind label %520

513:                                              ; preds = %510
  %514 = zext i32 %512 to i64
  store i64 %514, ptr %30, align 8, !tbaa !18
  br label %515

515:                                              ; preds = %541, %513
  %516 = load i64, ptr %29, align 8, !tbaa !18
  %517 = load i64, ptr %30, align 8, !tbaa !18
  %518 = icmp ult i64 %516, %517
  br i1 %518, label %524, label %519

519:                                              ; preds = %515
  store i32 26, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  br label %544

520:                                              ; preds = %510
  %521 = landingpad { ptr, i32 }
          cleanup
  %522 = extractvalue { ptr, i32 } %521, 0
  store ptr %522, ptr %11, align 8
  %523 = extractvalue { ptr, i32 } %521, 1
  store i32 %523, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  br label %551

524:                                              ; preds = %515
  %525 = load ptr, ptr %4, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct.aiMesh, ptr %525, i32 0, i32 7
  %527 = load i64, ptr %29, align 8, !tbaa !18
  %528 = getelementptr inbounds [8 x ptr], ptr %526, i64 0, i64 %527
  %529 = load ptr, ptr %528, align 8, !tbaa !5
  %530 = load i32, ptr %25, align 4, !tbaa !9
  %531 = zext i32 %530 to i64
  %532 = getelementptr inbounds %class.aiColor4t, ptr %529, i64 %531
  %533 = load ptr, ptr %7, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.aiMesh, ptr %533, i32 0, i32 7
  %535 = load i64, ptr %29, align 8, !tbaa !18
  %536 = getelementptr inbounds [8 x ptr], ptr %534, i64 0, i64 %535
  %537 = load ptr, ptr %536, align 8, !tbaa !5
  %538 = load i32, ptr %26, align 4, !tbaa !9
  %539 = zext i32 %538 to i64
  %540 = getelementptr inbounds %class.aiColor4t, ptr %537, i64 %539
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %540, ptr align 4 %532, i64 16, i1 false), !tbaa.struct !41
  br label %541

541:                                              ; preds = %524
  %542 = load i64, ptr %29, align 8, !tbaa !18
  %543 = add i64 %542, 1
  store i64 %543, ptr %29, align 8, !tbaa !18
  br label %515, !llvm.loop !42

544:                                              ; preds = %519
  store i32 0, ptr %16, align 4
  br label %545

545:                                              ; preds = %544, %413
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  %546 = load i32, ptr %16, align 4
  switch i32 %546, label %822 [
    i32 0, label %547
    i32 22, label %548
  ]

547:                                              ; preds = %545
  br label %548

548:                                              ; preds = %547, %545
  %549 = load i32, ptr %25, align 4, !tbaa !9
  %550 = add i32 %549, 1
  store i32 %550, ptr %25, align 4, !tbaa !9
  br label %399, !llvm.loop !43

551:                                              ; preds = %520, %486, %443
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  br label %815

552:                                              ; preds = %405
  %553 = load i32, ptr %6, align 4, !tbaa !9
  %554 = xor i32 %553, -1
  %555 = and i32 %554, 1
  %556 = icmp ne i32 %555, 0
  br i1 %556, label %557, label %813

557:                                              ; preds = %552
  call void @llvm.lifetime.start.p0(i64 24, ptr %31) #8
  %558 = load ptr, ptr %4, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.aiMesh, ptr %558, i32 0, i32 11
  %560 = load i32, ptr %559, align 8, !tbaa !44
  %561 = zext i32 %560 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  store i32 0, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #8
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #8
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %561, ptr noundef nonnull align 4 dereferenceable(4) %32, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %562 unwind label %570

562:                                              ; preds = %557
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %563

563:                                              ; preds = %614, %562
  %564 = load i32, ptr %34, align 4, !tbaa !9
  %565 = load ptr, ptr %4, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.aiMesh, ptr %565, i32 0, i32 11
  %567 = load i32, ptr %566, align 8, !tbaa !44
  %568 = icmp ult i32 %564, %567
  br i1 %568, label %574, label %569

569:                                              ; preds = %563
  store i32 29, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  br label %617

570:                                              ; preds = %557
  %571 = landingpad { ptr, i32 }
          cleanup
  %572 = extractvalue { ptr, i32 } %571, 0
  store ptr %572, ptr %11, align 8
  %573 = extractvalue { ptr, i32 } %571, 1
  store i32 %573, ptr %12, align 4
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  br label %812

574:                                              ; preds = %563
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %575 = load ptr, ptr %4, align 8, !tbaa !5
  %576 = getelementptr inbounds %struct.aiMesh, ptr %575, i32 0, i32 12
  %577 = load ptr, ptr %576, align 8, !tbaa !45
  %578 = load i32, ptr %34, align 4, !tbaa !9
  %579 = zext i32 %578 to i64
  %580 = getelementptr inbounds ptr, ptr %577, i64 %579
  %581 = load ptr, ptr %580, align 8, !tbaa !5
  store ptr %581, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  store i32 0, ptr %36, align 4, !tbaa !9
  br label %582

582:                                              ; preds = %610, %574
  %583 = load i32, ptr %36, align 4, !tbaa !9
  %584 = load ptr, ptr %35, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.aiBone, ptr %584, i32 0, i32 1
  %586 = load i32, ptr %585, align 4, !tbaa !46
  %587 = icmp ult i32 %583, %586
  br i1 %587, label %589, label %588

588:                                              ; preds = %582
  store i32 32, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  br label %613

589:                                              ; preds = %582
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  %590 = load ptr, ptr %35, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.aiBone, ptr %590, i32 0, i32 4
  %592 = load ptr, ptr %591, align 8, !tbaa !49
  %593 = load i32, ptr %36, align 4, !tbaa !9
  %594 = zext i32 %593 to i64
  %595 = getelementptr inbounds %struct.aiVertexWeight, ptr %592, i64 %594
  %596 = getelementptr inbounds %struct.aiVertexWeight, ptr %595, i32 0, i32 0
  %597 = load i32, ptr %596, align 4, !tbaa !50
  %598 = zext i32 %597 to i64
  %599 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %598) #8
  %600 = load i32, ptr %599, align 4, !tbaa !9
  store i32 %600, ptr %37, align 4, !tbaa !9
  %601 = load i32, ptr %37, align 4, !tbaa !9
  %602 = icmp ne i32 %601, -1
  br i1 %602, label %603, label %609

603:                                              ; preds = %589
  %604 = load i32, ptr %34, align 4, !tbaa !9
  %605 = zext i32 %604 to i64
  %606 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %605) #8
  %607 = load i32, ptr %606, align 4, !tbaa !9
  %608 = add i32 %607, 1
  store i32 %608, ptr %606, align 4, !tbaa !9
  br label %609

609:                                              ; preds = %603, %589
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  br label %610

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

613:                                              ; preds = %588
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  br label %614

614:                                              ; preds = %613
  %615 = load i32, ptr %34, align 4, !tbaa !9
  %616 = add i32 %615, 1
  store i32 %616, ptr %34, align 4, !tbaa !9
  br label %563, !llvm.loop !53

617:                                              ; preds = %569
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  store i32 0, ptr %38, align 4, !tbaa !9
  br label %618

618:                                              ; preds = %637, %617
  %619 = load i32, ptr %38, align 4, !tbaa !9
  %620 = load ptr, ptr %4, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.aiMesh, ptr %620, i32 0, i32 11
  %622 = load i32, ptr %621, align 8, !tbaa !44
  %623 = icmp ult i32 %619, %622
  br i1 %623, label %625, label %624

624:                                              ; preds = %618
  store i32 35, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  br label %640

625:                                              ; preds = %618
  %626 = load i32, ptr %38, align 4, !tbaa !9
  %627 = zext i32 %626 to i64
  %628 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %627) #8
  %629 = load i32, ptr %628, align 4, !tbaa !9
  %630 = icmp ugt i32 %629, 0
  br i1 %630, label %631, label %636

631:                                              ; preds = %625
  %632 = load ptr, ptr %7, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct.aiMesh, ptr %632, i32 0, i32 11
  %634 = load i32, ptr %633, align 8, !tbaa !44
  %635 = add i32 %634, 1
  store i32 %635, ptr %633, align 8, !tbaa !44
  br label %636

636:                                              ; preds = %631, %625
  br label %637

637:                                              ; preds = %636
  %638 = load i32, ptr %38, align 4, !tbaa !9
  %639 = add i32 %638, 1
  store i32 %639, ptr %38, align 4, !tbaa !9
  br label %618, !llvm.loop !54

640:                                              ; preds = %624
  %641 = load ptr, ptr %7, align 8, !tbaa !5
  %642 = getelementptr inbounds %struct.aiMesh, ptr %641, i32 0, i32 11
  %643 = load i32, ptr %642, align 8, !tbaa !44
  %644 = icmp ne i32 %643, 0
  br i1 %644, label %645, label %810

645:                                              ; preds = %640
  %646 = load ptr, ptr %7, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.aiMesh, ptr %646, i32 0, i32 11
  %648 = load i32, ptr %647, align 8, !tbaa !44
  %649 = zext i32 %648 to i64
  %650 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %649, i64 8)
  %651 = extractvalue { i64, i1 } %650, 1
  %652 = extractvalue { i64, i1 } %650, 0
  %653 = select i1 %651, i64 -1, i64 %652
  %654 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %653) #9
          to label %655 unwind label %670

655:                                              ; preds = %645
  call void @llvm.memset.p0.i64(ptr align 8 %654, i8 0, i64 %653, i1 false)
  %656 = load ptr, ptr %7, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.aiMesh, ptr %656, i32 0, i32 12
  store ptr %654, ptr %657, align 8, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #8
  %658 = load ptr, ptr %7, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.aiMesh, ptr %658, i32 0, i32 11
  %660 = load i32, ptr %659, align 8, !tbaa !44
  store i32 %660, ptr %39, align 4, !tbaa !9
  %661 = load ptr, ptr %7, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.aiMesh, ptr %661, i32 0, i32 11
  store i32 0, ptr %662, align 8, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  store i32 0, ptr %40, align 4, !tbaa !9
  br label %663

663:                                              ; preds = %790, %655
  %664 = load i32, ptr %40, align 4, !tbaa !9
  %665 = load ptr, ptr %4, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.aiMesh, ptr %665, i32 0, i32 11
  %667 = load i32, ptr %666, align 8, !tbaa !44
  %668 = icmp ult i32 %664, %667
  br i1 %668, label %674, label %669

669:                                              ; preds = %663
  store i32 38, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %795

670:                                              ; preds = %645
  %671 = landingpad { ptr, i32 }
          cleanup
  %672 = extractvalue { ptr, i32 } %671, 0
  store ptr %672, ptr %11, align 8
  %673 = extractvalue { ptr, i32 } %671, 1
  store i32 %673, ptr %12, align 4
  br label %811

674:                                              ; preds = %663
  %675 = load i32, ptr %40, align 4, !tbaa !9
  %676 = zext i32 %675 to i64
  %677 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %676) #8
  %678 = load i32, ptr %677, align 4, !tbaa !9
  %679 = icmp eq i32 %678, 0
  br i1 %679, label %680, label %681

680:                                              ; preds = %674
  br label %790

681:                                              ; preds = %674
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %682 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1120) #9
          to label %683 unwind label %739

683:                                              ; preds = %681
  call void @_ZN6aiBoneC2Ev(ptr noundef nonnull align 8 dereferenceable(1120) %682) #8
  store ptr %682, ptr %41, align 8, !tbaa !5
  %684 = load ptr, ptr %41, align 8, !tbaa !5
  %685 = load ptr, ptr %7, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.aiMesh, ptr %685, i32 0, i32 12
  %687 = load ptr, ptr %686, align 8, !tbaa !45
  %688 = load ptr, ptr %7, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.aiMesh, ptr %688, i32 0, i32 11
  %690 = load i32, ptr %689, align 8, !tbaa !44
  %691 = add i32 %690, 1
  store i32 %691, ptr %689, align 8, !tbaa !44
  %692 = zext i32 %690 to i64
  %693 = getelementptr inbounds ptr, ptr %687, i64 %692
  store ptr %684, ptr %693, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  %694 = load ptr, ptr %4, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.aiMesh, ptr %694, i32 0, i32 12
  %696 = load ptr, ptr %695, align 8, !tbaa !45
  %697 = load i32, ptr %40, align 4, !tbaa !9
  %698 = zext i32 %697 to i64
  %699 = getelementptr inbounds ptr, ptr %696, i64 %698
  %700 = load ptr, ptr %699, align 8, !tbaa !5
  store ptr %700, ptr %42, align 8, !tbaa !5
  %701 = load ptr, ptr %42, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct.aiBone, ptr %701, i32 0, i32 0
  %703 = load ptr, ptr %41, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.aiBone, ptr %703, i32 0, i32 0
  %705 = invoke noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %704, ptr noundef nonnull align 4 dereferenceable(1028) %702)
          to label %706 unwind label %743

706:                                              ; preds = %683
  %707 = load ptr, ptr %42, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.aiBone, ptr %707, i32 0, i32 5
  %709 = load ptr, ptr %41, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.aiBone, ptr %709, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %710, ptr align 8 %708, i64 64, i1 false), !tbaa.struct !55
  %711 = load i32, ptr %40, align 4, !tbaa !9
  %712 = zext i32 %711 to i64
  %713 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %31, i64 noundef %712) #8
  %714 = load i32, ptr %713, align 4, !tbaa !9
  %715 = zext i32 %714 to i64
  %716 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %715, i64 8)
  %717 = extractvalue { i64, i1 } %716, 1
  %718 = extractvalue { i64, i1 } %716, 0
  %719 = select i1 %717, i64 -1, i64 %718
  %720 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %719) #9
          to label %721 unwind label %743

721:                                              ; preds = %706
  %722 = icmp eq i64 %715, 0
  br i1 %722, label %729, label %723

723:                                              ; preds = %721
  %724 = getelementptr inbounds %struct.aiVertexWeight, ptr %720, i64 %715
  br label %725

725:                                              ; preds = %725, %723
  %726 = phi ptr [ %720, %723 ], [ %727, %725 ]
  call void @_ZN14aiVertexWeightC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %726) #8
  %727 = getelementptr inbounds %struct.aiVertexWeight, ptr %726, i64 1
  %728 = icmp eq ptr %727, %724
  br i1 %728, label %729, label %725

729:                                              ; preds = %725, %721
  %730 = load ptr, ptr %41, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.aiBone, ptr %730, i32 0, i32 4
  store ptr %720, ptr %731, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #8
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %732

732:                                              ; preds = %786, %729
  %733 = load i32, ptr %43, align 4, !tbaa !9
  %734 = load ptr, ptr %42, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.aiBone, ptr %734, i32 0, i32 1
  %736 = load i32, ptr %735, align 4, !tbaa !46
  %737 = icmp ult i32 %733, %736
  br i1 %737, label %747, label %738

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

739:                                              ; preds = %681
  %740 = landingpad { ptr, i32 }
          cleanup
  %741 = extractvalue { ptr, i32 } %740, 0
  store ptr %741, ptr %11, align 8
  %742 = extractvalue { ptr, i32 } %740, 1
  store i32 %742, ptr %12, align 4
  br label %794

743:                                              ; preds = %706, %683
  %744 = landingpad { ptr, i32 }
          cleanup
  %745 = extractvalue { ptr, i32 } %744, 0
  store ptr %745, ptr %11, align 8
  %746 = extractvalue { ptr, i32 } %744, 1
  store i32 %746, ptr %12, align 4
  br label %793

747:                                              ; preds = %732
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #8
  %748 = load ptr, ptr %42, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.aiBone, ptr %748, i32 0, i32 4
  %750 = load ptr, ptr %749, align 8, !tbaa !49
  %751 = load i32, ptr %43, align 4, !tbaa !9
  %752 = zext i32 %751 to i64
  %753 = getelementptr inbounds %struct.aiVertexWeight, ptr %750, i64 %752
  %754 = getelementptr inbounds %struct.aiVertexWeight, ptr %753, i32 0, i32 0
  %755 = load i32, ptr %754, align 4, !tbaa !50
  %756 = zext i32 %755 to i64
  %757 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %756) #8
  %758 = load i32, ptr %757, align 4, !tbaa !9
  store i32 %758, ptr %44, align 4, !tbaa !9
  %759 = load i32, ptr %44, align 4, !tbaa !9
  %760 = icmp ne i32 %759, -1
  br i1 %760, label %761, label %785

761:                                              ; preds = %747
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  %762 = load i32, ptr %44, align 4, !tbaa !9
  %763 = load ptr, ptr %42, align 8, !tbaa !5
  %764 = getelementptr inbounds %struct.aiBone, ptr %763, i32 0, i32 4
  %765 = load ptr, ptr %764, align 8, !tbaa !49
  %766 = load i32, ptr %43, align 4, !tbaa !9
  %767 = zext i32 %766 to i64
  %768 = getelementptr inbounds %struct.aiVertexWeight, ptr %765, i64 %767
  %769 = getelementptr inbounds %struct.aiVertexWeight, ptr %768, i32 0, i32 1
  %770 = load float, ptr %769, align 4, !tbaa !56
  invoke void @_ZN14aiVertexWeightC2Ejf(ptr noundef nonnull align 4 dereferenceable(8) %45, i32 noundef %762, float noundef %770)
          to label %771 unwind label %781

771:                                              ; preds = %761
  %772 = load ptr, ptr %41, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct.aiBone, ptr %772, i32 0, i32 4
  %774 = load ptr, ptr %773, align 8, !tbaa !49
  %775 = load ptr, ptr %41, align 8, !tbaa !5
  %776 = getelementptr inbounds %struct.aiBone, ptr %775, i32 0, i32 1
  %777 = load i32, ptr %776, align 4, !tbaa !46
  %778 = add i32 %777, 1
  store i32 %778, ptr %776, align 4, !tbaa !46
  %779 = zext i32 %777 to i64
  %780 = getelementptr inbounds %struct.aiVertexWeight, ptr %774, i64 %779
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %780, ptr align 4 %45, i64 8, i1 false), !tbaa.struct !57
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %785

781:                                              ; preds = %761
  %782 = landingpad { ptr, i32 }
          cleanup
  %783 = extractvalue { ptr, i32 } %782, 0
  store ptr %783, ptr %11, align 8
  %784 = extractvalue { ptr, i32 } %782, 1
  store i32 %784, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  br label %793

785:                                              ; preds = %771, %747
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  br label %786

786:                                              ; preds = %785
  %787 = load i32, ptr %43, align 4, !tbaa !9
  %788 = add i32 %787, 1
  store i32 %788, ptr %43, align 4, !tbaa !9
  br label %732, !llvm.loop !58

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

790:                                              ; preds = %789, %680
  %791 = load i32, ptr %40, align 4, !tbaa !9
  %792 = add i32 %791, 1
  store i32 %792, ptr %40, align 4, !tbaa !9
  br label %663, !llvm.loop !59

793:                                              ; preds = %781, %743
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  br label %794

794:                                              ; preds = %793, %739
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %809

795:                                              ; preds = %669
  %796 = load i32, ptr %39, align 4, !tbaa !9
  %797 = load ptr, ptr %7, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct.aiMesh, ptr %797, i32 0, i32 11
  %799 = load i32, ptr %798, align 8, !tbaa !44
  %800 = icmp eq i32 %796, %799
  br i1 %800, label %803, label %801

801:                                              ; preds = %795
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.12, ptr noundef @.str.2, i32 noundef 375)
          to label %802 unwind label %805

802:                                              ; preds = %801
  br label %803

803:                                              ; preds = %802, %795
  %804 = phi i1 [ true, %795 ], [ false, %802 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  br label %810

805:                                              ; preds = %801
  %806 = landingpad { ptr, i32 }
          cleanup
  %807 = extractvalue { ptr, i32 } %806, 0
  store ptr %807, ptr %11, align 8
  %808 = extractvalue { ptr, i32 } %806, 1
  store i32 %808, ptr %12, align 4
  br label %809

809:                                              ; preds = %805, %794
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  br label %811

810:                                              ; preds = %803, %640
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #8
  br label %813

811:                                              ; preds = %809, %670
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #8
  br label %812

812:                                              ; preds = %811, %570
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #8
  br label %815

813:                                              ; preds = %810, %552
  %814 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 1, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  ret ptr %814

815:                                              ; preds = %812, %551, %372, %274, %230, %179
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  br label %816

816:                                              ; preds = %815, %60
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  br label %817

817:                                              ; preds = %816
  %818 = load ptr, ptr %11, align 8
  %819 = load i32, ptr %12, align 4
  %820 = insertvalue { ptr, i32 } poison, ptr %818, 0
  %821 = insertvalue { ptr, i32 } %820, i32 %819, 1
  resume { ptr, i32 } %821

822:                                              ; preds = %545
  unreachable
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

%"class.std::vector.6" = type { %"struct.std::_Vector_base.7" }
%"struct.std::_Vector_base.7" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.8" = type { i8 }
%struct.aiVertexWeight = type { i32, float }
%struct.aiFace = type { i32, ptr }
%class.aiVector3t = type { float, float, float }
%class.aiColor4t = type { float, float, float, float }

@.str.2 = external hidden unnamed_addr constant [122 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [31 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef nonnull ptr @_ZN6Assimp11MakeSubmeshEPK6aiMeshRKSt6vectorIjSaIjEEj(ptr noundef %0, ptr noundef nonnull align 8 dereferenceable(24) %1, i32 noundef %2) local_unnamed_addr #6 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::vector.6", align 8
  %5 = alloca i32, align 4
  %6 = alloca %"class.std::allocator.8", align 1
  %7 = alloca %"class.std::vector.6", align 8
  %8 = alloca i32, align 4
  %9 = alloca %"class.std::allocator.8", align 1
  %10 = alloca %struct.aiVertexWeight, align 8
  %11 = tail call noalias noundef nonnull dereferenceable(1320) ptr @_Znwm(i64 noundef 1320) #8
  tail call void @_ZN6aiMeshC2Ev(ptr noundef nonnull align 8 dereferenceable(1320) %11) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #9
  %12 = getelementptr inbounds i8, ptr %0, i64 4
  %13 = load i32, ptr %12, align 4, !tbaa !5
  %14 = zext i32 %13 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #9
  store i32 -1, ptr %5, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #9
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #9
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %14, ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 1 dereferenceable(1) %6)
          to label %15 unwind label %35

15:                                               ; preds = %3
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #9
  %16 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #9
  %.not269 = icmp eq i64 %16, 0
  br i1 %.not269, label %._crit_edge227, label %.lr.ph226

.lr.ph226:                                        ; preds = %15
  %17 = getelementptr inbounds i8, ptr %0, i64 208
  br label %37

._crit_edge227:                                   ; preds = %._crit_edge, %15
  %.0177.lcssa = phi i64 [ 0, %15 ], [ %.1178.lcssa, %._crit_edge ]
  %18 = getelementptr inbounds i8, ptr %0, i64 236
  %19 = getelementptr inbounds i8, ptr %11, i64 236
  %20 = call noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %19, ptr noundef nonnull align 4 dereferenceable(1028) %18)
  %21 = getelementptr inbounds i8, ptr %0, i64 232
  %22 = load i32, ptr %21, align 8, !tbaa !17
  %23 = getelementptr inbounds i8, ptr %11, i64 232
  store i32 %22, ptr %23, align 8, !tbaa !17
  %24 = load i32, ptr %0, align 8, !tbaa !18
  store i32 %24, ptr %11, align 8, !tbaa !18
  %25 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #9
  %26 = trunc i64 %25 to i32
  %27 = getelementptr inbounds i8, ptr %11, i64 8
  store i32 %26, ptr %27, align 8, !tbaa !19
  %28 = trunc i64 %.0177.lcssa to i32
  %29 = getelementptr inbounds i8, ptr %11, i64 4
  store i32 %28, ptr %29, align 4, !tbaa !5
  %30 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %.0177.lcssa, i64 12)
  %31 = extractvalue { i64, i1 } %30, 1
  %32 = extractvalue { i64, i1 } %30, 0
  %33 = select i1 %31, i64 -1, i64 %32
  %34 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %33) #8
          to label %69 unwind label %89

35:                                               ; preds = %3
  %36 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #9
  br label %425

37:                                               ; preds = %.lr.ph226, %._crit_edge
  %38 = phi i64 [ 0, %.lr.ph226 ], [ %47, %._crit_edge ]
  %.0177224 = phi i64 [ 0, %.lr.ph226 ], [ %.1178.lcssa, %._crit_edge ]
  %.0181223 = phi i32 [ 0, %.lr.ph226 ], [ %46, %._crit_edge ]
  %39 = load ptr, ptr %17, align 8, !tbaa !20
  %40 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %38) #9
  %41 = load i32, ptr %40, align 4, !tbaa !16
  %42 = zext i32 %41 to i64
  %43 = getelementptr inbounds %struct.aiFace, ptr %39, i64 %42
  %44 = load i32, ptr %43, align 8, !tbaa !21
  %.not270 = icmp eq i32 %44, 0
  br i1 %.not270, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %37
  %45 = getelementptr inbounds i8, ptr %43, i64 8
  br label %49

._crit_edge:                                      ; preds = %65, %37
  %.1178.lcssa = phi i64 [ %.0177224, %37 ], [ %.2179, %65 ]
  %46 = add i32 %.0181223, 1
  %47 = zext i32 %46 to i64
  %48 = icmp ugt i64 %16, %47
  br i1 %48, label %37, label %._crit_edge227, !llvm.loop !23

49:                                               ; preds = %.lr.ph, %65
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %65 ]
  %.1178222 = phi i64 [ %.0177224, %.lr.ph ], [ %.2179, %65 ]
  %50 = load ptr, ptr %45, align 8, !tbaa !25
  %51 = getelementptr inbounds i32, ptr %50, i64 %indvars.iv
  %52 = load i32, ptr %51, align 4, !tbaa !16
  %53 = zext i32 %52 to i64
  %54 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %53) #9
  %55 = load i32, ptr %54, align 4, !tbaa !16
  %56 = icmp eq i32 %55, -1
  br i1 %56, label %57, label %65

57:                                               ; preds = %49
  %58 = add i64 %.1178222, 1
  %59 = trunc i64 %.1178222 to i32
  %60 = load ptr, ptr %45, align 8, !tbaa !25
  %61 = getelementptr inbounds i32, ptr %60, i64 %indvars.iv
  %62 = load i32, ptr %61, align 4, !tbaa !16
  %63 = zext i32 %62 to i64
  %64 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %63) #9
  store i32 %59, ptr %64, align 4, !tbaa !16
  br label %65

65:                                               ; preds = %49, %57
  %.2179 = phi i64 [ %58, %57 ], [ %.1178222, %49 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %66 = load i32, ptr %43, align 8, !tbaa !21
  %67 = zext i32 %66 to i64
  %68 = icmp ult i64 %indvars.iv.next, %67
  br i1 %68, label %49, label %._crit_edge, !llvm.loop !26

69:                                               ; preds = %._crit_edge227
  %70 = icmp eq i64 %.0177.lcssa, 0
  br i1 %70, label %.loopexit220, label %71

71:                                               ; preds = %69
  %72 = getelementptr inbounds %class.aiVector3t, ptr %34, i64 %.0177.lcssa
  br label %73

73:                                               ; preds = %73, %71
  %74 = phi ptr [ %34, %71 ], [ %75, %73 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %74) #9
  %75 = getelementptr inbounds i8, ptr %74, i64 12
  %76 = icmp eq ptr %75, %72
  br i1 %76, label %.loopexit220, label %73

.loopexit220:                                     ; preds = %73, %69
  %77 = getelementptr inbounds i8, ptr %11, i64 16
  store ptr %34, ptr %77, align 8, !tbaa !27
  %78 = call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %0)
  br i1 %78, label %79, label %91

79:                                               ; preds = %.loopexit220
  %80 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %33) #8
          to label %81 unwind label %89

81:                                               ; preds = %79
  br i1 %70, label %.loopexit219, label %82

82:                                               ; preds = %81
  %83 = getelementptr inbounds %class.aiVector3t, ptr %80, i64 %.0177.lcssa
  br label %84

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

.loopexit219:                                     ; preds = %84, %81
  %88 = getelementptr inbounds i8, ptr %11, i64 24
  store ptr %80, ptr %88, align 8, !tbaa !28
  br label %91

89:                                               ; preds = %._crit_edge234, %.loopexit218, %93, %79, %._crit_edge227
  %90 = landingpad { ptr, i32 }
          cleanup
  br label %424

91:                                               ; preds = %.loopexit219, %.loopexit220
  %92 = call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %0)
  br i1 %92, label %93, label %112

93:                                               ; preds = %91
  %94 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %33) #8
          to label %95 unwind label %89

95:                                               ; preds = %93
  br i1 %70, label %.loopexit218, label %96

96:                                               ; preds = %95
  %97 = getelementptr inbounds %class.aiVector3t, ptr %94, i64 %.0177.lcssa
  br label %98

98:                                               ; preds = %98, %96
  %99 = phi ptr [ %94, %96 ], [ %100, %98 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %99) #9
  %100 = getelementptr inbounds i8, ptr %99, i64 12
  %101 = icmp eq ptr %100, %97
  br i1 %101, label %.loopexit218, label %98

.loopexit218:                                     ; preds = %98, %95
  %102 = getelementptr inbounds i8, ptr %11, i64 32
  store ptr %94, ptr %102, align 8, !tbaa !29
  %103 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %33) #8
          to label %104 unwind label %89

104:                                              ; preds = %.loopexit218
  br i1 %70, label %.loopexit217, label %105

105:                                              ; preds = %104
  %106 = getelementptr inbounds %class.aiVector3t, ptr %103, i64 %.0177.lcssa
  br label %107

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

.loopexit217:                                     ; preds = %107, %104
  %111 = getelementptr inbounds i8, ptr %11, i64 40
  store ptr %103, ptr %111, align 8, !tbaa !30
  br label %112

112:                                              ; preds = %.loopexit217, %91
  %113 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %0, i32 noundef 0)
  br i1 %113, label %.lr.ph231, label %.preheader215

.lr.ph231:                                        ; preds = %112
  %114 = getelementptr inbounds i8, ptr %11, i64 112
  %115 = getelementptr inbounds i8, ptr %0, i64 176
  %116 = getelementptr inbounds i8, ptr %11, i64 176
  br label %124

.preheader215:                                    ; preds = %.loopexit216, %112
  %117 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %0, i32 noundef 0)
  br i1 %117, label %.lr.ph233, label %._crit_edge234

.lr.ph233:                                        ; preds = %.preheader215
  %118 = icmp ugt i64 %.0177.lcssa, 1152921504606846975
  %119 = shl i64 %.0177.lcssa, 4
  %120 = select i1 %118, i64 -1, i64 %119
  %121 = getelementptr inbounds i8, ptr %11, i64 48
  br label %145

122:                                              ; preds = %124
  %123 = landingpad { ptr, i32 }
          cleanup
  br label %424

124:                                              ; preds = %.lr.ph231, %.loopexit216
  %.0186229 = phi i64 [ 0, %.lr.ph231 ], [ %137, %.loopexit216 ]
  %125 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %33) #8
          to label %126 unwind label %122

126:                                              ; preds = %124
  br i1 %70, label %.loopexit216, label %127

127:                                              ; preds = %126
  %128 = getelementptr inbounds %class.aiVector3t, ptr %125, i64 %.0177.lcssa
  br label %129

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

.loopexit216:                                     ; preds = %129, %126
  %133 = getelementptr inbounds [8 x ptr], ptr %114, i64 0, i64 %.0186229
  store ptr %125, ptr %133, align 8, !tbaa !31
  %134 = getelementptr inbounds [8 x i32], ptr %115, i64 0, i64 %.0186229
  %135 = load i32, ptr %134, align 4, !tbaa !16
  %136 = getelementptr inbounds [8 x i32], ptr %116, i64 0, i64 %.0186229
  store i32 %135, ptr %136, align 4, !tbaa !16
  %137 = add i64 %.0186229, 1
  %138 = trunc i64 %137 to i32
  %139 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %0, i32 noundef %138)
  br i1 %139, label %124, label %.preheader215, !llvm.loop !32

._crit_edge234:                                   ; preds = %.loopexit214, %.preheader215
  %140 = shl i64 %16, 4
  %141 = or disjoint i64 %140, 8
  %142 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %141) #8
          to label %158 unwind label %89

143:                                              ; preds = %145
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %424

145:                                              ; preds = %.lr.ph233, %.loopexit214
  %.0188232 = phi i64 [ 0, %.lr.ph233 ], [ %155, %.loopexit214 ]
  %146 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %120) #8
          to label %147 unwind label %143

147:                                              ; preds = %145
  br i1 %70, label %.loopexit214, label %148

148:                                              ; preds = %147
  %149 = getelementptr inbounds %class.aiColor4t, ptr %146, i64 %.0177.lcssa
  br label %150

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

.loopexit214:                                     ; preds = %150, %147
  %154 = getelementptr inbounds [8 x ptr], ptr %121, i64 0, i64 %.0188232
  store ptr %146, ptr %154, align 8, !tbaa !31
  %155 = add i64 %.0188232, 1
  %156 = trunc i64 %155 to i32
  %157 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %0, i32 noundef %156)
  br i1 %157, label %145, label %._crit_edge234, !llvm.loop !33

158:                                              ; preds = %._crit_edge234
  store i64 %16, ptr %142, align 16
  %159 = getelementptr inbounds i8, ptr %142, i64 8
  br i1 %.not269, label %.loopexit213.thread, label %161

.loopexit213.thread:                              ; preds = %158
  %160 = getelementptr inbounds i8, ptr %11, i64 208
  store ptr %159, ptr %160, align 8, !tbaa !20
  br label %.preheader212

161:                                              ; preds = %158
  %162 = getelementptr inbounds %struct.aiFace, ptr %159, i64 %16
  br label %163

163:                                              ; preds = %163, %161
  %164 = phi ptr [ %159, %161 ], [ %165, %163 ]
  call void @_ZN6aiFaceC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %164) #9
  %165 = getelementptr inbounds i8, ptr %164, i64 16
  %166 = icmp eq ptr %165, %162
  br i1 %166, label %.loopexit213, label %163

.loopexit213:                                     ; preds = %163
  %167 = getelementptr inbounds i8, ptr %11, i64 208
  store ptr %159, ptr %167, align 8, !tbaa !20
  br i1 %.not269, label %.preheader212, label %.lr.ph241

.lr.ph241:                                        ; preds = %.loopexit213
  %168 = getelementptr inbounds i8, ptr %0, i64 208
  br label %181

.preheader212:                                    ; preds = %._crit_edge238, %.loopexit213.thread, %.loopexit213
  %169 = load i32, ptr %12, align 4, !tbaa !5
  %.not273 = icmp eq i32 %169, 0
  br i1 %.not273, label %._crit_edge251, label %.lr.ph250

.lr.ph250:                                        ; preds = %.preheader212
  %170 = getelementptr inbounds i8, ptr %0, i64 16
  %171 = getelementptr inbounds i8, ptr %0, i64 24
  %172 = getelementptr inbounds i8, ptr %11, i64 24
  %173 = getelementptr inbounds i8, ptr %0, i64 32
  %174 = getelementptr inbounds i8, ptr %11, i64 32
  %175 = getelementptr inbounds i8, ptr %0, i64 40
  %176 = getelementptr inbounds i8, ptr %11, i64 40
  %177 = getelementptr inbounds i8, ptr %0, i64 112
  %178 = getelementptr inbounds i8, ptr %11, i64 112
  %179 = getelementptr inbounds i8, ptr %0, i64 48
  %180 = getelementptr inbounds i8, ptr %11, i64 48
  br label %217

181:                                              ; preds = %.lr.ph241, %._crit_edge238
  %182 = phi i64 [ 0, %.lr.ph241 ], [ %199, %._crit_edge238 ]
  %.0190239 = phi i32 [ 0, %.lr.ph241 ], [ %198, %._crit_edge238 ]
  %183 = load ptr, ptr %168, align 8, !tbaa !20
  %184 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %182) #9
  %185 = load i32, ptr %184, align 4, !tbaa !16
  %186 = zext i32 %185 to i64
  %187 = getelementptr inbounds %struct.aiFace, ptr %183, i64 %186
  %188 = load ptr, ptr %167, align 8, !tbaa !20
  %189 = getelementptr inbounds %struct.aiFace, ptr %188, i64 %182
  %190 = load i32, ptr %187, align 8, !tbaa !21
  store i32 %190, ptr %189, align 8, !tbaa !21
  %191 = zext i32 %190 to i64
  %192 = shl nuw nsw i64 %191, 2
  %193 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %192) #8
          to label %194 unwind label %201

194:                                              ; preds = %181
  %195 = getelementptr inbounds i8, ptr %189, i64 8
  store ptr %193, ptr %195, align 8, !tbaa !25
  %196 = load i32, ptr %189, align 8, !tbaa !21
  %.not272 = icmp eq i32 %196, 0
  br i1 %.not272, label %._crit_edge238, label %.lr.ph237

.lr.ph237:                                        ; preds = %194
  %197 = getelementptr inbounds i8, ptr %187, i64 8
  br label %203

._crit_edge238:                                   ; preds = %203, %194
  %198 = add i32 %.0190239, 1
  %199 = zext i32 %198 to i64
  %200 = icmp ugt i64 %16, %199
  br i1 %200, label %181, label %.preheader212, !llvm.loop !34

201:                                              ; preds = %181
  %202 = landingpad { ptr, i32 }
          cleanup
  br label %424

203:                                              ; preds = %.lr.ph237, %203
  %.0192235 = phi i64 [ 0, %.lr.ph237 ], [ %212, %203 ]
  %204 = load ptr, ptr %197, align 8, !tbaa !25
  %205 = getelementptr inbounds i32, ptr %204, i64 %.0192235
  %206 = load i32, ptr %205, align 4, !tbaa !16
  %207 = zext i32 %206 to i64
  %208 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %207) #9
  %209 = load i32, ptr %208, align 4, !tbaa !16
  %210 = load ptr, ptr %195, align 8, !tbaa !25
  %211 = getelementptr inbounds i32, ptr %210, i64 %.0192235
  store i32 %209, ptr %211, align 4, !tbaa !16
  %212 = add nuw nsw i64 %.0192235, 1
  %213 = load i32, ptr %189, align 8, !tbaa !21
  %214 = zext i32 %213 to i64
  %215 = icmp ult i64 %212, %214
  br i1 %215, label %203, label %._crit_edge238, !llvm.loop !35

._crit_edge251:                                   ; preds = %.loopexit211, %.preheader212
  %216 = and i32 %2, 1
  %.not.not = icmp eq i32 %216, 0
  br i1 %.not.not, label %294, label %423

217:                                              ; preds = %.lr.ph250, %.loopexit211
  %indvars.iv283 = phi i64 [ 0, %.lr.ph250 ], [ %indvars.iv.next284, %.loopexit211 ]
  %218 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %indvars.iv283) #9
  %219 = load i32, ptr %218, align 4, !tbaa !16
  %220 = icmp eq i32 %219, -1
  br i1 %220, label %.loopexit211, label %221

221:                                              ; preds = %217
  %222 = load ptr, ptr %170, align 8, !tbaa !27
  %223 = getelementptr inbounds %class.aiVector3t, ptr %222, i64 %indvars.iv283
  %224 = load ptr, ptr %77, align 8, !tbaa !27
  %225 = zext i32 %219 to i64
  %226 = getelementptr inbounds %class.aiVector3t, ptr %224, i64 %225
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %226, ptr noundef nonnull align 4 dereferenceable(12) %223, i64 12, i1 false), !tbaa.struct !36
  %227 = call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %0)
  br i1 %227, label %228, label %233

228:                                              ; preds = %221
  %229 = load ptr, ptr %171, align 8, !tbaa !28
  %230 = getelementptr inbounds %class.aiVector3t, ptr %229, i64 %indvars.iv283
  %231 = load ptr, ptr %172, align 8, !tbaa !28
  %232 = getelementptr inbounds %class.aiVector3t, ptr %231, i64 %225
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %232, ptr noundef nonnull align 4 dereferenceable(12) %230, i64 12, i1 false), !tbaa.struct !36
  br label %233

233:                                              ; preds = %228, %221
  %234 = call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %0)
  br i1 %234, label %235, label %244

235:                                              ; preds = %233
  %236 = load ptr, ptr %173, align 8, !tbaa !29
  %237 = getelementptr inbounds %class.aiVector3t, ptr %236, i64 %indvars.iv283
  %238 = load ptr, ptr %174, align 8, !tbaa !29
  %239 = getelementptr inbounds %class.aiVector3t, ptr %238, i64 %225
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %239, ptr noundef nonnull align 4 dereferenceable(12) %237, i64 12, i1 false), !tbaa.struct !36
  %240 = load ptr, ptr %175, align 8, !tbaa !30
  %241 = getelementptr inbounds %class.aiVector3t, ptr %240, i64 %indvars.iv283
  %242 = load ptr, ptr %176, align 8, !tbaa !30
  %243 = getelementptr inbounds %class.aiVector3t, ptr %242, i64 %225
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %243, ptr noundef nonnull align 4 dereferenceable(12) %241, i64 12, i1 false), !tbaa.struct !36
  br label %244

244:                                              ; preds = %235, %233
  %245 = call noundef i32 @_ZNK6aiMesh16GetNumUVChannelsEv(ptr noundef nonnull align 8 dereferenceable(1320) %0)
  %246 = zext i32 %245 to i64
  %.not274 = icmp eq i32 %245, 0
  br i1 %.not274, label %._crit_edge245, label %.lr.ph244.preheader

.lr.ph244.preheader:                              ; preds = %244
  %xtraiter = and i64 %246, 1
  %247 = icmp eq i32 %245, 1
  br i1 %247, label %._crit_edge245.loopexit.unr-lcssa, label %.lr.ph244.preheader.new

.lr.ph244.preheader.new:                          ; preds = %.lr.ph244.preheader
  %unroll_iter = and i64 %246, 4294967294
  br label %.lr.ph244

._crit_edge245.loopexit.unr-lcssa:                ; preds = %.lr.ph244, %.lr.ph244.preheader
  %.0189242.unr = phi i64 [ 0, %.lr.ph244.preheader ], [ %270, %.lr.ph244 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge245, label %.lr.ph244.epil

.lr.ph244.epil:                                   ; preds = %._crit_edge245.loopexit.unr-lcssa
  %248 = getelementptr inbounds [8 x ptr], ptr %177, i64 0, i64 %.0189242.unr
  %249 = load ptr, ptr %248, align 8, !tbaa !31
  %250 = getelementptr inbounds %class.aiVector3t, ptr %249, i64 %indvars.iv283
  %251 = getelementptr inbounds [8 x ptr], ptr %178, i64 0, i64 %.0189242.unr
  %252 = load ptr, ptr %251, align 8, !tbaa !31
  %253 = getelementptr inbounds %class.aiVector3t, ptr %252, i64 %225
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %253, ptr noundef nonnull align 4 dereferenceable(12) %250, i64 12, i1 false), !tbaa.struct !36
  br label %._crit_edge245

._crit_edge245:                                   ; preds = %.lr.ph244.epil, %._crit_edge245.loopexit.unr-lcssa, %244
  %254 = call noundef i32 @_ZNK6aiMesh19GetNumColorChannelsEv(ptr noundef nonnull align 8 dereferenceable(1320) %0)
  %255 = zext i32 %254 to i64
  %.not275 = icmp eq i32 %254, 0
  br i1 %.not275, label %.loopexit211, label %.lr.ph248.preheader

.lr.ph248.preheader:                              ; preds = %._crit_edge245
  %xtraiter306 = and i64 %255, 1
  %256 = icmp eq i32 %254, 1
  br i1 %256, label %.loopexit211.loopexit.unr-lcssa, label %.lr.ph248.preheader.new

.lr.ph248.preheader.new:                          ; preds = %.lr.ph248.preheader
  %unroll_iter308 = and i64 %255, 4294967294
  br label %.lr.ph248

.lr.ph244:                                        ; preds = %.lr.ph244, %.lr.ph244.preheader.new
  %.0189242 = phi i64 [ 0, %.lr.ph244.preheader.new ], [ %270, %.lr.ph244 ]
  %niter = phi i64 [ 0, %.lr.ph244.preheader.new ], [ %niter.next.1, %.lr.ph244 ]
  %257 = getelementptr inbounds [8 x ptr], ptr %177, i64 0, i64 %.0189242
  %258 = load ptr, ptr %257, align 8, !tbaa !31
  %259 = getelementptr inbounds %class.aiVector3t, ptr %258, i64 %indvars.iv283
  %260 = getelementptr inbounds [8 x ptr], ptr %178, i64 0, i64 %.0189242
  %261 = load ptr, ptr %260, align 8, !tbaa !31
  %262 = getelementptr inbounds %class.aiVector3t, ptr %261, i64 %225
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %262, ptr noundef nonnull align 4 dereferenceable(12) %259, i64 12, i1 false), !tbaa.struct !36
  %263 = or disjoint i64 %.0189242, 1
  %264 = getelementptr inbounds [8 x ptr], ptr %177, i64 0, i64 %263
  %265 = load ptr, ptr %264, align 8, !tbaa !31
  %266 = getelementptr inbounds %class.aiVector3t, ptr %265, i64 %indvars.iv283
  %267 = getelementptr inbounds [8 x ptr], ptr %178, i64 0, i64 %263
  %268 = load ptr, ptr %267, align 8, !tbaa !31
  %269 = getelementptr inbounds %class.aiVector3t, ptr %268, i64 %225
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %269, ptr noundef nonnull align 4 dereferenceable(12) %266, i64 12, i1 false), !tbaa.struct !36
  %270 = add nuw nsw i64 %.0189242, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge245.loopexit.unr-lcssa, label %.lr.ph244, !llvm.loop !38

.lr.ph248:                                        ; preds = %.lr.ph248, %.lr.ph248.preheader.new
  %.0187246 = phi i64 [ 0, %.lr.ph248.preheader.new ], [ %284, %.lr.ph248 ]
  %niter309 = phi i64 [ 0, %.lr.ph248.preheader.new ], [ %niter309.next.1, %.lr.ph248 ]
  %271 = getelementptr inbounds [8 x ptr], ptr %179, i64 0, i64 %.0187246
  %272 = load ptr, ptr %271, align 8, !tbaa !31
  %273 = getelementptr inbounds %class.aiColor4t, ptr %272, i64 %indvars.iv283
  %274 = getelementptr inbounds [8 x ptr], ptr %180, i64 0, i64 %.0187246
  %275 = load ptr, ptr %274, align 8, !tbaa !31
  %276 = getelementptr inbounds %class.aiColor4t, ptr %275, i64 %225
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %276, ptr noundef nonnull align 4 dereferenceable(16) %273, i64 16, i1 false), !tbaa.struct !39
  %277 = or disjoint i64 %.0187246, 1
  %278 = getelementptr inbounds [8 x ptr], ptr %179, i64 0, i64 %277
  %279 = load ptr, ptr %278, align 8, !tbaa !31
  %280 = getelementptr inbounds %class.aiColor4t, ptr %279, i64 %indvars.iv283
  %281 = getelementptr inbounds [8 x ptr], ptr %180, i64 0, i64 %277
  %282 = load ptr, ptr %281, align 8, !tbaa !31
  %283 = getelementptr inbounds %class.aiColor4t, ptr %282, i64 %225
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %283, ptr noundef nonnull align 4 dereferenceable(16) %280, i64 16, i1 false), !tbaa.struct !39
  %284 = add nuw nsw i64 %.0187246, 2
  %niter309.next.1 = add i64 %niter309, 2
  %niter309.ncmp.1 = icmp eq i64 %niter309.next.1, %unroll_iter308
  br i1 %niter309.ncmp.1, label %.loopexit211.loopexit.unr-lcssa, label %.lr.ph248, !llvm.loop !40

.loopexit211.loopexit.unr-lcssa:                  ; preds = %.lr.ph248, %.lr.ph248.preheader
  %.0187246.unr = phi i64 [ 0, %.lr.ph248.preheader ], [ %284, %.lr.ph248 ]
  %lcmp.mod307.not = icmp eq i64 %xtraiter306, 0
  br i1 %lcmp.mod307.not, label %.loopexit211, label %.lr.ph248.epil

.lr.ph248.epil:                                   ; preds = %.loopexit211.loopexit.unr-lcssa
  %285 = getelementptr inbounds [8 x ptr], ptr %179, i64 0, i64 %.0187246.unr
  %286 = load ptr, ptr %285, align 8, !tbaa !31
  %287 = getelementptr inbounds %class.aiColor4t, ptr %286, i64 %indvars.iv283
  %288 = getelementptr inbounds [8 x ptr], ptr %180, i64 0, i64 %.0187246.unr
  %289 = load ptr, ptr %288, align 8, !tbaa !31
  %290 = getelementptr inbounds %class.aiColor4t, ptr %289, i64 %225
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %290, ptr noundef nonnull align 4 dereferenceable(16) %287, i64 16, i1 false), !tbaa.struct !39
  br label %.loopexit211

.loopexit211:                                     ; preds = %.lr.ph248.epil, %.loopexit211.loopexit.unr-lcssa, %._crit_edge245, %217
  %indvars.iv.next284 = add nuw nsw i64 %indvars.iv283, 1
  %291 = load i32, ptr %12, align 4, !tbaa !5
  %292 = zext i32 %291 to i64
  %293 = icmp ult i64 %indvars.iv.next284, %292
  br i1 %293, label %217, label %._crit_edge251, !llvm.loop !41

294:                                              ; preds = %._crit_edge251
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #9
  %295 = getelementptr inbounds i8, ptr %0, i64 216
  %296 = load i32, ptr %295, align 8, !tbaa !42
  %297 = zext i32 %296 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #9
  store i32 0, ptr %8, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #9
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #9
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %297, ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %298 unwind label %303

298:                                              ; preds = %294
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #9
  %299 = load i32, ptr %295, align 8, !tbaa !42
  %.not276 = icmp eq i32 %299, 0
  br i1 %.not276, label %._crit_edge261, label %.lr.ph258

.lr.ph258:                                        ; preds = %298
  %300 = getelementptr inbounds i8, ptr %0, i64 224
  br label %305

.preheader:                                       ; preds = %._crit_edge255
  %301 = icmp eq i32 %313, 0
  br i1 %301, label %._crit_edge261, label %.lr.ph260

.lr.ph260:                                        ; preds = %.preheader
  %302 = getelementptr inbounds i8, ptr %11, i64 216
  br label %334

303:                                              ; preds = %294
  %304 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #9
  br label %422

305:                                              ; preds = %.lr.ph258, %._crit_edge255
  %306 = phi i32 [ %299, %.lr.ph258 ], [ %313, %._crit_edge255 ]
  %indvars.iv289 = phi i64 [ 0, %.lr.ph258 ], [ %indvars.iv.next290, %._crit_edge255 ]
  %307 = load ptr, ptr %300, align 8, !tbaa !43
  %308 = getelementptr inbounds ptr, ptr %307, i64 %indvars.iv289
  %309 = load ptr, ptr %308, align 8, !tbaa !31
  %310 = getelementptr inbounds i8, ptr %309, i64 1028
  %311 = load i32, ptr %310, align 4, !tbaa !44
  %.not277 = icmp eq i32 %311, 0
  br i1 %.not277, label %._crit_edge255, label %.lr.ph254

.lr.ph254:                                        ; preds = %305
  %312 = getelementptr inbounds i8, ptr %309, i64 1048
  br label %316

._crit_edge255.loopexit:                          ; preds = %327
  %.pre = load i32, ptr %295, align 8, !tbaa !42
  br label %._crit_edge255

._crit_edge255:                                   ; preds = %._crit_edge255.loopexit, %305
  %313 = phi i32 [ %.pre, %._crit_edge255.loopexit ], [ %306, %305 ]
  %indvars.iv.next290 = add nuw nsw i64 %indvars.iv289, 1
  %314 = zext i32 %313 to i64
  %315 = icmp ult i64 %indvars.iv.next290, %314
  br i1 %315, label %305, label %.preheader, !llvm.loop !47

316:                                              ; preds = %.lr.ph254, %327
  %indvars.iv286 = phi i64 [ 0, %.lr.ph254 ], [ %indvars.iv.next287, %327 ]
  %317 = load ptr, ptr %312, align 8, !tbaa !48
  %318 = getelementptr inbounds %struct.aiVertexWeight, ptr %317, i64 %indvars.iv286
  %319 = load i32, ptr %318, align 4, !tbaa !49
  %320 = zext i32 %319 to i64
  %321 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %320) #9
  %322 = load i32, ptr %321, align 4, !tbaa !16
  %.not206 = icmp eq i32 %322, -1
  br i1 %.not206, label %327, label %323

323:                                              ; preds = %316
  %324 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv289) #9
  %325 = load i32, ptr %324, align 4, !tbaa !16
  %326 = add i32 %325, 1
  store i32 %326, ptr %324, align 4, !tbaa !16
  br label %327

327:                                              ; preds = %323, %316
  %indvars.iv.next287 = add nuw nsw i64 %indvars.iv286, 1
  %328 = load i32, ptr %310, align 4, !tbaa !44
  %329 = zext i32 %328 to i64
  %330 = icmp ult i64 %indvars.iv.next287, %329
  br i1 %330, label %316, label %._crit_edge255.loopexit, !llvm.loop !51

._crit_edge261.loopexit:                          ; preds = %340
  %331 = icmp eq i32 %341, 0
  br label %._crit_edge261

._crit_edge261:                                   ; preds = %298, %._crit_edge261.loopexit, %.preheader
  %.not279 = phi i1 [ %331, %._crit_edge261.loopexit ], [ true, %.preheader ], [ true, %298 ]
  %332 = getelementptr inbounds i8, ptr %11, i64 216
  %333 = load i32, ptr %332, align 8, !tbaa !42
  %.not = icmp eq i32 %333, 0
  br i1 %.not, label %420, label %344

334:                                              ; preds = %.lr.ph260, %340
  %indvars.iv292 = phi i64 [ 0, %.lr.ph260 ], [ %indvars.iv.next293, %340 ]
  %335 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv292) #9
  %336 = load i32, ptr %335, align 4, !tbaa !16
  %.not205 = icmp eq i32 %336, 0
  br i1 %.not205, label %340, label %337

337:                                              ; preds = %334
  %338 = load i32, ptr %302, align 8, !tbaa !42
  %339 = add i32 %338, 1
  store i32 %339, ptr %302, align 8, !tbaa !42
  br label %340

340:                                              ; preds = %334, %337
  %indvars.iv.next293 = add nuw nsw i64 %indvars.iv292, 1
  %341 = load i32, ptr %295, align 8, !tbaa !42
  %342 = zext i32 %341 to i64
  %343 = icmp ult i64 %indvars.iv.next293, %342
  br i1 %343, label %334, label %._crit_edge261.loopexit, !llvm.loop !52

344:                                              ; preds = %._crit_edge261
  %345 = zext i32 %333 to i64
  %346 = shl nuw nsw i64 %345, 3
  %347 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %346) #8
          to label %348 unwind label %352

348:                                              ; preds = %344
  call void @llvm.memset.p0.i64(ptr nonnull align 8 %347, i8 0, i64 %346, i1 false)
  %349 = getelementptr inbounds i8, ptr %11, i64 224
  store ptr %347, ptr %349, align 8, !tbaa !43
  store i32 0, ptr %332, align 8, !tbaa !42
  br i1 %.not279, label %._crit_edge268.thread, label %.lr.ph267

.lr.ph267:                                        ; preds = %348
  %350 = getelementptr inbounds i8, ptr %0, i64 224
  br label %354

._crit_edge268:                                   ; preds = %.loopexit
  %.pre301 = load i32, ptr %332, align 8, !tbaa !42
  %351 = icmp eq i32 %333, %.pre301
  br i1 %351, label %420, label %._crit_edge268.thread

352:                                              ; preds = %344
  %353 = landingpad { ptr, i32 }
          cleanup
  br label %421

354:                                              ; preds = %.lr.ph267, %.loopexit
  %indvars.iv298 = phi i64 [ 0, %.lr.ph267 ], [ %indvars.iv.next299, %.loopexit ]
  %355 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv298) #9
  %356 = load i32, ptr %355, align 4, !tbaa !16
  %357 = icmp eq i32 %356, 0
  br i1 %357, label %.loopexit, label %358

358:                                              ; preds = %354
  %359 = invoke noalias noundef nonnull dereferenceable(1120) ptr @_Znwm(i64 noundef 1120) #8
          to label %360 unwind label %390

360:                                              ; preds = %358
  call void @_ZN6aiBoneC2Ev(ptr noundef nonnull align 8 dereferenceable(1120) %359) #9
  %361 = load ptr, ptr %349, align 8, !tbaa !43
  %362 = load i32, ptr %332, align 8, !tbaa !42
  %363 = add i32 %362, 1
  store i32 %363, ptr %332, align 8, !tbaa !42
  %364 = zext i32 %362 to i64
  %365 = getelementptr inbounds ptr, ptr %361, i64 %364
  store ptr %359, ptr %365, align 8, !tbaa !31
  %366 = load ptr, ptr %350, align 8, !tbaa !43
  %367 = getelementptr inbounds ptr, ptr %366, i64 %indvars.iv298
  %368 = load ptr, ptr %367, align 8, !tbaa !31
  %369 = call noundef nonnull align 4 dereferenceable(1028) ptr @_ZN8aiStringaSERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %359, ptr noundef nonnull align 4 dereferenceable(1028) %368)
  %370 = getelementptr inbounds i8, ptr %368, i64 1056
  %371 = getelementptr inbounds i8, ptr %359, i64 1056
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %371, ptr noundef nonnull align 8 dereferenceable(64) %370, i64 64, i1 false), !tbaa.struct !53
  %372 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %indvars.iv298) #9
  %373 = load i32, ptr %372, align 4, !tbaa !16
  %374 = zext i32 %373 to i64
  %375 = shl nuw nsw i64 %374, 3
  %376 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %375) #8
          to label %377 unwind label %392

377:                                              ; preds = %360
  %378 = icmp eq i32 %373, 0
  br i1 %378, label %.loopexit210, label %379

379:                                              ; preds = %377
  %380 = getelementptr inbounds %struct.aiVertexWeight, ptr %376, i64 %374
  br label %381

381:                                              ; preds = %381, %379
  %382 = phi ptr [ %376, %379 ], [ %383, %381 ]
  call void @_ZN14aiVertexWeightC2Ev(ptr noundef nonnull align 4 dereferenceable(8) %382) #9
  %383 = getelementptr inbounds i8, ptr %382, i64 8
  %384 = icmp eq ptr %383, %380
  br i1 %384, label %.loopexit210, label %381

.loopexit210:                                     ; preds = %381, %377
  %385 = getelementptr inbounds i8, ptr %359, i64 1048
  store ptr %376, ptr %385, align 8, !tbaa !48
  %386 = getelementptr inbounds i8, ptr %368, i64 1028
  %387 = load i32, ptr %386, align 4, !tbaa !44
  %.not280 = icmp eq i32 %387, 0
  br i1 %.not280, label %.loopexit, label %.lr.ph264

.lr.ph264:                                        ; preds = %.loopexit210
  %388 = getelementptr inbounds i8, ptr %368, i64 1048
  %389 = getelementptr inbounds i8, ptr %359, i64 1028
  br label %394

390:                                              ; preds = %358
  %391 = landingpad { ptr, i32 }
          cleanup
  br label %421

392:                                              ; preds = %360
  %393 = landingpad { ptr, i32 }
          cleanup
  br label %421

394:                                              ; preds = %.lr.ph264, %411
  %indvars.iv295 = phi i64 [ 0, %.lr.ph264 ], [ %indvars.iv.next296, %411 ]
  %395 = load ptr, ptr %388, align 8, !tbaa !48
  %396 = getelementptr inbounds %struct.aiVertexWeight, ptr %395, i64 %indvars.iv295
  %397 = load i32, ptr %396, align 4, !tbaa !49
  %398 = zext i32 %397 to i64
  %399 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %398) #9
  %400 = load i32, ptr %399, align 4, !tbaa !16
  %.not204 = icmp eq i32 %400, -1
  br i1 %.not204, label %411, label %401

401:                                              ; preds = %394
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #9
  %402 = load ptr, ptr %388, align 8, !tbaa !48
  %403 = getelementptr inbounds %struct.aiVertexWeight, ptr %402, i64 %indvars.iv295, i32 1
  %404 = load float, ptr %403, align 4, !tbaa !54
  call void @_ZN14aiVertexWeightC2Ejf(ptr noundef nonnull align 4 dereferenceable(8) %10, i32 noundef %400, float noundef %404)
  %405 = load ptr, ptr %385, align 8, !tbaa !48
  %406 = load i32, ptr %389, align 4, !tbaa !44
  %407 = add i32 %406, 1
  store i32 %407, ptr %389, align 4, !tbaa !44
  %408 = zext i32 %406 to i64
  %409 = getelementptr inbounds %struct.aiVertexWeight, ptr %405, i64 %408
  %410 = load i64, ptr %10, align 8
  store i64 %410, ptr %409, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #9
  br label %411

411:                                              ; preds = %401, %394
  %indvars.iv.next296 = add nuw nsw i64 %indvars.iv295, 1
  %412 = load i32, ptr %386, align 4, !tbaa !44
  %413 = zext i32 %412 to i64
  %414 = icmp ult i64 %indvars.iv.next296, %413
  br i1 %414, label %394, label %.loopexit, !llvm.loop !55

.loopexit:                                        ; preds = %411, %.loopexit210, %354
  %indvars.iv.next299 = add nuw nsw i64 %indvars.iv298, 1
  %415 = load i32, ptr %295, align 8, !tbaa !42
  %416 = zext i32 %415 to i64
  %417 = icmp ult i64 %indvars.iv.next299, %416
  br i1 %417, label %354, label %._crit_edge268, !llvm.loop !56

._crit_edge268.thread:                            ; preds = %348, %._crit_edge268
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.2, i32 noundef 375)
          to label %420 unwind label %418

418:                                              ; preds = %._crit_edge268.thread
  %419 = landingpad { ptr, i32 }
          cleanup
  br label %421

420:                                              ; preds = %._crit_edge268, %._crit_edge268.thread, %._crit_edge261
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  br label %423

421:                                              ; preds = %418, %392, %390, %352
  %.pn.pn.pn = phi { ptr, i32 } [ %353, %352 ], [ %419, %418 ], [ %393, %392 ], [ %391, %390 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  br label %422

422:                                              ; preds = %421, %303
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %421 ], [ %304, %303 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  br label %424

423:                                              ; preds = %420, %._crit_edge251
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #9
  ret ptr %11

424:                                              ; preds = %422, %201, %143, %122, %89
  %.pn207 = phi { ptr, i32 } [ %123, %122 ], [ %144, %143 ], [ %202, %201 ], [ %.pn.pn.pn.pn, %422 ], [ %90, %89 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #9
  br label %425

425:                                              ; preds = %424, %35
  %.pn207.pn = phi { ptr, i32 } [ %.pn207, %424 ], [ %36, %35 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #9
  resume { ptr, i32 } %.pn207.pn
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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