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

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

%struct.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.aiAnimMesh = type { %struct.aiString, ptr, ptr, ptr, ptr, [8 x ptr], [8 x ptr], i32, float }
%class.aiColor4t = type { float, float, float, float }

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZN6Assimp16aiCreateAnimMeshEPK6aiMeshbbbbb(ptr noundef %0, i1 noundef zeroext %1, i1 noundef zeroext %2, i1 noundef zeroext %3, i1 noundef zeroext %4, i1 noundef zeroext %5) #0 {
  %7 = alloca ptr, align 8
  %8 = alloca i8, align 1
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca i8, align 1
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  %16 = zext i1 %1 to i8
  store i8 %16, ptr %8, align 1, !tbaa !9
  %17 = zext i1 %2 to i8
  store i8 %17, ptr %9, align 1, !tbaa !9
  %18 = zext i1 %3 to i8
  store i8 %18, ptr %10, align 1, !tbaa !9
  %19 = zext i1 %4 to i8
  store i8 %19, ptr %11, align 1, !tbaa !9
  %20 = zext i1 %5 to i8
  store i8 %20, ptr %12, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %21 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 1200) #7
  call void @_ZN10aiAnimMeshC2Ev(ptr noundef nonnull align 8 dereferenceable(1200) %21) #6
  store ptr %21, ptr %13, align 8, !tbaa !5
  %22 = load ptr, ptr %7, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.aiMesh, ptr %22, i32 0, i32 1
  %24 = load i32, ptr %23, align 4, !tbaa !11
  %25 = load ptr, ptr %13, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.aiAnimMesh, ptr %25, i32 0, i32 7
  store i32 %24, ptr %26, align 8, !tbaa !19
  %27 = load i8, ptr %8, align 1, !tbaa !9, !range !21, !noundef !22
  %28 = trunc i8 %27 to i1
  br i1 %28, label %29, label %65

29:                                               ; preds = %6
  %30 = load ptr, ptr %7, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.aiMesh, ptr %30, i32 0, i32 3
  %32 = load ptr, ptr %31, align 8, !tbaa !23
  %33 = icmp ne ptr %32, null
  br i1 %33, label %34, label %65

34:                                               ; preds = %29
  %35 = load ptr, ptr %13, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.aiAnimMesh, ptr %35, i32 0, i32 7
  %37 = load i32, ptr %36, align 8, !tbaa !19
  %38 = zext i32 %37 to i64
  %39 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %38, i64 12)
  %40 = extractvalue { i64, i1 } %39, 1
  %41 = extractvalue { i64, i1 } %39, 0
  %42 = select i1 %40, i64 -1, i64 %41
  %43 = call noalias noundef nonnull ptr @_Znam(i64 noundef %42) #7
  %44 = icmp eq i64 %38, 0
  br i1 %44, label %51, label %45

45:                                               ; preds = %34
  %46 = getelementptr inbounds %class.aiVector3t, ptr %43, i64 %38
  br label %47

47:                                               ; preds = %47, %45
  %48 = phi ptr [ %43, %45 ], [ %49, %47 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %48) #6
  %49 = getelementptr inbounds %class.aiVector3t, ptr %48, i64 1
  %50 = icmp eq ptr %49, %46
  br i1 %50, label %51, label %47

51:                                               ; preds = %47, %34
  %52 = load ptr, ptr %13, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.aiAnimMesh, ptr %52, i32 0, i32 1
  store ptr %43, ptr %53, align 8, !tbaa !24
  %54 = load ptr, ptr %13, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.aiAnimMesh, ptr %54, i32 0, i32 1
  %56 = load ptr, ptr %55, align 8, !tbaa !24
  %57 = load ptr, ptr %7, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.aiMesh, ptr %57, i32 0, i32 3
  %59 = load ptr, ptr %58, align 8, !tbaa !23
  %60 = load ptr, ptr %7, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.aiMesh, ptr %60, i32 0, i32 1
  %62 = load i32, ptr %61, align 4, !tbaa !11
  %63 = zext i32 %62 to i64
  %64 = mul i64 %63, 12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %56, ptr align 4 %59, i64 %64, i1 false)
  br label %65

65:                                               ; preds = %51, %29, %6
  %66 = load i8, ptr %9, align 1, !tbaa !9, !range !21, !noundef !22
  %67 = trunc i8 %66 to i1
  br i1 %67, label %68, label %104

68:                                               ; preds = %65
  %69 = load ptr, ptr %7, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.aiMesh, ptr %69, i32 0, i32 4
  %71 = load ptr, ptr %70, align 8, !tbaa !25
  %72 = icmp ne ptr %71, null
  br i1 %72, label %73, label %104

73:                                               ; preds = %68
  %74 = load ptr, ptr %13, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.aiAnimMesh, ptr %74, i32 0, i32 7
  %76 = load i32, ptr %75, align 8, !tbaa !19
  %77 = zext i32 %76 to i64
  %78 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %77, i64 12)
  %79 = extractvalue { i64, i1 } %78, 1
  %80 = extractvalue { i64, i1 } %78, 0
  %81 = select i1 %79, i64 -1, i64 %80
  %82 = call noalias noundef nonnull ptr @_Znam(i64 noundef %81) #7
  %83 = icmp eq i64 %77, 0
  br i1 %83, label %90, label %84

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

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

90:                                               ; preds = %86, %73
  %91 = load ptr, ptr %13, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.aiAnimMesh, ptr %91, i32 0, i32 2
  store ptr %82, ptr %92, align 8, !tbaa !26
  %93 = load ptr, ptr %13, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.aiAnimMesh, ptr %93, i32 0, i32 2
  %95 = load ptr, ptr %94, align 8, !tbaa !26
  %96 = load ptr, ptr %7, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.aiMesh, ptr %96, i32 0, i32 4
  %98 = load ptr, ptr %97, align 8, !tbaa !25
  %99 = load ptr, ptr %7, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.aiMesh, ptr %99, i32 0, i32 1
  %101 = load i32, ptr %100, align 4, !tbaa !11
  %102 = zext i32 %101 to i64
  %103 = mul i64 %102, 12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %95, ptr align 4 %98, i64 %103, i1 false)
  br label %104

104:                                              ; preds = %90, %68, %65
  %105 = load i8, ptr %10, align 1, !tbaa !9, !range !21, !noundef !22
  %106 = trunc i8 %105 to i1
  br i1 %106, label %107, label %143

107:                                              ; preds = %104
  %108 = load ptr, ptr %7, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.aiMesh, ptr %108, i32 0, i32 5
  %110 = load ptr, ptr %109, align 8, !tbaa !27
  %111 = icmp ne ptr %110, null
  br i1 %111, label %112, label %143

112:                                              ; preds = %107
  %113 = load ptr, ptr %13, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.aiAnimMesh, ptr %113, i32 0, i32 7
  %115 = load i32, ptr %114, align 8, !tbaa !19
  %116 = zext i32 %115 to i64
  %117 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %116, i64 12)
  %118 = extractvalue { i64, i1 } %117, 1
  %119 = extractvalue { i64, i1 } %117, 0
  %120 = select i1 %118, i64 -1, i64 %119
  %121 = call noalias noundef nonnull ptr @_Znam(i64 noundef %120) #7
  %122 = icmp eq i64 %116, 0
  br i1 %122, label %129, label %123

123:                                              ; preds = %112
  %124 = getelementptr inbounds %class.aiVector3t, ptr %121, i64 %116
  br label %125

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

129:                                              ; preds = %125, %112
  %130 = load ptr, ptr %13, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.aiAnimMesh, ptr %130, i32 0, i32 3
  store ptr %121, ptr %131, align 8, !tbaa !28
  %132 = load ptr, ptr %13, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.aiAnimMesh, ptr %132, i32 0, i32 3
  %134 = load ptr, ptr %133, align 8, !tbaa !28
  %135 = load ptr, ptr %7, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.aiMesh, ptr %135, i32 0, i32 5
  %137 = load ptr, ptr %136, align 8, !tbaa !27
  %138 = load ptr, ptr %7, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.aiMesh, ptr %138, i32 0, i32 1
  %140 = load i32, ptr %139, align 4, !tbaa !11
  %141 = zext i32 %140 to i64
  %142 = mul i64 %141, 12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %134, ptr align 4 %137, i64 %142, i1 false)
  br label %143

