; 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.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

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
define dso_local noundef zeroext i1 @_ZN6Assimp13DeboneProcess12ConsiderMeshEPK6aiMesh(ptr noundef nonnull align 8 dereferenceable(64) %0, ptr noundef %1) #3 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i1, align 1
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca i8, align 1
  %8 = alloca %"class.std::vector.0", align 8
  %9 = alloca i8, align 1
  %10 = alloca %"class.std::allocator.4", align 1
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %"class.std::vector.24", align 8
  %14 = alloca i32, align 4
  %15 = alloca %"class.std::allocator.26", align 1
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca float, align 4
  %22 = alloca i32, align 4
  %23 = alloca %"struct.std::_Bit_reference", align 8
  %24 = alloca %"struct.std::_Bit_reference", align 8
  %25 = alloca %"struct.std::_Bit_reference", align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca %"struct.std::_Bit_reference", align 8
  %31 = alloca %"struct.std::_Bit_reference", align 8
  %32 = alloca i32, align 4
  %33 = alloca %"struct.std::_Bit_reference", align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %34 = load ptr, ptr %4, align 8
  %35 = load ptr, ptr %5, align 8, !tbaa !5
  %36 = call noundef zeroext i1 @_ZNK6aiMesh8HasBonesEv(ptr noundef nonnull align 8 dereferenceable(1320) %35)
  br i1 %36, label %38, label %37

37:                                               ; preds = %2
  store i1 false, ptr %3, align 1
  br label %356

38:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #4
  store i8 0, ptr %6, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #4
  store i8 0, ptr %7, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 40, ptr %8) #4
  %39 = load ptr, ptr %5, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.aiMesh, ptr %39, i32 0, i32 11
  %41 = load i32, ptr %40, align 8, !tbaa !11
  %42 = zext i32 %41 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #4
  store i8 0, ptr %9, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #4
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #4
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %8, i64 noundef %42, ptr noundef nonnull align 1 dereferenceable(1) %9, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %43 unwind label %56

43:                                               ; preds = %38
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #4
  %44 = load ptr, ptr %5, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.aiMesh, ptr %44, i32 0, i32 1
  %46 = load i32, ptr %45, align 4, !tbaa !19
  %47 = zext i32 %46 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  store i32 -1, ptr %14, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #4
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #4
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %47, ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %48 unwind label %60

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

49:                                               ; preds = %205, %48
  %50 = load i32, ptr %18, align 4, !tbaa !20
  %51 = load ptr, ptr %5, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.aiMesh, ptr %51, i32 0, i32 11
  %53 = load i32, ptr %52, align 8, !tbaa !11
  %54 = icmp ult i32 %50, %53
  br i1 %54, label %64, label %55

55:                                               ; preds = %49
  store i32 2, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  br label %209

56:                                               ; preds = %38
  %57 = landingpad { ptr, i32 }
          cleanup
  %58 = extractvalue { ptr, i32 } %57, 0
  store ptr %58, ptr %11, align 8
  %59 = extractvalue { ptr, i32 } %57, 1
  store i32 %59, ptr %12, align 4
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #4
  br label %355

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

64:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  store i32 0, ptr %20, align 4, !tbaa !20
  br label %65

65:                                               ; preds = %184, %64
  %66 = load i32, ptr %20, align 4, !tbaa !20
  %67 = load ptr, ptr %5, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.aiMesh, ptr %67, i32 0, i32 12
  %69 = load ptr, ptr %68, align 8, !tbaa !21
  %70 = load i32, ptr %18, align 4, !tbaa !20
  %71 = zext i32 %70 to i64
  %72 = getelementptr inbounds ptr, ptr %69, i64 %71
  %73 = load ptr, ptr %72, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.aiBone, ptr %73, i32 0, i32 1
  %75 = load i32, ptr %74, align 4, !tbaa !22
  %76 = icmp ult i32 %66, %75
  br i1 %76, label %78, label %77

77:                                               ; preds = %65
  store i32 5, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  br label %188

78:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %79 = load ptr, ptr %5, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.aiMesh, ptr %79, i32 0, i32 12
  %81 = load ptr, ptr %80, align 8, !tbaa !21
  %82 = load i32, ptr %18, align 4, !tbaa !20
  %83 = zext i32 %82 to i64
  %84 = getelementptr inbounds ptr, ptr %81, i64 %83
  %85 = load ptr, ptr %84, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.aiBone, ptr %85, i32 0, i32 4
  %87 = load ptr, ptr %86, align 8, !tbaa !25
  %88 = load i32, ptr %20, align 4, !tbaa !20
  %89 = zext i32 %88 to i64
  %90 = getelementptr inbounds %struct.aiVertexWeight, ptr %87, i64 %89
  %91 = getelementptr inbounds %struct.aiVertexWeight, ptr %90, i32 0, i32 1
  %92 = load float, ptr %91, align 4, !tbaa !26
  store float %92, ptr %21, align 4, !tbaa !28
  %93 = load float, ptr %21, align 4, !tbaa !28
  %94 = fcmp oeq float %93, 0.000000e+00
  br i1 %94, label %95, label %96

95:                                               ; preds = %78
  store i32 7, ptr %19, align 4
  br label %181

