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

; 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::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::unique_ptr.2" = type { %"struct.std::__uniq_ptr_data.3" }
%"struct.std::__uniq_ptr_data.3" = type { %"class.std::__uniq_ptr_impl.4" }
%"class.std::__uniq_ptr_impl.4" = type { %"class.std::tuple.5" }
%"class.std::tuple.5" = type { %"struct.std::_Tuple_impl.6" }
%"struct.std::_Tuple_impl.6" = type { %"struct.std::_Head_base.9" }
%"struct.std::_Head_base.9" = type { ptr }
%struct.aiScene = type { i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, ptr, %struct.aiString, i32, ptr, ptr }
%struct.aiString = type { i32, [1024 x i8] }
%struct.aiMesh = type { i32, i32, i32, ptr, ptr, ptr, ptr, [8 x ptr], [8 x ptr], [8 x i32], ptr, i32, ptr, i32, %struct.aiString, i32, ptr, i32, %struct.aiAABB, ptr }
%struct.aiAABB = type { %class.aiVector3t, %class.aiVector3t }
%class.aiVector3t = type { float, float, float }
%"class.Assimp::FindInstancesProcess" = type <{ %"class.Assimp::BaseProcess", i8, [7 x i8] }>
%"class.Assimp::BaseProcess" = type { ptr, ptr, ptr }
%struct.aiFace = type { i32, ptr }

@.str.1 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [129 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [57 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z12CompareBonesPK6aiMeshS1_(ptr noundef, ptr noundef) #0

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z17UpdateMeshIndicesP6aiNodePj(ptr noundef, ptr noundef) #0

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp20FindInstancesProcess7ExecuteEP7aiScene(ptr noundef nonnull align 8 dereferenceable(25) %0, ptr noundef %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.std::unique_ptr", align 8
  %6 = alloca %"class.std::unique_ptr.2", align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca float, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca %"class.std::unique_ptr.2", align 8
  %21 = alloca %"class.std::unique_ptr.2", align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %30 = load ptr, ptr %3, align 8
  %31 = call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  call void @_ZN6Assimp6Logger5debugEPKc(ptr noundef nonnull align 8 dereferenceable(12) %31, ptr noundef @.str.1)
  %32 = load ptr, ptr %4, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.aiScene, ptr %32, i32 0, i32 2
  %34 = load i32, ptr %33, align 8, !tbaa !9
  %35 = icmp ne i32 %34, 0
  br i1 %35, label %36, label %615

36:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #10
  %37 = load ptr, ptr %4, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.aiScene, ptr %37, i32 0, i32 2
  %39 = load i32, ptr %38, align 8, !tbaa !9
  %40 = zext i32 %39 to i64
  %41 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %40, i64 8)
  %42 = extractvalue { i64, i1 } %41, 1
  %43 = extractvalue { i64, i1 } %41, 0
  %44 = select i1 %42, i64 -1, i64 %43
  %45 = call noalias noundef nonnull ptr @_Znam(i64 noundef %44) #11
  call void @_ZNSt10unique_ptrIA_mSt14default_deleteIS0_EEC2IPmS2_vbEET_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef %45) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #10
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.aiScene, ptr %46, i32 0, i32 2
  %48 = load i32, ptr %47, align 8, !tbaa !9
  %49 = zext i32 %48 to i64
  %50 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %49, i64 4)
  %51 = extractvalue { i64, i1 } %50, 1
  %52 = extractvalue { i64, i1 } %50, 0
  %53 = select i1 %51, i64 -1, i64 %52
  %54 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %53) #11
          to label %55 unwind label %63

55:                                               ; preds = %36
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EEC2IPjS2_vbEET_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef %54) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #10
  store i32 0, ptr %9, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #10
  store i32 0, ptr %10, align 4, !tbaa !13
  br label %56

56:                                               ; preds = %528, %55
  %57 = load i32, ptr %10, align 4, !tbaa !13
  %58 = load ptr, ptr %4, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.aiScene, ptr %58, i32 0, i32 2
  %60 = load i32, ptr %59, align 8, !tbaa !9
  %61 = icmp ult i32 %57, %60
  br i1 %61, label %67, label %62

62:                                               ; preds = %56
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #10
  br label %533

63:                                               ; preds = %36
  %64 = landingpad { ptr, i32 }
          cleanup
  %65 = extractvalue { ptr, i32 } %64, 0
  store ptr %65, ptr %7, align 8
  %66 = extractvalue { ptr, i32 } %64, 1
  store i32 %66, ptr %8, align 4
  br label %614

67:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #10
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.aiScene, ptr %68, i32 0, i32 3
  %70 = load ptr, ptr %69, align 8, !tbaa !14
  %71 = load i32, ptr %10, align 4, !tbaa !13
  %72 = zext i32 %71 to i64
  %73 = getelementptr inbounds ptr, ptr %70, i64 %72
  %74 = load ptr, ptr %73, align 8, !tbaa !5
  store ptr %74, ptr %12, align 8, !tbaa !5
  %75 = load ptr, ptr %12, align 8, !tbaa !5
  %76 = invoke noundef i64 @_ZN6Assimp11GetMeshHashEP6aiMesh(ptr noundef %75)
          to label %77 unwind label %94

77:                                               ; preds = %67
  %78 = load i32, ptr %10, align 4, !tbaa !13
  %79 = zext i32 %78 to i64
  %80 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt10unique_ptrIA_mSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %5, i64 noundef %79)
          to label %81 unwind label %94

81:                                               ; preds = %77
  store i64 %76, ptr %80, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #10
  %82 = load ptr, ptr %12, align 8, !tbaa !5
  %83 = invoke noundef float @_ZN6Assimp22ComputePositionEpsilonEPK6aiMesh(ptr noundef %82)
          to label %84 unwind label %98

84:                                               ; preds = %81
  store float %83, ptr %13, align 4, !tbaa !17
  %85 = load float, ptr %13, align 4, !tbaa !17
  %86 = load float, ptr %13, align 4, !tbaa !17
  %87 = fmul float %86, %85
  store float %87, ptr %13, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #10
  %88 = load i32, ptr %10, align 4, !tbaa !13
  %89 = sub i32 %88, 1
  store i32 %89, ptr %14, align 4, !tbaa !13
  br label %90

90:                                               ; preds = %506, %84
  %91 = load i32, ptr %14, align 4, !tbaa !13
  %92 = icmp sge i32 %91, 0
  br i1 %92, label %102, label %93

93:                                               ; preds = %90
  store i32 5, ptr %11, align 4
  br label %509

94:                                               ; preds = %77, %67
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %7, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %8, align 4
  br label %532

98:                                               ; preds = %520, %81
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %7, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %8, align 4
  br label %531

102:                                              ; preds = %90
  %103 = load i32, ptr %10, align 4, !tbaa !13
  %104 = zext i32 %103 to i64
  %105 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt10unique_ptrIA_mSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %5, i64 noundef %104)
          to label %106 unwind label %125

106:                                              ; preds = %102
  %107 = load i64, ptr %105, align 8, !tbaa !15
  %108 = load i32, ptr %14, align 4, !tbaa !13
  %109 = sext i32 %108 to i64
  %110 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt10unique_ptrIA_mSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %5, i64 noundef %109)
          to label %111 unwind label %125

111:                                              ; preds = %106
  %112 = load i64, ptr %110, align 8, !tbaa !15
  %113 = icmp eq i64 %107, %112
  br i1 %113, label %114, label %505

114:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #10
  %115 = load ptr, ptr %4, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.aiScene, ptr %115, i32 0, i32 3
  %117 = load ptr, ptr %116, align 8, !tbaa !14
  %118 = load i32, ptr %14, align 4, !tbaa !13
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds ptr, ptr %117, i64 %119
  %121 = load ptr, ptr %120, align 8, !tbaa !5
  store ptr %121, ptr %15, align 8, !tbaa !5
  %122 = load ptr, ptr %15, align 8, !tbaa !5
  %123 = icmp ne ptr %122, null
  br i1 %123, label %129, label %124

124:                                              ; preds = %114
  store i32 7, ptr %11, align 4
  br label %502

125:                                              ; preds = %106, %102
  %126 = landingpad { ptr, i32 }
          cleanup
  %127 = extractvalue { ptr, i32 } %126, 0
  store ptr %127, ptr %7, align 8
  %128 = extractvalue { ptr, i32 } %126, 1
  store i32 %128, ptr %8, align 4
  br label %510

129:                                              ; preds = %114
  %130 = load ptr, ptr %15, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.aiMesh, ptr %130, i32 0, i32 11
  %132 = load i32, ptr %131, align 8, !tbaa !19
  %133 = load ptr, ptr %12, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.aiMesh, ptr %133, i32 0, i32 11
  %135 = load i32, ptr %134, align 8, !tbaa !19
  %136 = icmp ne i32 %132, %135
  br i1 %136, label %169, label %137

137:                                              ; preds = %129
  %138 = load ptr, ptr %15, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.aiMesh, ptr %138, i32 0, i32 2
  %140 = load i32, ptr %139, align 8, !tbaa !24
  %141 = load ptr, ptr %12, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.aiMesh, ptr %141, i32 0, i32 2
  %143 = load i32, ptr %142, align 8, !tbaa !24
  %144 = icmp ne i32 %140, %143
  br i1 %144, label %169, label %145

