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

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

%"class.std::vector.0" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"class.std::allocator.4" = type { i8 }
%"class.std::vector.24" = type { %"struct.std::_Vector_base.25" }
%"struct.std::_Vector_base.25" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.26" = type { i8 }
%"struct.std::_Bit_reference" = type { ptr, i64 }
%"struct.std::pair" = type { ptr, ptr }
%struct.aiMesh = type { i32, i32, i32, ptr, ptr, ptr, ptr, [8 x ptr], [8 x ptr], [8 x i32], ptr, i32, ptr, i32, %struct.aiString, i32, ptr, i32, %struct.aiAABB, ptr }
%struct.aiString = type { i32, [1024 x i8] }
%struct.aiAABB = type { %class.aiVector3t, %class.aiVector3t }
%class.aiVector3t = type { float, float, float }
%struct.aiBone = type { %struct.aiString, i32, ptr, ptr, ptr, %class.aiMatrix4x4t }
%class.aiMatrix4x4t = type { float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }
%struct.aiVertexWeight = type { i32, float }
%"class.Assimp::DeboneProcess" = type { %"class.Assimp::BaseProcess", i32, i32, float, i8, %"class.std::vector" }
%"class.Assimp::BaseProcess" = type { ptr, ptr, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<std::vector<std::pair<unsigned int, aiNode *>>, std::allocator<std::vector<std::pair<unsigned int, aiNode *>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<std::pair<unsigned int, aiNode *>>, std::allocator<std::vector<std::pair<unsigned int, aiNode *>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<std::pair<unsigned int, aiNode *>>, std::allocator<std::vector<std::pair<unsigned int, aiNode *>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<std::pair<unsigned int, aiNode *>>, std::allocator<std::vector<std::pair<unsigned int, aiNode *>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.aiFace = type { i32, ptr }

@.str.6 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [122 x i8], align 1

declare noundef ptr @_ZN6Assimp13DefaultLogger3getEv() #0

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

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

declare i32 @__gxx_personality_v0(...)

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

; 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 { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) #3 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK6Assimp13DeboneProcess9SplitMeshEPK6aiMeshRSt6vectorISt4pairIPS1_PK6aiBoneESaISA_EE(ptr noundef nonnull align 8 dereferenceable(64) %0, ptr noundef %1, ptr noundef nonnull align 8 dereferenceable(24) %2) #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %"class.std::vector.0", align 8
  %8 = alloca i8, align 1
  %9 = alloca %"class.std::allocator.4", align 1
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca %"class.std::vector.24", align 8
  %13 = alloca i32, align 4
  %14 = alloca %"class.std::allocator.26", align 1
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca float, align 4
  %21 = alloca i32, align 4
  %22 = alloca %"struct.std::_Bit_reference", align 8
  %23 = alloca %"struct.std::_Bit_reference", align 8
  %24 = alloca i32, align 4
  %25 = alloca %"class.std::vector.24", align 8
  %26 = alloca i32, align 4
  %27 = alloca %"class.std::allocator.26", align 1
  %28 = alloca %"class.std::vector.24", align 8
  %29 = alloca i32, align 4
  %30 = alloca %"class.std::allocator.26", align 1
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca %"struct.std::_Bit_reference", align 8
  %37 = alloca %"struct.std::_Bit_reference", align 8
  %38 = alloca i32, align 4
  %39 = alloca %"struct.std::_Bit_reference", align 8
  %40 = alloca %"class.std::vector.24", align 8
  %41 = alloca i32, align 4
  %42 = alloca ptr, align 8
  %43 = alloca %"struct.std::pair", align 8
  %44 = alloca ptr, align 8
  %45 = alloca i32, align 4
  %46 = alloca %"struct.std::_Bit_reference", align 8
  %47 = alloca %"class.std::vector.24", align 8
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca ptr, align 8
  %51 = alloca %"struct.std::pair", align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %52 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr %7) #5
  %53 = load ptr, ptr %5, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.aiMesh, ptr %53, i32 0, i32 11
  %55 = load i32, ptr %54, align 8, !tbaa !9
  %56 = zext i32 %55 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #5
  store i8 0, ptr %8, align 1, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #5
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %7, i64 noundef %56, ptr noundef nonnull align 1 dereferenceable(1) %8, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %57 unwind label %70

57:                                               ; preds = %3
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #5
  %58 = load ptr, ptr %5, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.aiMesh, ptr %58, i32 0, i32 1
  %60 = load i32, ptr %59, align 4, !tbaa !19
  %61 = zext i32 %60 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  store i32 -1, ptr %13, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #5
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #5
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %61, ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %62 unwind label %74

62:                                               ; preds = %57
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  store i32 -1, ptr %15, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  store i32 -2, ptr %16, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 0, ptr %17, align 4, !tbaa !20
  br label %63

63:                                               ; preds = %203, %62
  %64 = load i32, ptr %17, align 4, !tbaa !20
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.aiMesh, ptr %65, i32 0, i32 11
  %67 = load i32, ptr %66, align 8, !tbaa !9
  %68 = icmp ult i32 %64, %67
  br i1 %68, label %78, label %69

69:                                               ; preds = %63
  store i32 2, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  br label %206

70:                                               ; preds = %3
  %71 = landingpad { ptr, i32 }
          cleanup
  %72 = extractvalue { ptr, i32 } %71, 0
  store ptr %72, ptr %10, align 8
  %73 = extractvalue { ptr, i32 } %71, 1
  store i32 %73, ptr %11, align 4
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #5
  br label %580

74:                                               ; preds = %57
  %75 = landingpad { ptr, i32 }
          cleanup
  %76 = extractvalue { ptr, i32 } %75, 0
  store ptr %76, ptr %10, align 8
  %77 = extractvalue { ptr, i32 } %75, 1
  store i32 %77, ptr %11, align 4
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  br label %579

78:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  store i32 0, ptr %19, align 4, !tbaa !20
  br label %79

79:                                               ; preds = %198, %78
  %80 = load i32, ptr %19, align 4, !tbaa !20
  %81 = load ptr, ptr %5, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.aiMesh, ptr %81, i32 0, i32 12
  %83 = load ptr, ptr %82, align 8, !tbaa !21
  %84 = load i32, ptr %17, align 4, !tbaa !20
  %85 = zext i32 %84 to i64
  %86 = getelementptr inbounds ptr, ptr %83, i64 %85
  %87 = load ptr, ptr %86, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.aiBone, ptr %87, i32 0, i32 1
  %89 = load i32, ptr %88, align 4, !tbaa !22
  %90 = icmp ult i32 %80, %89
  br i1 %90, label %92, label %91

91:                                               ; preds = %79
  store i32 5, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  br label %202

92:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %93 = load ptr, ptr %5, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.aiMesh, ptr %93, i32 0, i32 12
  %95 = load ptr, ptr %94, align 8, !tbaa !21
  %96 = load i32, ptr %17, align 4, !tbaa !20
  %97 = zext i32 %96 to i64
  %98 = getelementptr inbounds ptr, ptr %95, i64 %97
  %99 = load ptr, ptr %98, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.aiBone, ptr %99, i32 0, i32 4
  %101 = load ptr, ptr %100, align 8, !tbaa !25
  %102 = load i32, ptr %19, align 4, !tbaa !20
  %103 = zext i32 %102 to i64
  %104 = getelementptr inbounds %struct.aiVertexWeight, ptr %101, i64 %103
  %105 = getelementptr inbounds %struct.aiVertexWeight, ptr %104, i32 0, i32 1
  %106 = load float, ptr %105, align 4, !tbaa !26
  store float %106, ptr %20, align 4, !tbaa !28
  %107 = load float, ptr %20, align 4, !tbaa !28
  %108 = fcmp oeq float %107, 0.000000e+00
  br i1 %108, label %109, label %110

109:                                              ; preds = %92
  store i32 7, ptr %18, align 4
  br label %195

110:                                              ; preds = %92
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  %111 = load ptr, ptr %5, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.aiMesh, ptr %111, i32 0, i32 12
  %113 = load ptr, ptr %112, align 8, !tbaa !21
  %114 = load i32, ptr %17, align 4, !tbaa !20
  %115 = zext i32 %114 to i64
  %116 = getelementptr inbounds ptr, ptr %113, i64 %115
  %117 = load ptr, ptr %116, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.aiBone, ptr %117, i32 0, i32 4
  %119 = load ptr, ptr %118, align 8, !tbaa !25
  %120 = load i32, ptr %19, align 4, !tbaa !20
  %121 = zext i32 %120 to i64
  %122 = getelementptr inbounds %struct.aiVertexWeight, ptr %119, i64 %121
  %123 = getelementptr inbounds %struct.aiVertexWeight, ptr %122, i32 0, i32 0
  %124 = load i32, ptr %123, align 4, !tbaa !29
  store i32 %124, ptr %21, align 4, !tbaa !20
  %125 = load float, ptr %20, align 4, !tbaa !28
  %126 = getelementptr inbounds %"class.Assimp::DeboneProcess", ptr %52, i32 0, i32 3
  %127 = load float, ptr %126, align 8, !tbaa !30
  %128 = fcmp oge float %125, %127
  br i1 %128, label %129, label %161