96:                                               ; preds = %78
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  %97 = load ptr, ptr %5, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.aiMesh, ptr %97, i32 0, i32 12
  %99 = load ptr, ptr %98, align 8, !tbaa !21
  %100 = load i32, ptr %18, align 4, !tbaa !20
  %101 = zext i32 %100 to i64
  %102 = getelementptr inbounds ptr, ptr %99, i64 %101
  %103 = load ptr, ptr %102, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.aiBone, ptr %103, i32 0, i32 4
  %105 = load ptr, ptr %104, align 8, !tbaa !25
  %106 = load i32, ptr %20, align 4, !tbaa !20
  %107 = zext i32 %106 to i64
  %108 = getelementptr inbounds %struct.aiVertexWeight, ptr %105, i64 %107
  %109 = getelementptr inbounds %struct.aiVertexWeight, ptr %108, i32 0, i32 0
  %110 = load i32, ptr %109, align 4, !tbaa !29
  store i32 %110, ptr %22, align 4, !tbaa !20
  %111 = load float, ptr %21, align 4, !tbaa !28
  %112 = getelementptr inbounds %"class.Assimp::DeboneProcess", ptr %34, i32 0, i32 3
  %113 = load float, ptr %112, align 8, !tbaa !30
  %114 = fcmp oge float %111, %113
  br i1 %114, label %115, label %147

115:                                              ; preds = %96
  %116 = load i32, ptr %22, align 4, !tbaa !20
  %117 = zext i32 %116 to i64
  %118 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %117) #4
  %119 = load i32, ptr %118, align 4, !tbaa !20
  %120 = icmp ne i32 %119, -1
  br i1 %120, label %121, label %141

121:                                              ; preds = %115
  %122 = load i32, ptr %22, align 4, !tbaa !20
  %123 = zext i32 %122 to i64
  %124 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %123) #4
  %125 = load i32, ptr %124, align 4, !tbaa !20
  %126 = load i32, ptr %18, align 4, !tbaa !20
  %127 = icmp eq i32 %125, %126
  br i1 %127, label %128, label %136

128:                                              ; preds = %121
  %129 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %130 unwind label %132

130:                                              ; preds = %128
  invoke void @_ZN6Assimp6Logger4warnEPKc(ptr noundef nonnull align 8 dereferenceable(12) %129, ptr noundef @.str.6)
          to label %131 unwind label %132

131:                                              ; preds = %130
  br label %140

132:                                              ; preds = %130, %128
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %11, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %12, align 4
  br label %187

136:                                              ; preds = %121
  %137 = load i32, ptr %22, align 4, !tbaa !20
  %138 = zext i32 %137 to i64
  %139 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %138) #4
  store i32 -2, ptr %139, align 4, !tbaa !20
  br label %140

140:                                              ; preds = %136, %131
  br label %146

141:                                              ; preds = %115
  %142 = load i32, ptr %18, align 4, !tbaa !20
  %143 = load i32, ptr %22, align 4, !tbaa !20
  %144 = zext i32 %143 to i64
  %145 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %144) #4
  store i32 %142, ptr %145, align 4, !tbaa !20
  br label %146

146:                                              ; preds = %141, %140
  br label %147

147:                                              ; preds = %146, %96
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #4
  %148 = load i32, ptr %18, align 4, !tbaa !20
  %149 = zext i32 %148 to i64
  %150 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %8, i64 noundef %149)
          to label %151 unwind label %172

151:                                              ; preds = %147
  %152 = getelementptr inbounds { ptr, i64 }, ptr %23, i32 0, i32 0
  %153 = extractvalue { ptr, i64 } %150, 0
  store ptr %153, ptr %152, align 8
  %154 = getelementptr inbounds { ptr, i64 }, ptr %23, i32 0, i32 1
  %155 = extractvalue { ptr, i64 } %150, 1
  store i64 %155, ptr %154, align 8
  %156 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %23) #4
  %157 = xor i1 %156, true
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #4
  br i1 %157, label %158, label %180

158:                                              ; preds = %151
  %159 = load float, ptr %21, align 4, !tbaa !28
  %160 = getelementptr inbounds %"class.Assimp::DeboneProcess", ptr %34, i32 0, i32 3
  %161 = load float, ptr %160, align 8, !tbaa !30
  %162 = fcmp olt float %159, %161
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #4
  %163 = load i32, ptr %18, align 4, !tbaa !20
  %164 = zext i32 %163 to i64
  %165 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %8, i64 noundef %164)
          to label %166 unwind label %176

166:                                              ; preds = %158
  %167 = getelementptr inbounds { ptr, i64 }, ptr %24, i32 0, i32 0
  %168 = extractvalue { ptr, i64 } %165, 0
  store ptr %168, ptr %167, align 8
  %169 = getelementptr inbounds { ptr, i64 }, ptr %24, i32 0, i32 1
  %170 = extractvalue { ptr, i64 } %165, 1
  store i64 %170, ptr %169, align 8
  %171 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %24, i1 noundef zeroext %162) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #4
  br label %180

172:                                              ; preds = %147
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %11, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #4
  br label %187

176:                                              ; preds = %158
  %177 = landingpad { ptr, i32 }
          cleanup
  %178 = extractvalue { ptr, i32 } %177, 0
  store ptr %178, ptr %11, align 8
  %179 = extractvalue { ptr, i32 } %177, 1
  store i32 %179, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #4
  br label %187

180:                                              ; preds = %166, %151
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  store i32 0, ptr %19, align 4
  br label %181

181:                                              ; preds = %180, %95
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  %182 = load i32, ptr %19, align 4
  switch i32 %182, label %363 [
    i32 0, label %183
    i32 7, label %184
  ]

183:                                              ; preds = %181
  br label %184

184:                                              ; preds = %183, %181
  %185 = load i32, ptr %20, align 4, !tbaa !20
  %186 = add i32 %185, 1
  store i32 %186, ptr %20, align 4, !tbaa !20
  br label %65, !llvm.loop !37

187:                                              ; preds = %176, %172, %132
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  br label %208