145:                                              ; preds = %137
  %146 = load ptr, ptr %15, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.aiMesh, ptr %146, i32 0, i32 1
  %148 = load i32, ptr %147, align 4, !tbaa !25
  %149 = load ptr, ptr %12, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.aiMesh, ptr %149, i32 0, i32 1
  %151 = load i32, ptr %150, align 4, !tbaa !25
  %152 = icmp ne i32 %148, %151
  br i1 %152, label %169, label %153

153:                                              ; preds = %145
  %154 = load ptr, ptr %15, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.aiMesh, ptr %154, i32 0, i32 13
  %156 = load i32, ptr %155, align 8, !tbaa !26
  %157 = load ptr, ptr %12, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.aiMesh, ptr %157, i32 0, i32 13
  %159 = load i32, ptr %158, align 8, !tbaa !26
  %160 = icmp ne i32 %156, %159
  br i1 %160, label %169, label %161

161:                                              ; preds = %153
  %162 = load ptr, ptr %15, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.aiMesh, ptr %162, i32 0, i32 0
  %164 = load i32, ptr %163, align 8, !tbaa !27
  %165 = load ptr, ptr %12, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.aiMesh, ptr %165, i32 0, i32 0
  %167 = load i32, ptr %166, align 8, !tbaa !27
  %168 = icmp ne i32 %164, %167
  br i1 %168, label %169, label %170

169:                                              ; preds = %161, %153, %145, %137, %129
  store i32 7, ptr %11, align 4
  br label %502

170:                                              ; preds = %161
  %171 = load ptr, ptr %15, align 8, !tbaa !5
  %172 = invoke noundef zeroext i1 @_ZNK6aiMesh12HasPositionsEv(ptr noundef nonnull align 8 dereferenceable(1320) %171)
          to label %173 unwind label %188

173:                                              ; preds = %170
  br i1 %172, label %174, label %193

174:                                              ; preds = %173
  %175 = load ptr, ptr %15, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.aiMesh, ptr %175, i32 0, i32 3
  %177 = load ptr, ptr %176, align 8, !tbaa !28
  %178 = load ptr, ptr %12, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.aiMesh, ptr %178, i32 0, i32 3
  %180 = load ptr, ptr %179, align 8, !tbaa !28
  %181 = load ptr, ptr %15, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.aiMesh, ptr %181, i32 0, i32 1
  %183 = load i32, ptr %182, align 4, !tbaa !25
  %184 = load float, ptr %13, align 4, !tbaa !17
  %185 = invoke noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK10aiVector3tIfES3_jf(ptr noundef %177, ptr noundef %180, i32 noundef %183, float noundef %184)
          to label %186 unwind label %188

186:                                              ; preds = %174
  br i1 %185, label %192, label %187

187:                                              ; preds = %186
  store i32 7, ptr %11, align 4
  br label %502

188:                                              ; preds = %486, %482, %352, %229, %216, %212, %197, %193, %174, %170
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %7, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %8, align 4
  br label %504

192:                                              ; preds = %186
  br label %193

193:                                              ; preds = %192, %173
  %194 = load ptr, ptr %15, align 8, !tbaa !5
  %195 = invoke noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %194)
          to label %196 unwind label %188

196:                                              ; preds = %193
  br i1 %195, label %197, label %212

197:                                              ; preds = %196
  %198 = load ptr, ptr %15, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.aiMesh, ptr %198, i32 0, i32 4
  %200 = load ptr, ptr %199, align 8, !tbaa !29
  %201 = load ptr, ptr %12, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.aiMesh, ptr %201, i32 0, i32 4
  %203 = load ptr, ptr %202, align 8, !tbaa !29
  %204 = load ptr, ptr %15, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.aiMesh, ptr %204, i32 0, i32 1
  %206 = load i32, ptr %205, align 4, !tbaa !25
  %207 = load float, ptr %13, align 4, !tbaa !17
  %208 = invoke noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK10aiVector3tIfES3_jf(ptr noundef %200, ptr noundef %203, i32 noundef %206, float noundef %207)
          to label %209 unwind label %188

209:                                              ; preds = %197
  br i1 %208, label %211, label %210

210:                                              ; preds = %209
  store i32 7, ptr %11, align 4
  br label %502

211:                                              ; preds = %209
  br label %212

212:                                              ; preds = %211, %196
  %213 = load ptr, ptr %15, align 8, !tbaa !5
  %214 = invoke noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %213)
          to label %215 unwind label %188

215:                                              ; preds = %212
  br i1 %214, label %216, label %244

216:                                              ; preds = %215
  %217 = load ptr, ptr %15, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.aiMesh, ptr %217, i32 0, i32 5
  %219 = load ptr, ptr %218, align 8, !tbaa !30
  %220 = load ptr, ptr %12, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.aiMesh, ptr %220, i32 0, i32 5
  %222 = load ptr, ptr %221, align 8, !tbaa !30
  %223 = load ptr, ptr %15, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.aiMesh, ptr %223, i32 0, i32 1
  %225 = load i32, ptr %224, align 4, !tbaa !25
  %226 = load float, ptr %13, align 4, !tbaa !17
  %227 = invoke noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK10aiVector3tIfES3_jf(ptr noundef %219, ptr noundef %222, i32 noundef %225, float noundef %226)
          to label %228 unwind label %188

228:                                              ; preds = %216
  br i1 %227, label %229, label %242

229:                                              ; preds = %228
  %230 = load ptr, ptr %15, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.aiMesh, ptr %230, i32 0, i32 6
  %232 = load ptr, ptr %231, align 8, !tbaa !31
  %233 = load ptr, ptr %12, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.aiMesh, ptr %233, i32 0, i32 6
  %235 = load ptr, ptr %234, align 8, !tbaa !31
  %236 = load ptr, ptr %15, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.aiMesh, ptr %236, i32 0, i32 1
  %238 = load i32, ptr %237, align 4, !tbaa !25
  %239 = load float, ptr %13, align 4, !tbaa !17
  %240 = invoke noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK10aiVector3tIfES3_jf(ptr noundef %232, ptr noundef %235, i32 noundef %238, float noundef %239)
          to label %241 unwind label %188

241:                                              ; preds = %229
  br i1 %240, label %243, label %242

242:                                              ; preds = %241, %228
  store i32 7, ptr %11, align 4
  br label %502

243:                                              ; preds = %241
  br label %244

244:                                              ; preds = %243, %215
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #10
  %245 = load ptr, ptr %15, align 8, !tbaa !5
  %246 = invoke noundef i32 @_ZNK6aiMesh16GetNumUVChannelsEv(ptr noundef nonnull align 8 dereferenceable(1320) %245)
          to label %247 unwind label %261

247:                                              ; preds = %244
  store i32 %246, ptr %17, align 4, !tbaa !13
  store i32 0, ptr %16, align 4, !tbaa !13
  br label %248

248:                                              ; preds = %285, %247
  %249 = load i32, ptr %16, align 4, !tbaa !13
  %250 = load i32, ptr %17, align 4, !tbaa !13
  %251 = icmp ult i32 %249, %250
  br i1 %251, label %252, label %288

252:                                              ; preds = %248
  %253 = load ptr, ptr %15, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.aiMesh, ptr %253, i32 0, i32 8
  %255 = load i32, ptr %16, align 4, !tbaa !13
  %256 = zext i32 %255 to i64
  %257 = getelementptr inbounds [8 x ptr], ptr %254, i64 0, i64 %256
  %258 = load ptr, ptr %257, align 8, !tbaa !5
  %259 = icmp ne ptr %258, null
  br i1 %259, label %265, label %260

260:                                              ; preds = %252
  br label %285

261:                                              ; preds = %265, %244
  %262 = landingpad { ptr, i32 }
          cleanup
  %263 = extractvalue { ptr, i32 } %262, 0
  store ptr %263, ptr %7, align 8
  %264 = extractvalue { ptr, i32 } %262, 1
  store i32 %264, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  br label %504

265:                                              ; preds = %252
  %266 = load ptr, ptr %15, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.aiMesh, ptr %266, i32 0, i32 8
  %268 = load i32, ptr %16, align 4, !tbaa !13
  %269 = zext i32 %268 to i64
  %270 = getelementptr inbounds [8 x ptr], ptr %267, i64 0, i64 %269
  %271 = load ptr, ptr %270, align 8, !tbaa !5
  %272 = load ptr, ptr %12, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.aiMesh, ptr %272, i32 0, i32 8
  %274 = load i32, ptr %16, align 4, !tbaa !13
  %275 = zext i32 %274 to i64
  %276 = getelementptr inbounds [8 x ptr], ptr %273, i64 0, i64 %275
  %277 = load ptr, ptr %276, align 8, !tbaa !5
  %278 = load ptr, ptr %15, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.aiMesh, ptr %278, i32 0, i32 1
  %280 = load i32, ptr %279, align 4, !tbaa !25
  %281 = invoke noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK10aiVector3tIfES3_jf(ptr noundef %271, ptr noundef %277, i32 noundef %280, float noundef 0x3F50624DE0000000)
          to label %282 unwind label %261

282:                                              ; preds = %265
  br i1 %281, label %284, label %283

283:                                              ; preds = %282
  br label %288

284:                                              ; preds = %282
  br label %285

285:                                              ; preds = %284, %260
  %286 = load i32, ptr %16, align 4, !tbaa !13
  %287 = add i32 %286, 1
  store i32 %287, ptr %16, align 4, !tbaa !13
  br label %248, !llvm.loop !32