129:                                              ; preds = %110
  %130 = load i32, ptr %21, align 4, !tbaa !20
  %131 = zext i32 %130 to i64
  %132 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %131) #5
  %133 = load i32, ptr %132, align 4, !tbaa !20
  %134 = icmp ne i32 %133, -1
  br i1 %134, label %135, label %155

135:                                              ; preds = %129
  %136 = load i32, ptr %21, align 4, !tbaa !20
  %137 = zext i32 %136 to i64
  %138 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %137) #5
  %139 = load i32, ptr %138, align 4, !tbaa !20
  %140 = load i32, ptr %17, align 4, !tbaa !20
  %141 = icmp eq i32 %139, %140
  br i1 %141, label %142, label %150

142:                                              ; preds = %135
  %143 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %144 unwind label %146

144:                                              ; preds = %142
  invoke void @_ZN6Assimp6Logger4warnEPKc(ptr noundef nonnull align 8 dereferenceable(12) %143, ptr noundef @.str.6)
          to label %145 unwind label %146

145:                                              ; preds = %144
  br label %154

146:                                              ; preds = %144, %142
  %147 = landingpad { ptr, i32 }
          cleanup
  %148 = extractvalue { ptr, i32 } %147, 0
  store ptr %148, ptr %10, align 8
  %149 = extractvalue { ptr, i32 } %147, 1
  store i32 %149, ptr %11, align 4
  br label %201

150:                                              ; preds = %135
  %151 = load i32, ptr %21, align 4, !tbaa !20
  %152 = zext i32 %151 to i64
  %153 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %152) #5
  store i32 -2, ptr %153, align 4, !tbaa !20
  br label %154

154:                                              ; preds = %150, %145
  br label %160

155:                                              ; preds = %129
  %156 = load i32, ptr %17, align 4, !tbaa !20
  %157 = load i32, ptr %21, align 4, !tbaa !20
  %158 = zext i32 %157 to i64
  %159 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %158) #5
  store i32 %156, ptr %159, align 4, !tbaa !20
  br label %160

160:                                              ; preds = %155, %154
  br label %161

161:                                              ; preds = %160, %110
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #5
  %162 = load i32, ptr %17, align 4, !tbaa !20
  %163 = zext i32 %162 to i64
  %164 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %7, i64 noundef %163)
          to label %165 unwind label %186

165:                                              ; preds = %161
  %166 = getelementptr inbounds { ptr, i64 }, ptr %22, i32 0, i32 0
  %167 = extractvalue { ptr, i64 } %164, 0
  store ptr %167, ptr %166, align 8
  %168 = getelementptr inbounds { ptr, i64 }, ptr %22, i32 0, i32 1
  %169 = extractvalue { ptr, i64 } %164, 1
  store i64 %169, ptr %168, align 8
  %170 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %22) #5
  %171 = xor i1 %170, true
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #5
  br i1 %171, label %172, label %194

172:                                              ; preds = %165
  %173 = load float, ptr %20, align 4, !tbaa !28
  %174 = getelementptr inbounds %"class.Assimp::DeboneProcess", ptr %52, i32 0, i32 3
  %175 = load float, ptr %174, align 8, !tbaa !30
  %176 = fcmp olt float %173, %175
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #5
  %177 = load i32, ptr %17, align 4, !tbaa !20
  %178 = zext i32 %177 to i64
  %179 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %7, i64 noundef %178)
          to label %180 unwind label %190

180:                                              ; preds = %172
  %181 = getelementptr inbounds { ptr, i64 }, ptr %23, i32 0, i32 0
  %182 = extractvalue { ptr, i64 } %179, 0
  store ptr %182, ptr %181, align 8
  %183 = getelementptr inbounds { ptr, i64 }, ptr %23, i32 0, i32 1
  %184 = extractvalue { ptr, i64 } %179, 1
  store i64 %184, ptr %183, align 8
  %185 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %23, i1 noundef zeroext %176) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #5
  br label %194

186:                                              ; preds = %161
  %187 = landingpad { ptr, i32 }
          cleanup
  %188 = extractvalue { ptr, i32 } %187, 0
  store ptr %188, ptr %10, align 8
  %189 = extractvalue { ptr, i32 } %187, 1
  store i32 %189, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #5
  br label %201

190:                                              ; preds = %172
  %191 = landingpad { ptr, i32 }
          cleanup
  %192 = extractvalue { ptr, i32 } %191, 0
  store ptr %192, ptr %10, align 8
  %193 = extractvalue { ptr, i32 } %191, 1
  store i32 %193, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #5
  br label %201

194:                                              ; preds = %180, %165
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  store i32 0, ptr %18, align 4
  br label %195

195:                                              ; preds = %194, %109
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  %196 = load i32, ptr %18, align 4
  switch i32 %196, label %586 [
    i32 0, label %197
    i32 7, label %198
  ]

197:                                              ; preds = %195
  br label %198

198:                                              ; preds = %197, %195
  %199 = load i32, ptr %19, align 4, !tbaa !20
  %200 = add i32 %199, 1
  store i32 %200, ptr %19, align 4, !tbaa !20
  br label %79, !llvm.loop !37

201:                                              ; preds = %190, %186, %146
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  br label %578

202:                                              ; preds = %91
  br label %203

203:                                              ; preds = %202
  %204 = load i32, ptr %17, align 4, !tbaa !20
  %205 = add i32 %204, 1
  store i32 %205, ptr %17, align 4, !tbaa !20
  br label %63, !llvm.loop !39

206:                                              ; preds = %69
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  store i32 0, ptr %24, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 24, ptr %25) #5
  %207 = load ptr, ptr %5, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.aiMesh, ptr %207, i32 0, i32 2
  %209 = load i32, ptr %208, align 8, !tbaa !40
  %210 = zext i32 %209 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  store i32 -1, ptr %26, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #5
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #5
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %210, ptr noundef nonnull align 4 dereferenceable(4) %26, ptr noundef nonnull align 1 dereferenceable(1) %27)
          to label %211 unwind label %224

211:                                              ; preds = %206
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %28) #5
  %212 = load ptr, ptr %5, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.aiMesh, ptr %212, i32 0, i32 11
  %214 = load i32, ptr %213, align 8, !tbaa !9
  %215 = zext i32 %214 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  store i32 0, ptr %29, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #5
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %215, ptr noundef nonnull align 4 dereferenceable(4) %29, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %216 unwind label %228

216:                                              ; preds = %211
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  store i32 0, ptr %31, align 4, !tbaa !20
  br label %217

217:                                              ; preds = %357, %216
  %218 = load i32, ptr %31, align 4, !tbaa !20
  %219 = load ptr, ptr %5, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.aiMesh, ptr %219, i32 0, i32 2
  %221 = load i32, ptr %220, align 8, !tbaa !40
  %222 = icmp ult i32 %218, %221
  br i1 %222, label %232, label %223

223:                                              ; preds = %217
  store i32 8, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  br label %360

224:                                              ; preds = %206
  %225 = landingpad { ptr, i32 }
          cleanup
  %226 = extractvalue { ptr, i32 } %225, 0
  store ptr %226, ptr %10, align 8
  %227 = extractvalue { ptr, i32 } %225, 1
  store i32 %227, ptr %11, align 4
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  br label %577

228:                                              ; preds = %211
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %10, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %11, align 4
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  br label %576

232:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  store i32 1, ptr %32, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %233 = load ptr, ptr %5, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.aiMesh, ptr %233, i32 0, i32 10
  %235 = load ptr, ptr %234, align 8, !tbaa !41
  %236 = load i32, ptr %31, align 4, !tbaa !20
  %237 = zext i32 %236 to i64
  %238 = getelementptr inbounds %struct.aiFace, ptr %235, i64 %237
  %239 = getelementptr inbounds %struct.aiFace, ptr %238, i32 0, i32 1
  %240 = load ptr, ptr %239, align 8, !tbaa !42
  %241 = getelementptr inbounds i32, ptr %240, i64 0
  %242 = load i32, ptr %241, align 4, !tbaa !20
  %243 = zext i32 %242 to i64
  %244 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %243) #5
  %245 = load i32, ptr %244, align 4, !tbaa !20
  store i32 %245, ptr %33, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  store i32 1, ptr %34, align 4, !tbaa !20
  br label %246

246:                                              ; preds = %322, %232
  %247 = load i32, ptr %34, align 4, !tbaa !20
  %248 = load ptr, ptr %5, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.aiMesh, ptr %248, i32 0, i32 10
  %250 = load ptr, ptr %249, align 8, !tbaa !41
  %251 = load i32, ptr %31, align 4, !tbaa !20
  %252 = zext i32 %251 to i64
  %253 = getelementptr inbounds %struct.aiFace, ptr %250, i64 %252
  %254 = getelementptr inbounds %struct.aiFace, ptr %253, i32 0, i32 0
  %255 = load i32, ptr %254, align 8, !tbaa !44
  %256 = icmp ult i32 %247, %255
  br i1 %256, label %258, label %257

257:                                              ; preds = %246
  store i32 11, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  br label %326

258:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %259 = load ptr, ptr %5, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.aiMesh, ptr %259, i32 0, i32 10
  %261 = load ptr, ptr %260, align 8, !tbaa !41
  %262 = load i32, ptr %31, align 4, !tbaa !20
  %263 = zext i32 %262 to i64
  %264 = getelementptr inbounds %struct.aiFace, ptr %261, i64 %263
  %265 = getelementptr inbounds %struct.aiFace, ptr %264, i32 0, i32 1
  %266 = load ptr, ptr %265, align 8, !tbaa !42
  %267 = load i32, ptr %34, align 4, !tbaa !20
  %268 = zext i32 %267 to i64
  %269 = getelementptr inbounds i32, ptr %266, i64 %268
  %270 = load i32, ptr %269, align 4, !tbaa !20
  %271 = zext i32 %270 to i64
  %272 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %271) #5
  %273 = load i32, ptr %272, align 4, !tbaa !20
  store i32 %273, ptr %35, align 4, !tbaa !20
  %274 = load i32, ptr %33, align 4, !tbaa !20
  %275 = load i32, ptr %35, align 4, !tbaa !20
  %276 = icmp ne i32 %274, %275
  br i1 %276, label %277, label %318

277:                                              ; preds = %258
  %278 = load i32, ptr %33, align 4, !tbaa !20
  %279 = load ptr, ptr %5, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.aiMesh, ptr %279, i32 0, i32 11
  %281 = load i32, ptr %280, align 8, !tbaa !9
  %282 = icmp ult i32 %278, %281
  br i1 %282, label %283, label %297

283:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #5
  %284 = load i32, ptr %33, align 4, !tbaa !20
  %285 = zext i32 %284 to i64
  %286 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %7, i64 noundef %285)
          to label %287 unwind label %293

287:                                              ; preds = %283
  %288 = getelementptr inbounds { ptr, i64 }, ptr %36, i32 0, i32 0
  %289 = extractvalue { ptr, i64 } %286, 0
  store ptr %289, ptr %288, align 8
  %290 = getelementptr inbounds { ptr, i64 }, ptr %36, i32 0, i32 1
  %291 = extractvalue { ptr, i64 } %286, 1
  store i64 %291, ptr %290, align 8
  %292 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %36, i1 noundef zeroext true) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #5
  br label %297

293:                                              ; preds = %283
  %294 = landingpad { ptr, i32 }
          cleanup
  %295 = extractvalue { ptr, i32 } %294, 0
  store ptr %295, ptr %10, align 8
  %296 = extractvalue { ptr, i32 } %294, 1
  store i32 %296, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #5
  br label %325

297:                                              ; preds = %287, %277
  %298 = load i32, ptr %35, align 4, !tbaa !20
  %299 = load ptr, ptr %5, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.aiMesh, ptr %299, i32 0, i32 11
  %301 = load i32, ptr %300, align 8, !tbaa !9
  %302 = icmp ult i32 %298, %301
  br i1 %302, label %303, label %317

303:                                              ; preds = %297
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #5
  %304 = load i32, ptr %35, align 4, !tbaa !20
  %305 = zext i32 %304 to i64
  %306 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %7, i64 noundef %305)
          to label %307 unwind label %313

307:                                              ; preds = %303
  %308 = getelementptr inbounds { ptr, i64 }, ptr %37, i32 0, i32 0
  %309 = extractvalue { ptr, i64 } %306, 0
  store ptr %309, ptr %308, align 8
  %310 = getelementptr inbounds { ptr, i64 }, ptr %37, i32 0, i32 1
  %311 = extractvalue { ptr, i64 } %306, 1
  store i64 %311, ptr %310, align 8
  %312 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %37, i1 noundef zeroext true) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #5
  br label %317

313:                                              ; preds = %303
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %10, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #5
  br label %325

317:                                              ; preds = %307, %297
  br label %321

318:                                              ; preds = %258
  %319 = load i32, ptr %32, align 4, !tbaa !20
  %320 = add i32 %319, 1
  store i32 %320, ptr %32, align 4, !tbaa !20
  br label %321

321:                                              ; preds = %318, %317
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  br label %322

322:                                              ; preds = %321
  %323 = load i32, ptr %34, align 4, !tbaa !20
  %324 = add i32 %323, 1
  store i32 %324, ptr %34, align 4, !tbaa !20
  br label %246, !llvm.loop !45

325:                                              ; preds = %313, %293
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  br label %575

326:                                              ; preds = %257
  %327 = load i32, ptr %33, align 4, !tbaa !20
  %328 = load ptr, ptr %5, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.aiMesh, ptr %328, i32 0, i32 11
  %330 = load i32, ptr %329, align 8, !tbaa !9
  %331 = icmp ult i32 %327, %330
  br i1 %331, label %332, label %353

332:                                              ; preds = %326
  %333 = load i32, ptr %32, align 4, !tbaa !20
  %334 = load ptr, ptr %5, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.aiMesh, ptr %334, i32 0, i32 10
  %336 = load ptr, ptr %335, align 8, !tbaa !41
  %337 = load i32, ptr %31, align 4, !tbaa !20
  %338 = zext i32 %337 to i64
  %339 = getelementptr inbounds %struct.aiFace, ptr %336, i64 %338
  %340 = getelementptr inbounds %struct.aiFace, ptr %339, i32 0, i32 0
  %341 = load i32, ptr %340, align 8, !tbaa !44
  %342 = icmp eq i32 %333, %341
  br i1 %342, label %343, label %353

343:                                              ; preds = %332
  %344 = load i32, ptr %33, align 4, !tbaa !20
  %345 = load i32, ptr %31, align 4, !tbaa !20
  %346 = zext i32 %345 to i64
  %347 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %346) #5
  store i32 %344, ptr %347, align 4, !tbaa !20
  %348 = load i32, ptr %33, align 4, !tbaa !20
  %349 = zext i32 %348 to i64
  %350 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %349) #5
  %351 = load i32, ptr %350, align 4, !tbaa !20
  %352 = add i32 %351, 1
  store i32 %352, ptr %350, align 4, !tbaa !20
  br label %356

353:                                              ; preds = %332, %326
  %354 = load i32, ptr %24, align 4, !tbaa !20
  %355 = add i32 %354, 1
  store i32 %355, ptr %24, align 4, !tbaa !20
  br label %356

356:                                              ; preds = %353, %343
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  br label %357

357:                                              ; preds = %356
  %358 = load i32, ptr %31, align 4, !tbaa !20
  %359 = add i32 %358, 1
  store i32 %359, ptr %31, align 4, !tbaa !20
  br label %217, !llvm.loop !46

360:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  store i32 0, ptr %38, align 4, !tbaa !20
  br label %361

361:                                              ; preds = %427, %360
  %362 = load i32, ptr %38, align 4, !tbaa !20
  %363 = load ptr, ptr %5, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.aiMesh, ptr %363, i32 0, i32 2
  %365 = load i32, ptr %364, align 8, !tbaa !40
  %366 = icmp ult i32 %362, %365
  br i1 %366, label %368, label %367

367:                                              ; preds = %361
  store i32 14, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  br label %431

368:                                              ; preds = %361
  %369 = load i32, ptr %38, align 4, !tbaa !20
  %370 = zext i32 %369 to i64
  %371 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %370) #5
  %372 = load i32, ptr %371, align 4, !tbaa !20
  %373 = load ptr, ptr %5, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.aiMesh, ptr %373, i32 0, i32 11
  %375 = load i32, ptr %374, align 8, !tbaa !9
  %376 = icmp ult i32 %372, %375
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #5
  br i1 %376, label %377, label %390

377:                                              ; preds = %368
  %378 = load i32, ptr %38, align 4, !tbaa !20
  %379 = zext i32 %378 to i64
  %380 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %379) #5
  %381 = load i32, ptr %380, align 4, !tbaa !20
  %382 = zext i32 %381 to i64
  %383 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %7, i64 noundef %382)
          to label %384 unwind label %418

384:                                              ; preds = %377
  %385 = getelementptr inbounds { ptr, i64 }, ptr %39, i32 0, i32 0
  %386 = extractvalue { ptr, i64 } %383, 0
  store ptr %386, ptr %385, align 8
  %387 = getelementptr inbounds { ptr, i64 }, ptr %39, i32 0, i32 1
  %388 = extractvalue { ptr, i64 } %383, 1
  store i64 %388, ptr %387, align 8
  %389 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %39) #5
  br label %390

390:                                              ; preds = %384, %368
  %391 = phi i1 [ false, %368 ], [ %389, %384 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #5
  br i1 %391, label %392, label %426

392:                                              ; preds = %390
  %393 = load i32, ptr %38, align 4, !tbaa !20
  %394 = zext i32 %393 to i64
  %395 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %394) #5
  %396 = load i32, ptr %395, align 4, !tbaa !20
  %397 = zext i32 %396 to i64
  %398 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %397) #5
  %399 = load i32, ptr %398, align 4, !tbaa !20
  %400 = icmp ugt i32 %399, 0
  br i1 %400, label %403, label %401

401:                                              ; preds = %392
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.7, ptr noundef @.str.8, i32 noundef 304)
          to label %402 unwind label %422

402:                                              ; preds = %401
  br label %403