143:                                              ; preds = %129, %107, %104
  %144 = load i8, ptr %10, align 1, !tbaa !9, !range !21, !noundef !22
  %145 = trunc i8 %144 to i1
  br i1 %145, label %146, label %182

146:                                              ; preds = %143
  %147 = load ptr, ptr %7, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.aiMesh, ptr %147, i32 0, i32 6
  %149 = load ptr, ptr %148, align 8, !tbaa !29
  %150 = icmp ne ptr %149, null
  br i1 %150, label %151, label %182

151:                                              ; preds = %146
  %152 = load ptr, ptr %13, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.aiAnimMesh, ptr %152, i32 0, i32 7
  %154 = load i32, ptr %153, align 8, !tbaa !19
  %155 = zext i32 %154 to i64
  %156 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %155, i64 12)
  %157 = extractvalue { i64, i1 } %156, 1
  %158 = extractvalue { i64, i1 } %156, 0
  %159 = select i1 %157, i64 -1, i64 %158
  %160 = call noalias noundef nonnull ptr @_Znam(i64 noundef %159) #7
  %161 = icmp eq i64 %155, 0
  br i1 %161, label %168, label %162

162:                                              ; preds = %151
  %163 = getelementptr inbounds %class.aiVector3t, ptr %160, i64 %155
  br label %164

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

168:                                              ; preds = %164, %151
  %169 = load ptr, ptr %13, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.aiAnimMesh, ptr %169, i32 0, i32 4
  store ptr %160, ptr %170, align 8, !tbaa !30
  %171 = load ptr, ptr %13, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.aiAnimMesh, ptr %171, i32 0, i32 4
  %173 = load ptr, ptr %172, align 8, !tbaa !30
  %174 = load ptr, ptr %7, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.aiMesh, ptr %174, i32 0, i32 6
  %176 = load ptr, ptr %175, align 8, !tbaa !29
  %177 = load ptr, ptr %7, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.aiMesh, ptr %177, i32 0, i32 1
  %179 = load i32, ptr %178, align 4, !tbaa !11
  %180 = zext i32 %179 to i64
  %181 = mul i64 %180, 12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %173, ptr align 4 %176, i64 %181, i1 false)
  br label %182

182:                                              ; preds = %168, %146, %143
  %183 = load i8, ptr %11, align 1, !tbaa !9, !range !21, !noundef !22
  %184 = trunc i8 %183 to i1
  br i1 %184, label %185, label %249

185:                                              ; preds = %182
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  store i32 0, ptr %14, align 4, !tbaa !31
  br label %186

186:                                              ; preds = %245, %185
  %187 = load i32, ptr %14, align 4, !tbaa !31
  %188 = icmp slt i32 %187, 8
  br i1 %188, label %190, label %189

189:                                              ; preds = %186
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %248

190:                                              ; preds = %186
  %191 = load ptr, ptr %7, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.aiMesh, ptr %191, i32 0, i32 7
  %193 = load i32, ptr %14, align 4, !tbaa !31
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds [8 x ptr], ptr %192, i64 0, i64 %194
  %196 = load ptr, ptr %195, align 8, !tbaa !5
  %197 = icmp ne ptr %196, null
  br i1 %197, label %198, label %238

198:                                              ; preds = %190
  %199 = load ptr, ptr %13, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.aiAnimMesh, ptr %199, i32 0, i32 7
  %201 = load i32, ptr %200, align 8, !tbaa !19
  %202 = zext i32 %201 to i64
  %203 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %202, i64 16)
  %204 = extractvalue { i64, i1 } %203, 1
  %205 = extractvalue { i64, i1 } %203, 0
  %206 = select i1 %204, i64 -1, i64 %205
  %207 = call noalias noundef nonnull ptr @_Znam(i64 noundef %206) #7
  %208 = icmp eq i64 %202, 0
  br i1 %208, label %215, label %209

209:                                              ; preds = %198
  %210 = getelementptr inbounds %class.aiColor4t, ptr %207, i64 %202
  br label %211

211:                                              ; preds = %211, %209
  %212 = phi ptr [ %207, %209 ], [ %213, %211 ]
  call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %212) #6
  %213 = getelementptr inbounds %class.aiColor4t, ptr %212, i64 1
  %214 = icmp eq ptr %213, %210
  br i1 %214, label %215, label %211

215:                                              ; preds = %211, %198
  %216 = load ptr, ptr %13, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.aiAnimMesh, ptr %216, i32 0, i32 5
  %218 = load i32, ptr %14, align 4, !tbaa !31
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds [8 x ptr], ptr %217, i64 0, i64 %219
  store ptr %207, ptr %220, align 8, !tbaa !5
  %221 = load ptr, ptr %13, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.aiAnimMesh, ptr %221, i32 0, i32 5
  %223 = load i32, ptr %14, align 4, !tbaa !31
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds [8 x ptr], ptr %222, i64 0, i64 %224
  %226 = load ptr, ptr %225, align 8, !tbaa !5
  %227 = load ptr, ptr %7, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.aiMesh, ptr %227, i32 0, i32 7
  %229 = load i32, ptr %14, align 4, !tbaa !31
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds [8 x ptr], ptr %228, i64 0, i64 %230
  %232 = load ptr, ptr %231, align 8, !tbaa !5
  %233 = load ptr, ptr %7, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.aiMesh, ptr %233, i32 0, i32 1
  %235 = load i32, ptr %234, align 4, !tbaa !11
  %236 = zext i32 %235 to i64
  %237 = mul i64 %236, 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %226, ptr align 4 %232, i64 %237, i1 false)
  br label %244

238:                                              ; preds = %190
  %239 = load ptr, ptr %13, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.aiAnimMesh, ptr %239, i32 0, i32 5
  %241 = load i32, ptr %14, align 4, !tbaa !31
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds [8 x ptr], ptr %240, i64 0, i64 %242
  store ptr null, ptr %243, align 8, !tbaa !5
  br label %244

244:                                              ; preds = %238, %215
  br label %245

245:                                              ; preds = %244
  %246 = load i32, ptr %14, align 4, !tbaa !31
  %247 = add nsw i32 %246, 1
  store i32 %247, ptr %14, align 4, !tbaa !31
  br label %186, !llvm.loop !32

248:                                              ; preds = %189
  br label %249

249:                                              ; preds = %248, %182
  %250 = load i8, ptr %12, align 1, !tbaa !9, !range !21, !noundef !22
  %251 = trunc i8 %250 to i1
  br i1 %251, label %252, label %316

252:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  store i32 0, ptr %15, align 4, !tbaa !31
  br label %253

253:                                              ; preds = %312, %252
  %254 = load i32, ptr %15, align 4, !tbaa !31
  %255 = icmp slt i32 %254, 8
  br i1 %255, label %257, label %256

256:                                              ; preds = %253
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  br label %315

257:                                              ; preds = %253
  %258 = load ptr, ptr %7, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.aiMesh, ptr %258, i32 0, i32 8
  %260 = load i32, ptr %15, align 4, !tbaa !31
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds [8 x ptr], ptr %259, i64 0, i64 %261
  %263 = load ptr, ptr %262, align 8, !tbaa !5
  %264 = icmp ne ptr %263, null
  br i1 %264, label %265, label %305

265:                                              ; preds = %257
  %266 = load ptr, ptr %13, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.aiAnimMesh, ptr %266, i32 0, i32 7
  %268 = load i32, ptr %267, align 8, !tbaa !19
  %269 = zext i32 %268 to i64
  %270 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %269, i64 12)
  %271 = extractvalue { i64, i1 } %270, 1
  %272 = extractvalue { i64, i1 } %270, 0
  %273 = select i1 %271, i64 -1, i64 %272
  %274 = call noalias noundef nonnull ptr @_Znam(i64 noundef %273) #7
  %275 = icmp eq i64 %269, 0
  br i1 %275, label %282, label %276