288:                                              ; preds = %283, %248
  %289 = load i32, ptr %16, align 4, !tbaa !13
  %290 = load i32, ptr %17, align 4, !tbaa !13
  %291 = icmp ne i32 %289, %290
  br i1 %291, label %292, label %293

292:                                              ; preds = %288
  store i32 7, ptr %11, align 4
  br label %294

293:                                              ; preds = %288
  store i32 0, ptr %11, align 4
  br label %294

294:                                              ; preds = %293, %292
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  %295 = load i32, ptr %11, align 4
  switch i32 %295, label %502 [
    i32 0, label %296
  ]

296:                                              ; preds = %294
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #10
  %297 = load ptr, ptr %15, align 8, !tbaa !5
  %298 = invoke noundef i32 @_ZNK6aiMesh19GetNumColorChannelsEv(ptr noundef nonnull align 8 dereferenceable(1320) %297)
          to label %299 unwind label %313

299:                                              ; preds = %296
  store i32 %298, ptr %19, align 4, !tbaa !13
  store i32 0, ptr %18, align 4, !tbaa !13
  br label %300

300:                                              ; preds = %337, %299
  %301 = load i32, ptr %18, align 4, !tbaa !13
  %302 = load i32, ptr %19, align 4, !tbaa !13
  %303 = icmp ult i32 %301, %302
  br i1 %303, label %304, label %340

304:                                              ; preds = %300
  %305 = load ptr, ptr %15, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.aiMesh, ptr %305, i32 0, i32 7
  %307 = load i32, ptr %18, align 4, !tbaa !13
  %308 = zext i32 %307 to i64
  %309 = getelementptr inbounds [8 x ptr], ptr %306, i64 0, i64 %308
  %310 = load ptr, ptr %309, align 8, !tbaa !5
  %311 = icmp ne ptr %310, null
  br i1 %311, label %317, label %312

312:                                              ; preds = %304
  br label %337

313:                                              ; preds = %317, %296
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %7, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #10
  br label %504

317:                                              ; preds = %304
  %318 = load ptr, ptr %15, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.aiMesh, ptr %318, i32 0, i32 7
  %320 = load i32, ptr %18, align 4, !tbaa !13
  %321 = zext i32 %320 to i64
  %322 = getelementptr inbounds [8 x ptr], ptr %319, i64 0, i64 %321
  %323 = load ptr, ptr %322, align 8, !tbaa !5
  %324 = load ptr, ptr %12, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.aiMesh, ptr %324, i32 0, i32 7
  %326 = load i32, ptr %18, align 4, !tbaa !13
  %327 = zext i32 %326 to i64
  %328 = getelementptr inbounds [8 x ptr], ptr %325, i64 0, i64 %327
  %329 = load ptr, ptr %328, align 8, !tbaa !5
  %330 = load ptr, ptr %15, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.aiMesh, ptr %330, i32 0, i32 1
  %332 = load i32, ptr %331, align 4, !tbaa !25
  %333 = invoke noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK9aiColor4tIfES3_jf(ptr noundef %323, ptr noundef %329, i32 noundef %332, float noundef 0x3F50624DE0000000)
          to label %334 unwind label %313

334:                                              ; preds = %317
  br i1 %333, label %336, label %335

335:                                              ; preds = %334
  br label %340

336:                                              ; preds = %334
  br label %337

337:                                              ; preds = %336, %312
  %338 = load i32, ptr %18, align 4, !tbaa !13
  %339 = add i32 %338, 1
  store i32 %339, ptr %18, align 4, !tbaa !13
  br label %300, !llvm.loop !34

340:                                              ; preds = %335, %300
  %341 = load i32, ptr %18, align 4, !tbaa !13
  %342 = load i32, ptr %19, align 4, !tbaa !13
  %343 = icmp ne i32 %341, %342
  br i1 %343, label %344, label %345

344:                                              ; preds = %340
  store i32 7, ptr %11, align 4
  br label %346

345:                                              ; preds = %340
  store i32 0, ptr %11, align 4
  br label %346

346:                                              ; preds = %345, %344
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #10
  %347 = load i32, ptr %11, align 4
  switch i32 %347, label %502 [
    i32 0, label %348
  ]

348:                                              ; preds = %346
  %349 = getelementptr inbounds %"class.Assimp::FindInstancesProcess", ptr %30, i32 0, i32 1
  %350 = load i8, ptr %349, align 8, !tbaa !35, !range !39, !noundef !40
  %351 = trunc i8 %350 to i1
  br i1 %351, label %482, label %352

352:                                              ; preds = %348
  %353 = load ptr, ptr %15, align 8, !tbaa !5
  %354 = load ptr, ptr %12, align 8, !tbaa !5
  %355 = invoke noundef zeroext i1 @_Z12CompareBonesPK6aiMeshS1_(ptr noundef %353, ptr noundef %354)
          to label %356 unwind label %188

356:                                              ; preds = %352
  br i1 %355, label %358, label %357

357:                                              ; preds = %356
  store i32 7, ptr %11, align 4
  br label %502

358:                                              ; preds = %356
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #10
  %359 = load ptr, ptr %15, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.aiMesh, ptr %359, i32 0, i32 1
  %361 = load i32, ptr %360, align 4, !tbaa !25
  %362 = zext i32 %361 to i64
  %363 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %362, i64 4)
  %364 = extractvalue { i64, i1 } %363, 1
  %365 = extractvalue { i64, i1 } %363, 0
  %366 = select i1 %364, i64 -1, i64 %365
  %367 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %366) #11
          to label %368 unwind label %386

368:                                              ; preds = %358
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EEC2IPjS2_vbEET_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef %367) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #10
  %369 = load ptr, ptr %15, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.aiMesh, ptr %369, i32 0, i32 1
  %371 = load i32, ptr %370, align 4, !tbaa !25
  %372 = zext i32 %371 to i64
  %373 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %372, i64 4)
  %374 = extractvalue { i64, i1 } %373, 1
  %375 = extractvalue { i64, i1 } %373, 0
  %376 = select i1 %374, i64 -1, i64 %375
  %377 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %376) #11
          to label %378 unwind label %390

378:                                              ; preds = %368
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EEC2IPjS2_vbEET_(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef %377) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #10
  store i32 0, ptr %22, align 4, !tbaa !13
  br label %379

379:                                              ; preds = %461, %378
  %380 = load i32, ptr %22, align 4, !tbaa !13
  %381 = load ptr, ptr %15, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.aiMesh, ptr %381, i32 0, i32 2
  %383 = load i32, ptr %382, align 8, !tbaa !24
  %384 = icmp ult i32 %380, %383
  br i1 %384, label %394, label %385

385:                                              ; preds = %379
  store i32 14, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #10
  br label %465

386:                                              ; preds = %358
  %387 = landingpad { ptr, i32 }
          cleanup
  %388 = extractvalue { ptr, i32 } %387, 0
  store ptr %388, ptr %7, align 8
  %389 = extractvalue { ptr, i32 } %387, 1
  store i32 %389, ptr %8, align 4
  br label %481

390:                                              ; preds = %368
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %7, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %8, align 4
  br label %480

394:                                              ; preds = %379
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #10
  %395 = load ptr, ptr %15, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.aiMesh, ptr %395, i32 0, i32 10
  %397 = load ptr, ptr %396, align 8, !tbaa !41
  %398 = load i32, ptr %22, align 4, !tbaa !13
  %399 = zext i32 %398 to i64
  %400 = getelementptr inbounds %struct.aiFace, ptr %397, i64 %399
  store ptr %400, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #10
  store i32 0, ptr %24, align 4, !tbaa !13
  br label %401

401:                                              ; preds = %420, %394
  %402 = load i32, ptr %24, align 4, !tbaa !13
  %403 = load ptr, ptr %23, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.aiFace, ptr %403, i32 0, i32 0
  %405 = load i32, ptr %404, align 8, !tbaa !42
  %406 = icmp ult i32 %402, %405
  br i1 %406, label %408, label %407

407:                                              ; preds = %401
  store i32 17, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #10
  br label %427

408:                                              ; preds = %401
  %409 = load i32, ptr %22, align 4, !tbaa !13
  %410 = load ptr, ptr %23, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.aiFace, ptr %410, i32 0, i32 1
  %412 = load ptr, ptr %411, align 8, !tbaa !44
  %413 = load i32, ptr %24, align 4, !tbaa !13
  %414 = zext i32 %413 to i64
  %415 = getelementptr inbounds i32, ptr %412, i64 %414
  %416 = load i32, ptr %415, align 4, !tbaa !13
  %417 = zext i32 %416 to i64
  %418 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %20, i64 noundef %417)
          to label %419 unwind label %423

419:                                              ; preds = %408
  store i32 %409, ptr %418, align 4, !tbaa !13
  br label %420

420:                                              ; preds = %419
  %421 = load i32, ptr %24, align 4, !tbaa !13
  %422 = add i32 %421, 1
  store i32 %422, ptr %24, align 4, !tbaa !13
  br label %401, !llvm.loop !45

423:                                              ; preds = %408
  %424 = landingpad { ptr, i32 }
          cleanup
  %425 = extractvalue { ptr, i32 } %424, 0
  store ptr %425, ptr %7, align 8
  %426 = extractvalue { ptr, i32 } %424, 1
  store i32 %426, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #10
  br label %464