188:                                              ; preds = %77
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #4
  %189 = load i32, ptr %18, align 4, !tbaa !20
  %190 = zext i32 %189 to i64
  %191 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %8, i64 noundef %190)
          to label %192 unwind label %200

192:                                              ; preds = %188
  %193 = getelementptr inbounds { ptr, i64 }, ptr %25, i32 0, i32 0
  %194 = extractvalue { ptr, i64 } %191, 0
  store ptr %194, ptr %193, align 8
  %195 = getelementptr inbounds { ptr, i64 }, ptr %25, i32 0, i32 1
  %196 = extractvalue { ptr, i64 } %191, 1
  store i64 %196, ptr %195, align 8
  %197 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %25) #4
  %198 = xor i1 %197, true
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #4
  br i1 %198, label %199, label %204

199:                                              ; preds = %192
  store i8 1, ptr %7, align 1, !tbaa !9
  br label %204

200:                                              ; preds = %188
  %201 = landingpad { ptr, i32 }
          cleanup
  %202 = extractvalue { ptr, i32 } %201, 0
  store ptr %202, ptr %11, align 8
  %203 = extractvalue { ptr, i32 } %201, 1
  store i32 %203, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #4
  br label %208

204:                                              ; preds = %199, %192
  br label %205

205:                                              ; preds = %204
  %206 = load i32, ptr %18, align 4, !tbaa !20
  %207 = add i32 %206, 1
  store i32 %207, ptr %18, align 4, !tbaa !20
  br label %49, !llvm.loop !39

208:                                              ; preds = %200, %187
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  br label %353

209:                                              ; preds = %55
  %210 = load i8, ptr %7, align 1, !tbaa !9, !range !40, !noundef !41
  %211 = trunc i8 %210 to i1
  br i1 %211, label %212, label %316

212:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  store i32 0, ptr %26, align 4, !tbaa !20
  br label %213

213:                                              ; preds = %312, %212
  %214 = load i32, ptr %26, align 4, !tbaa !20
  %215 = load ptr, ptr %5, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.aiMesh, ptr %215, i32 0, i32 2
  %217 = load i32, ptr %216, align 8, !tbaa !42
  %218 = icmp ult i32 %214, %217
  br i1 %218, label %220, label %219

219:                                              ; preds = %213
  store i32 8, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  br label %315

220:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %221 = load ptr, ptr %5, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.aiMesh, ptr %221, i32 0, i32 10
  %223 = load ptr, ptr %222, align 8, !tbaa !43
  %224 = load i32, ptr %26, align 4, !tbaa !20
  %225 = zext i32 %224 to i64
  %226 = getelementptr inbounds %struct.aiFace, ptr %223, i64 %225
  %227 = getelementptr inbounds %struct.aiFace, ptr %226, i32 0, i32 1
  %228 = load ptr, ptr %227, align 8, !tbaa !44
  %229 = getelementptr inbounds i32, ptr %228, i64 0
  %230 = load i32, ptr %229, align 4, !tbaa !20
  %231 = zext i32 %230 to i64
  %232 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %231) #4
  %233 = load i32, ptr %232, align 4, !tbaa !20
  store i32 %233, ptr %27, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  store i32 1, ptr %28, align 4, !tbaa !20
  br label %234

234:                                              ; preds = %307, %220
  %235 = load i32, ptr %28, align 4, !tbaa !20
  %236 = load ptr, ptr %5, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.aiMesh, ptr %236, i32 0, i32 10
  %238 = load ptr, ptr %237, align 8, !tbaa !43
  %239 = load i32, ptr %26, align 4, !tbaa !20
  %240 = zext i32 %239 to i64
  %241 = getelementptr inbounds %struct.aiFace, ptr %238, i64 %240
  %242 = getelementptr inbounds %struct.aiFace, ptr %241, i32 0, i32 0
  %243 = load i32, ptr %242, align 8, !tbaa !46
  %244 = icmp ult i32 %235, %243
  br i1 %244, label %246, label %245

245:                                              ; preds = %234
  store i32 11, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  br label %311

246:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %247 = load ptr, ptr %5, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.aiMesh, ptr %247, i32 0, i32 10
  %249 = load ptr, ptr %248, align 8, !tbaa !43
  %250 = load i32, ptr %26, align 4, !tbaa !20
  %251 = zext i32 %250 to i64
  %252 = getelementptr inbounds %struct.aiFace, ptr %249, i64 %251
  %253 = getelementptr inbounds %struct.aiFace, ptr %252, i32 0, i32 1
  %254 = load ptr, ptr %253, align 8, !tbaa !44
  %255 = load i32, ptr %28, align 4, !tbaa !20
  %256 = zext i32 %255 to i64
  %257 = getelementptr inbounds i32, ptr %254, i64 %256
  %258 = load i32, ptr %257, align 4, !tbaa !20
  %259 = zext i32 %258 to i64
  %260 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %259) #4
  %261 = load i32, ptr %260, align 4, !tbaa !20
  store i32 %261, ptr %29, align 4, !tbaa !20
  %262 = load i32, ptr %27, align 4, !tbaa !20
  %263 = load i32, ptr %29, align 4, !tbaa !20
  %264 = icmp ne i32 %262, %263
  br i1 %264, label %265, label %306

265:                                              ; preds = %246
  %266 = load i32, ptr %27, align 4, !tbaa !20
  %267 = load ptr, ptr %5, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.aiMesh, ptr %267, i32 0, i32 11
  %269 = load i32, ptr %268, align 8, !tbaa !11
  %270 = icmp ult i32 %266, %269
  br i1 %270, label %271, label %285

271:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #4
  %272 = load i32, ptr %27, align 4, !tbaa !20
  %273 = zext i32 %272 to i64
  %274 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %8, i64 noundef %273)
          to label %275 unwind label %281