276:                                              ; preds = %265
  %277 = getelementptr inbounds %class.aiVector3t, ptr %274, i64 %269
  br label %278

278:                                              ; preds = %278, %276
  %279 = phi ptr [ %274, %276 ], [ %280, %278 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %279) #6
  %280 = getelementptr inbounds %class.aiVector3t, ptr %279, i64 1
  %281 = icmp eq ptr %280, %277
  br i1 %281, label %282, label %278

282:                                              ; preds = %278, %265
  %283 = load ptr, ptr %13, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.aiAnimMesh, ptr %283, i32 0, i32 6
  %285 = load i32, ptr %15, align 4, !tbaa !31
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds [8 x ptr], ptr %284, i64 0, i64 %286
  store ptr %274, ptr %287, align 8, !tbaa !5
  %288 = load ptr, ptr %13, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.aiAnimMesh, ptr %288, i32 0, i32 6
  %290 = load i32, ptr %15, align 4, !tbaa !31
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds [8 x ptr], ptr %289, i64 0, i64 %291
  %293 = load ptr, ptr %292, align 8, !tbaa !5
  %294 = load ptr, ptr %7, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.aiMesh, ptr %294, i32 0, i32 8
  %296 = load i32, ptr %15, align 4, !tbaa !31
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds [8 x ptr], ptr %295, i64 0, i64 %297
  %299 = load ptr, ptr %298, align 8, !tbaa !5
  %300 = load ptr, ptr %7, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.aiMesh, ptr %300, i32 0, i32 1
  %302 = load i32, ptr %301, align 4, !tbaa !11
  %303 = zext i32 %302 to i64
  %304 = mul i64 %303, 12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %293, ptr align 4 %299, i64 %304, i1 false)
  br label %311

305:                                              ; preds = %257
  %306 = load ptr, ptr %13, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.aiAnimMesh, ptr %306, i32 0, i32 6
  %308 = load i32, ptr %15, align 4, !tbaa !31
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds [8 x ptr], ptr %307, i64 0, i64 %309
  store ptr null, ptr %310, align 8, !tbaa !5
  br label %311

311:                                              ; preds = %305, %282
  br label %312

312:                                              ; preds = %311
  %313 = load i32, ptr %15, align 4, !tbaa !31
  %314 = add nsw i32 %313, 1
  store i32 %314, ptr %15, align 4, !tbaa !31
  br label %253, !llvm.loop !34

315:                                              ; preds = %256
  br label %316

316:                                              ; preds = %315, %249
  %317 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  ret ptr %317
}

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

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

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

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

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

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

; Function Attrs: 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) #5

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

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { nounwind }
attributes #7 = { 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 = !{!"bool", !7, i64 0}
!11 = !{!12, !13, i64 4}
!12 = !{!"_ZTS6aiMesh", !13, i64 0, !13, i64 4, !13, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !7, i64 48, !7, i64 112, !7, i64 176, !6, i64 208, !13, i64 216, !6, i64 224, !13, i64 232, !14, i64 236, !13, i64 1264, !6, i64 1272, !15, i64 1280, !16, i64 1284, !6, i64 1312}
!13 = !{!"int", !7, i64 0}
!14 = !{!"_ZTS8aiString", !13, i64 0, !7, i64 4}
!15 = !{!"_ZTS16aiMorphingMethod", !7, i64 0}
!16 = !{!"_ZTS6aiAABB", !17, i64 0, !17, i64 12}
!17 = !{!"_ZTS10aiVector3tIfE", !18, i64 0, !18, i64 4, !18, i64 8}
!18 = !{!"float", !7, i64 0}
!19 = !{!20, !13, i64 1192}
!20 = !{!"_ZTS10aiAnimMesh", !14, i64 0, !6, i64 1032, !6, i64 1040, !6, i64 1048, !6, i64 1056, !7, i64 1064, !7, i64 1128, !13, i64 1192, !18, i64 1196}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = !{!12, !6, i64 16}
!24 = !{!20, !6, i64 1032}
!25 = !{!12, !6, i64 24}
!26 = !{!20, !6, i64 1040}
!27 = !{!12, !6, i64 32}
!28 = !{!20, !6, i64 1048}
!29 = !{!12, !6, i64 40}
!30 = !{!20, !6, i64 1056}
!31 = !{!13, !13, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}


; 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.aiVector3t = type { float, float, float }
%class.aiColor4t = type { float, float, float, float }

; Function Attrs: mustprogress uwtable
define dso_local noundef nonnull ptr @_ZN6Assimp16aiCreateAnimMeshEPK6aiMeshbbbbb(ptr nocapture noundef readonly %0, i1 noundef zeroext %1, i1 noundef zeroext %2, i1 noundef zeroext %3, i1 noundef zeroext %4, i1 noundef zeroext %5) local_unnamed_addr #0 {
  %7 = tail call noalias noundef nonnull dereferenceable(1200) ptr @_Znwm(i64 noundef 1200) #4
  tail call void @_ZN10aiAnimMeshC2Ev(ptr noundef nonnull align 8 dereferenceable(1200) %7) #5
  %8 = getelementptr inbounds i8, ptr %0, i64 4
  %9 = load i32, ptr %8, align 4, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %7, i64 1192
  store i32 %9, ptr %10, align 8, !tbaa !16
  br i1 %1, label %11, label %30

11:                                               ; preds = %6
  %12 = getelementptr inbounds i8, ptr %0, i64 16
  %13 = load ptr, ptr %12, align 8, !tbaa !18
  %.not = icmp eq ptr %13, null
  br i1 %.not, label %30, label %14

14:                                               ; preds = %11
  %15 = zext i32 %9 to i64
  %16 = mul nuw nsw i64 %15, 12
  %17 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %16) #4
  %18 = icmp eq i32 %9, 0
  br i1 %18, label %.loopexit79, label %19

19:                                               ; preds = %14
  %20 = getelementptr inbounds %class.aiVector3t, ptr %17, i64 %15
  br label %21

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

.loopexit79.loopexit:                             ; preds = %21
  %.pre = load ptr, ptr %12, align 8, !tbaa !18
  %.pre84 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit79

.loopexit79:                                      ; preds = %.loopexit79.loopexit, %14
  %25 = phi i32 [ %.pre84, %.loopexit79.loopexit ], [ 0, %14 ]
  %26 = phi ptr [ %.pre, %.loopexit79.loopexit ], [ %13, %14 ]
  %27 = getelementptr inbounds i8, ptr %7, i64 1032
  store ptr %17, ptr %27, align 8, !tbaa !19
  %28 = zext i32 %25 to i64
  %29 = mul nuw nsw i64 %28, 12
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %17, ptr align 4 %26, i64 %29, i1 false)
  br label %30

30:                                               ; preds = %.loopexit79, %11, %6
  %31 = phi i32 [ %25, %.loopexit79 ], [ %9, %11 ], [ %9, %6 ]
  br i1 %2, label %32, label %52

32:                                               ; preds = %30
  %33 = getelementptr inbounds i8, ptr %0, i64 24
  %34 = load ptr, ptr %33, align 8, !tbaa !20
  %.not67 = icmp eq ptr %34, null
  br i1 %.not67, label %52, label %35

35:                                               ; preds = %32
  %36 = load i32, ptr %10, align 8, !tbaa !16
  %37 = zext i32 %36 to i64
  %38 = mul nuw nsw i64 %37, 12
  %39 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %38) #4
  %40 = icmp eq i32 %36, 0
  br i1 %40, label %.loopexit78, label %41

41:                                               ; preds = %35
  %42 = getelementptr inbounds %class.aiVector3t, ptr %39, i64 %37
  br label %43

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

.loopexit78.loopexit:                             ; preds = %43
  %.pre85 = load ptr, ptr %33, align 8, !tbaa !20
  %.pre86 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit78