427:                                              ; preds = %407
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #10
  %428 = load ptr, ptr %12, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.aiMesh, ptr %428, i32 0, i32 10
  %430 = load ptr, ptr %429, align 8, !tbaa !41
  %431 = load i32, ptr %22, align 4, !tbaa !13
  %432 = zext i32 %431 to i64
  %433 = getelementptr inbounds %struct.aiFace, ptr %430, i64 %432
  store ptr %433, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #10
  store i32 0, ptr %26, align 4, !tbaa !13
  br label %434

434:                                              ; preds = %453, %427
  %435 = load i32, ptr %26, align 4, !tbaa !13
  %436 = load ptr, ptr %25, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.aiFace, ptr %436, i32 0, i32 0
  %438 = load i32, ptr %437, align 8, !tbaa !42
  %439 = icmp ult i32 %435, %438
  br i1 %439, label %441, label %440

440:                                              ; preds = %434
  store i32 20, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #10
  br label %460

441:                                              ; preds = %434
  %442 = load i32, ptr %22, align 4, !tbaa !13
  %443 = load ptr, ptr %25, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.aiFace, ptr %443, i32 0, i32 1
  %445 = load ptr, ptr %444, align 8, !tbaa !44
  %446 = load i32, ptr %26, align 4, !tbaa !13
  %447 = zext i32 %446 to i64
  %448 = getelementptr inbounds i32, ptr %445, i64 %447
  %449 = load i32, ptr %448, align 4, !tbaa !13
  %450 = zext i32 %449 to i64
  %451 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %21, i64 noundef %450)
          to label %452 unwind label %456

452:                                              ; preds = %441
  store i32 %442, ptr %451, align 4, !tbaa !13
  br label %453

453:                                              ; preds = %452
  %454 = load i32, ptr %26, align 4, !tbaa !13
  %455 = add i32 %454, 1
  store i32 %455, ptr %26, align 4, !tbaa !13
  br label %434, !llvm.loop !46

456:                                              ; preds = %441
  %457 = landingpad { ptr, i32 }
          cleanup
  %458 = extractvalue { ptr, i32 } %457, 0
  store ptr %458, ptr %7, align 8
  %459 = extractvalue { ptr, i32 } %457, 1
  store i32 %459, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  br label %464

460:                                              ; preds = %440
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  br label %461

461:                                              ; preds = %460
  %462 = load i32, ptr %22, align 4, !tbaa !13
  %463 = add i32 %462, 1
  store i32 %463, ptr %22, align 4, !tbaa !13
  br label %379, !llvm.loop !47

464:                                              ; preds = %456, %423
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #10
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  br label %480

465:                                              ; preds = %385
  %466 = call noundef ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  %467 = call noundef ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  %468 = load ptr, ptr %15, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.aiMesh, ptr %468, i32 0, i32 1
  %470 = load i32, ptr %469, align 4, !tbaa !25
  %471 = zext i32 %470 to i64
  %472 = mul i64 %471, 4
  %473 = call i32 @memcmp(ptr noundef %466, ptr noundef %467, i64 noundef %472) #12
  %474 = icmp ne i32 0, %473
  br i1 %474, label %475, label %476

475:                                              ; preds = %465
  store i32 7, ptr %11, align 4
  br label %477

476:                                              ; preds = %465
  store i32 0, ptr %11, align 4
  br label %477

477:                                              ; preds = %476, %475
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  %478 = load i32, ptr %11, align 4
  switch i32 %478, label %502 [
    i32 0, label %479
  ]

479:                                              ; preds = %477
  br label %482

480:                                              ; preds = %464, %390
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  br label %481

481:                                              ; preds = %480, %386
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  br label %504

482:                                              ; preds = %479, %348
  %483 = load i32, ptr %14, align 4, !tbaa !13
  %484 = sext i32 %483 to i64
  %485 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %6, i64 noundef %484)
          to label %486 unwind label %188

486:                                              ; preds = %482
  %487 = load i32, ptr %485, align 4, !tbaa !13
  %488 = load i32, ptr %10, align 4, !tbaa !13
  %489 = zext i32 %488 to i64
  %490 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %6, i64 noundef %489)
          to label %491 unwind label %188

491:                                              ; preds = %486
  store i32 %487, ptr %490, align 4, !tbaa !13
  %492 = load ptr, ptr %12, align 8, !tbaa !5
  %493 = icmp eq ptr %492, null
  br i1 %493, label %495, label %494

494:                                              ; preds = %491
  call void @_ZN6aiMeshD2Ev(ptr noundef nonnull align 8 dereferenceable(1320) %492) #10
  call void @_ZdlPvm(ptr noundef %492, i64 noundef 1320) #13
  br label %495

495:                                              ; preds = %494, %491
  %496 = load ptr, ptr %4, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.aiScene, ptr %496, i32 0, i32 3
  %498 = load ptr, ptr %497, align 8, !tbaa !14
  %499 = load i32, ptr %10, align 4, !tbaa !13
  %500 = zext i32 %499 to i64
  %501 = getelementptr inbounds ptr, ptr %498, i64 %500
  store ptr null, ptr %501, align 8, !tbaa !5
  store i32 5, ptr %11, align 4
  br label %502

502:                                              ; preds = %495, %477, %357, %346, %294, %242, %210, %187, %169, %124
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  %503 = load i32, ptr %11, align 4
  switch i32 %503, label %509 [
    i32 7, label %506
  ]

504:                                              ; preds = %481, %313, %261, %188
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  br label %510

505:                                              ; preds = %111
  br label %506

506:                                              ; preds = %505, %502
  %507 = load i32, ptr %14, align 4, !tbaa !13
  %508 = add nsw i32 %507, -1
  store i32 %508, ptr %14, align 4, !tbaa !13
  br label %90, !llvm.loop !48

509:                                              ; preds = %502, %93
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #10
  br label %511

510:                                              ; preds = %504, %125
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #10
  br label %531

511:                                              ; preds = %509
  %512 = load ptr, ptr %4, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.aiScene, ptr %512, i32 0, i32 3
  %514 = load ptr, ptr %513, align 8, !tbaa !14
  %515 = load i32, ptr %10, align 4, !tbaa !13
  %516 = zext i32 %515 to i64
  %517 = getelementptr inbounds ptr, ptr %514, i64 %516
  %518 = load ptr, ptr %517, align 8, !tbaa !5
  %519 = icmp ne ptr %518, null
  br i1 %519, label %520, label %527

520:                                              ; preds = %511
  %521 = load i32, ptr %9, align 4, !tbaa !13
  %522 = add i32 %521, 1
  store i32 %522, ptr %9, align 4, !tbaa !13
  %523 = load i32, ptr %10, align 4, !tbaa !13
  %524 = zext i32 %523 to i64
  %525 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %6, i64 noundef %524)
          to label %526 unwind label %98

526:                                              ; preds = %520
  store i32 %521, ptr %525, align 4, !tbaa !13
  br label %527

527:                                              ; preds = %526, %511
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  br label %528

528:                                              ; preds = %527
  %529 = load i32, ptr %10, align 4, !tbaa !13
  %530 = add i32 %529, 1
  store i32 %530, ptr %10, align 4, !tbaa !13
  br label %56, !llvm.loop !49

531:                                              ; preds = %510, %98
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #10
  br label %532

532:                                              ; preds = %531, %94
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #10
  br label %613

533:                                              ; preds = %62
  %534 = load i32, ptr %9, align 4, !tbaa !13
  %535 = icmp ne i32 0, %534
  br i1 %535, label %538, label %536

536:                                              ; preds = %533
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.2, ptr noundef @.str.3, i32 noundef 251)
          to label %537 unwind label %551

537:                                              ; preds = %536
  br label %538

538:                                              ; preds = %537, %533
  %539 = phi i1 [ true, %533 ], [ false, %537 ]
  %540 = load i32, ptr %9, align 4, !tbaa !13
  %541 = load ptr, ptr %4, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.aiScene, ptr %541, i32 0, i32 2
  %543 = load i32, ptr %542, align 8, !tbaa !9
  %544 = icmp ne i32 %540, %543
  br i1 %544, label %545, label %608

545:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #10
  store i32 0, ptr %27, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #10
  store i32 0, ptr %28, align 4, !tbaa !13
  br label %546

546:                                              ; preds = %580, %545
  %547 = load i32, ptr %27, align 4, !tbaa !13
  %548 = load i32, ptr %9, align 4, !tbaa !13
  %549 = icmp ult i32 %547, %548
  br i1 %549, label %555, label %550

550:                                              ; preds = %546
  store i32 23, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #10
  br label %583

551:                                              ; preds = %610, %608, %591, %588, %583, %536
  %552 = landingpad { ptr, i32 }
          cleanup
  %553 = extractvalue { ptr, i32 } %552, 0
  store ptr %553, ptr %7, align 8
  %554 = extractvalue { ptr, i32 } %552, 1
  store i32 %554, ptr %8, align 4
  br label %613

555:                                              ; preds = %546
  %556 = load ptr, ptr %4, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.aiScene, ptr %556, i32 0, i32 3
  %558 = load ptr, ptr %557, align 8, !tbaa !14
  %559 = load i32, ptr %28, align 4, !tbaa !13
  %560 = zext i32 %559 to i64
  %561 = getelementptr inbounds ptr, ptr %558, i64 %560
  %562 = load ptr, ptr %561, align 8, !tbaa !5
  %563 = icmp ne ptr %562, null
  br i1 %563, label %564, label %579