403:                                              ; preds = %402, %392
  %404 = phi i1 [ true, %392 ], [ false, %402 ]
  %405 = load i32, ptr %38, align 4, !tbaa !20
  %406 = zext i32 %405 to i64
  %407 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %406) #5
  %408 = load i32, ptr %407, align 4, !tbaa !20
  %409 = zext i32 %408 to i64
  %410 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %409) #5
  %411 = load i32, ptr %410, align 4, !tbaa !20
  %412 = add i32 %411, -1
  store i32 %412, ptr %410, align 4, !tbaa !20
  %413 = load i32, ptr %24, align 4, !tbaa !20
  %414 = add i32 %413, 1
  store i32 %414, ptr %24, align 4, !tbaa !20
  %415 = load i32, ptr %38, align 4, !tbaa !20
  %416 = zext i32 %415 to i64
  %417 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %416) #5
  store i32 -1, ptr %417, align 4, !tbaa !20
  br label %426

418:                                              ; preds = %377
  %419 = landingpad { ptr, i32 }
          cleanup
  %420 = extractvalue { ptr, i32 } %419, 0
  store ptr %420, ptr %10, align 8
  %421 = extractvalue { ptr, i32 } %419, 1
  store i32 %421, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #5
  br label %430

422:                                              ; preds = %401
  %423 = landingpad { ptr, i32 }
          cleanup
  %424 = extractvalue { ptr, i32 } %423, 0
  store ptr %424, ptr %10, align 8
  %425 = extractvalue { ptr, i32 } %423, 1
  store i32 %425, ptr %11, align 4
  br label %430

426:                                              ; preds = %403, %390
  br label %427

427:                                              ; preds = %426
  %428 = load i32, ptr %38, align 4, !tbaa !20
  %429 = add i32 %428, 1
  store i32 %429, ptr %38, align 4, !tbaa !20
  br label %361, !llvm.loop !47

430:                                              ; preds = %422, %418
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  br label %575

431:                                              ; preds = %367
  %432 = load i32, ptr %24, align 4, !tbaa !20
  %433 = icmp ne i32 %432, 0
  br i1 %433, label %434, label %480

434:                                              ; preds = %431
  call void @llvm.lifetime.start.p0(i64 24, ptr %40) #5
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  store i32 0, ptr %41, align 4, !tbaa !20
  br label %435

435:                                              ; preds = %455, %434
  %436 = load i32, ptr %41, align 4, !tbaa !20
  %437 = load ptr, ptr %5, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.aiMesh, ptr %437, i32 0, i32 2
  %439 = load i32, ptr %438, align 8, !tbaa !40
  %440 = icmp ult i32 %436, %439
  br i1 %440, label %442, label %441

441:                                              ; preds = %435
  store i32 17, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  br label %458

442:                                              ; preds = %435
  %443 = load i32, ptr %41, align 4, !tbaa !20
  %444 = zext i32 %443 to i64
  %445 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %444) #5
  %446 = load i32, ptr %445, align 4, !tbaa !20
  %447 = icmp eq i32 %446, -1
  br i1 %447, label %448, label %454

448:                                              ; preds = %442
  invoke void @_ZNSt6vectorIjSaIjEE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(24) %40, ptr noundef nonnull align 4 dereferenceable(4) %41)
          to label %449 unwind label %450

449:                                              ; preds = %448
  br label %454

450:                                              ; preds = %448
  %451 = landingpad { ptr, i32 }
          cleanup
  %452 = extractvalue { ptr, i32 } %451, 0
  store ptr %452, ptr %10, align 8
  %453 = extractvalue { ptr, i32 } %451, 1
  store i32 %453, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  br label %479

454:                                              ; preds = %449, %442
  br label %455

455:                                              ; preds = %454
  %456 = load i32, ptr %41, align 4, !tbaa !20
  %457 = add i32 %456, 1
  store i32 %457, ptr %41, align 4, !tbaa !20
  br label %435, !llvm.loop !48

458:                                              ; preds = %441
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  %459 = load ptr, ptr %5, align 8, !tbaa !5
  %460 = invoke noundef ptr @_ZN6Assimp11MakeSubmeshEPK6aiMeshRKSt6vectorIjSaIjEEj(ptr noundef %459, ptr noundef nonnull align 8 dereferenceable(24) %40, i32 noundef 0)
          to label %461 unwind label %465

461:                                              ; preds = %458
  store ptr %460, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #5
  store ptr null, ptr %44, align 8, !tbaa !5
  invoke void @_ZNSt4pairIP6aiMeshPK6aiBoneEC2IRS1_S4_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS9_SA_EEEbE4typeELb1EEEOS9_OSA_(ptr noundef nonnull align 8 dereferenceable(16) %43, ptr noundef nonnull align 8 dereferenceable(8) %42, ptr noundef nonnull align 8 dereferenceable(8) %44)
          to label %462 unwind label %469

462:                                              ; preds = %461
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  %463 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZNSt6vectorISt4pairIP6aiMeshPK6aiBoneESaIS6_EE9push_backERKS6_(ptr noundef nonnull align 8 dereferenceable(24) %463, ptr noundef nonnull align 8 dereferenceable(16) %43)
          to label %464 unwind label %473

464:                                              ; preds = %462
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #5
  br label %480

465:                                              ; preds = %458
  %466 = landingpad { ptr, i32 }
          cleanup
  %467 = extractvalue { ptr, i32 } %466, 0
  store ptr %467, ptr %10, align 8
  %468 = extractvalue { ptr, i32 } %466, 1
  store i32 %468, ptr %11, align 4
  br label %478

469:                                              ; preds = %461
  %470 = landingpad { ptr, i32 }
          cleanup
  %471 = extractvalue { ptr, i32 } %470, 0
  store ptr %471, ptr %10, align 8
  %472 = extractvalue { ptr, i32 } %470, 1
  store i32 %472, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  br label %477

473:                                              ; preds = %462
  %474 = landingpad { ptr, i32 }
          cleanup
  %475 = extractvalue { ptr, i32 } %474, 0
  store ptr %475, ptr %10, align 8
  %476 = extractvalue { ptr, i32 } %474, 1
  store i32 %476, ptr %11, align 4
  br label %477

477:                                              ; preds = %473, %469
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #5
  br label %478

478:                                              ; preds = %477, %465
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  br label %479

479:                                              ; preds = %478, %450
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #5
  br label %575

480:                                              ; preds = %464, %431
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #5
  store i32 0, ptr %45, align 4, !tbaa !20
  br label %481

481:                                              ; preds = %570, %480
  %482 = load i32, ptr %45, align 4, !tbaa !20
  %483 = load ptr, ptr %5, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.aiMesh, ptr %483, i32 0, i32 11
  %485 = load i32, ptr %484, align 8, !tbaa !9
  %486 = icmp ult i32 %482, %485
  br i1 %486, label %488, label %487

487:                                              ; preds = %481
  store i32 20, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  br label %574

488:                                              ; preds = %481
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #5
  %489 = load i32, ptr %45, align 4, !tbaa !20
  %490 = zext i32 %489 to i64
  %491 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %7, i64 noundef %490)
          to label %492 unwind label %514

492:                                              ; preds = %488
  %493 = getelementptr inbounds { ptr, i64 }, ptr %46, i32 0, i32 0
  %494 = extractvalue { ptr, i64 } %491, 0
  store ptr %494, ptr %493, align 8
  %495 = getelementptr inbounds { ptr, i64 }, ptr %46, i32 0, i32 1
  %496 = extractvalue { ptr, i64 } %491, 1
  store i64 %496, ptr %495, align 8
  %497 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %46) #5
  br i1 %497, label %504, label %498

498:                                              ; preds = %492
  %499 = load i32, ptr %45, align 4, !tbaa !20
  %500 = zext i32 %499 to i64
  %501 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %500) #5
  %502 = load i32, ptr %501, align 4, !tbaa !20
  %503 = icmp ugt i32 %502, 0
  br label %504

504:                                              ; preds = %498, %492
  %505 = phi i1 [ false, %492 ], [ %503, %498 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #5
  br i1 %505, label %506, label %569

506:                                              ; preds = %504
  call void @llvm.lifetime.start.p0(i64 24, ptr %47) #5
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #5
  store i32 0, ptr %48, align 4, !tbaa !20
  br label %507

507:                                              ; preds = %532, %506
  %508 = load i32, ptr %48, align 4, !tbaa !20
  %509 = load ptr, ptr %5, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.aiMesh, ptr %509, i32 0, i32 2
  %511 = load i32, ptr %510, align 8, !tbaa !40
  %512 = icmp ult i32 %508, %511
  br i1 %512, label %518, label %513

513:                                              ; preds = %507
  store i32 23, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  br label %535

514:                                              ; preds = %488
  %515 = landingpad { ptr, i32 }
          cleanup
  %516 = extractvalue { ptr, i32 } %515, 0
  store ptr %516, ptr %10, align 8
  %517 = extractvalue { ptr, i32 } %515, 1
  store i32 %517, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #5
  br label %573

518:                                              ; preds = %507
  %519 = load i32, ptr %48, align 4, !tbaa !20
  %520 = zext i32 %519 to i64
  %521 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %520) #5
  %522 = load i32, ptr %521, align 4, !tbaa !20
  %523 = load i32, ptr %45, align 4, !tbaa !20
  %524 = icmp eq i32 %522, %523
  br i1 %524, label %525, label %531