.loopexit78:                                      ; preds = %.loopexit78.loopexit, %35
  %47 = phi i32 [ %.pre86, %.loopexit78.loopexit ], [ %31, %35 ]
  %48 = phi ptr [ %.pre85, %.loopexit78.loopexit ], [ %34, %35 ]
  %49 = getelementptr inbounds i8, ptr %7, i64 1040
  store ptr %39, ptr %49, align 8, !tbaa !21
  %50 = zext i32 %47 to i64
  %51 = mul nuw nsw i64 %50, 12
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %39, ptr align 4 %48, i64 %51, i1 false)
  br label %52

52:                                               ; preds = %.loopexit78, %32, %30
  %53 = phi i32 [ %47, %.loopexit78 ], [ %31, %32 ], [ %31, %30 ]
  br i1 %3, label %54, label %.critedge

54:                                               ; preds = %52
  %55 = getelementptr inbounds i8, ptr %0, i64 32
  %56 = load ptr, ptr %55, align 8, !tbaa !22
  %.not68 = icmp eq ptr %56, null
  br i1 %.not68, label %.thread, label %57

57:                                               ; preds = %54
  %58 = load i32, ptr %10, align 8, !tbaa !16
  %59 = zext i32 %58 to i64
  %60 = mul nuw nsw i64 %59, 12
  %61 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %60) #4
  %62 = icmp eq i32 %58, 0
  br i1 %62, label %.thread72, label %66

.thread72:                                        ; preds = %57
  %63 = getelementptr inbounds i8, ptr %7, i64 1048
  store ptr %61, ptr %63, align 8, !tbaa !23
  %64 = zext i32 %53 to i64
  %65 = mul nuw nsw i64 %64, 12
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %61, ptr nonnull align 4 %56, i64 %65, i1 false)
  br label %.thread

66:                                               ; preds = %57
  %67 = getelementptr inbounds %class.aiVector3t, ptr %61, i64 %59
  br label %68

68:                                               ; preds = %68, %66
  %69 = phi ptr [ %61, %66 ], [ %70, %68 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %69) #5
  %70 = getelementptr inbounds i8, ptr %69, i64 12
  %71 = icmp eq ptr %70, %67
  br i1 %71, label %72, label %68

72:                                               ; preds = %68
  %73 = getelementptr inbounds i8, ptr %7, i64 1048
  store ptr %61, ptr %73, align 8, !tbaa !23
  %74 = load ptr, ptr %55, align 8, !tbaa !22
  %75 = load i32, ptr %8, align 4, !tbaa !5
  %76 = zext i32 %75 to i64
  %77 = mul nuw nsw i64 %76, 12
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %61, ptr align 4 %74, i64 %77, i1 false)
  br label %.thread

.thread:                                          ; preds = %72, %54, %.thread72
  %78 = phi i32 [ %53, %54 ], [ %53, %.thread72 ], [ %75, %72 ]
  %79 = getelementptr inbounds i8, ptr %0, i64 40
  %80 = load ptr, ptr %79, align 8, !tbaa !24
  %.not69 = icmp eq ptr %80, null
  br i1 %.not69, label %.critedge, label %81

81:                                               ; preds = %.thread
  %82 = load i32, ptr %10, align 8, !tbaa !16
  %83 = zext i32 %82 to i64
  %84 = mul nuw nsw i64 %83, 12
  %85 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %84) #4
  %86 = icmp eq i32 %82, 0
  br i1 %86, label %.loopexit77, label %87

87:                                               ; preds = %81
  %88 = getelementptr inbounds %class.aiVector3t, ptr %85, i64 %83
  br label %89

89:                                               ; preds = %89, %87
  %90 = phi ptr [ %85, %87 ], [ %91, %89 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %90) #5
  %91 = getelementptr inbounds i8, ptr %90, i64 12
  %92 = icmp eq ptr %91, %88
  br i1 %92, label %.loopexit77.loopexit, label %89

.loopexit77.loopexit:                             ; preds = %89
  %.pre87 = load ptr, ptr %79, align 8, !tbaa !24
  %.pre88 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit77

.loopexit77:                                      ; preds = %.loopexit77.loopexit, %81
  %93 = phi i32 [ %.pre88, %.loopexit77.loopexit ], [ %78, %81 ]
  %94 = phi ptr [ %.pre87, %.loopexit77.loopexit ], [ %80, %81 ]
  %95 = getelementptr inbounds i8, ptr %7, i64 1056
  store ptr %85, ptr %95, align 8, !tbaa !25
  %96 = zext i32 %93 to i64
  %97 = mul nuw nsw i64 %96, 12
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %85, ptr align 4 %94, i64 %97, i1 false)
  br label %.critedge

.critedge:                                        ; preds = %52, %.loopexit77, %.thread
  %98 = phi i32 [ %53, %52 ], [ %93, %.loopexit77 ], [ %78, %.thread ]
  br i1 %4, label %.preheader75, label %.loopexit76

.preheader75:                                     ; preds = %.critedge
  %99 = getelementptr inbounds i8, ptr %0, i64 48
  %100 = getelementptr inbounds i8, ptr %7, i64 1064
  %101 = load ptr, ptr %99, align 8, !tbaa !26
  %.not71 = icmp eq ptr %101, null
  br i1 %.not71, label %118, label %102

102:                                              ; preds = %.preheader75
  %103 = load i32, ptr %10, align 8, !tbaa !16
  %104 = zext i32 %103 to i64
  %105 = shl nuw nsw i64 %104, 4
  %106 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %105) #4
  %107 = icmp eq i32 %103, 0
  br i1 %107, label %.loopexit74, label %108

108:                                              ; preds = %102
  %109 = getelementptr inbounds %class.aiColor4t, ptr %106, i64 %104
  br label %110

110:                                              ; preds = %110, %108
  %111 = phi ptr [ %106, %108 ], [ %112, %110 ]
  tail call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %111) #5
  %112 = getelementptr inbounds i8, ptr %111, i64 16
  %113 = icmp eq ptr %112, %109
  br i1 %113, label %.loopexit74.loopexit, label %110

.loopexit74.loopexit:                             ; preds = %110
  %.pre89 = load ptr, ptr %99, align 8, !tbaa !26
  %.pre90 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit74

.loopexit74:                                      ; preds = %.loopexit74.loopexit, %102
  %114 = phi i32 [ %.pre90, %.loopexit74.loopexit ], [ %98, %102 ]
  %115 = phi ptr [ %.pre89, %.loopexit74.loopexit ], [ %101, %102 ]
  store ptr %106, ptr %100, align 8, !tbaa !26
  %116 = zext i32 %114 to i64
  %117 = shl nuw nsw i64 %116, 4
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %106, ptr align 4 %115, i64 %117, i1 false)
  br label %119

118:                                              ; preds = %.preheader75
  store ptr null, ptr %100, align 8, !tbaa !26
  br label %119

119:                                              ; preds = %.loopexit74, %118
  %120 = phi i32 [ %114, %.loopexit74 ], [ %98, %118 ]
  %121 = getelementptr inbounds i8, ptr %0, i64 56
  %122 = load ptr, ptr %121, align 8, !tbaa !26
  %.not71.1 = icmp eq ptr %122, null
  br i1 %.not71.1, label %140, label %123

123:                                              ; preds = %119
  %124 = load i32, ptr %10, align 8, !tbaa !16
  %125 = zext i32 %124 to i64
  %126 = shl nuw nsw i64 %125, 4
  %127 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %126) #4
  %128 = icmp eq i32 %124, 0
  br i1 %128, label %.loopexit74.1, label %129

129:                                              ; preds = %123
  %130 = getelementptr inbounds %class.aiColor4t, ptr %127, i64 %125
  br label %131

131:                                              ; preds = %131, %129
  %132 = phi ptr [ %127, %129 ], [ %133, %131 ]
  tail call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %132) #5
  %133 = getelementptr inbounds i8, ptr %132, i64 16
  %134 = icmp eq ptr %133, %130
  br i1 %134, label %.loopexit74.loopexit.1, label %131