564:                                              ; preds = %555
  %565 = load ptr, ptr %4, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.aiScene, ptr %565, i32 0, i32 3
  %567 = load ptr, ptr %566, align 8, !tbaa !14
  %568 = load i32, ptr %28, align 4, !tbaa !13
  %569 = zext i32 %568 to i64
  %570 = getelementptr inbounds ptr, ptr %567, i64 %569
  %571 = load ptr, ptr %570, align 8, !tbaa !5
  %572 = load ptr, ptr %4, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.aiScene, ptr %572, i32 0, i32 3
  %574 = load ptr, ptr %573, align 8, !tbaa !14
  %575 = load i32, ptr %27, align 4, !tbaa !13
  %576 = add i32 %575, 1
  store i32 %576, ptr %27, align 4, !tbaa !13
  %577 = zext i32 %575 to i64
  %578 = getelementptr inbounds ptr, ptr %574, i64 %577
  store ptr %571, ptr %578, align 8, !tbaa !5
  br label %579

579:                                              ; preds = %564, %555
  br label %580

580:                                              ; preds = %579
  %581 = load i32, ptr %28, align 4, !tbaa !13
  %582 = add i32 %581, 1
  store i32 %582, ptr %28, align 4, !tbaa !13
  br label %546, !llvm.loop !50

583:                                              ; preds = %550
  %584 = load ptr, ptr %4, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.aiScene, ptr %584, i32 0, i32 1
  %586 = load ptr, ptr %585, align 8, !tbaa !51
  %587 = call noundef ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #10
  invoke void @_Z17UpdateMeshIndicesP6aiNodePj(ptr noundef %586, ptr noundef %587)
          to label %588 unwind label %551

588:                                              ; preds = %583
  %589 = invoke noundef zeroext i1 @_ZN6Assimp13DefaultLogger12isNullLoggerEv()
          to label %590 unwind label %551

590:                                              ; preds = %588
  br i1 %589, label %604, label %591

591:                                              ; preds = %590
  %592 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %593 unwind label %551

593:                                              ; preds = %591
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #10
  %594 = load ptr, ptr %4, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.aiScene, ptr %594, i32 0, i32 2
  %596 = load i32, ptr %595, align 8, !tbaa !9
  %597 = load i32, ptr %9, align 4, !tbaa !13
  %598 = sub i32 %596, %597
  store i32 %598, ptr %29, align 4, !tbaa !13
  invoke void @_ZN6Assimp6Logger4infoIJRA38_KcjRA11_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12) %592, ptr noundef nonnull align 1 dereferenceable(38) @.str.4, ptr noundef nonnull align 4 dereferenceable(4) %29, ptr noundef nonnull align 1 dereferenceable(11) @.str.5)
          to label %599 unwind label %600

599:                                              ; preds = %593
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #10
  br label %604

600:                                              ; preds = %593
  %601 = landingpad { ptr, i32 }
          cleanup
  %602 = extractvalue { ptr, i32 } %601, 0
  store ptr %602, ptr %7, align 8
  %603 = extractvalue { ptr, i32 } %601, 1
  store i32 %603, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #10
  br label %613

604:                                              ; preds = %599, %590
  %605 = load i32, ptr %9, align 4, !tbaa !13
  %606 = load ptr, ptr %4, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.aiScene, ptr %606, i32 0, i32 2
  store i32 %605, ptr %607, align 8, !tbaa !9
  br label %612

608:                                              ; preds = %538
  %609 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %610 unwind label %551

610:                                              ; preds = %608
  invoke void @_ZN6Assimp6Logger5debugEPKc(ptr noundef nonnull align 8 dereferenceable(12) %609, ptr noundef @.str.6)
          to label %611 unwind label %551

611:                                              ; preds = %610
  br label %612

612:                                              ; preds = %611, %604
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #10
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #10
  call void @_ZNSt10unique_ptrIA_mSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #10
  br label %615

613:                                              ; preds = %600, %551, %532
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #10
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #10
  br label %614

614:                                              ; preds = %613, %63
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #10
  call void @_ZNSt10unique_ptrIA_mSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #10
  br label %616

615:                                              ; preds = %612, %2
  ret void

616:                                              ; preds = %614
  %617 = load ptr, ptr %7, align 8
  %618 = load i32, ptr %8, align 4
  %619 = insertvalue { ptr, i32 } poison, ptr %617, 0
  %620 = insertvalue { ptr, i32 } %619, i32 %618, 1
  resume { ptr, i32 } %620
}

declare noundef ptr @_ZN6Assimp13DefaultLogger3getEv() #2

declare void @_ZN6Assimp6Logger5debugEPKc(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef) #2

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

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

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i64 @_ZN6Assimp11GetMeshHashEP6aiMesh(ptr noundef) #6

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

declare noundef float @_ZN6Assimp22ComputePositionEpsilonEPK6aiMesh(ptr noundef) #2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK10aiVector3tIfES3_jf(ptr noundef, ptr noundef, i32 noundef, float noundef) #7

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK9aiColor4tIfES3_jf(ptr noundef, ptr noundef, i32 noundef, float noundef) #6

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

; Function Attrs: nounwind willreturn memory(read)
declare i32 @memcmp(ptr noundef, ptr noundef, i64 noundef) #8

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

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

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

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

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

declare noundef zeroext i1 @_ZN6Assimp13DefaultLogger12isNullLoggerEv() #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp6Logger4infoIJRA38_KcjRA11_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(38), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(11)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrIA_mSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { inlinehint mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { nounwind }
attributes #11 = { builtin allocsize(0) }
attributes #12 = { nounwind willreturn memory(read) }
attributes #13 = { builtin nounwind }

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

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


; 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::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::unique_ptr.2" = type { %"struct.std::__uniq_ptr_data.3" }
%"struct.std::__uniq_ptr_data.3" = type { %"class.std::__uniq_ptr_impl.4" }
%"class.std::__uniq_ptr_impl.4" = type { %"class.std::tuple.5" }
%"class.std::tuple.5" = type { %"struct.std::_Tuple_impl.6" }
%"struct.std::_Tuple_impl.6" = type { %"struct.std::_Head_base.9" }
%"struct.std::_Head_base.9" = type { ptr }
%struct.aiFace = type { i32, ptr }

@.str.1 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [129 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [57 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z12CompareBonesPK6aiMeshS1_(ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z17UpdateMeshIndicesP6aiNodePj(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp20FindInstancesProcess7ExecuteEP7aiScene(ptr nocapture noundef nonnull readonly align 8 dereferenceable(25) %0, ptr nocapture noundef %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::unique_ptr", align 8
  %4 = alloca %"class.std::unique_ptr.2", align 8
  %5 = alloca %"class.std::unique_ptr.2", align 8
  %6 = alloca %"class.std::unique_ptr.2", align 8
  %7 = alloca i32, align 4
  %8 = tail call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  tail call void @_ZN6Assimp6Logger5debugEPKc(ptr noundef nonnull align 8 dereferenceable(12) %8, ptr noundef nonnull @.str.1)
  %9 = getelementptr inbounds i8, ptr %1, i64 16
  %10 = load i32, ptr %9, align 8, !tbaa !5
  %.not = icmp eq i32 %10, 0
  br i1 %.not, label %263, label %11

11:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #9
  %12 = zext i32 %10 to i64
  %13 = shl nuw nsw i64 %12, 3
  %14 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %13) #10
  call void @_ZNSt10unique_ptrIA_mSt14default_deleteIS0_EEC2IPmS2_vbEET_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull %14) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #9
  %15 = load i32, ptr %9, align 8, !tbaa !5
  %16 = zext i32 %15 to i64
  %17 = shl nuw nsw i64 %16, 2
  %18 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %17) #10
          to label %19 unwind label %23

19:                                               ; preds = %11
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EEC2IPjS2_vbEET_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull %18) #9
  %20 = load i32, ptr %9, align 8, !tbaa !5
  %.not239 = icmp eq i32 %20, 0
  br i1 %.not239, label %._crit_edge233.thread, label %.lr.ph232

.lr.ph232:                                        ; preds = %19
  %21 = getelementptr inbounds i8, ptr %1, i64 24
  %22 = getelementptr inbounds i8, ptr %0, i64 24
  br label %25

._crit_edge233:                                   ; preds = %221
  %.not161 = icmp eq i32 %.1148, 0
  br i1 %.not161, label %._crit_edge233.thread, label %225

23:                                               ; preds = %11
  %24 = landingpad { ptr, i32 }
          cleanup
  br label %262

25:                                               ; preds = %.lr.ph232, %221
  %indvars.iv267 = phi i64 [ 0, %.lr.ph232 ], [ %indvars.iv.next268, %221 ]
  %.0147230 = phi i32 [ 0, %.lr.ph232 ], [ %.1148, %221 ]
  %26 = load ptr, ptr %21, align 8, !tbaa !12
  %27 = getelementptr inbounds ptr, ptr %26, i64 %indvars.iv267
  %28 = load ptr, ptr %27, align 8, !tbaa !13
  %29 = invoke noundef i64 @_ZN6Assimp11GetMeshHashEP6aiMesh(ptr noundef %28)
          to label %30 unwind label %48

30:                                               ; preds = %25
  %31 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt10unique_ptrIA_mSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %3, i64 noundef %indvars.iv267)
  store i64 %29, ptr %31, align 8, !tbaa !14
  %32 = invoke noundef float @_ZN6Assimp22ComputePositionEpsilonEPK6aiMesh(ptr noundef %28)
          to label %33 unwind label %50