275:                                              ; preds = %271
  %276 = getelementptr inbounds { ptr, i64 }, ptr %30, i32 0, i32 0
  %277 = extractvalue { ptr, i64 } %274, 0
  store ptr %277, ptr %276, align 8
  %278 = getelementptr inbounds { ptr, i64 }, ptr %30, i32 0, i32 1
  %279 = extractvalue { ptr, i64 } %274, 1
  store i64 %279, ptr %278, align 8
  %280 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %30, i1 noundef zeroext true) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #4
  br label %285

281:                                              ; preds = %271
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %11, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #4
  br label %310

285:                                              ; preds = %275, %265
  %286 = load i32, ptr %29, align 4, !tbaa !20
  %287 = load ptr, ptr %5, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.aiMesh, ptr %287, i32 0, i32 11
  %289 = load i32, ptr %288, align 8, !tbaa !11
  %290 = icmp ult i32 %286, %289
  br i1 %290, label %291, label %305

291:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #4
  %292 = load i32, ptr %29, align 4, !tbaa !20
  %293 = zext i32 %292 to i64
  %294 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %8, i64 noundef %293)
          to label %295 unwind label %301

295:                                              ; preds = %291
  %296 = getelementptr inbounds { ptr, i64 }, ptr %31, i32 0, i32 0
  %297 = extractvalue { ptr, i64 } %294, 0
  store ptr %297, ptr %296, align 8
  %298 = getelementptr inbounds { ptr, i64 }, ptr %31, i32 0, i32 1
  %299 = extractvalue { ptr, i64 } %294, 1
  store i64 %299, ptr %298, align 8
  %300 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %31, i1 noundef zeroext true) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #4
  br label %305

301:                                              ; preds = %291
  %302 = landingpad { ptr, i32 }
          cleanup
  %303 = extractvalue { ptr, i32 } %302, 0
  store ptr %303, ptr %11, align 8
  %304 = extractvalue { ptr, i32 } %302, 1
  store i32 %304, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #4
  br label %310

305:                                              ; preds = %295, %285
  br label %306

306:                                              ; preds = %305, %246
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %307

307:                                              ; preds = %306
  %308 = load i32, ptr %28, align 4, !tbaa !20
  %309 = add i32 %308, 1
  store i32 %309, ptr %28, align 4, !tbaa !20
  br label %234, !llvm.loop !47

310:                                              ; preds = %301, %281
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  br label %353

311:                                              ; preds = %245
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  br label %312

312:                                              ; preds = %311
  %313 = load i32, ptr %26, align 4, !tbaa !20
  %314 = add i32 %313, 1
  store i32 %314, ptr %26, align 4, !tbaa !20
  br label %213, !llvm.loop !48

315:                                              ; preds = %219
  br label %316

316:                                              ; preds = %315, %209
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  store i32 0, ptr %32, align 4, !tbaa !20
  br label %317

317:                                              ; preds = %347, %316
  %318 = load i32, ptr %32, align 4, !tbaa !20
  %319 = load ptr, ptr %5, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.aiMesh, ptr %319, i32 0, i32 11
  %321 = load i32, ptr %320, align 8, !tbaa !11
  %322 = icmp ult i32 %318, %321
  br i1 %322, label %324, label %323

323:                                              ; preds = %317
  store i32 14, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  br label %350

324:                                              ; preds = %317
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #4
  %325 = load i32, ptr %32, align 4, !tbaa !20
  %326 = zext i32 %325 to i64
  %327 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %8, i64 noundef %326)
          to label %328 unwind label %339

328:                                              ; preds = %324
  %329 = getelementptr inbounds { ptr, i64 }, ptr %33, i32 0, i32 0
  %330 = extractvalue { ptr, i64 } %327, 0
  store ptr %330, ptr %329, align 8
  %331 = getelementptr inbounds { ptr, i64 }, ptr %33, i32 0, i32 1
  %332 = extractvalue { ptr, i64 } %327, 1
  store i64 %332, ptr %331, align 8
  %333 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %33) #4
  %334 = xor i1 %333, true
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #4
  br i1 %334, label %335, label %343

335:                                              ; preds = %328
  %336 = getelementptr inbounds %"class.Assimp::DeboneProcess", ptr %34, i32 0, i32 2
  %337 = load i32, ptr %336, align 4, !tbaa !49
  %338 = add i32 %337, 1
  store i32 %338, ptr %336, align 4, !tbaa !49
  store i8 1, ptr %6, align 1, !tbaa !9
  br label %343

339:                                              ; preds = %324
  %340 = landingpad { ptr, i32 }
          cleanup
  %341 = extractvalue { ptr, i32 } %340, 0
  store ptr %341, ptr %11, align 8
  %342 = extractvalue { ptr, i32 } %340, 1
  store i32 %342, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  br label %353

343:                                              ; preds = %335, %328
  %344 = getelementptr inbounds %"class.Assimp::DeboneProcess", ptr %34, i32 0, i32 1
  %345 = load i32, ptr %344, align 8, !tbaa !50
  %346 = add i32 %345, 1
  store i32 %346, ptr %344, align 8, !tbaa !50
  br label %347

347:                                              ; preds = %343
  %348 = load i32, ptr %32, align 4, !tbaa !20
  %349 = add i32 %348, 1
  store i32 %349, ptr %32, align 4, !tbaa !20
  br label %317, !llvm.loop !51

350:                                              ; preds = %323
  %351 = load i8, ptr %6, align 1, !tbaa !9, !range !40, !noundef !41
  %352 = trunc i8 %351 to i1
  store i1 %352, ptr %3, align 1
  store i32 1, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #4
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %8) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #4
  br label %356