525:                                              ; preds = %518
  invoke void @_ZNSt6vectorIjSaIjEE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 4 dereferenceable(4) %48)
          to label %526 unwind label %527

526:                                              ; preds = %525
  br label %531

527:                                              ; preds = %525
  %528 = landingpad { ptr, i32 }
          cleanup
  %529 = extractvalue { ptr, i32 } %528, 0
  store ptr %529, ptr %10, align 8
  %530 = extractvalue { ptr, i32 } %528, 1
  store i32 %530, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  br label %568

531:                                              ; preds = %526, %518
  br label %532

532:                                              ; preds = %531
  %533 = load i32, ptr %48, align 4, !tbaa !20
  %534 = add i32 %533, 1
  store i32 %534, ptr %48, align 4, !tbaa !20
  br label %507, !llvm.loop !49

535:                                              ; preds = %513
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #5
  store i32 1, ptr %49, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #5
  %536 = load ptr, ptr %5, align 8, !tbaa !5
  %537 = load i32, ptr %49, align 4, !tbaa !20
  %538 = invoke noundef ptr @_ZN6Assimp11MakeSubmeshEPK6aiMeshRKSt6vectorIjSaIjEEj(ptr noundef %536, ptr noundef nonnull align 8 dereferenceable(24) %47, i32 noundef %537)
          to label %539 unwind label %559

539:                                              ; preds = %535
  store ptr %538, ptr %50, align 8, !tbaa !5
  %540 = load ptr, ptr %50, align 8, !tbaa !5
  %541 = load ptr, ptr %5, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.aiMesh, ptr %541, i32 0, i32 12
  %543 = load ptr, ptr %542, align 8, !tbaa !21
  %544 = load i32, ptr %45, align 4, !tbaa !20
  %545 = zext i32 %544 to i64
  %546 = getelementptr inbounds ptr, ptr %543, i64 %545
  %547 = load ptr, ptr %546, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.aiBone, ptr %547, i32 0, i32 5
  invoke void @_ZNK6Assimp13DeboneProcess14ApplyTransformEP6aiMeshRK12aiMatrix4x4tIfE(ptr noundef nonnull align 8 dereferenceable(64) %52, ptr noundef %540, ptr noundef nonnull align 4 dereferenceable(64) %548)
          to label %549 unwind label %559

549:                                              ; preds = %539
  call void @llvm.lifetime.start.p0(i64 16, ptr %51) #5
  %550 = load ptr, ptr %5, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.aiMesh, ptr %550, i32 0, i32 12
  %552 = load ptr, ptr %551, align 8, !tbaa !21
  %553 = load i32, ptr %45, align 4, !tbaa !20
  %554 = zext i32 %553 to i64
  %555 = getelementptr inbounds ptr, ptr %552, i64 %554
  invoke void @_ZNSt4pairIP6aiMeshPK6aiBoneEC2IRS1_RPS2_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISB_SC_EEEbE4typeELb1EEEOSB_OSC_(ptr noundef nonnull align 8 dereferenceable(16) %51, ptr noundef nonnull align 8 dereferenceable(8) %50, ptr noundef nonnull align 8 dereferenceable(8) %555)
          to label %556 unwind label %563

556:                                              ; preds = %549
  %557 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZNSt6vectorISt4pairIP6aiMeshPK6aiBoneESaIS6_EE9push_backERKS6_(ptr noundef nonnull align 8 dereferenceable(24) %557, ptr noundef nonnull align 8 dereferenceable(16) %51)
          to label %558 unwind label %563

558:                                              ; preds = %556
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #5
  br label %569

559:                                              ; preds = %539, %535
  %560 = landingpad { ptr, i32 }
          cleanup
  %561 = extractvalue { ptr, i32 } %560, 0
  store ptr %561, ptr %10, align 8
  %562 = extractvalue { ptr, i32 } %560, 1
  store i32 %562, ptr %11, align 4
  br label %567

563:                                              ; preds = %556, %549
  %564 = landingpad { ptr, i32 }
          cleanup
  %565 = extractvalue { ptr, i32 } %564, 0
  store ptr %565, ptr %10, align 8
  %566 = extractvalue { ptr, i32 } %564, 1
  store i32 %566, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #5
  br label %567

567:                                              ; preds = %563, %559
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #5
  br label %568

568:                                              ; preds = %567, %527
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #5
  br label %573

569:                                              ; preds = %558, %504
  br label %570

570:                                              ; preds = %569
  %571 = load i32, ptr %45, align 4, !tbaa !20
  %572 = add i32 %571, 1
  store i32 %572, ptr %45, align 4, !tbaa !20
  br label %481, !llvm.loop !50

573:                                              ; preds = %568, %514
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  br label %575

574:                                              ; preds = %487
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #5
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %7) #5
  ret void

575:                                              ; preds = %573, %479, %430, %325
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #5
  br label %576

576:                                              ; preds = %575, %228
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #5
  br label %577

577:                                              ; preds = %576, %224
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  br label %578

578:                                              ; preds = %577, %201
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #5
  br label %579

579:                                              ; preds = %578, %74
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #5
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #5
  br label %580

580:                                              ; preds = %579, %70
  call void @llvm.lifetime.end.p0(i64 40, ptr %7) #5
  br label %581

581:                                              ; preds = %580
  %582 = load ptr, ptr %10, align 8
  %583 = load i32, ptr %11, align 4
  %584 = insertvalue { ptr, i32 } poison, ptr %582, 0
  %585 = insertvalue { ptr, i32 } %584, i32 %583, 1
  resume { ptr, i32 } %585

586:                                              ; preds = %195
  unreachable
}

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

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

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

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

declare void @_ZN6Assimp6Logger4warnEPKc(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef) #0

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

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

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

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

declare noundef ptr @_ZN6Assimp11MakeSubmeshEPK6aiMeshRKSt6vectorIjSaIjEEj(ptr noundef, ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) #0

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

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

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

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

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

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

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

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


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

%"class.std::vector.0" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"class.std::allocator.4" = type { i8 }
%"class.std::vector.24" = type { %"struct.std::_Vector_base.25" }
%"struct.std::_Vector_base.25" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.26" = type { i8 }
%"struct.std::_Bit_reference" = type { ptr, i64 }
%"struct.std::pair" = type { ptr, ptr }
%struct.aiVertexWeight = type { i32, float }
%struct.aiFace = type { i32, ptr }

@.str.6 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [122 x i8], align 1

declare noundef ptr @_ZN6Assimp13DefaultLogger3getEv() 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 nounwind uwtable
declare dso_local void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

declare i32 @__gxx_personality_v0(...)

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

; 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 { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) local_unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK6Assimp13DeboneProcess9SplitMeshEPK6aiMeshRSt6vectorISt4pairIPS1_PK6aiBoneESaISA_EE(ptr noundef nonnull align 8 dereferenceable(64) %0, ptr noundef %1, ptr noundef nonnull align 8 dereferenceable(24) %2) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::vector.0", align 8
  %5 = alloca i8, align 1
  %6 = alloca %"class.std::allocator.4", align 1
  %7 = alloca %"class.std::vector.24", align 8
  %8 = alloca i32, align 4
  %9 = alloca %"class.std::allocator.26", align 1
  %10 = alloca %"struct.std::_Bit_reference", align 8
  %11 = alloca %"struct.std::_Bit_reference", align 8
  %12 = alloca %"class.std::vector.24", align 8
  %13 = alloca i32, align 4
  %14 = alloca %"class.std::allocator.26", align 1
  %15 = alloca %"class.std::vector.24", align 8
  %16 = alloca i32, align 4
  %17 = alloca %"class.std::allocator.26", align 1
  %18 = alloca %"struct.std::_Bit_reference", align 8
  %19 = alloca %"struct.std::_Bit_reference", align 8
  %20 = alloca %"struct.std::_Bit_reference", align 8
  %21 = alloca %"class.std::vector.24", align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca %"struct.std::pair", align 8
  %25 = alloca ptr, align 8
  %26 = alloca %"struct.std::_Bit_reference", align 8
  %27 = alloca %"class.std::vector.24", align 8
  %28 = alloca i32, align 4
  %29 = alloca ptr, align 8
  %30 = alloca %"struct.std::pair", align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #5
  %31 = getelementptr inbounds i8, ptr %1, i64 216
  %32 = load i32, ptr %31, align 8, !tbaa !5
  %33 = zext i32 %32 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #5
  store i8 0, ptr %5, align 1, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #5
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #5
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %4, i64 noundef %33, ptr noundef nonnull align 1 dereferenceable(1) %5, ptr noundef nonnull align 1 dereferenceable(1) %6)
          to label %34 unwind label %54

34:                                               ; preds = %3
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #5
  %35 = getelementptr inbounds i8, ptr %1, i64 4
  %36 = load i32, ptr %35, align 4, !tbaa !18
  %37 = zext i32 %36 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #5
  store i32 -1, ptr %8, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #5
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %37, ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %38 unwind label %56