33:                                               ; preds = %30
  %34 = fmul float %32, %32
  %35 = trunc nuw i64 %indvars.iv267 to i32
  %.0156225 = add i32 %35, -1
  %36 = icmp sgt i32 %.0156225, -1
  br i1 %36, label %.lr.ph228, label %.loopexit

.lr.ph228:                                        ; preds = %33
  %37 = getelementptr inbounds i8, ptr %28, i64 216
  %38 = getelementptr inbounds i8, ptr %28, i64 8
  %39 = getelementptr inbounds i8, ptr %28, i64 4
  %40 = getelementptr inbounds i8, ptr %28, i64 232
  %41 = getelementptr inbounds i8, ptr %28, i64 16
  %42 = getelementptr inbounds i8, ptr %28, i64 24
  %43 = getelementptr inbounds i8, ptr %28, i64 32
  %44 = getelementptr inbounds i8, ptr %28, i64 40
  %45 = getelementptr inbounds i8, ptr %28, i64 112
  %46 = getelementptr inbounds i8, ptr %28, i64 48
  %47 = getelementptr inbounds i8, ptr %28, i64 208
  br label %52

48:                                               ; preds = %25
  %49 = landingpad { ptr, i32 }
          cleanup
  br label %261

50:                                               ; preds = %30
  %51 = landingpad { ptr, i32 }
          cleanup
  br label %261

52:                                               ; preds = %.lr.ph228, %.thread
  %.0156226 = phi i32 [ %.0156225, %.lr.ph228 ], [ %.0156, %.thread ]
  %53 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt10unique_ptrIA_mSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %3, i64 noundef %indvars.iv267)
  %54 = load i64, ptr %53, align 8, !tbaa !14
  %55 = zext nneg i32 %.0156226 to i64
  %56 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt10unique_ptrIA_mSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %3, i64 noundef %55)
  %57 = load i64, ptr %56, align 8, !tbaa !14
  %58 = icmp eq i64 %54, %57
  br i1 %58, label %59, label %.thread

59:                                               ; preds = %52
  %60 = load ptr, ptr %21, align 8, !tbaa !12
  %61 = getelementptr inbounds ptr, ptr %60, i64 %55
  %62 = load ptr, ptr %61, align 8, !tbaa !13
  %.not164 = icmp eq ptr %62, null
  br i1 %.not164, label %.thread, label %63

63:                                               ; preds = %59
  %64 = getelementptr inbounds i8, ptr %62, i64 216
  %65 = load i32, ptr %64, align 8, !tbaa !16
  %66 = load i32, ptr %37, align 8, !tbaa !16
  %.not165 = icmp eq i32 %65, %66
  br i1 %.not165, label %67, label %.thread

67:                                               ; preds = %63
  %68 = getelementptr inbounds i8, ptr %62, i64 8
  %69 = load i32, ptr %68, align 8, !tbaa !22
  %70 = load i32, ptr %38, align 8, !tbaa !22
  %.not166 = icmp eq i32 %69, %70
  br i1 %.not166, label %71, label %.thread

71:                                               ; preds = %67
  %72 = getelementptr inbounds i8, ptr %62, i64 4
  %73 = load i32, ptr %72, align 4, !tbaa !23
  %74 = load i32, ptr %39, align 4, !tbaa !23
  %.not167 = icmp eq i32 %73, %74
  br i1 %.not167, label %75, label %.thread

75:                                               ; preds = %71
  %76 = getelementptr inbounds i8, ptr %62, i64 232
  %77 = load i32, ptr %76, align 8, !tbaa !24
  %78 = load i32, ptr %40, align 8, !tbaa !24
  %.not168 = icmp eq i32 %77, %78
  br i1 %.not168, label %79, label %.thread

79:                                               ; preds = %75
  %80 = load i32, ptr %62, align 8, !tbaa !25
  %81 = load i32, ptr %28, align 8, !tbaa !25
  %.not169 = icmp eq i32 %80, %81
  br i1 %.not169, label %82, label %.thread

82:                                               ; preds = %79
  %83 = call noundef zeroext i1 @_ZNK6aiMesh12HasPositionsEv(ptr noundef nonnull align 8 dereferenceable(1320) %62)
  br i1 %83, label %84, label %93

84:                                               ; preds = %82
  %85 = getelementptr inbounds i8, ptr %62, i64 16
  %86 = load ptr, ptr %85, align 8, !tbaa !26
  %87 = load ptr, ptr %41, align 8, !tbaa !26
  %88 = load i32, ptr %72, align 4, !tbaa !23
  %89 = invoke noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK10aiVector3tIfES3_jf(ptr noundef %86, ptr noundef %87, i32 noundef %88, float noundef %34)
          to label %90 unwind label %91

90:                                               ; preds = %84
  br i1 %89, label %93, label %.thread

91:                                               ; preds = %151, %111, %104, %95, %84
  %92 = landingpad { ptr, i32 }
          cleanup
  br label %261

93:                                               ; preds = %90, %82
  %94 = call noundef zeroext i1 @_ZNK6aiMesh10HasNormalsEv(ptr noundef nonnull align 8 dereferenceable(1320) %62)
  br i1 %94, label %95, label %102

95:                                               ; preds = %93
  %96 = getelementptr inbounds i8, ptr %62, i64 24
  %97 = load ptr, ptr %96, align 8, !tbaa !27
  %98 = load ptr, ptr %42, align 8, !tbaa !27
  %99 = load i32, ptr %72, align 4, !tbaa !23
  %100 = invoke noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK10aiVector3tIfES3_jf(ptr noundef %97, ptr noundef %98, i32 noundef %99, float noundef %34)
          to label %101 unwind label %91

101:                                              ; preds = %95
  br i1 %100, label %102, label %.thread

102:                                              ; preds = %101, %93
  %103 = call noundef zeroext i1 @_ZNK6aiMesh24HasTangentsAndBitangentsEv(ptr noundef nonnull align 8 dereferenceable(1320) %62)
  br i1 %103, label %104, label %118

104:                                              ; preds = %102
  %105 = getelementptr inbounds i8, ptr %62, i64 32
  %106 = load ptr, ptr %105, align 8, !tbaa !28
  %107 = load ptr, ptr %43, align 8, !tbaa !28
  %108 = load i32, ptr %72, align 4, !tbaa !23
  %109 = invoke noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK10aiVector3tIfES3_jf(ptr noundef %106, ptr noundef %107, i32 noundef %108, float noundef %34)
          to label %110 unwind label %91

110:                                              ; preds = %104
  br i1 %109, label %111, label %.thread

111:                                              ; preds = %110
  %112 = getelementptr inbounds i8, ptr %62, i64 40
  %113 = load ptr, ptr %112, align 8, !tbaa !29
  %114 = load ptr, ptr %44, align 8, !tbaa !29
  %115 = load i32, ptr %72, align 4, !tbaa !23
  %116 = invoke noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK10aiVector3tIfES3_jf(ptr noundef %113, ptr noundef %114, i32 noundef %115, float noundef %34)
          to label %117 unwind label %91

117:                                              ; preds = %111
  br i1 %116, label %118, label %.thread

118:                                              ; preds = %117, %102
  %119 = call noundef i32 @_ZNK6aiMesh16GetNumUVChannelsEv(ptr noundef nonnull align 8 dereferenceable(1320) %62)
  %.not240 = icmp eq i32 %119, 0
  br i1 %.not240, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %118
  %120 = getelementptr inbounds i8, ptr %62, i64 112
  %wide.trip.count = zext i32 %119 to i64
  br label %121

121:                                              ; preds = %.lr.ph, %132
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %132 ]
  %122 = getelementptr inbounds [8 x ptr], ptr %120, i64 0, i64 %indvars.iv
  %123 = load ptr, ptr %122, align 8, !tbaa !13
  %.not170 = icmp eq ptr %123, null
  br i1 %.not170, label %132, label %126

124:                                              ; preds = %126
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %261

126:                                              ; preds = %121
  %127 = getelementptr inbounds [8 x ptr], ptr %45, i64 0, i64 %indvars.iv
  %128 = load ptr, ptr %127, align 8, !tbaa !13
  %129 = load i32, ptr %72, align 4, !tbaa !23
  %130 = invoke noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK10aiVector3tIfES3_jf(ptr noundef nonnull %123, ptr noundef %128, i32 noundef %129, float noundef 0x3F50624DE0000000)
          to label %131 unwind label %124

131:                                              ; preds = %126
  br i1 %130, label %132, label %._crit_edge.loopexit

132:                                              ; preds = %131, %121
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.thread, label %121, !llvm.loop !30

._crit_edge.loopexit:                             ; preds = %131
  %133 = trunc nuw i64 %indvars.iv to i32
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %118
  %.0151.lcssa = phi i32 [ 0, %118 ], [ %133, %._crit_edge.loopexit ]
  %.not171 = icmp eq i32 %.0151.lcssa, %119
  br i1 %.not171, label %._crit_edge.thread, label %.thread

._crit_edge.thread:                               ; preds = %132, %._crit_edge
  %134 = call noundef i32 @_ZNK6aiMesh19GetNumColorChannelsEv(ptr noundef nonnull align 8 dereferenceable(1320) %62)
  %.not241 = icmp eq i32 %134, 0
  br i1 %.not241, label %._crit_edge209, label %.lr.ph208

.lr.ph208:                                        ; preds = %._crit_edge.thread
  %135 = getelementptr inbounds i8, ptr %62, i64 48
  %wide.trip.count256 = zext i32 %134 to i64
  br label %136