.loopexit74.loopexit.1:                           ; preds = %131
  %.pre91 = load ptr, ptr %121, align 8, !tbaa !26
  %.pre92 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit74.1

.loopexit74.1:                                    ; preds = %.loopexit74.loopexit.1, %123
  %135 = phi i32 [ %.pre92, %.loopexit74.loopexit.1 ], [ %120, %123 ]
  %136 = phi ptr [ %.pre91, %.loopexit74.loopexit.1 ], [ %122, %123 ]
  %137 = getelementptr inbounds i8, ptr %7, i64 1072
  store ptr %127, ptr %137, align 8, !tbaa !26
  %138 = zext i32 %135 to i64
  %139 = shl nuw nsw i64 %138, 4
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %127, ptr align 4 %136, i64 %139, i1 false)
  br label %142

140:                                              ; preds = %119
  %141 = getelementptr inbounds i8, ptr %7, i64 1072
  store ptr null, ptr %141, align 8, !tbaa !26
  br label %142

142:                                              ; preds = %140, %.loopexit74.1
  %143 = phi i32 [ %120, %140 ], [ %135, %.loopexit74.1 ]
  %144 = getelementptr inbounds i8, ptr %0, i64 64
  %145 = load ptr, ptr %144, align 8, !tbaa !26
  %.not71.2 = icmp eq ptr %145, null
  br i1 %.not71.2, label %163, label %146

146:                                              ; preds = %142
  %147 = load i32, ptr %10, align 8, !tbaa !16
  %148 = zext i32 %147 to i64
  %149 = shl nuw nsw i64 %148, 4
  %150 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %149) #4
  %151 = icmp eq i32 %147, 0
  br i1 %151, label %.loopexit74.2, label %152

152:                                              ; preds = %146
  %153 = getelementptr inbounds %class.aiColor4t, ptr %150, i64 %148
  br label %154

154:                                              ; preds = %154, %152
  %155 = phi ptr [ %150, %152 ], [ %156, %154 ]
  tail call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %155) #5
  %156 = getelementptr inbounds i8, ptr %155, i64 16
  %157 = icmp eq ptr %156, %153
  br i1 %157, label %.loopexit74.loopexit.2, label %154

.loopexit74.loopexit.2:                           ; preds = %154
  %.pre93 = load ptr, ptr %144, align 8, !tbaa !26
  %.pre94 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit74.2

.loopexit74.2:                                    ; preds = %.loopexit74.loopexit.2, %146
  %158 = phi i32 [ %.pre94, %.loopexit74.loopexit.2 ], [ %143, %146 ]
  %159 = phi ptr [ %.pre93, %.loopexit74.loopexit.2 ], [ %145, %146 ]
  %160 = getelementptr inbounds i8, ptr %7, i64 1080
  store ptr %150, ptr %160, align 8, !tbaa !26
  %161 = zext i32 %158 to i64
  %162 = shl nuw nsw i64 %161, 4
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %150, ptr align 4 %159, i64 %162, i1 false)
  br label %165

163:                                              ; preds = %142
  %164 = getelementptr inbounds i8, ptr %7, i64 1080
  store ptr null, ptr %164, align 8, !tbaa !26
  br label %165

165:                                              ; preds = %163, %.loopexit74.2
  %166 = phi i32 [ %143, %163 ], [ %158, %.loopexit74.2 ]
  %167 = getelementptr inbounds i8, ptr %0, i64 72
  %168 = load ptr, ptr %167, align 8, !tbaa !26
  %.not71.3 = icmp eq ptr %168, null
  br i1 %.not71.3, label %186, label %169

169:                                              ; preds = %165
  %170 = load i32, ptr %10, align 8, !tbaa !16
  %171 = zext i32 %170 to i64
  %172 = shl nuw nsw i64 %171, 4
  %173 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %172) #4
  %174 = icmp eq i32 %170, 0
  br i1 %174, label %.loopexit74.3, label %175

175:                                              ; preds = %169
  %176 = getelementptr inbounds %class.aiColor4t, ptr %173, i64 %171
  br label %177

177:                                              ; preds = %177, %175
  %178 = phi ptr [ %173, %175 ], [ %179, %177 ]
  tail call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %178) #5
  %179 = getelementptr inbounds i8, ptr %178, i64 16
  %180 = icmp eq ptr %179, %176
  br i1 %180, label %.loopexit74.loopexit.3, label %177

.loopexit74.loopexit.3:                           ; preds = %177
  %.pre95 = load ptr, ptr %167, align 8, !tbaa !26
  %.pre96 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit74.3

.loopexit74.3:                                    ; preds = %.loopexit74.loopexit.3, %169
  %181 = phi i32 [ %.pre96, %.loopexit74.loopexit.3 ], [ %166, %169 ]
  %182 = phi ptr [ %.pre95, %.loopexit74.loopexit.3 ], [ %168, %169 ]
  %183 = getelementptr inbounds i8, ptr %7, i64 1088
  store ptr %173, ptr %183, align 8, !tbaa !26
  %184 = zext i32 %181 to i64
  %185 = shl nuw nsw i64 %184, 4
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %173, ptr align 4 %182, i64 %185, i1 false)
  br label %188

186:                                              ; preds = %165
  %187 = getelementptr inbounds i8, ptr %7, i64 1088
  store ptr null, ptr %187, align 8, !tbaa !26
  br label %188

188:                                              ; preds = %186, %.loopexit74.3
  %189 = phi i32 [ %166, %186 ], [ %181, %.loopexit74.3 ]
  %190 = getelementptr inbounds i8, ptr %0, i64 80
  %191 = load ptr, ptr %190, align 8, !tbaa !26
  %.not71.4 = icmp eq ptr %191, null
  br i1 %.not71.4, label %209, label %192

192:                                              ; preds = %188
  %193 = load i32, ptr %10, align 8, !tbaa !16
  %194 = zext i32 %193 to i64
  %195 = shl nuw nsw i64 %194, 4
  %196 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %195) #4
  %197 = icmp eq i32 %193, 0
  br i1 %197, label %.loopexit74.4, label %198

198:                                              ; preds = %192
  %199 = getelementptr inbounds %class.aiColor4t, ptr %196, i64 %194
  br label %200

200:                                              ; preds = %200, %198
  %201 = phi ptr [ %196, %198 ], [ %202, %200 ]
  tail call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %201) #5
  %202 = getelementptr inbounds i8, ptr %201, i64 16
  %203 = icmp eq ptr %202, %199
  br i1 %203, label %.loopexit74.loopexit.4, label %200

.loopexit74.loopexit.4:                           ; preds = %200
  %.pre97 = load ptr, ptr %190, align 8, !tbaa !26
  %.pre98 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit74.4

.loopexit74.4:                                    ; preds = %.loopexit74.loopexit.4, %192
  %204 = phi i32 [ %.pre98, %.loopexit74.loopexit.4 ], [ %189, %192 ]
  %205 = phi ptr [ %.pre97, %.loopexit74.loopexit.4 ], [ %191, %192 ]
  %206 = getelementptr inbounds i8, ptr %7, i64 1096
  store ptr %196, ptr %206, align 8, !tbaa !26
  %207 = zext i32 %204 to i64
  %208 = shl nuw nsw i64 %207, 4
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %196, ptr align 4 %205, i64 %208, i1 false)
  br label %211

209:                                              ; preds = %188
  %210 = getelementptr inbounds i8, ptr %7, i64 1096
  store ptr null, ptr %210, align 8, !tbaa !26
  br label %211

211:                                              ; preds = %209, %.loopexit74.4
  %212 = phi i32 [ %189, %209 ], [ %204, %.loopexit74.4 ]
  %213 = getelementptr inbounds i8, ptr %0, i64 88
  %214 = load ptr, ptr %213, align 8, !tbaa !26
  %.not71.5 = icmp eq ptr %214, null
  br i1 %.not71.5, label %232, label %215

215:                                              ; preds = %211
  %216 = load i32, ptr %10, align 8, !tbaa !16
  %217 = zext i32 %216 to i64
  %218 = shl nuw nsw i64 %217, 4
  %219 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %218) #4
  %220 = icmp eq i32 %216, 0
  br i1 %220, label %.loopexit74.5, label %221