353:                                              ; preds = %339, %310, %208
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #4
  br label %354

354:                                              ; preds = %353, %60
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #4
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %8) #4
  br label %355

355:                                              ; preds = %354, %56
  call void @llvm.lifetime.end.p0(i64 40, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #4
  br label %358

356:                                              ; preds = %350, %37
  %357 = load i1, ptr %3, align 1
  ret i1 %357

358:                                              ; preds = %355
  %359 = load ptr, ptr %11, align 8
  %360 = load i32, ptr %12, align 4
  %361 = insertvalue { ptr, i32 } poison, ptr %359, 0
  %362 = insertvalue { ptr, i32 } %361, i32 %360, 1
  resume { ptr, i32 } %362

363:                                              ; preds = %181
  unreachable
}

; 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 nounwind uwtable
declare dso_local void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6aiMesh8HasBonesEv(ptr noundef nonnull align 8 dereferenceable(1320)) #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

; 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 = { 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, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !13, i64 216}
!12 = !{!"_ZTS6aiMesh", !13, i64 0, !13, i64 4, !13, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !7, i64 48, !7, i64 112, !7, i64 176, !6, i64 208, !13, i64 216, !6, i64 224, !13, i64 232, !14, i64 236, !13, i64 1264, !6, i64 1272, !15, i64 1280, !16, i64 1284, !6, i64 1312}
!13 = !{!"int", !7, i64 0}
!14 = !{!"_ZTS8aiString", !13, i64 0, !7, i64 4}
!15 = !{!"_ZTS16aiMorphingMethod", !7, i64 0}
!16 = !{!"_ZTS6aiAABB", !17, i64 0, !17, i64 12}
!17 = !{!"_ZTS10aiVector3tIfE", !18, i64 0, !18, i64 4, !18, i64 8}
!18 = !{!"float", !7, i64 0}
!19 = !{!12, !13, i64 4}
!20 = !{!13, !13, i64 0}
!21 = !{!12, !6, i64 224}
!22 = !{!23, !13, i64 1028}
!23 = !{!"_ZTS6aiBone", !14, i64 0, !13, i64 1028, !6, i64 1032, !6, i64 1040, !6, i64 1048, !24, i64 1056}
!24 = !{!"_ZTS12aiMatrix4x4tIfE", !18, i64 0, !18, i64 4, !18, i64 8, !18, i64 12, !18, i64 16, !18, i64 20, !18, i64 24, !18, i64 28, !18, i64 32, !18, i64 36, !18, i64 40, !18, i64 44, !18, i64 48, !18, i64 52, !18, i64 56, !18, i64 60}
!25 = !{!23, !6, i64 1048}
!26 = !{!27, !18, i64 4}
!27 = !{!"_ZTS14aiVertexWeight", !13, i64 0, !18, i64 4}
!28 = !{!18, !18, i64 0}
!29 = !{!27, !13, i64 0}
!30 = !{!31, !18, i64 32}
!31 = !{!"_ZTSN6Assimp13DeboneProcessE", !32, i64 0, !13, i64 24, !13, i64 28, !18, i64 32, !10, 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 = !{i8 0, i8 2}
!41 = !{}
!42 = !{!12, !13, i64 8}
!43 = !{!12, !6, i64 208}
!44 = !{!45, !6, i64 8}
!45 = !{!"_ZTS6aiFace", !13, i64 0, !6, i64 8}
!46 = !{!45, !13, i64 0}
!47 = distinct !{!47, !38}
!48 = distinct !{!48, !38}
!49 = !{!31, !13, i64 28}
!50 = !{!31, !13, i64 24}
!51 = distinct !{!51, !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.aiVertexWeight = type { i32, float }
%struct.aiFace = type { i32, ptr }

@.str.6 = external hidden unnamed_addr constant [41 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
define dso_local noundef zeroext i1 @_ZN6Assimp13DeboneProcess12ConsiderMeshEPK6aiMesh(ptr nocapture noundef nonnull align 8 dereferenceable(64) %0, ptr noundef nonnull %1) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::vector.0", align 8
  %4 = alloca i8, align 1
  %5 = alloca %"class.std::allocator.4", align 1
  %6 = alloca %"class.std::vector.24", align 8
  %7 = alloca i32, align 4
  %8 = alloca %"class.std::allocator.26", align 1
  %9 = alloca %"struct.std::_Bit_reference", align 8
  %10 = alloca %"struct.std::_Bit_reference", align 8
  %11 = alloca %"struct.std::_Bit_reference", align 8
  %12 = alloca %"struct.std::_Bit_reference", align 8
  %13 = alloca %"struct.std::_Bit_reference", align 8
  %14 = alloca %"struct.std::_Bit_reference", align 8
  %15 = tail call noundef zeroext i1 @_ZNK6aiMesh8HasBonesEv(ptr noundef nonnull align 8 dereferenceable(1320) %1)
  br i1 %15, label %16, label %189

16:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %3) #4
  %17 = getelementptr inbounds i8, ptr %1, i64 216
  %18 = load i32, ptr %17, align 8, !tbaa !5
  %19 = zext i32 %18 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #4
  store i8 0, ptr %4, align 1, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #4
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #4
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %3, i64 noundef %19, ptr noundef nonnull align 1 dereferenceable(1) %4, ptr noundef nonnull align 1 dereferenceable(1) %5)
          to label %20 unwind label %42

20:                                               ; preds = %16
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #4
  %21 = getelementptr inbounds i8, ptr %1, i64 4
  %22 = load i32, ptr %21, align 4, !tbaa !18
  %23 = zext i32 %22 to i64
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #4
  store i32 -1, ptr %7, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #4
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #4
  invoke void @_ZNSt6vectorIjSaIjEEC2EmRKjRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %23, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %24 unwind label %44

24:                                               ; preds = %20
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #4
  %25 = load i32, ptr %17, align 8, !tbaa !5
  %.not109 = icmp eq i32 %25, 0
  br i1 %.not109, label %._crit_edge107, label %.preheader84.lr.ph

.preheader84.lr.ph:                               ; preds = %24
  %26 = getelementptr inbounds i8, ptr %1, i64 224
  %27 = getelementptr inbounds i8, ptr %0, i64 32
  %28 = getelementptr inbounds i8, ptr %9, i64 8
  %29 = getelementptr inbounds i8, ptr %10, i64 8
  %30 = getelementptr inbounds i8, ptr %11, i64 8
  br label %.preheader84

.preheader84:                                     ; preds = %.preheader84.lr.ph, %101
  %indvars.iv114 = phi i64 [ 0, %.preheader84.lr.ph ], [ %indvars.iv.next115, %101 ]
  %.06195 = phi i1 [ false, %.preheader84.lr.ph ], [ %spec.select, %101 ]
  %31 = load ptr, ptr %26, align 8, !tbaa !20
  %32 = getelementptr inbounds ptr, ptr %31, i64 %indvars.iv114
  %33 = load ptr, ptr %32, align 8, !tbaa !21
  %34 = getelementptr inbounds i8, ptr %33, i64 1028
  %35 = load i32, ptr %34, align 4, !tbaa !22
  %.not110 = icmp eq i32 %35, 0
  br i1 %.not110, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader84
  %36 = trunc nuw i64 %indvars.iv114 to i32
  br label %.lr.ph

._crit_edge96:                                    ; preds = %101
  br i1 %spec.select, label %.preheader, label %.loopexit

.preheader:                                       ; preds = %._crit_edge96
  %37 = getelementptr inbounds i8, ptr %1, i64 8
  %38 = load i32, ptr %37, align 8, !tbaa !25
  %.not111 = icmp eq i32 %38, 0
  br i1 %.not111, label %.loopexit, label %.lr.ph102

.lr.ph102:                                        ; preds = %.preheader
  %39 = getelementptr inbounds i8, ptr %1, i64 208
  %40 = getelementptr inbounds i8, ptr %12, i64 8
  %41 = getelementptr inbounds i8, ptr %13, i64 8
  %.pre = load ptr, ptr %39, align 8, !tbaa !26
  br label %110

42:                                               ; preds = %16
  %43 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #4
  br label %188

44:                                               ; preds = %20
  %45 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #4
  br label %187

._crit_edge:                                      ; preds = %93, %.preheader84
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #4
  %46 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %3, i64 noundef %indvars.iv114)
          to label %101 unwind label %108

.lr.ph:                                           ; preds = %.lr.ph.preheader, %93
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %93 ]
  %47 = phi ptr [ %33, %.lr.ph.preheader ], [ %96, %93 ]
  %48 = getelementptr inbounds i8, ptr %47, i64 1048
  %49 = load ptr, ptr %48, align 8, !tbaa !27
  %50 = getelementptr inbounds %struct.aiVertexWeight, ptr %49, i64 %indvars.iv
  %51 = getelementptr inbounds i8, ptr %50, i64 4
  %52 = load float, ptr %51, align 4, !tbaa !28
  %53 = fcmp oeq float %52, 0.000000e+00
  br i1 %53, label %93, label %54

54:                                               ; preds = %.lr.ph
  %55 = load float, ptr %27, align 8, !tbaa !30
  %56 = fcmp ult float %52, %55
  br i1 %56, label %75, label %57

57:                                               ; preds = %54
  %58 = load i32, ptr %50, align 4, !tbaa !37
  %59 = zext i32 %58 to i64
  %60 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %59) #4
  %61 = load i32, ptr %60, align 4, !tbaa !19
  %.not77 = icmp eq i32 %61, -1
  %62 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %59) #4
  br i1 %.not77, label %74, label %63

63:                                               ; preds = %57
  %64 = load i32, ptr %62, align 4, !tbaa !19
  %65 = zext i32 %64 to i64
  %66 = icmp eq i64 %indvars.iv114, %65
  br i1 %66, label %67, label %72

67:                                               ; preds = %63
  %68 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %69 unwind label %70

69:                                               ; preds = %67
  invoke void @_ZN6Assimp6Logger4warnEPKc(ptr noundef nonnull align 8 dereferenceable(12) %68, ptr noundef nonnull @.str.6)
          to label %75 unwind label %70

70:                                               ; preds = %69, %67
  %71 = landingpad { ptr, i32 }
          cleanup
  br label %186

72:                                               ; preds = %63
  %73 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %59) #4
  store i32 -2, ptr %73, align 4, !tbaa !19
  br label %75

74:                                               ; preds = %57
  store i32 %36, ptr %62, align 4, !tbaa !19
  br label %75

75:                                               ; preds = %74, %69, %72, %54
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #4
  %76 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %3, i64 noundef %indvars.iv114)
          to label %77 unwind label %89

77:                                               ; preds = %75
  %78 = extractvalue { ptr, i64 } %76, 0
  store ptr %78, ptr %9, align 8
  %79 = extractvalue { ptr, i64 } %76, 1
  store i64 %79, ptr %28, align 8
  %80 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %9) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #4
  br i1 %80, label %93, label %81

81:                                               ; preds = %77
  %82 = load float, ptr %27, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #4
  %83 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %3, i64 noundef %indvars.iv114)
          to label %84 unwind label %91