136:                                              ; preds = %.lr.ph208, %147
  %indvars.iv253 = phi i64 [ 0, %.lr.ph208 ], [ %indvars.iv.next254, %147 ]
  %137 = getelementptr inbounds [8 x ptr], ptr %135, i64 0, i64 %indvars.iv253
  %138 = load ptr, ptr %137, align 8, !tbaa !13
  %.not172 = icmp eq ptr %138, null
  br i1 %.not172, label %147, label %141

139:                                              ; preds = %141
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %261

141:                                              ; preds = %136
  %142 = getelementptr inbounds [8 x ptr], ptr %46, i64 0, i64 %indvars.iv253
  %143 = load ptr, ptr %142, align 8, !tbaa !13
  %144 = load i32, ptr %72, align 4, !tbaa !23
  %145 = invoke noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK9aiColor4tIfES3_jf(ptr noundef nonnull %138, ptr noundef %143, i32 noundef %144, float noundef 0x3F50624DE0000000)
          to label %146 unwind label %139

146:                                              ; preds = %141
  br i1 %145, label %147, label %._crit_edge209.loopexit

147:                                              ; preds = %146, %136
  %indvars.iv.next254 = add nuw nsw i64 %indvars.iv253, 1
  %exitcond257.not = icmp eq i64 %indvars.iv.next254, %wide.trip.count256
  br i1 %exitcond257.not, label %._crit_edge209.thread, label %136, !llvm.loop !32

._crit_edge209.loopexit:                          ; preds = %146
  %148 = trunc nuw i64 %indvars.iv253 to i32
  br label %._crit_edge209

._crit_edge209:                                   ; preds = %._crit_edge209.loopexit, %._crit_edge.thread
  %.0149.lcssa = phi i32 [ 0, %._crit_edge.thread ], [ %148, %._crit_edge209.loopexit ]
  %.not173 = icmp eq i32 %.0149.lcssa, %134
  br i1 %.not173, label %._crit_edge209.thread, label %.thread

._crit_edge209.thread:                            ; preds = %147, %._crit_edge209
  %149 = load i8, ptr %22, align 8, !tbaa !33, !range !37, !noundef !38
  %150 = trunc nuw i8 %149 to i1
  br i1 %150, label %.thread186, label %151

151:                                              ; preds = %._crit_edge209.thread
  %152 = invoke noundef zeroext i1 @_Z12CompareBonesPK6aiMeshS1_(ptr noundef nonnull %62, ptr noundef nonnull %28)
          to label %153 unwind label %91

153:                                              ; preds = %151
  br i1 %152, label %154, label %.thread

154:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #9
  %155 = load i32, ptr %72, align 4, !tbaa !23
  %156 = zext i32 %155 to i64
  %157 = shl nuw nsw i64 %156, 2
  %158 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %157) #10
          to label %159 unwind label %172

159:                                              ; preds = %154
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EEC2IPjS2_vbEET_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull %158) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #9
  %160 = load i32, ptr %72, align 4, !tbaa !23
  %161 = zext i32 %160 to i64
  %162 = shl nuw nsw i64 %161, 2
  %163 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %162) #10
          to label %164 unwind label %174

164:                                              ; preds = %159
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EEC2IPjS2_vbEET_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull %163) #9
  %165 = load i32, ptr %68, align 8, !tbaa !22
  %.not242 = icmp eq i32 %165, 0
  br i1 %.not242, label %._crit_edge224, label %.lr.ph223

.lr.ph223:                                        ; preds = %164
  %166 = getelementptr inbounds i8, ptr %62, i64 208
  br label %176

._crit_edge224:                                   ; preds = %._crit_edge220, %164
  %167 = call noundef ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #9
  %168 = call noundef ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #9
  %169 = load i32, ptr %72, align 4, !tbaa !23
  %170 = zext i32 %169 to i64
  %171 = shl nuw nsw i64 %170, 2
  %bcmp = call i32 @bcmp(ptr %167, ptr %168, i64 %171)
  %.not180 = icmp eq i32 %bcmp, 0
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #9
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #9
  br i1 %.not180, label %.thread186, label %.thread

172:                                              ; preds = %154
  %173 = landingpad { ptr, i32 }
          cleanup
  br label %208

174:                                              ; preds = %159
  %175 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #9
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #9
  br label %208

176:                                              ; preds = %.lr.ph223, %._crit_edge220
  %indvars.iv264 = phi i64 [ 0, %.lr.ph223 ], [ %indvars.iv.next265, %._crit_edge220 ]
  %177 = load ptr, ptr %166, align 8, !tbaa !39
  %178 = getelementptr inbounds %struct.aiFace, ptr %177, i64 %indvars.iv264
  %179 = load i32, ptr %178, align 8, !tbaa !40
  %.not243 = icmp eq i32 %179, 0
  br i1 %.not243, label %._crit_edge216, label %.lr.ph215

.lr.ph215:                                        ; preds = %176
  %180 = getelementptr inbounds i8, ptr %178, i64 8
  %181 = trunc nuw i64 %indvars.iv264 to i32
  br label %187

._crit_edge216:                                   ; preds = %187, %176
  %182 = load ptr, ptr %47, align 8, !tbaa !39
  %183 = getelementptr inbounds %struct.aiFace, ptr %182, i64 %indvars.iv264
  %184 = load i32, ptr %183, align 8, !tbaa !40
  %.not244 = icmp eq i32 %184, 0
  br i1 %.not244, label %._crit_edge220, label %.lr.ph219

.lr.ph219:                                        ; preds = %._crit_edge216
  %185 = getelementptr inbounds i8, ptr %183, i64 8
  %186 = trunc nuw i64 %indvars.iv264 to i32
  br label %199

187:                                              ; preds = %.lr.ph215, %187
  %indvars.iv258 = phi i64 [ 0, %.lr.ph215 ], [ %indvars.iv.next259, %187 ]
  %188 = load ptr, ptr %180, align 8, !tbaa !42
  %189 = getelementptr inbounds i32, ptr %188, i64 %indvars.iv258
  %190 = load i32, ptr %189, align 4, !tbaa !43
  %191 = zext i32 %190 to i64
  %192 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %5, i64 noundef %191)
  store i32 %181, ptr %192, align 4, !tbaa !43
  %indvars.iv.next259 = add nuw nsw i64 %indvars.iv258, 1
  %193 = load i32, ptr %178, align 8, !tbaa !40
  %194 = zext i32 %193 to i64
  %195 = icmp ult i64 %indvars.iv.next259, %194
  br i1 %195, label %187, label %._crit_edge216, !llvm.loop !44

._crit_edge220:                                   ; preds = %199, %._crit_edge216
  %indvars.iv.next265 = add nuw nsw i64 %indvars.iv264, 1
  %196 = load i32, ptr %68, align 8, !tbaa !22
  %197 = zext i32 %196 to i64
  %198 = icmp ult i64 %indvars.iv.next265, %197
  br i1 %198, label %176, label %._crit_edge224, !llvm.loop !45

199:                                              ; preds = %.lr.ph219, %199
  %indvars.iv261 = phi i64 [ 0, %.lr.ph219 ], [ %indvars.iv.next262, %199 ]
  %200 = load ptr, ptr %185, align 8, !tbaa !42
  %201 = getelementptr inbounds i32, ptr %200, i64 %indvars.iv261
  %202 = load i32, ptr %201, align 4, !tbaa !43
  %203 = zext i32 %202 to i64
  %204 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %6, i64 noundef %203)
  store i32 %186, ptr %204, align 4, !tbaa !43
  %indvars.iv.next262 = add nuw nsw i64 %indvars.iv261, 1
  %205 = load i32, ptr %183, align 8, !tbaa !40
  %206 = zext i32 %205 to i64
  %207 = icmp ult i64 %indvars.iv.next262, %206
  br i1 %207, label %199, label %._crit_edge220, !llvm.loop !46

208:                                              ; preds = %174, %172
  %.pn = phi { ptr, i32 } [ %175, %174 ], [ %173, %172 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #9
  br label %261

.thread186:                                       ; preds = %._crit_edge209.thread, %._crit_edge224
  %209 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %4, i64 noundef %55)
  %210 = load i32, ptr %209, align 4, !tbaa !43
  %211 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %4, i64 noundef %indvars.iv267)
  store i32 %210, ptr %211, align 4, !tbaa !43
  call void @_ZN6aiMeshD2Ev(ptr noundef nonnull align 8 dereferenceable(1320) %28) #9
  call void @_ZdlPvm(ptr noundef %28, i64 noundef 1320) #11
  %212 = load ptr, ptr %21, align 8, !tbaa !12
  %213 = getelementptr inbounds ptr, ptr %212, i64 %indvars.iv267
  store ptr null, ptr %213, align 8, !tbaa !13
  br label %.loopexit

.thread:                                          ; preds = %._crit_edge, %._crit_edge209, %._crit_edge224, %153, %110, %117, %101, %90, %63, %67, %71, %75, %79, %59, %52
  %.0156 = add nsw i32 %.0156226, -1
  %214 = icmp sgt i32 %.0156226, 0
  br i1 %214, label %52, label %.loopexit, !llvm.loop !47

.loopexit:                                        ; preds = %.thread, %33, %.thread186
  %215 = load ptr, ptr %21, align 8, !tbaa !12
  %216 = getelementptr inbounds ptr, ptr %215, i64 %indvars.iv267
  %217 = load ptr, ptr %216, align 8, !tbaa !13
  %.not181 = icmp eq ptr %217, null
  br i1 %.not181, label %221, label %218