221:                                              ; preds = %215
  %222 = getelementptr inbounds %class.aiColor4t, ptr %219, i64 %217
  br label %223

223:                                              ; preds = %223, %221
  %224 = phi ptr [ %219, %221 ], [ %225, %223 ]
  tail call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %224) #5
  %225 = getelementptr inbounds i8, ptr %224, i64 16
  %226 = icmp eq ptr %225, %222
  br i1 %226, label %.loopexit74.loopexit.5, label %223

.loopexit74.loopexit.5:                           ; preds = %223
  %.pre99 = load ptr, ptr %213, align 8, !tbaa !26
  %.pre100 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit74.5

.loopexit74.5:                                    ; preds = %.loopexit74.loopexit.5, %215
  %227 = phi i32 [ %.pre100, %.loopexit74.loopexit.5 ], [ %212, %215 ]
  %228 = phi ptr [ %.pre99, %.loopexit74.loopexit.5 ], [ %214, %215 ]
  %229 = getelementptr inbounds i8, ptr %7, i64 1104
  store ptr %219, ptr %229, align 8, !tbaa !26
  %230 = zext i32 %227 to i64
  %231 = shl nuw nsw i64 %230, 4
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %219, ptr align 4 %228, i64 %231, i1 false)
  br label %234

232:                                              ; preds = %211
  %233 = getelementptr inbounds i8, ptr %7, i64 1104
  store ptr null, ptr %233, align 8, !tbaa !26
  br label %234

234:                                              ; preds = %232, %.loopexit74.5
  %235 = phi i32 [ %212, %232 ], [ %227, %.loopexit74.5 ]
  %236 = getelementptr inbounds i8, ptr %0, i64 96
  %237 = load ptr, ptr %236, align 8, !tbaa !26
  %.not71.6 = icmp eq ptr %237, null
  br i1 %.not71.6, label %255, label %238

238:                                              ; preds = %234
  %239 = load i32, ptr %10, align 8, !tbaa !16
  %240 = zext i32 %239 to i64
  %241 = shl nuw nsw i64 %240, 4
  %242 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %241) #4
  %243 = icmp eq i32 %239, 0
  br i1 %243, label %.loopexit74.6, label %244

244:                                              ; preds = %238
  %245 = getelementptr inbounds %class.aiColor4t, ptr %242, i64 %240
  br label %246

246:                                              ; preds = %246, %244
  %247 = phi ptr [ %242, %244 ], [ %248, %246 ]
  tail call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %247) #5
  %248 = getelementptr inbounds i8, ptr %247, i64 16
  %249 = icmp eq ptr %248, %245
  br i1 %249, label %.loopexit74.loopexit.6, label %246

.loopexit74.loopexit.6:                           ; preds = %246
  %.pre101 = load ptr, ptr %236, align 8, !tbaa !26
  %.pre102 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit74.6

.loopexit74.6:                                    ; preds = %.loopexit74.loopexit.6, %238
  %250 = phi i32 [ %.pre102, %.loopexit74.loopexit.6 ], [ %235, %238 ]
  %251 = phi ptr [ %.pre101, %.loopexit74.loopexit.6 ], [ %237, %238 ]
  %252 = getelementptr inbounds i8, ptr %7, i64 1112
  store ptr %242, ptr %252, align 8, !tbaa !26
  %253 = zext i32 %250 to i64
  %254 = shl nuw nsw i64 %253, 4
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %242, ptr align 4 %251, i64 %254, i1 false)
  br label %257

255:                                              ; preds = %234
  %256 = getelementptr inbounds i8, ptr %7, i64 1112
  store ptr null, ptr %256, align 8, !tbaa !26
  br label %257

257:                                              ; preds = %255, %.loopexit74.6
  %258 = phi i32 [ %235, %255 ], [ %250, %.loopexit74.6 ]
  %259 = getelementptr inbounds i8, ptr %0, i64 104
  %260 = load ptr, ptr %259, align 8, !tbaa !26
  %.not71.7 = icmp eq ptr %260, null
  br i1 %.not71.7, label %278, label %261

261:                                              ; preds = %257
  %262 = load i32, ptr %10, align 8, !tbaa !16
  %263 = zext i32 %262 to i64
  %264 = shl nuw nsw i64 %263, 4
  %265 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %264) #4
  %266 = icmp eq i32 %262, 0
  br i1 %266, label %.loopexit74.7, label %267

267:                                              ; preds = %261
  %268 = getelementptr inbounds %class.aiColor4t, ptr %265, i64 %263
  br label %269

269:                                              ; preds = %269, %267
  %270 = phi ptr [ %265, %267 ], [ %271, %269 ]
  tail call void @_ZN9aiColor4tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %270) #5
  %271 = getelementptr inbounds i8, ptr %270, i64 16
  %272 = icmp eq ptr %271, %268
  br i1 %272, label %.loopexit74.loopexit.7, label %269

.loopexit74.loopexit.7:                           ; preds = %269
  %.pre103 = load ptr, ptr %259, align 8, !tbaa !26
  %.pre104 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit74.7

.loopexit74.7:                                    ; preds = %.loopexit74.loopexit.7, %261
  %273 = phi i32 [ %.pre104, %.loopexit74.loopexit.7 ], [ %258, %261 ]
  %274 = phi ptr [ %.pre103, %.loopexit74.loopexit.7 ], [ %260, %261 ]
  %275 = getelementptr inbounds i8, ptr %7, i64 1120
  store ptr %265, ptr %275, align 8, !tbaa !26
  %276 = zext i32 %273 to i64
  %277 = shl nuw nsw i64 %276, 4
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %265, ptr align 4 %274, i64 %277, i1 false)
  br label %.loopexit76

278:                                              ; preds = %257
  %279 = getelementptr inbounds i8, ptr %7, i64 1120
  store ptr null, ptr %279, align 8, !tbaa !26
  br label %.loopexit76

.loopexit76:                                      ; preds = %.loopexit74.7, %278, %.critedge
  %280 = phi i32 [ %98, %.critedge ], [ %258, %278 ], [ %273, %.loopexit74.7 ]
  br i1 %5, label %.preheader, label %.loopexit73

.preheader:                                       ; preds = %.loopexit76
  %281 = getelementptr inbounds i8, ptr %0, i64 112
  %282 = getelementptr inbounds i8, ptr %7, i64 1128
  %283 = load ptr, ptr %281, align 8, !tbaa !26
  %.not70 = icmp eq ptr %283, null
  br i1 %.not70, label %300, label %284

284:                                              ; preds = %.preheader
  %285 = load i32, ptr %10, align 8, !tbaa !16
  %286 = zext i32 %285 to i64
  %287 = mul nuw nsw i64 %286, 12
  %288 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %287) #4
  %289 = icmp eq i32 %285, 0
  br i1 %289, label %.loopexit, label %290

290:                                              ; preds = %284
  %291 = getelementptr inbounds %class.aiVector3t, ptr %288, i64 %286
  br label %292

292:                                              ; preds = %292, %290
  %293 = phi ptr [ %288, %290 ], [ %294, %292 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %293) #5
  %294 = getelementptr inbounds i8, ptr %293, i64 12
  %295 = icmp eq ptr %294, %291
  br i1 %295, label %.loopexit.loopexit, label %292

.loopexit.loopexit:                               ; preds = %292
  %.pre105 = load ptr, ptr %281, align 8, !tbaa !26
  %.pre106 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %284
  %296 = phi i32 [ %.pre106, %.loopexit.loopexit ], [ %280, %284 ]
  %297 = phi ptr [ %.pre105, %.loopexit.loopexit ], [ %283, %284 ]
  store ptr %288, ptr %282, align 8, !tbaa !26
  %298 = zext i32 %296 to i64
  %299 = mul nuw nsw i64 %298, 12
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %288, ptr align 4 %297, i64 %299, i1 false)
  br label %301