84:                                               ; preds = %81
  %85 = fcmp olt float %52, %82
  %86 = extractvalue { ptr, i64 } %83, 0
  store ptr %86, ptr %10, align 8
  %87 = extractvalue { ptr, i64 } %83, 1
  store i64 %87, ptr %29, align 8
  %88 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %10, i1 noundef zeroext %85) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #4
  br label %93

89:                                               ; preds = %75
  %90 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #4
  br label %186

91:                                               ; preds = %81
  %92 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #4
  br label %186

93:                                               ; preds = %77, %84, %.lr.ph
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %94 = load ptr, ptr %26, align 8, !tbaa !20
  %95 = getelementptr inbounds ptr, ptr %94, i64 %indvars.iv114
  %96 = load ptr, ptr %95, align 8, !tbaa !21
  %97 = getelementptr inbounds i8, ptr %96, i64 1028
  %98 = load i32, ptr %97, align 4, !tbaa !22
  %99 = zext i32 %98 to i64
  %100 = icmp ult i64 %indvars.iv.next, %99
  br i1 %100, label %.lr.ph, label %._crit_edge, !llvm.loop !38

101:                                              ; preds = %._crit_edge
  %102 = extractvalue { ptr, i64 } %46, 0
  store ptr %102, ptr %11, align 8
  %103 = extractvalue { ptr, i64 } %46, 1
  store i64 %103, ptr %30, align 8
  %104 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %11) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #4
  %not. = xor i1 %104, true
  %spec.select = select i1 %not., i1 true, i1 %.06195
  %indvars.iv.next115 = add nuw nsw i64 %indvars.iv114, 1
  %105 = load i32, ptr %17, align 8, !tbaa !5
  %106 = zext i32 %105 to i64
  %107 = icmp ult i64 %indvars.iv.next115, %106
  br i1 %107, label %.preheader84, label %._crit_edge96, !llvm.loop !40

108:                                              ; preds = %._crit_edge
  %109 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #4
  br label %186

110:                                              ; preds = %.lr.ph102, %._crit_edge100
  %111 = phi ptr [ %.pre, %.lr.ph102 ], [ %123, %._crit_edge100 ]
  %indvars.iv119 = phi i64 [ 0, %.lr.ph102 ], [ %indvars.iv.next120, %._crit_edge100 ]
  %112 = getelementptr inbounds %struct.aiFace, ptr %111, i64 %indvars.iv119, i32 1
  %113 = load ptr, ptr %112, align 8, !tbaa !41
  %114 = load i32, ptr %113, align 4, !tbaa !19
  %115 = zext i32 %114 to i64
  %116 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %115) #4
  %117 = load i32, ptr %116, align 4, !tbaa !19
  %118 = load ptr, ptr %39, align 8, !tbaa !26
  %119 = getelementptr inbounds %struct.aiFace, ptr %118, i64 %indvars.iv119
  %120 = load i32, ptr %119, align 8, !tbaa !43
  %121 = icmp ugt i32 %120, 1
  br i1 %121, label %.lr.ph99, label %._crit_edge100

.lr.ph99:                                         ; preds = %110
  %122 = zext i32 %117 to i64
  br label %127

._crit_edge100:                                   ; preds = %159, %110
  %123 = phi ptr [ %118, %110 ], [ %160, %159 ]
  %indvars.iv.next120 = add nuw nsw i64 %indvars.iv119, 1
  %124 = load i32, ptr %37, align 8, !tbaa !25
  %125 = zext i32 %124 to i64
  %126 = icmp ult i64 %indvars.iv.next120, %125
  br i1 %126, label %110, label %.loopexit.loopexit, !llvm.loop !44

127:                                              ; preds = %.lr.ph99, %159
  %indvars.iv116 = phi i64 [ 1, %.lr.ph99 ], [ %indvars.iv.next117, %159 ]
  %128 = phi ptr [ %118, %.lr.ph99 ], [ %160, %159 ]
  %129 = getelementptr inbounds %struct.aiFace, ptr %128, i64 %indvars.iv119, i32 1
  %130 = load ptr, ptr %129, align 8, !tbaa !41
  %131 = getelementptr inbounds i32, ptr %130, i64 %indvars.iv116
  %132 = load i32, ptr %131, align 4, !tbaa !19
  %133 = zext i32 %132 to i64
  %134 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %133) #4
  %135 = load i32, ptr %134, align 4, !tbaa !19
  %.not = icmp eq i32 %117, %135
  br i1 %.not, label %159, label %136

136:                                              ; preds = %127
  %137 = load i32, ptr %17, align 8, !tbaa !5
  %138 = icmp ult i32 %117, %137
  br i1 %138, label %139, label %147

139:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #4
  %140 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %3, i64 noundef %122)
          to label %141 unwind label %145

141:                                              ; preds = %139
  %142 = extractvalue { ptr, i64 } %140, 0
  store ptr %142, ptr %12, align 8
  %143 = extractvalue { ptr, i64 } %140, 1
  store i64 %143, ptr %40, align 8
  %144 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %12, i1 noundef zeroext true) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #4
  %.pre124 = load i32, ptr %17, align 8, !tbaa !5
  br label %147

145:                                              ; preds = %139
  %146 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #4
  br label %186

147:                                              ; preds = %141, %136
  %148 = phi i32 [ %.pre124, %141 ], [ %137, %136 ]
  %149 = icmp ult i32 %135, %148
  br i1 %149, label %150, label %159

150:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #4
  %151 = zext i32 %135 to i64
  %152 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %3, i64 noundef %151)
          to label %153 unwind label %157

153:                                              ; preds = %150
  %154 = extractvalue { ptr, i64 } %152, 0
  store ptr %154, ptr %13, align 8
  %155 = extractvalue { ptr, i64 } %152, 1
  store i64 %155, ptr %41, align 8
  %156 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %13, i1 noundef zeroext true) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #4
  br label %159

157:                                              ; preds = %150
  %158 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #4
  br label %186

159:                                              ; preds = %147, %153, %127
  %indvars.iv.next117 = add nuw nsw i64 %indvars.iv116, 1
  %160 = load ptr, ptr %39, align 8, !tbaa !26
  %161 = getelementptr inbounds %struct.aiFace, ptr %160, i64 %indvars.iv119
  %162 = load i32, ptr %161, align 8, !tbaa !43
  %163 = zext i32 %162 to i64
  %164 = icmp ult i64 %indvars.iv.next117, %163
  br i1 %164, label %127, label %._crit_edge100, !llvm.loop !45

.loopexit.loopexit:                               ; preds = %._crit_edge100
  %.pre125 = load i32, ptr %17, align 8, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %.preheader, %._crit_edge96
  %165 = phi i32 [ %.pre125, %.loopexit.loopexit ], [ %105, %.preheader ], [ %105, %._crit_edge96 ]
  %.not112 = icmp eq i32 %165, 0
  br i1 %.not112, label %._crit_edge107, label %.lr.ph106

.lr.ph106:                                        ; preds = %.loopexit
  %166 = getelementptr inbounds i8, ptr %14, i64 8
  %167 = getelementptr inbounds i8, ptr %0, i64 28
  %168 = getelementptr inbounds i8, ptr %0, i64 24
  br label %169

._crit_edge107:                                   ; preds = %180, %24, %.loopexit
  %.059.lcssa = phi i1 [ false, %.loopexit ], [ false, %24 ], [ %.1, %180 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #4
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %3) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %3) #4
  br label %189

169:                                              ; preds = %.lr.ph106, %180
  %indvars.iv122 = phi i64 [ 0, %.lr.ph106 ], [ %indvars.iv.next123, %180 ]
  %.059103 = phi i1 [ false, %.lr.ph106 ], [ %.1, %180 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #4
  %170 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %3, i64 noundef %indvars.iv122)
          to label %171 unwind label %178

171:                                              ; preds = %169
  %172 = extractvalue { ptr, i64 } %170, 0
  store ptr %172, ptr %14, align 8
  %173 = extractvalue { ptr, i64 } %170, 1
  store i64 %173, ptr %166, align 8
  %174 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %14) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #4
  br i1 %174, label %180, label %175

175:                                              ; preds = %171
  %176 = load i32, ptr %167, align 4, !tbaa !46
  %177 = add i32 %176, 1
  store i32 %177, ptr %167, align 4, !tbaa !46
  br label %180

178:                                              ; preds = %169
  %179 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #4
  br label %186

180:                                              ; preds = %175, %171
  %.1 = phi i1 [ true, %175 ], [ %.059103, %171 ]
  %181 = load i32, ptr %168, align 8, !tbaa !47
  %182 = add i32 %181, 1
  store i32 %182, ptr %168, align 8, !tbaa !47
  %indvars.iv.next123 = add nuw nsw i64 %indvars.iv122, 1
  %183 = load i32, ptr %17, align 8, !tbaa !5
  %184 = zext i32 %183 to i64
  %185 = icmp ult i64 %indvars.iv.next123, %184
  br i1 %185, label %169, label %._crit_edge107, !llvm.loop !48

186:                                              ; preds = %145, %157, %108, %91, %89, %70, %178
  %.pn78.pn.pn = phi { ptr, i32 } [ %179, %178 ], [ %109, %108 ], [ %92, %91 ], [ %90, %89 ], [ %71, %70 ], [ %158, %157 ], [ %146, %145 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #4
  br label %187

187:                                              ; preds = %186, %44
  %.pn78.pn.pn.pn = phi { ptr, i32 } [ %.pn78.pn.pn, %186 ], [ %45, %44 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #4
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %3) #4
  br label %188

188:                                              ; preds = %187, %42
  %.pn78.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn78.pn.pn.pn, %187 ], [ %43, %42 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %3) #4
  resume { ptr, i32 } %.pn78.pn.pn.pn.pn

189:                                              ; preds = %2, %._crit_edge107
  %.057 = phi i1 [ %.059.lcssa, %._crit_edge107 ], [ false, %2 ]
  ret i1 %.057
}

; 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 nounwind uwtable
declare dso_local void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6aiMesh8HasBonesEv(ptr noundef nonnull align 8 dereferenceable(1320)) local_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

; 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 = { 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 = !{!6, !10, i64 208}
!27 = !{!23, !10, i64 1048}
!28 = !{!29, !15, i64 4}
!29 = !{!"_ZTS14aiVertexWeight", !7, i64 0, !15, i64 4}
!30 = !{!31, !15, i64 32}
!31 = !{!"_ZTSN6Assimp13DeboneProcessE", !32, i64 0, !7, i64 24, !7, i64 28, !15, i64 32, !17, i64 36, !33, i64 40}
!32 = !{!"_ZTSN6Assimp11BaseProcessE", !10, i64 8, !10, 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", !10, i64 0, !10, i64 8, !10, i64 16}
!37 = !{!29, !7, i64 0}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.mustprogress"}
!40 = distinct !{!40, !39}
!41 = !{!42, !10, i64 8}
!42 = !{!"_ZTS6aiFace", !7, i64 0, !10, i64 8}
!43 = !{!42, !7, i64 0}
!44 = distinct !{!44, !39}
!45 = distinct !{!45, !39}
!46 = !{!31, !7, i64 28}
!47 = !{!31, !7, i64 24}
!48 = distinct !{!48, !39}


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