38:                                               ; preds = %34
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #5
  %39 = load i32, ptr %31, align 8, !tbaa !5
  %.not188 = icmp eq i32 %39, 0
  br i1 %.not188, label %._crit_edge159, label %.preheader148.lr.ph

.preheader148.lr.ph:                              ; preds = %38
  %40 = getelementptr inbounds i8, ptr %1, i64 224
  %41 = getelementptr inbounds i8, ptr %0, i64 32
  %42 = getelementptr inbounds i8, ptr %10, i64 8
  %43 = getelementptr inbounds i8, ptr %11, i64 8
  %.pre = load ptr, ptr %40, align 8, !tbaa !20
  br label %.preheader148

.preheader148:                                    ; preds = %.preheader148.lr.ph, %._crit_edge
  %44 = phi i32 [ %39, %.preheader148.lr.ph ], [ %58, %._crit_edge ]
  %45 = phi ptr [ %.pre, %.preheader148.lr.ph ], [ %59, %._crit_edge ]
  %indvars.iv197 = phi i64 [ 0, %.preheader148.lr.ph ], [ %indvars.iv.next198, %._crit_edge ]
  %46 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv197
  %47 = load ptr, ptr %46, align 8, !tbaa !21
  %48 = getelementptr inbounds i8, ptr %47, i64 1028
  %49 = load i32, ptr %48, align 4, !tbaa !22
  %.not189 = icmp eq i32 %49, 0
  br i1 %.not189, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader148
  %50 = trunc nuw i64 %indvars.iv197 to i32
  br label %.lr.ph

._crit_edge159:                                   ; preds = %._crit_edge, %38
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #5
  %51 = getelementptr inbounds i8, ptr %1, i64 8
  %52 = load i32, ptr %51, align 8, !tbaa !25
  %53 = zext i32 %52 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #5
  store i32 -1, ptr %13, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #5
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #5
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %53, ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %116 unwind label %125

54:                                               ; preds = %3
  %55 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #5
  br label %312

56:                                               ; preds = %34
  %57 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #5
  br label %311

._crit_edge.loopexit:                             ; preds = %108
  %.pre212 = load i32, ptr %31, align 8, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader148
  %58 = phi i32 [ %.pre212, %._crit_edge.loopexit ], [ %44, %.preheader148 ]
  %59 = phi ptr [ %109, %._crit_edge.loopexit ], [ %45, %.preheader148 ]
  %indvars.iv.next198 = add nuw nsw i64 %indvars.iv197, 1
  %60 = zext i32 %58 to i64
  %61 = icmp ult i64 %indvars.iv.next198, %60
  br i1 %61, label %.preheader148, label %._crit_edge159, !llvm.loop !26

.lr.ph:                                           ; preds = %.lr.ph.preheader, %108
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %108 ]
  %62 = phi ptr [ %47, %.lr.ph.preheader ], [ %111, %108 ]
  %63 = getelementptr inbounds i8, ptr %62, i64 1048
  %64 = load ptr, ptr %63, align 8, !tbaa !28
  %65 = getelementptr inbounds %struct.aiVertexWeight, ptr %64, i64 %indvars.iv
  %66 = getelementptr inbounds i8, ptr %65, i64 4
  %67 = load float, ptr %66, align 4, !tbaa !29
  %68 = fcmp oeq float %67, 0.000000e+00
  br i1 %68, label %108, label %69

69:                                               ; preds = %.lr.ph
  %70 = load float, ptr %41, align 8, !tbaa !31
  %71 = fcmp ult float %67, %70
  br i1 %71, label %90, label %72

72:                                               ; preds = %69
  %73 = load i32, ptr %65, align 4, !tbaa !38
  %74 = zext i32 %73 to i64
  %75 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %74) #5
  %76 = load i32, ptr %75, align 4, !tbaa !19
  %.not142 = icmp eq i32 %76, -1
  %77 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %74) #5
  br i1 %.not142, label %89, label %78

78:                                               ; preds = %72
  %79 = load i32, ptr %77, align 4, !tbaa !19
  %80 = zext i32 %79 to i64
  %81 = icmp eq i64 %indvars.iv197, %80
  br i1 %81, label %82, label %87

82:                                               ; preds = %78
  %83 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %84 unwind label %85

84:                                               ; preds = %82
  invoke void @_ZN6Assimp6Logger4warnEPKc(ptr noundef nonnull align 8 dereferenceable(12) %83, ptr noundef nonnull @.str.6)
          to label %90 unwind label %85

85:                                               ; preds = %84, %82
  %86 = landingpad { ptr, i32 }
          cleanup
  br label %310

87:                                               ; preds = %78
  %88 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %74) #5
  store i32 -2, ptr %88, align 4, !tbaa !19
  br label %90

89:                                               ; preds = %72
  store i32 %50, ptr %77, align 4, !tbaa !19
  br label %90

90:                                               ; preds = %89, %84, %87, %69
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #5
  %91 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %4, i64 noundef %indvars.iv197)
          to label %92 unwind label %104

92:                                               ; preds = %90
  %93 = extractvalue { ptr, i64 } %91, 0
  store ptr %93, ptr %10, align 8
  %94 = extractvalue { ptr, i64 } %91, 1
  store i64 %94, ptr %42, align 8
  %95 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %10) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #5
  br i1 %95, label %108, label %96

96:                                               ; preds = %92
  %97 = load float, ptr %41, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #5
  %98 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %4, i64 noundef %indvars.iv197)
          to label %99 unwind label %106

99:                                               ; preds = %96
  %100 = fcmp olt float %67, %97
  %101 = extractvalue { ptr, i64 } %98, 0
  store ptr %101, ptr %11, align 8
  %102 = extractvalue { ptr, i64 } %98, 1
  store i64 %102, ptr %43, align 8
  %103 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %11, i1 noundef zeroext %100) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #5
  br label %108

104:                                              ; preds = %90
  %105 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #5
  br label %310

106:                                              ; preds = %96
  %107 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #5
  br label %310

108:                                              ; preds = %92, %99, %.lr.ph
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %109 = load ptr, ptr %40, align 8, !tbaa !20
  %110 = getelementptr inbounds ptr, ptr %109, i64 %indvars.iv197
  %111 = load ptr, ptr %110, align 8, !tbaa !21
  %112 = getelementptr inbounds i8, ptr %111, i64 1028
  %113 = load i32, ptr %112, align 4, !tbaa !22
  %114 = zext i32 %113 to i64
  %115 = icmp ult i64 %indvars.iv.next, %114
  br i1 %115, label %.lr.ph, label %._crit_edge.loopexit, !llvm.loop !39

116:                                              ; preds = %._crit_edge159
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #5
  %117 = load i32, ptr %31, align 8, !tbaa !5
  %118 = zext i32 %117 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #5
  store i32 0, ptr %16, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #5
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #5
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %118, ptr noundef nonnull align 4 dereferenceable(4) %16, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %119 unwind label %127

119:                                              ; preds = %116
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #5
  %120 = load i32, ptr %51, align 8, !tbaa !25
  %.not190 = icmp eq i32 %120, 0
  br i1 %.not190, label %._crit_edge174.thread, label %.lr.ph169

.lr.ph169:                                        ; preds = %119
  %121 = getelementptr inbounds i8, ptr %1, i64 208
  %122 = getelementptr inbounds i8, ptr %18, i64 8
  %123 = getelementptr inbounds i8, ptr %19, i64 8
  br label %129

.preheader:                                       ; preds = %193
  %.not191 = icmp eq i32 %194, 0
  br i1 %.not191, label %._crit_edge174, label %.lr.ph173

.lr.ph173:                                        ; preds = %.preheader
  %124 = getelementptr inbounds i8, ptr %20, i64 8
  br label %197

125:                                              ; preds = %._crit_edge159
  %126 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #5
  br label %309

127:                                              ; preds = %116
  %128 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #5
  br label %308

129:                                              ; preds = %.lr.ph169, %193
  %indvars.iv203 = phi i64 [ 0, %.lr.ph169 ], [ %indvars.iv.next204, %193 ]
  %.0111166 = phi i32 [ 0, %.lr.ph169 ], [ %.1112, %193 ]
  %130 = load ptr, ptr %121, align 8, !tbaa !40
  %131 = getelementptr inbounds %struct.aiFace, ptr %130, i64 %indvars.iv203, i32 1
  %132 = load ptr, ptr %131, align 8, !tbaa !41
  %133 = load i32, ptr %132, align 4, !tbaa !19
  %134 = zext i32 %133 to i64
  %135 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %134) #5
  %136 = load i32, ptr %135, align 4, !tbaa !19
  %137 = load ptr, ptr %121, align 8, !tbaa !40
  %138 = getelementptr inbounds %struct.aiFace, ptr %137, i64 %indvars.iv203
  %139 = load i32, ptr %138, align 8, !tbaa !43
  %140 = icmp ugt i32 %139, 1
  br i1 %140, label %.lr.ph163, label %._crit_edge164

.lr.ph163:                                        ; preds = %129
  %141 = zext i32 %136 to i64
  br label %145