300:                                              ; preds = %.preheader
  store ptr null, ptr %282, align 8, !tbaa !26
  br label %301

301:                                              ; preds = %.loopexit, %300
  %302 = phi i32 [ %296, %.loopexit ], [ %280, %300 ]
  %303 = getelementptr inbounds i8, ptr %0, i64 120
  %304 = load ptr, ptr %303, align 8, !tbaa !26
  %.not70.1 = icmp eq ptr %304, null
  br i1 %.not70.1, label %322, label %305

305:                                              ; preds = %301
  %306 = load i32, ptr %10, align 8, !tbaa !16
  %307 = zext i32 %306 to i64
  %308 = mul nuw nsw i64 %307, 12
  %309 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %308) #4
  %310 = icmp eq i32 %306, 0
  br i1 %310, label %.loopexit.1, label %311

311:                                              ; preds = %305
  %312 = getelementptr inbounds %class.aiVector3t, ptr %309, i64 %307
  br label %313

313:                                              ; preds = %313, %311
  %314 = phi ptr [ %309, %311 ], [ %315, %313 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %314) #5
  %315 = getelementptr inbounds i8, ptr %314, i64 12
  %316 = icmp eq ptr %315, %312
  br i1 %316, label %.loopexit.loopexit.1, label %313

.loopexit.loopexit.1:                             ; preds = %313
  %.pre107 = load ptr, ptr %303, align 8, !tbaa !26
  %.pre108 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit.1

.loopexit.1:                                      ; preds = %.loopexit.loopexit.1, %305
  %317 = phi i32 [ %.pre108, %.loopexit.loopexit.1 ], [ %302, %305 ]
  %318 = phi ptr [ %.pre107, %.loopexit.loopexit.1 ], [ %304, %305 ]
  %319 = getelementptr inbounds i8, ptr %7, i64 1136
  store ptr %309, ptr %319, align 8, !tbaa !26
  %320 = zext i32 %317 to i64
  %321 = mul nuw nsw i64 %320, 12
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %309, ptr align 4 %318, i64 %321, i1 false)
  br label %324

322:                                              ; preds = %301
  %323 = getelementptr inbounds i8, ptr %7, i64 1136
  store ptr null, ptr %323, align 8, !tbaa !26
  br label %324

324:                                              ; preds = %322, %.loopexit.1
  %325 = phi i32 [ %302, %322 ], [ %317, %.loopexit.1 ]
  %326 = getelementptr inbounds i8, ptr %0, i64 128
  %327 = load ptr, ptr %326, align 8, !tbaa !26
  %.not70.2 = icmp eq ptr %327, null
  br i1 %.not70.2, label %345, label %328

328:                                              ; preds = %324
  %329 = load i32, ptr %10, align 8, !tbaa !16
  %330 = zext i32 %329 to i64
  %331 = mul nuw nsw i64 %330, 12
  %332 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %331) #4
  %333 = icmp eq i32 %329, 0
  br i1 %333, label %.loopexit.2, label %334

334:                                              ; preds = %328
  %335 = getelementptr inbounds %class.aiVector3t, ptr %332, i64 %330
  br label %336

336:                                              ; preds = %336, %334
  %337 = phi ptr [ %332, %334 ], [ %338, %336 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %337) #5
  %338 = getelementptr inbounds i8, ptr %337, i64 12
  %339 = icmp eq ptr %338, %335
  br i1 %339, label %.loopexit.loopexit.2, label %336

.loopexit.loopexit.2:                             ; preds = %336
  %.pre109 = load ptr, ptr %326, align 8, !tbaa !26
  %.pre110 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit.2

.loopexit.2:                                      ; preds = %.loopexit.loopexit.2, %328
  %340 = phi i32 [ %.pre110, %.loopexit.loopexit.2 ], [ %325, %328 ]
  %341 = phi ptr [ %.pre109, %.loopexit.loopexit.2 ], [ %327, %328 ]
  %342 = getelementptr inbounds i8, ptr %7, i64 1144
  store ptr %332, ptr %342, align 8, !tbaa !26
  %343 = zext i32 %340 to i64
  %344 = mul nuw nsw i64 %343, 12
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %332, ptr align 4 %341, i64 %344, i1 false)
  br label %347

345:                                              ; preds = %324
  %346 = getelementptr inbounds i8, ptr %7, i64 1144
  store ptr null, ptr %346, align 8, !tbaa !26
  br label %347

347:                                              ; preds = %345, %.loopexit.2
  %348 = phi i32 [ %325, %345 ], [ %340, %.loopexit.2 ]
  %349 = getelementptr inbounds i8, ptr %0, i64 136
  %350 = load ptr, ptr %349, align 8, !tbaa !26
  %.not70.3 = icmp eq ptr %350, null
  br i1 %.not70.3, label %368, label %351

351:                                              ; preds = %347
  %352 = load i32, ptr %10, align 8, !tbaa !16
  %353 = zext i32 %352 to i64
  %354 = mul nuw nsw i64 %353, 12
  %355 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %354) #4
  %356 = icmp eq i32 %352, 0
  br i1 %356, label %.loopexit.3, label %357

357:                                              ; preds = %351
  %358 = getelementptr inbounds %class.aiVector3t, ptr %355, i64 %353
  br label %359

359:                                              ; preds = %359, %357
  %360 = phi ptr [ %355, %357 ], [ %361, %359 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %360) #5
  %361 = getelementptr inbounds i8, ptr %360, i64 12
  %362 = icmp eq ptr %361, %358
  br i1 %362, label %.loopexit.loopexit.3, label %359

.loopexit.loopexit.3:                             ; preds = %359
  %.pre111 = load ptr, ptr %349, align 8, !tbaa !26
  %.pre112 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit.3

.loopexit.3:                                      ; preds = %.loopexit.loopexit.3, %351
  %363 = phi i32 [ %.pre112, %.loopexit.loopexit.3 ], [ %348, %351 ]
  %364 = phi ptr [ %.pre111, %.loopexit.loopexit.3 ], [ %350, %351 ]
  %365 = getelementptr inbounds i8, ptr %7, i64 1152
  store ptr %355, ptr %365, align 8, !tbaa !26
  %366 = zext i32 %363 to i64
  %367 = mul nuw nsw i64 %366, 12
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %355, ptr align 4 %364, i64 %367, i1 false)
  br label %370

368:                                              ; preds = %347
  %369 = getelementptr inbounds i8, ptr %7, i64 1152
  store ptr null, ptr %369, align 8, !tbaa !26
  br label %370

370:                                              ; preds = %368, %.loopexit.3
  %371 = phi i32 [ %348, %368 ], [ %363, %.loopexit.3 ]
  %372 = getelementptr inbounds i8, ptr %0, i64 144
  %373 = load ptr, ptr %372, align 8, !tbaa !26
  %.not70.4 = icmp eq ptr %373, null
  br i1 %.not70.4, label %391, label %374

374:                                              ; preds = %370
  %375 = load i32, ptr %10, align 8, !tbaa !16
  %376 = zext i32 %375 to i64
  %377 = mul nuw nsw i64 %376, 12
  %378 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %377) #4
  %379 = icmp eq i32 %375, 0
  br i1 %379, label %.loopexit.4, label %380

380:                                              ; preds = %374
  %381 = getelementptr inbounds %class.aiVector3t, ptr %378, i64 %376
  br label %382

382:                                              ; preds = %382, %380
  %383 = phi ptr [ %378, %380 ], [ %384, %382 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %383) #5
  %384 = getelementptr inbounds i8, ptr %383, i64 12
  %385 = icmp eq ptr %384, %381
  br i1 %385, label %.loopexit.loopexit.4, label %382

.loopexit.loopexit.4:                             ; preds = %382
  %.pre113 = load ptr, ptr %372, align 8, !tbaa !26
  %.pre114 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit.4