218:                                              ; preds = %.loopexit
  %219 = add i32 %.0147230, 1
  %220 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %4, i64 noundef %indvars.iv267)
  store i32 %.0147230, ptr %220, align 4, !tbaa !43
  br label %221

221:                                              ; preds = %218, %.loopexit
  %.1148 = phi i32 [ %219, %218 ], [ %.0147230, %.loopexit ]
  %indvars.iv.next268 = add nuw nsw i64 %indvars.iv267, 1
  %222 = load i32, ptr %9, align 8, !tbaa !5
  %223 = zext i32 %222 to i64
  %224 = icmp ult i64 %indvars.iv.next268, %223
  br i1 %224, label %25, label %._crit_edge233, !llvm.loop !48

._crit_edge233.thread:                            ; preds = %19, %._crit_edge233
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, i32 noundef 251)
          to label %._crit_edge270 unwind label %231

._crit_edge270:                                   ; preds = %._crit_edge233.thread
  %.pre = load i32, ptr %9, align 8, !tbaa !5
  br label %225

225:                                              ; preds = %._crit_edge270, %._crit_edge233
  %.not161275 = phi i1 [ true, %._crit_edge270 ], [ false, %._crit_edge233 ]
  %.0147.lcssa273 = phi i32 [ 0, %._crit_edge270 ], [ %.1148, %._crit_edge233 ]
  %226 = phi i32 [ %.pre, %._crit_edge270 ], [ %222, %._crit_edge233 ]
  %.not162 = icmp eq i32 %.0147.lcssa273, %226
  br i1 %.not162, label %257, label %.preheader

.preheader:                                       ; preds = %225
  br i1 %.not161275, label %._crit_edge238, label %.lr.ph237

.lr.ph237:                                        ; preds = %.preheader
  %227 = getelementptr inbounds i8, ptr %1, i64 24
  br label %233

._crit_edge238:                                   ; preds = %242, %.preheader
  %228 = getelementptr inbounds i8, ptr %1, i64 8
  %229 = load ptr, ptr %228, align 8, !tbaa !49
  %230 = call noundef ptr @_ZNKSt10unique_ptrIA_jSt14default_deleteIS0_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  invoke void @_Z17UpdateMeshIndicesP6aiNodePj(ptr noundef %229, ptr noundef %230)
          to label %245 unwind label %231

231:                                              ; preds = %259, %257, %248, %245, %._crit_edge238, %._crit_edge233.thread
  %232 = landingpad { ptr, i32 }
          cleanup
  br label %261

233:                                              ; preds = %.lr.ph237, %242
  %.0236 = phi i32 [ 0, %.lr.ph237 ], [ %243, %242 ]
  %.0135235 = phi i32 [ 0, %.lr.ph237 ], [ %.1, %242 ]
  %234 = load ptr, ptr %227, align 8, !tbaa !12
  %235 = zext i32 %.0236 to i64
  %236 = getelementptr inbounds ptr, ptr %234, i64 %235
  %237 = load ptr, ptr %236, align 8, !tbaa !13
  %.not163 = icmp eq ptr %237, null
  br i1 %.not163, label %242, label %238

238:                                              ; preds = %233
  %239 = add nuw i32 %.0135235, 1
  %240 = zext i32 %.0135235 to i64
  %241 = getelementptr inbounds ptr, ptr %234, i64 %240
  store ptr %237, ptr %241, align 8, !tbaa !13
  br label %242

242:                                              ; preds = %233, %238
  %.1 = phi i32 [ %239, %238 ], [ %.0135235, %233 ]
  %243 = add i32 %.0236, 1
  %244 = icmp ult i32 %.1, %.0147.lcssa273
  br i1 %244, label %233, label %._crit_edge238, !llvm.loop !50

245:                                              ; preds = %._crit_edge238
  %246 = invoke noundef zeroext i1 @_ZN6Assimp13DefaultLogger12isNullLoggerEv()
          to label %247 unwind label %231

247:                                              ; preds = %245
  br i1 %246, label %256, label %248

248:                                              ; preds = %247
  %249 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %250 unwind label %231

250:                                              ; preds = %248
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #9
  %251 = load i32, ptr %9, align 8, !tbaa !5
  %252 = sub i32 %251, %.0147.lcssa273
  store i32 %252, ptr %7, align 4, !tbaa !43
  invoke void @_ZN6Assimp6Logger4infoIJRA38_KcjRA11_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12) %249, ptr noundef nonnull align 1 dereferenceable(38) @.str.4, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 1 dereferenceable(11) @.str.5)
          to label %253 unwind label %254

253:                                              ; preds = %250
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #9
  br label %256

254:                                              ; preds = %250
  %255 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #9
  br label %261

256:                                              ; preds = %253, %247
  store i32 %.0147.lcssa273, ptr %9, align 8, !tbaa !5
  br label %260

257:                                              ; preds = %225
  %258 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %259 unwind label %231

259:                                              ; preds = %257
  invoke void @_ZN6Assimp6Logger5debugEPKc(ptr noundef nonnull align 8 dereferenceable(12) %258, ptr noundef nonnull @.str.6)
          to label %260 unwind label %231

260:                                              ; preds = %259, %256
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #9
  call void @_ZNSt10unique_ptrIA_mSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #9
  br label %263

261:                                              ; preds = %48, %91, %124, %139, %208, %50, %254, %231
  %.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %255, %254 ], [ %232, %231 ], [ %49, %48 ], [ %51, %50 ], [ %.pn, %208 ], [ %92, %91 ], [ %140, %139 ], [ %125, %124 ]
  call void @_ZNSt10unique_ptrIA_jSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  br label %262

262:                                              ; preds = %261, %23
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn, %261 ], [ %24, %23 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #9
  call void @_ZNSt10unique_ptrIA_mSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %3) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #9
  resume { ptr, i32 } %.pn.pn.pn.pn.pn.pn

263:                                              ; preds = %260, %2
  ret void
}

declare noundef ptr @_ZN6Assimp13DefaultLogger3getEv() local_unnamed_addr #2

declare void @_ZN6Assimp6Logger5debugEPKc(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef) local_unnamed_addr #2

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

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i64 @_ZN6Assimp11GetMeshHashEP6aiMesh(ptr noundef) local_unnamed_addr #5

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

declare noundef float @_ZN6Assimp22ComputePositionEpsilonEPK6aiMesh(ptr noundef) local_unnamed_addr #2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK10aiVector3tIfES3_jf(ptr noundef, ptr noundef, i32 noundef, float noundef) local_unnamed_addr #6

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN6Assimp13CompareArraysEPK9aiColor4tIfES3_jf(ptr noundef, ptr noundef, i32 noundef, float noundef) local_unnamed_addr #5

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

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

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

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

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

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

declare noundef zeroext i1 @_ZN6Assimp13DefaultLogger12isNullLoggerEv() local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp6Logger4infoIJRA38_KcjRA11_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(38), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(11)) local_unnamed_addr #0 align 2

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

; Function Attrs: nofree nounwind willreturn memory(argmem: read)
declare i32 @bcmp(ptr nocapture, ptr nocapture, i64) local_unnamed_addr #8

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 16}
!6 = !{!"_ZTS7aiScene", !7, i64 0, !10, i64 8, !7, i64 16, !10, i64 24, !7, i64 32, !10, i64 40, !7, i64 48, !10, i64 56, !7, i64 64, !10, i64 72, !7, i64 80, !10, i64 88, !7, i64 96, !10, i64 104, !10, i64 112, !11, i64 120, !7, i64 1148, !10, i64 1152, !10, i64 1160}
!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 = !{!6, !10, i64 24}
!13 = !{!10, !10, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"long", !8, i64 0}
!16 = !{!17, !7, i64 216}
!17 = !{!"_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, !18, i64 1280, !19, i64 1284, !10, i64 1312}
!18 = !{!"_ZTS16aiMorphingMethod", !8, i64 0}
!19 = !{!"_ZTS6aiAABB", !20, i64 0, !20, i64 12}
!20 = !{!"_ZTS10aiVector3tIfE", !21, i64 0, !21, i64 4, !21, i64 8}
!21 = !{!"float", !8, i64 0}
!22 = !{!17, !7, i64 8}
!23 = !{!17, !7, i64 4}
!24 = !{!17, !7, i64 232}
!25 = !{!17, !7, i64 0}
!26 = !{!17, !10, i64 16}
!27 = !{!17, !10, i64 24}
!28 = !{!17, !10, i64 32}
!29 = !{!17, !10, i64 40}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = !{!34, !36, i64 24}
!34 = !{!"_ZTSN6Assimp20FindInstancesProcessE", !35, i64 0, !36, i64 24}
!35 = !{!"_ZTSN6Assimp11BaseProcessE", !10, i64 8, !10, i64 16}
!36 = !{!"bool", !8, i64 0}
!37 = !{i8 0, i8 2}
!38 = !{}
!39 = !{!17, !10, i64 208}
!40 = !{!41, !7, i64 0}
!41 = !{!"_ZTS6aiFace", !7, i64 0, !10, i64 8}
!42 = !{!41, !10, i64 8}
!43 = !{!7, !7, i64 0}
!44 = distinct !{!44, !31}
!45 = distinct !{!45, !31}
!46 = distinct !{!46, !31}
!47 = distinct !{!47, !31}
!48 = distinct !{!48, !31}
!49 = !{!6, !10, i64 8}
!50 = distinct !{!50, !31}


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