._crit_edge164:                                   ; preds = %179, %129
  %.0108.lcssa = phi i32 [ 1, %129 ], [ %.1109, %179 ]
  %.lcssa = phi i32 [ %139, %129 ], [ %182, %179 ]
  %142 = load i32, ptr %31, align 8, !tbaa !5
  %143 = icmp ult i32 %136, %142
  %144 = icmp eq i32 %.0108.lcssa, %.lcssa
  %or.cond = select i1 %143, i1 %144, i1 false
  br i1 %or.cond, label %185, label %191

145:                                              ; preds = %.lr.ph163, %179
  %indvars.iv200 = phi i64 [ 1, %.lr.ph163 ], [ %indvars.iv.next201, %179 ]
  %146 = phi ptr [ %137, %.lr.ph163 ], [ %180, %179 ]
  %.0108160 = phi i32 [ 1, %.lr.ph163 ], [ %.1109, %179 ]
  %147 = getelementptr inbounds %struct.aiFace, ptr %146, i64 %indvars.iv203, i32 1
  %148 = load ptr, ptr %147, align 8, !tbaa !41
  %149 = getelementptr inbounds i32, ptr %148, i64 %indvars.iv200
  %150 = load i32, ptr %149, align 4, !tbaa !19
  %151 = zext i32 %150 to i64
  %152 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %151) #5
  %153 = load i32, ptr %152, align 4, !tbaa !19
  %.not136 = icmp eq i32 %136, %153
  br i1 %.not136, label %177, label %154

154:                                              ; preds = %145
  %155 = load i32, ptr %31, align 8, !tbaa !5
  %156 = icmp ult i32 %136, %155
  br i1 %156, label %157, label %165

157:                                              ; preds = %154
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #5
  %158 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %4, i64 noundef %141)
          to label %159 unwind label %163

159:                                              ; preds = %157
  %160 = extractvalue { ptr, i64 } %158, 0
  store ptr %160, ptr %18, align 8
  %161 = extractvalue { ptr, i64 } %158, 1
  store i64 %161, ptr %122, align 8
  %162 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %18, i1 noundef zeroext true) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #5
  %.pre213 = load i32, ptr %31, align 8, !tbaa !5
  br label %165

163:                                              ; preds = %157
  %164 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #5
  br label %307

165:                                              ; preds = %159, %154
  %166 = phi i32 [ %.pre213, %159 ], [ %155, %154 ]
  %167 = icmp ult i32 %153, %166
  br i1 %167, label %168, label %179

168:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #5
  %169 = zext i32 %153 to i64
  %170 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %4, i64 noundef %169)
          to label %171 unwind label %175

171:                                              ; preds = %168
  %172 = extractvalue { ptr, i64 } %170, 0
  store ptr %172, ptr %19, align 8
  %173 = extractvalue { ptr, i64 } %170, 1
  store i64 %173, ptr %123, align 8
  %174 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %19, i1 noundef zeroext true) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #5
  br label %179

175:                                              ; preds = %168
  %176 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #5
  br label %307

177:                                              ; preds = %145
  %178 = add i32 %.0108160, 1
  br label %179

179:                                              ; preds = %165, %171, %177
  %.1109 = phi i32 [ %.0108160, %171 ], [ %.0108160, %165 ], [ %178, %177 ]
  %indvars.iv.next201 = add nuw nsw i64 %indvars.iv200, 1
  %180 = load ptr, ptr %121, align 8, !tbaa !40
  %181 = getelementptr inbounds %struct.aiFace, ptr %180, i64 %indvars.iv203
  %182 = load i32, ptr %181, align 8, !tbaa !43
  %183 = zext i32 %182 to i64
  %184 = icmp ult i64 %indvars.iv.next201, %183
  br i1 %184, label %145, label %._crit_edge164, !llvm.loop !44

185:                                              ; preds = %._crit_edge164
  %186 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %indvars.iv203) #5
  store i32 %136, ptr %186, align 4, !tbaa !19
  %187 = zext i32 %136 to i64
  %188 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %187) #5
  %189 = load i32, ptr %188, align 4, !tbaa !19
  %190 = add i32 %189, 1
  store i32 %190, ptr %188, align 4, !tbaa !19
  br label %193

191:                                              ; preds = %._crit_edge164
  %192 = add i32 %.0111166, 1
  br label %193

193:                                              ; preds = %191, %185
  %.1112 = phi i32 [ %.0111166, %185 ], [ %192, %191 ]
  %indvars.iv.next204 = add nuw nsw i64 %indvars.iv203, 1
  %194 = load i32, ptr %51, align 8, !tbaa !25
  %195 = zext i32 %194 to i64
  %196 = icmp ult i64 %indvars.iv.next204, %195
  br i1 %196, label %129, label %.preheader, !llvm.loop !45

._crit_edge174:                                   ; preds = %231, %.preheader
  %.2113.lcssa = phi i32 [ %.1112, %.preheader ], [ %.3114, %231 ]
  %.not = icmp eq i32 %.2113.lcssa, 0
  br i1 %.not, label %._crit_edge174.thread, label %235

197:                                              ; preds = %.lr.ph173, %231
  %indvars.iv206 = phi i64 [ 0, %.lr.ph173 ], [ %indvars.iv.next207, %231 ]
  %.2113171 = phi i32 [ %.1112, %.lr.ph173 ], [ %.3114, %231 ]
  %198 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %indvars.iv206) #5
  %199 = load i32, ptr %198, align 4, !tbaa !19
  %200 = load i32, ptr %31, align 8, !tbaa !5
  %201 = icmp ult i32 %199, %200
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #5
  br i1 %201, label %202, label %.critedge

202:                                              ; preds = %197
  %203 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %indvars.iv206) #5
  %204 = load i32, ptr %203, align 4, !tbaa !19
  %205 = zext i32 %204 to i64
  %206 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %4, i64 noundef %205)
          to label %207 unwind label %227

207:                                              ; preds = %202
  %208 = extractvalue { ptr, i64 } %206, 0
  store ptr %208, ptr %20, align 8
  %209 = extractvalue { ptr, i64 } %206, 1
  store i64 %209, ptr %124, align 8
  %210 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %20) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #5
  br i1 %210, label %211, label %231

211:                                              ; preds = %207
  %212 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %indvars.iv206) #5
  %213 = load i32, ptr %212, align 4, !tbaa !19
  %214 = zext i32 %213 to i64
  %215 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %214) #5
  %216 = load i32, ptr %215, align 4, !tbaa !19
  %.not133 = icmp eq i32 %216, 0
  br i1 %.not133, label %217, label %218

217:                                              ; preds = %211
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.8, i32 noundef 304)
          to label %218 unwind label %229

218:                                              ; preds = %217, %211
  %219 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %indvars.iv206) #5
  %220 = load i32, ptr %219, align 4, !tbaa !19
  %221 = zext i32 %220 to i64
  %222 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %221) #5
  %223 = load i32, ptr %222, align 4, !tbaa !19
  %224 = add i32 %223, -1
  store i32 %224, ptr %222, align 4, !tbaa !19
  %225 = add i32 %.2113171, 1
  %226 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %indvars.iv206) #5
  store i32 -1, ptr %226, align 4, !tbaa !19
  br label %231

227:                                              ; preds = %202
  %228 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #5
  br label %307

229:                                              ; preds = %217
  %230 = landingpad { ptr, i32 }
          cleanup
  br label %307

.critedge:                                        ; preds = %197
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #5
  br label %231

231:                                              ; preds = %207, %218, %.critedge
  %.3114 = phi i32 [ %225, %218 ], [ %.2113171, %207 ], [ %.2113171, %.critedge ]
  %indvars.iv.next207 = add nuw nsw i64 %indvars.iv206, 1
  %232 = load i32, ptr %51, align 8, !tbaa !25
  %233 = zext i32 %232 to i64
  %234 = icmp ult i64 %indvars.iv.next207, %233
  br i1 %234, label %197, label %._crit_edge174, !llvm.loop !46

235:                                              ; preds = %._crit_edge174
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %21) #5
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #5
  store i32 0, ptr %22, align 4, !tbaa !19
  %236 = load i32, ptr %51, align 8, !tbaa !25
  %.not192 = icmp eq i32 %236, 0
  br i1 %.not192, label %._crit_edge179, label %.lr.ph178

._crit_edge179:                                   ; preds = %245, %235
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #5
  %237 = invoke noundef ptr @_ZN6Assimp11MakeSubmeshEPK6aiMeshRKSt6vectorIjSaIjEEj(ptr noundef nonnull %1, ptr noundef nonnull align 8 dereferenceable(24) %21, i32 noundef 0)
          to label %250 unwind label %252

.lr.ph178:                                        ; preds = %235, %245
  %storemerge176 = phi i32 [ %247, %245 ], [ 0, %235 ]
  %238 = zext i32 %storemerge176 to i64
  %239 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %238) #5
  %240 = load i32, ptr %239, align 4, !tbaa !19
  %241 = icmp eq i32 %240, -1
  br i1 %241, label %242, label %245

242:                                              ; preds = %.lr.ph178
  invoke void @_ZNSt6vectorIjSaIjEE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 4 dereferenceable(4) %22)
          to label %245 unwind label %243

243:                                              ; preds = %242
  %244 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #5
  br label %257

245:                                              ; preds = %.lr.ph178, %242
  %246 = load i32, ptr %22, align 4, !tbaa !19
  %247 = add i32 %246, 1
  store i32 %247, ptr %22, align 4, !tbaa !19
  %248 = load i32, ptr %51, align 8, !tbaa !25
  %249 = icmp ult i32 %247, %248
  br i1 %249, label %.lr.ph178, label %._crit_edge179, !llvm.loop !47

250:                                              ; preds = %._crit_edge179
  store ptr %237, ptr %23, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #5
  store ptr null, ptr %25, align 8, !tbaa !21
  call void @_ZNSt4pairIP6aiMeshPK6aiBoneEC2IRS1_S4_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairIS9_SA_EEEbE4typeELb1EEEOS9_OSA_(ptr noundef nonnull align 8 dereferenceable(16) %24, ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %25)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #5
  invoke void @_ZNSt6vectorISt4pairIP6aiMeshPK6aiBoneESaIS6_EE9push_backERKS6_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(16) %24)
          to label %251 unwind label %254

251:                                              ; preds = %250
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %21) #5
  br label %._crit_edge174.thread

252:                                              ; preds = %._crit_edge179
  %253 = landingpad { ptr, i32 }
          cleanup
  br label %256

254:                                              ; preds = %250
  %255 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #5
  br label %256

256:                                              ; preds = %254, %252
  %.pn = phi { ptr, i32 } [ %255, %254 ], [ %253, %252 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #5
  br label %257

257:                                              ; preds = %256, %243
  %.pn131 = phi { ptr, i32 } [ %244, %243 ], [ %.pn, %256 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %21) #5
  br label %307

._crit_edge174.thread:                            ; preds = %119, %251, %._crit_edge174
  %258 = load i32, ptr %31, align 8, !tbaa !5
  %.not193 = icmp eq i32 %258, 0
  br i1 %.not193, label %._crit_edge187, label %.lr.ph186

.lr.ph186:                                        ; preds = %._crit_edge174.thread
  %259 = getelementptr inbounds i8, ptr %26, i64 8
  %260 = getelementptr inbounds i8, ptr %1, i64 224
  br label %261

._crit_edge187:                                   ; preds = %303, %._crit_edge174.thread
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #5
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %4) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #5
  ret void

261:                                              ; preds = %.lr.ph186, %303
  %indvars.iv209 = phi i64 [ 0, %.lr.ph186 ], [ %indvars.iv.next210, %303 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #5
  %262 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %4, i64 noundef %indvars.iv209)
          to label %263 unwind label %273

263:                                              ; preds = %261
  %264 = extractvalue { ptr, i64 } %262, 0
  store ptr %264, ptr %26, align 8
  %265 = extractvalue { ptr, i64 } %262, 1
  store i64 %265, ptr %259, align 8
  %266 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %26) #5
  br i1 %266, label %.critedge2, label %267

267:                                              ; preds = %263
  %268 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %indvars.iv209) #5
  %269 = load i32, ptr %268, align 4, !tbaa !19
  %.not124 = icmp eq i32 %269, 0
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #5
  br i1 %.not124, label %303, label %270

270:                                              ; preds = %267
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %27) #5
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #5
  store i32 0, ptr %28, align 4, !tbaa !19
  %271 = load i32, ptr %51, align 8, !tbaa !25
  %.not194 = icmp eq i32 %271, 0
  br i1 %.not194, label %._crit_edge183, label %.lr.ph182

._crit_edge183:                                   ; preds = %283, %270
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #5
  %272 = invoke noundef ptr @_ZN6Assimp11MakeSubmeshEPK6aiMeshRKSt6vectorIjSaIjEEj(ptr noundef nonnull %1, ptr noundef nonnull align 8 dereferenceable(24) %27, i32 noundef 1)
          to label %288 unwind label %297

273:                                              ; preds = %261
  %274 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #5
  br label %307

.lr.ph182:                                        ; preds = %270, %283
  %storemerge125180 = phi i32 [ %285, %283 ], [ 0, %270 ]
  %275 = zext i32 %storemerge125180 to i64
  %276 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %275) #5
  %277 = load i32, ptr %276, align 4, !tbaa !19
  %278 = zext i32 %277 to i64
  %279 = icmp eq i64 %indvars.iv209, %278
  br i1 %279, label %280, label %283

280:                                              ; preds = %.lr.ph182
  invoke void @_ZNSt6vectorIjSaIjEE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(24) %27, ptr noundef nonnull align 4 dereferenceable(4) %28)
          to label %283 unwind label %281

281:                                              ; preds = %280
  %282 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #5
  br label %302

283:                                              ; preds = %.lr.ph182, %280
  %284 = load i32, ptr %28, align 4, !tbaa !19
  %285 = add i32 %284, 1
  store i32 %285, ptr %28, align 4, !tbaa !19
  %286 = load i32, ptr %51, align 8, !tbaa !25
  %287 = icmp ult i32 %285, %286
  br i1 %287, label %.lr.ph182, label %._crit_edge183, !llvm.loop !48

288:                                              ; preds = %._crit_edge183
  store ptr %272, ptr %29, align 8, !tbaa !21
  %289 = load ptr, ptr %260, align 8, !tbaa !20
  %290 = getelementptr inbounds ptr, ptr %289, i64 %indvars.iv209
  %291 = load ptr, ptr %290, align 8, !tbaa !21
  %292 = getelementptr inbounds i8, ptr %291, i64 1056
  invoke void @_ZNK6Assimp13DeboneProcess14ApplyTransformEP6aiMeshRK12aiMatrix4x4tIfE(ptr noundef nonnull align 8 dereferenceable(64) %0, ptr noundef %272, ptr noundef nonnull align 4 dereferenceable(64) %292)
          to label %293 unwind label %297

293:                                              ; preds = %288
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #5
  %294 = load ptr, ptr %260, align 8, !tbaa !20
  %295 = getelementptr inbounds ptr, ptr %294, i64 %indvars.iv209
  call void @_ZNSt4pairIP6aiMeshPK6aiBoneEC2IRS1_RPS2_TnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISB_SC_EEEbE4typeELb1EEEOSB_OSC_(ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %295)
  invoke void @_ZNSt6vectorISt4pairIP6aiMeshPK6aiBoneESaIS6_EE9push_backERKS6_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(16) %30)
          to label %296 unwind label %299

296:                                              ; preds = %293
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #5
  br label %303

297:                                              ; preds = %288, %._crit_edge183
  %298 = landingpad { ptr, i32 }
          cleanup
  br label %301

299:                                              ; preds = %293
  %300 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #5
  br label %301

301:                                              ; preds = %299, %297
  %.pn126 = phi { ptr, i32 } [ %300, %299 ], [ %298, %297 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #5
  br label %302

302:                                              ; preds = %301, %281
  %.pn128 = phi { ptr, i32 } [ %282, %281 ], [ %.pn126, %301 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #5
  br label %307

.critedge2:                                       ; preds = %263
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #5
  br label %303

303:                                              ; preds = %267, %296, %.critedge2
  %indvars.iv.next210 = add nuw nsw i64 %indvars.iv209, 1
  %304 = load i32, ptr %31, align 8, !tbaa !5
  %305 = zext i32 %304 to i64
  %306 = icmp ult i64 %indvars.iv.next210, %305
  br i1 %306, label %261, label %._crit_edge187, !llvm.loop !49

307:                                              ; preds = %273, %302, %227, %229, %163, %175, %257
  %.pn137.pn = phi { ptr, i32 } [ %.pn131, %257 ], [ %176, %175 ], [ %164, %163 ], [ %230, %229 ], [ %228, %227 ], [ %.pn128, %302 ], [ %274, %273 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #5
  br label %308

308:                                              ; preds = %307, %127
  %.pn137.pn.pn = phi { ptr, i32 } [ %.pn137.pn, %307 ], [ %128, %127 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #5
  br label %309

309:                                              ; preds = %308, %125
  %.pn137.pn.pn.pn = phi { ptr, i32 } [ %.pn137.pn.pn, %308 ], [ %126, %125 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #5
  br label %310

310:                                              ; preds = %85, %104, %106, %309
  %.pn143.pn = phi { ptr, i32 } [ %.pn137.pn.pn.pn, %309 ], [ %107, %106 ], [ %105, %104 ], [ %86, %85 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #5
  br label %311

311:                                              ; preds = %310, %56
  %.pn143.pn.pn = phi { ptr, i32 } [ %.pn143.pn, %310 ], [ %57, %56 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #5
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %4) #5
  br label %312

312:                                              ; preds = %311, %54
  %.pn143.pn.pn.pn = phi { ptr, i32 } [ %.pn143.pn.pn, %311 ], [ %55, %54 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #5
  resume { ptr, i32 } %.pn143.pn.pn.pn
}

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

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

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

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

declare void @_ZN6Assimp6Logger4warnEPKc(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef) local_unnamed_addr #0

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

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

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

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

declare noundef ptr @_ZN6Assimp11MakeSubmeshEPK6aiMeshRKSt6vectorIjSaIjEEj(ptr noundef, ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) local_unnamed_addr #0

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

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

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

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

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

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

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

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


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