.loopexit.4:                                      ; preds = %.loopexit.loopexit.4, %374
  %386 = phi i32 [ %.pre114, %.loopexit.loopexit.4 ], [ %371, %374 ]
  %387 = phi ptr [ %.pre113, %.loopexit.loopexit.4 ], [ %373, %374 ]
  %388 = getelementptr inbounds i8, ptr %7, i64 1160
  store ptr %378, ptr %388, align 8, !tbaa !26
  %389 = zext i32 %386 to i64
  %390 = mul nuw nsw i64 %389, 12
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %378, ptr align 4 %387, i64 %390, i1 false)
  br label %393

391:                                              ; preds = %370
  %392 = getelementptr inbounds i8, ptr %7, i64 1160
  store ptr null, ptr %392, align 8, !tbaa !26
  br label %393

393:                                              ; preds = %391, %.loopexit.4
  %394 = phi i32 [ %371, %391 ], [ %386, %.loopexit.4 ]
  %395 = getelementptr inbounds i8, ptr %0, i64 152
  %396 = load ptr, ptr %395, align 8, !tbaa !26
  %.not70.5 = icmp eq ptr %396, null
  br i1 %.not70.5, label %414, label %397

397:                                              ; preds = %393
  %398 = load i32, ptr %10, align 8, !tbaa !16
  %399 = zext i32 %398 to i64
  %400 = mul nuw nsw i64 %399, 12
  %401 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %400) #4
  %402 = icmp eq i32 %398, 0
  br i1 %402, label %.loopexit.5, label %403

403:                                              ; preds = %397
  %404 = getelementptr inbounds %class.aiVector3t, ptr %401, i64 %399
  br label %405

405:                                              ; preds = %405, %403
  %406 = phi ptr [ %401, %403 ], [ %407, %405 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %406) #5
  %407 = getelementptr inbounds i8, ptr %406, i64 12
  %408 = icmp eq ptr %407, %404
  br i1 %408, label %.loopexit.loopexit.5, label %405

.loopexit.loopexit.5:                             ; preds = %405
  %.pre115 = load ptr, ptr %395, align 8, !tbaa !26
  %.pre116 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit.5

.loopexit.5:                                      ; preds = %.loopexit.loopexit.5, %397
  %409 = phi i32 [ %.pre116, %.loopexit.loopexit.5 ], [ %394, %397 ]
  %410 = phi ptr [ %.pre115, %.loopexit.loopexit.5 ], [ %396, %397 ]
  %411 = getelementptr inbounds i8, ptr %7, i64 1168
  store ptr %401, ptr %411, align 8, !tbaa !26
  %412 = zext i32 %409 to i64
  %413 = mul nuw nsw i64 %412, 12
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %401, ptr align 4 %410, i64 %413, i1 false)
  br label %416

414:                                              ; preds = %393
  %415 = getelementptr inbounds i8, ptr %7, i64 1168
  store ptr null, ptr %415, align 8, !tbaa !26
  br label %416

416:                                              ; preds = %414, %.loopexit.5
  %417 = phi i32 [ %394, %414 ], [ %409, %.loopexit.5 ]
  %418 = getelementptr inbounds i8, ptr %0, i64 160
  %419 = load ptr, ptr %418, align 8, !tbaa !26
  %.not70.6 = icmp eq ptr %419, null
  br i1 %.not70.6, label %437, label %420

420:                                              ; preds = %416
  %421 = load i32, ptr %10, align 8, !tbaa !16
  %422 = zext i32 %421 to i64
  %423 = mul nuw nsw i64 %422, 12
  %424 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %423) #4
  %425 = icmp eq i32 %421, 0
  br i1 %425, label %.loopexit.6, label %426

426:                                              ; preds = %420
  %427 = getelementptr inbounds %class.aiVector3t, ptr %424, i64 %422
  br label %428

428:                                              ; preds = %428, %426
  %429 = phi ptr [ %424, %426 ], [ %430, %428 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %429) #5
  %430 = getelementptr inbounds i8, ptr %429, i64 12
  %431 = icmp eq ptr %430, %427
  br i1 %431, label %.loopexit.loopexit.6, label %428

.loopexit.loopexit.6:                             ; preds = %428
  %.pre117 = load ptr, ptr %418, align 8, !tbaa !26
  %.pre118 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit.6

.loopexit.6:                                      ; preds = %.loopexit.loopexit.6, %420
  %432 = phi i32 [ %.pre118, %.loopexit.loopexit.6 ], [ %417, %420 ]
  %433 = phi ptr [ %.pre117, %.loopexit.loopexit.6 ], [ %419, %420 ]
  %434 = getelementptr inbounds i8, ptr %7, i64 1176
  store ptr %424, ptr %434, align 8, !tbaa !26
  %435 = zext i32 %432 to i64
  %436 = mul nuw nsw i64 %435, 12
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %424, ptr align 4 %433, i64 %436, i1 false)
  br label %439

437:                                              ; preds = %416
  %438 = getelementptr inbounds i8, ptr %7, i64 1176
  store ptr null, ptr %438, align 8, !tbaa !26
  br label %439

439:                                              ; preds = %437, %.loopexit.6
  %440 = phi i32 [ %417, %437 ], [ %432, %.loopexit.6 ]
  %441 = getelementptr inbounds i8, ptr %0, i64 168
  %442 = load ptr, ptr %441, align 8, !tbaa !26
  %.not70.7 = icmp eq ptr %442, null
  br i1 %.not70.7, label %460, label %443

443:                                              ; preds = %439
  %444 = load i32, ptr %10, align 8, !tbaa !16
  %445 = zext i32 %444 to i64
  %446 = mul nuw nsw i64 %445, 12
  %447 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %446) #4
  %448 = icmp eq i32 %444, 0
  br i1 %448, label %.loopexit.7, label %449

449:                                              ; preds = %443
  %450 = getelementptr inbounds %class.aiVector3t, ptr %447, i64 %445
  br label %451

451:                                              ; preds = %451, %449
  %452 = phi ptr [ %447, %449 ], [ %453, %451 ]
  tail call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %452) #5
  %453 = getelementptr inbounds i8, ptr %452, i64 12
  %454 = icmp eq ptr %453, %450
  br i1 %454, label %.loopexit.loopexit.7, label %451

.loopexit.loopexit.7:                             ; preds = %451
  %.pre119 = load ptr, ptr %441, align 8, !tbaa !26
  %.pre120 = load i32, ptr %8, align 4, !tbaa !5
  br label %.loopexit.7

.loopexit.7:                                      ; preds = %.loopexit.loopexit.7, %443
  %455 = phi i32 [ %.pre120, %.loopexit.loopexit.7 ], [ %440, %443 ]
  %456 = phi ptr [ %.pre119, %.loopexit.loopexit.7 ], [ %442, %443 ]
  %457 = getelementptr inbounds i8, ptr %7, i64 1184
  store ptr %447, ptr %457, align 8, !tbaa !26
  %458 = zext i32 %455 to i64
  %459 = mul nuw nsw i64 %458, 12
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %447, ptr align 4 %456, i64 %459, i1 false)
  br label %.loopexit73

460:                                              ; preds = %439
  %461 = getelementptr inbounds i8, ptr %7, i64 1184
  store ptr null, ptr %461, align 8, !tbaa !26
  br label %.loopexit73

.loopexit73:                                      ; preds = %.loopexit.7, %460, %.loopexit76
  ret ptr %7
}

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

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

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

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

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

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

attributes #0 = { 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 #1 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { builtin allocsize(0) }
attributes #5 = { 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 = !{!17, !7, i64 1192}
!17 = !{!"_ZTS10aiAnimMesh", !11, i64 0, !10, i64 1032, !10, i64 1040, !10, i64 1048, !10, i64 1056, !8, i64 1064, !8, i64 1128, !7, i64 1192, !15, i64 1196}
!18 = !{!6, !10, i64 16}
!19 = !{!17, !10, i64 1032}
!20 = !{!6, !10, i64 24}
!21 = !{!17, !10, i64 1040}
!22 = !{!6, !10, i64 32}
!23 = !{!17, !10, i64 1048}
!24 = !{!6, !10, i64 40}
!25 = !{!17, !10, i64 1056}
!26 = !{!10, !10, i64 0}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,PostOrderFunctionAttrsPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass