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

; 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" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>, std::allocator<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>>>::_Vector_impl" }
%"struct.std::_Vector_base<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>, std::allocator<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>>>::_Vector_impl" = type { %"struct.std::_Vector_base<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>, std::allocator<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>, std::allocator<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator" = type { i8 }
%"struct.Assimp::LimitBoneWeightsProcess::Weight" = type { i32, float }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%struct.aiVertexWeight = type { i32, float }
%struct.aiMesh = type { i32, i32, i32, ptr, ptr, ptr, ptr, [8 x ptr], [8 x ptr], [8 x i32], ptr, i32, ptr, i32, %struct.aiString, i32, ptr, i32, %struct.aiAABB, ptr }
%struct.aiString = type { i32, [1024 x i8] }
%struct.aiAABB = type { %class.aiVector3t, %class.aiVector3t }
%class.aiVector3t = type { float, float, float }
%struct.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 }
%"class.Assimp::LimitBoneWeightsProcess" = type <{ %"class.Assimp::BaseProcess", i32, i8, [3 x i8] }>
%"class.Assimp::BaseProcess" = type { ptr, ptr, ptr }

@.str.6 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [17 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 uwtable
define dso_local void @_ZN6Assimp23LimitBoneWeightsProcess11ProcessMeshEP6aiMesh(ptr noundef nonnull align 8 dereferenceable(29) %0, ptr noundef %1) #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.std::vector", align 8
  %6 = alloca %"class.std::allocator", align 1
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i64, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca %"struct.Assimp::LimitBoneWeightsProcess::Weight", align 4
  %16 = alloca i64, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %21 = alloca i32, align 4
  %22 = alloca float, align 4
  %23 = alloca ptr, align 8
  %24 = alloca float, align 4
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca %struct.aiVertexWeight, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %32 = load ptr, ptr %3, align 8
  %33 = load ptr, ptr %4, align 8, !tbaa !5
  %34 = call noundef zeroext i1 @_ZNK6aiMesh8HasBonesEv(ptr noundef nonnull align 8 dereferenceable(1320) %33)
  br i1 %34, label %36, label %35

35:                                               ; preds = %2
  br label %350

36:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 24, ptr %5) #7
  %37 = load ptr, ptr %4, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.aiMesh, ptr %37, i32 0, i32 1
  %39 = load i32, ptr %38, align 4, !tbaa !9
  %40 = zext i32 %39 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #7
  call void @_ZNSaIN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #7
  invoke void @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EEC2EmRKS5_(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %40, ptr noundef nonnull align 1 dereferenceable(1) %6)
          to label %41 unwind label %49

41:                                               ; preds = %36
  call void @_ZNSt15__new_allocatorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  store i64 0, ptr %9, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 0, ptr %10, align 4, !tbaa !19
  br label %42

42:                                               ; preds = %120, %41
  %43 = load i32, ptr %10, align 4, !tbaa !19
  %44 = load ptr, ptr %4, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.aiMesh, ptr %44, i32 0, i32 11
  %46 = load i32, ptr %45, align 8, !tbaa !20
  %47 = icmp ult i32 %43, %46
  br i1 %47, label %53, label %48

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

49:                                               ; preds = %36
  %50 = landingpad { ptr, i32 }
          cleanup
  %51 = extractvalue { ptr, i32 } %50, 0
  store ptr %51, ptr %7, align 8
  %52 = extractvalue { ptr, i32 } %50, 1
  store i32 %52, ptr %8, align 4
  call void @_ZNSt15__new_allocatorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #7
  br label %353

53:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %54 = load ptr, ptr %4, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.aiMesh, ptr %54, i32 0, i32 12
  %56 = load ptr, ptr %55, align 8, !tbaa !21
  %57 = load i32, ptr %10, align 4, !tbaa !19
  %58 = zext i32 %57 to i64
  %59 = getelementptr inbounds ptr, ptr %56, i64 %58
  %60 = load ptr, ptr %59, align 8, !tbaa !5
  store ptr %60, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  store i32 0, ptr %13, align 4, !tbaa !19
  br label %61

61:                                               ; preds = %107, %53
  %62 = load i32, ptr %13, align 4, !tbaa !19
  %63 = load ptr, ptr %12, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.aiBone, ptr %63, i32 0, i32 1
  %65 = load i32, ptr %64, align 4, !tbaa !22
  %66 = icmp ult i32 %62, %65
  br i1 %66, label %68, label %67

67:                                               ; preds = %61
  store i32 5, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  br label %119

68:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %69 = load ptr, ptr %12, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.aiBone, ptr %69, i32 0, i32 4
  %71 = load ptr, ptr %70, align 8, !tbaa !25
  %72 = load i32, ptr %13, align 4, !tbaa !19
  %73 = zext i32 %72 to i64
  %74 = getelementptr inbounds %struct.aiVertexWeight, ptr %71, i64 %73
  store ptr %74, ptr %14, align 8, !tbaa !5
  %75 = call noundef i64 @_ZNKSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  %76 = load ptr, ptr %14, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.aiVertexWeight, ptr %76, i32 0, i32 0
  %78 = load i32, ptr %77, align 4, !tbaa !26
  %79 = zext i32 %78 to i64
  %80 = icmp ule i64 %75, %79
  br i1 %80, label %81, label %82

81:                                               ; preds = %68
  store i32 7, ptr %11, align 4
  br label %104

82:                                               ; preds = %68
  %83 = load ptr, ptr %14, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.aiVertexWeight, ptr %83, i32 0, i32 0
  %85 = load i32, ptr %84, align 4, !tbaa !26
  %86 = zext i32 %85 to i64
  %87 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %86) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %88 = load i32, ptr %10, align 4, !tbaa !19
  %89 = load ptr, ptr %14, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.aiVertexWeight, ptr %89, i32 0, i32 1
  %91 = load float, ptr %90, align 4, !tbaa !28
  invoke void @_ZN6Assimp23LimitBoneWeightsProcess6WeightC2Ejf(ptr noundef nonnull align 4 dereferenceable(8) %15, i32 noundef %88, float noundef %91)
          to label %92 unwind label %110

92:                                               ; preds = %82
  invoke void @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(88) %87, ptr noundef nonnull align 4 dereferenceable(8) %15)
          to label %93 unwind label %110

93:                                               ; preds = %92
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %94 = load ptr, ptr %14, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.aiVertexWeight, ptr %94, i32 0, i32 0
  %96 = load i32, ptr %95, align 4, !tbaa !26
  %97 = zext i32 %96 to i64
  %98 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %97) #7
  %99 = invoke noundef i64 @_ZNK6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(88) %98)
          to label %100 unwind label %114

100:                                              ; preds = %93
  store i64 %99, ptr %16, align 8, !tbaa !17
  %101 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxImERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %16)
          to label %102 unwind label %114

102:                                              ; preds = %100
  %103 = load i64, ptr %101, align 8, !tbaa !17
  store i64 %103, ptr %9, align 8, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  store i32 0, ptr %11, align 4
  br label %104

104:                                              ; preds = %102, %81
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  %105 = load i32, ptr %11, align 4
  switch i32 %105, label %359 [
    i32 0, label %106
    i32 7, label %107
  ]

106:                                              ; preds = %104
  br label %107

107:                                              ; preds = %106, %104
  %108 = load i32, ptr %13, align 4, !tbaa !19
  %109 = add i32 %108, 1
  store i32 %109, ptr %13, align 4, !tbaa !19
  br label %61, !llvm.loop !29

110:                                              ; preds = %92, %82
  %111 = landingpad { ptr, i32 }
          cleanup
  %112 = extractvalue { ptr, i32 } %111, 0
  store ptr %112, ptr %7, align 8
  %113 = extractvalue { ptr, i32 } %111, 1
  store i32 %113, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  br label %118

114:                                              ; preds = %100, %93
  %115 = landingpad { ptr, i32 }
          cleanup
  %116 = extractvalue { ptr, i32 } %115, 0
  store ptr %116, ptr %7, align 8
  %117 = extractvalue { ptr, i32 } %115, 1
  store i32 %117, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %118

118:                                              ; preds = %114, %110
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  br label %352

119:                                              ; preds = %67
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  br label %120

120:                                              ; preds = %119
  %121 = load i32, ptr %10, align 4, !tbaa !19
  %122 = add i32 %121, 1
  store i32 %122, ptr %10, align 4, !tbaa !19
  br label %42, !llvm.loop !31

123:                                              ; preds = %48
  %124 = load i64, ptr %9, align 8, !tbaa !17
  %125 = getelementptr inbounds %"class.Assimp::LimitBoneWeightsProcess", ptr %32, i32 0, i32 1
  %126 = load i32, ptr %125, align 8, !tbaa !32
  %127 = zext i32 %126 to i64
  %128 = icmp ule i64 %124, %127
  br i1 %128, label %129, label %130

129:                                              ; preds = %123
  store i32 1, ptr %11, align 4
  br label %348

130:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  store i32 0, ptr %17, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  %131 = load ptr, ptr %4, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.aiMesh, ptr %131, i32 0, i32 11
  %133 = load i32, ptr %132, align 8, !tbaa !20
  store i32 %133, ptr %18, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %134 = call ptr @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  %135 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %19, i32 0, i32 0
  store ptr %134, ptr %135, align 8
  br label %136

136:                                              ; preds = %238, %130
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %137 = call ptr @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  %138 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %20, i32 0, i32 0
  store ptr %137, ptr %138, align 8
  %139 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  br i1 %139, label %141, label %140

140:                                              ; preds = %136
  store i32 8, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %243

141:                                              ; preds = %136
  %142 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  %143 = invoke noundef i64 @_ZNK6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(88) %142)
          to label %144 unwind label %150

144:                                              ; preds = %141
  %145 = getelementptr inbounds %"class.Assimp::LimitBoneWeightsProcess", ptr %32, i32 0, i32 1
  %146 = load i32, ptr %145, align 8, !tbaa !32
  %147 = zext i32 %146 to i64
  %148 = icmp ule i64 %143, %147
  br i1 %148, label %149, label %154

149:                                              ; preds = %144
  br label %238

150:                                              ; preds = %160, %157, %154, %141
  %151 = landingpad { ptr, i32 }
          cleanup
  %152 = extractvalue { ptr, i32 } %151, 0
  store ptr %152, ptr %7, align 8
  %153 = extractvalue { ptr, i32 } %151, 1
  store i32 %153, ptr %8, align 4
  br label %242

154:                                              ; preds = %144
  %155 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  %156 = invoke noundef ptr @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE5beginEv(ptr noundef nonnull align 8 dereferenceable(88) %155)
          to label %157 unwind label %150

157:                                              ; preds = %154
  %158 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  %159 = invoke noundef ptr @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE3endEv(ptr noundef nonnull align 8 dereferenceable(88) %158)
          to label %160 unwind label %150

160:                                              ; preds = %157
  invoke void @_ZSt4sortIPN6Assimp23LimitBoneWeightsProcess6WeightEEvT_S4_(ptr noundef %156, ptr noundef %159)
          to label %161 unwind label %150

161:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %162 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  %163 = invoke noundef i64 @_ZNK6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(88) %162)
          to label %164 unwind label %190

164:                                              ; preds = %161
  %165 = trunc i64 %163 to i32
  store i32 %165, ptr %21, align 4, !tbaa !19
  %166 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  %167 = getelementptr inbounds %"class.Assimp::LimitBoneWeightsProcess", ptr %32, i32 0, i32 1
  %168 = load i32, ptr %167, align 8, !tbaa !32
  %169 = zext i32 %168 to i64
  invoke void @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(88) %166, i64 noundef %169)
          to label %170 unwind label %190

170:                                              ; preds = %164
  %171 = load i32, ptr %21, align 4, !tbaa !19
  %172 = zext i32 %171 to i64
  %173 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  %174 = invoke noundef i64 @_ZNK6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(88) %173)
          to label %175 unwind label %190

175:                                              ; preds = %170
  %176 = sub i64 %172, %174
  %177 = trunc i64 %176 to i32
  %178 = load i32, ptr %17, align 4, !tbaa !19
  %179 = add i32 %178, %177
  store i32 %179, ptr %17, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  store float 0.000000e+00, ptr %22, align 4, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %180 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  %181 = invoke noundef ptr @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE5beginEv(ptr noundef nonnull align 8 dereferenceable(88) %180)
          to label %182 unwind label %194

182:                                              ; preds = %175
  store ptr %181, ptr %23, align 8, !tbaa !5
  br label %183

183:                                              ; preds = %204, %182
  %184 = load ptr, ptr %23, align 8, !tbaa !5
  %185 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  %186 = invoke noundef ptr @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE3endEv(ptr noundef nonnull align 8 dereferenceable(88) %185)
          to label %187 unwind label %194

187:                                              ; preds = %183
  %188 = icmp ne ptr %184, %186
  br i1 %188, label %198, label %189

189:                                              ; preds = %187
  store i32 11, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  br label %207

190:                                              ; preds = %170, %164, %161
  %191 = landingpad { ptr, i32 }
          cleanup
  %192 = extractvalue { ptr, i32 } %191, 0
  store ptr %192, ptr %7, align 8
  %193 = extractvalue { ptr, i32 } %191, 1
  store i32 %193, ptr %8, align 4
  br label %241

194:                                              ; preds = %183, %175
  %195 = landingpad { ptr, i32 }
          cleanup
  %196 = extractvalue { ptr, i32 } %195, 0
  store ptr %196, ptr %7, align 8
  %197 = extractvalue { ptr, i32 } %195, 1
  store i32 %197, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  br label %240

198:                                              ; preds = %187
  %199 = load ptr, ptr %23, align 8, !tbaa !5
  %200 = getelementptr inbounds %"struct.Assimp::LimitBoneWeightsProcess::Weight", ptr %199, i32 0, i32 1
  %201 = load float, ptr %200, align 4, !tbaa !37
  %202 = load float, ptr %22, align 4, !tbaa !36
  %203 = fadd float %202, %201
  store float %203, ptr %22, align 4, !tbaa !36
  br label %204

204:                                              ; preds = %198
  %205 = load ptr, ptr %23, align 8, !tbaa !5
  %206 = getelementptr inbounds %"struct.Assimp::LimitBoneWeightsProcess::Weight", ptr %205, i32 1
  store ptr %206, ptr %23, align 8, !tbaa !5
  br label %183, !llvm.loop !39

207:                                              ; preds = %189
  %208 = load float, ptr %22, align 4, !tbaa !36
  %209 = fcmp une float 0.000000e+00, %208
  br i1 %209, label %210, label %237

210:                                              ; preds = %207
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  %211 = load float, ptr %22, align 4, !tbaa !36
  %212 = fdiv float 1.000000e+00, %211
  store float %212, ptr %24, align 4, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %213 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  %214 = invoke noundef ptr @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE5beginEv(ptr noundef nonnull align 8 dereferenceable(88) %213)
          to label %215 unwind label %223

215:                                              ; preds = %210
  store ptr %214, ptr %25, align 8, !tbaa !5
  br label %216

216:                                              ; preds = %233, %215
  %217 = load ptr, ptr %25, align 8, !tbaa !5
  %218 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  %219 = invoke noundef ptr @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE3endEv(ptr noundef nonnull align 8 dereferenceable(88) %218)
          to label %220 unwind label %223

220:                                              ; preds = %216
  %221 = icmp ne ptr %217, %219
  br i1 %221, label %227, label %222

222:                                              ; preds = %220
  store i32 14, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  br label %236

223:                                              ; preds = %216, %210
  %224 = landingpad { ptr, i32 }
          cleanup
  %225 = extractvalue { ptr, i32 } %224, 0
  store ptr %225, ptr %7, align 8
  %226 = extractvalue { ptr, i32 } %224, 1
  store i32 %226, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %240

227:                                              ; preds = %220
  %228 = load float, ptr %24, align 4, !tbaa !36
  %229 = load ptr, ptr %25, align 8, !tbaa !5
  %230 = getelementptr inbounds %"struct.Assimp::LimitBoneWeightsProcess::Weight", ptr %229, i32 0, i32 1
  %231 = load float, ptr %230, align 4, !tbaa !37
  %232 = fmul float %231, %228
  store float %232, ptr %230, align 4, !tbaa !37
  br label %233

233:                                              ; preds = %227
  %234 = load ptr, ptr %25, align 8, !tbaa !5
  %235 = getelementptr inbounds %"struct.Assimp::LimitBoneWeightsProcess::Weight", ptr %234, i32 1
  store ptr %235, ptr %25, align 8, !tbaa !5
  br label %216, !llvm.loop !40

236:                                              ; preds = %222
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %237

237:                                              ; preds = %236, %207
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %238

238:                                              ; preds = %237, %149
  %239 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  br label %136, !llvm.loop !41

240:                                              ; preds = %223, %194
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  br label %241

241:                                              ; preds = %240, %190
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %242

242:                                              ; preds = %241, %150
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %351

243:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  store i32 0, ptr %26, align 4, !tbaa !19
  br label %244

244:                                              ; preds = %260, %243
  %245 = load i32, ptr %26, align 4, !tbaa !19
  %246 = load ptr, ptr %4, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.aiMesh, ptr %246, i32 0, i32 11
  %248 = load i32, ptr %247, align 8, !tbaa !20
  %249 = icmp ult i32 %245, %248
  br i1 %249, label %251, label %250

250:                                              ; preds = %244
  store i32 17, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %263

251:                                              ; preds = %244
  %252 = load ptr, ptr %4, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.aiMesh, ptr %252, i32 0, i32 12
  %254 = load ptr, ptr %253, align 8, !tbaa !21
  %255 = load i32, ptr %26, align 4, !tbaa !19
  %256 = zext i32 %255 to i64
  %257 = getelementptr inbounds ptr, ptr %254, i64 %256
  %258 = load ptr, ptr %257, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.aiBone, ptr %258, i32 0, i32 1
  store i32 0, ptr %259, align 4, !tbaa !22
  br label %260

260:                                              ; preds = %251
  %261 = load i32, ptr %26, align 4, !tbaa !19
  %262 = add i32 %261, 1
  store i32 %262, ptr %26, align 4, !tbaa !19
  br label %244, !llvm.loop !42

263:                                              ; preds = %250
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  store i32 0, ptr %27, align 4, !tbaa !19
  br label %264

264:                                              ; preds = %321, %263
  %265 = load i32, ptr %27, align 4, !tbaa !19
  %266 = zext i32 %265 to i64
  %267 = call noundef i64 @_ZNKSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  %268 = icmp ult i64 %266, %267
  br i1 %268, label %270, label %269

269:                                              ; preds = %264
  store i32 20, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  br label %324

270:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %271 = load i32, ptr %27, align 4, !tbaa !19
  %272 = zext i32 %271 to i64
  %273 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %272) #7
  store ptr %273, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  %274 = load ptr, ptr %28, align 8, !tbaa !5
  %275 = invoke noundef ptr @_ZNK6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE5beginEv(ptr noundef nonnull align 8 dereferenceable(88) %274)
          to label %276 unwind label %284

276:                                              ; preds = %270
  store ptr %275, ptr %29, align 8, !tbaa !5
  br label %277

277:                                              ; preds = %312, %276
  %278 = load ptr, ptr %29, align 8, !tbaa !5
  %279 = load ptr, ptr %28, align 8, !tbaa !5
  %280 = invoke noundef ptr @_ZNK6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE3endEv(ptr noundef nonnull align 8 dereferenceable(88) %279)
          to label %281 unwind label %284

281:                                              ; preds = %277
  %282 = icmp ne ptr %278, %280
  br i1 %282, label %288, label %283

283:                                              ; preds = %281
  store i32 23, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  br label %320

284:                                              ; preds = %277, %270
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %7, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %8, align 4
  br label %319

288:                                              ; preds = %281
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %289 = load ptr, ptr %4, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.aiMesh, ptr %289, i32 0, i32 12
  %291 = load ptr, ptr %290, align 8, !tbaa !21
  %292 = load ptr, ptr %29, align 8, !tbaa !5
  %293 = getelementptr inbounds %"struct.Assimp::LimitBoneWeightsProcess::Weight", ptr %292, i32 0, i32 0
  %294 = load i32, ptr %293, align 4, !tbaa !43
  %295 = zext i32 %294 to i64
  %296 = getelementptr inbounds ptr, ptr %291, i64 %295
  %297 = load ptr, ptr %296, align 8, !tbaa !5
  store ptr %297, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %298 = load i32, ptr %27, align 4, !tbaa !19
  %299 = load ptr, ptr %29, align 8, !tbaa !5
  %300 = getelementptr inbounds %"struct.Assimp::LimitBoneWeightsProcess::Weight", ptr %299, i32 0, i32 1
  %301 = load float, ptr %300, align 4, !tbaa !37
  invoke void @_ZN14aiVertexWeightC2Ejf(ptr noundef nonnull align 4 dereferenceable(8) %31, i32 noundef %298, float noundef %301)
          to label %302 unwind label %315

302:                                              ; preds = %288
  %303 = load ptr, ptr %30, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.aiBone, ptr %303, i32 0, i32 4
  %305 = load ptr, ptr %304, align 8, !tbaa !25
  %306 = load ptr, ptr %30, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.aiBone, ptr %306, i32 0, i32 1
  %308 = load i32, ptr %307, align 4, !tbaa !22
  %309 = add i32 %308, 1
  store i32 %309, ptr %307, align 4, !tbaa !22
  %310 = zext i32 %308 to i64
  %311 = getelementptr inbounds %struct.aiVertexWeight, ptr %305, i64 %310
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %311, ptr align 4 %31, i64 8, i1 false), !tbaa.struct !44
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  br label %312

312:                                              ; preds = %302
  %313 = load ptr, ptr %29, align 8, !tbaa !5
  %314 = getelementptr inbounds %"struct.Assimp::LimitBoneWeightsProcess::Weight", ptr %313, i32 1
  store ptr %314, ptr %29, align 8, !tbaa !5
  br label %277, !llvm.loop !45

315:                                              ; preds = %288
  %316 = landingpad { ptr, i32 }
          cleanup
  %317 = extractvalue { ptr, i32 } %316, 0
  store ptr %317, ptr %7, align 8
  %318 = extractvalue { ptr, i32 } %316, 1
  store i32 %318, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  br label %319

319:                                              ; preds = %315, %284
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  br label %351

320:                                              ; preds = %283
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  br label %321

321:                                              ; preds = %320
  %322 = load i32, ptr %27, align 4, !tbaa !19
  %323 = add i32 %322, 1
  store i32 %323, ptr %27, align 4, !tbaa !19
  br label %264, !llvm.loop !46

324:                                              ; preds = %269
  %325 = getelementptr inbounds %"class.Assimp::LimitBoneWeightsProcess", ptr %32, i32 0, i32 2
  %326 = load i8, ptr %325, align 4, !tbaa !47, !range !48, !noundef !49
  %327 = trunc i8 %326 to i1
  br i1 %327, label %328, label %338

328:                                              ; preds = %324
  %329 = load ptr, ptr %4, align 8, !tbaa !5
  %330 = invoke noundef i32 @_ZN6AssimpL16removeEmptyBonesEP6aiMesh(ptr noundef %329)
          to label %331 unwind label %334

331:                                              ; preds = %328
  %332 = load ptr, ptr %4, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.aiMesh, ptr %332, i32 0, i32 11
  store i32 %330, ptr %333, align 8, !tbaa !20
  br label %338

334:                                              ; preds = %343, %341, %338, %328
  %335 = landingpad { ptr, i32 }
          cleanup
  %336 = extractvalue { ptr, i32 } %335, 0
  store ptr %336, ptr %7, align 8
  %337 = extractvalue { ptr, i32 } %335, 1
  store i32 %337, ptr %8, align 4
  br label %351

338:                                              ; preds = %331, %324
  %339 = invoke noundef zeroext i1 @_ZN6Assimp13DefaultLogger12isNullLoggerEv()
          to label %340 unwind label %334

340:                                              ; preds = %338
  br i1 %339, label %347, label %341

341:                                              ; preds = %340
  %342 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %343 unwind label %334

343:                                              ; preds = %341
  %344 = load ptr, ptr %4, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.aiMesh, ptr %344, i32 0, i32 11
  invoke void @_ZN6Assimp6Logger4infoIJRA9_KcRjRA24_S2_S5_RA17_S2_S5_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12) %342, ptr noundef nonnull align 1 dereferenceable(9) @.str.6, ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 1 dereferenceable(24) @.str.7, ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 1 dereferenceable(17) @.str.8, ptr noundef nonnull align 4 dereferenceable(4) %345)
          to label %346 unwind label %334

346:                                              ; preds = %343
  br label %347

347:                                              ; preds = %346, %340
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  store i32 0, ptr %11, align 4
  br label %348

348:                                              ; preds = %347, %129
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %5) #7
  %349 = load i32, ptr %11, align 4
  switch i32 %349, label %359 [
    i32 0, label %350
    i32 1, label %350
  ]

350:                                              ; preds = %348, %348, %35
  ret void

351:                                              ; preds = %334, %319, %242
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  br label %352

352:                                              ; preds = %351, %118
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  br label %353

353:                                              ; preds = %352, %49
  call void @llvm.lifetime.end.p0(i64 24, ptr %5) #7
  br label %354

354:                                              ; preds = %353
  %355 = load ptr, ptr %7, align 8
  %356 = load i32, ptr %8, align 4
  %357 = insertvalue { ptr, i32 } poison, ptr %355, 0
  %358 = insertvalue { ptr, i32 } %357, i32 %356, 1
  resume { ptr, i32 } %358

359:                                              ; preds = %348, %104
  unreachable
}

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EEC2EmRKS5_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, 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 noundef i64 @_ZNKSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #3 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxImERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #4

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #4

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4sortIPN6Assimp23LimitBoneWeightsProcess6WeightEEvT_S4_(ptr noundef, ptr noundef) #5

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(88), i64 noundef) #2 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZN6AssimpL16removeEmptyBonesEP6aiMesh(ptr noundef) #2

declare noundef zeroext i1 @_ZN6Assimp13DefaultLogger12isNullLoggerEv() #0

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp6Logger4infoIJRA9_KcRjRA24_S2_S5_RA17_S2_S5_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(9), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(17), ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 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 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 nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { 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 4}
!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 = !{!"long", !7, i64 0}
!19 = !{!11, !11, i64 0}
!20 = !{!10, !11, i64 216}
!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, !11, i64 0}
!27 = !{!"_ZTS14aiVertexWeight", !11, i64 0, !16, i64 4}
!28 = !{!27, !16, i64 4}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = !{!33, !11, i64 24}
!33 = !{!"_ZTSN6Assimp23LimitBoneWeightsProcessE", !34, i64 0, !11, i64 24, !35, i64 28}
!34 = !{!"_ZTSN6Assimp11BaseProcessE", !6, i64 8, !6, i64 16}
!35 = !{!"bool", !7, i64 0}
!36 = !{!16, !16, i64 0}
!37 = !{!38, !16, i64 4}
!38 = !{!"_ZTSN6Assimp23LimitBoneWeightsProcess6WeightE", !11, i64 0, !16, i64 4}
!39 = distinct !{!39, !30}
!40 = distinct !{!40, !30}
!41 = distinct !{!41, !30}
!42 = distinct !{!42, !30}
!43 = !{!38, !11, i64 0}
!44 = !{i64 0, i64 4, !19, i64 4, i64 4, !36}
!45 = distinct !{!45, !30}
!46 = distinct !{!46, !30}
!47 = !{!33, !35, i64 28}
!48 = !{i8 0, i8 2}
!49 = !{}


; 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" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>, std::allocator<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>>>::_Vector_impl" }
%"struct.std::_Vector_base<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>, std::allocator<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>>>::_Vector_impl" = type { %"struct.std::_Vector_base<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>, std::allocator<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>, std::allocator<Assimp::SmallVector<Assimp::LimitBoneWeightsProcess::Weight, 8>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator" = type { i8 }
%"struct.Assimp::LimitBoneWeightsProcess::Weight" = type { i32, float }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%struct.aiVertexWeight = type { i32, float }

@.str.6 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [17 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 uwtable
define dso_local void @_ZN6Assimp23LimitBoneWeightsProcess11ProcessMeshEP6aiMesh(ptr nocapture noundef nonnull readonly align 8 dereferenceable(29) %0, ptr noundef nonnull %1) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::vector", align 8
  %4 = alloca %"class.std::allocator", align 1
  %5 = alloca i64, align 8
  %6 = alloca %"struct.Assimp::LimitBoneWeightsProcess::Weight", align 4
  %7 = alloca i64, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %12 = alloca %struct.aiVertexWeight, align 8
  %13 = tail call noundef zeroext i1 @_ZNK6aiMesh8HasBonesEv(ptr noundef nonnull align 8 dereferenceable(1320) %1)
  br i1 %13, label %14, label %195

14:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #6
  %15 = getelementptr inbounds i8, ptr %1, i64 4
  %16 = load i32, ptr %15, align 4, !tbaa !5
  %17 = zext i32 %16 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #6
  call void @_ZNSaIN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  invoke void @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EEC2EmRKS5_(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %17, ptr noundef nonnull align 1 dereferenceable(1) %4)
          to label %18 unwind label %25

18:                                               ; preds = %14
  call void @_ZNSt15__new_allocatorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #6
  store i64 0, ptr %5, align 8, !tbaa !16
  %19 = getelementptr inbounds i8, ptr %1, i64 216
  %20 = load i32, ptr %19, align 8, !tbaa !18
  %.not109 = icmp eq i32 %20, 0
  br i1 %.not109, label %._crit_edge83.thread, label %.lr.ph82

.lr.ph82:                                         ; preds = %18
  %21 = getelementptr inbounds i8, ptr %1, i64 224
  br label %27

._crit_edge83:                                    ; preds = %._crit_edge
  %.pre122 = load i64, ptr %5, align 8, !tbaa !16
  %22 = getelementptr inbounds i8, ptr %0, i64 24
  %23 = load i32, ptr %22, align 8, !tbaa !19
  %24 = zext i32 %23 to i64
  %.not = icmp ugt i64 %.pre122, %24
  br i1 %.not, label %62, label %._crit_edge83.thread

25:                                               ; preds = %14
  %26 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #6
  br label %198

27:                                               ; preds = %.lr.ph82, %._crit_edge
  %28 = phi i32 [ %20, %.lr.ph82 ], [ %36, %._crit_edge ]
  %indvars.iv116 = phi i64 [ 0, %.lr.ph82 ], [ %indvars.iv.next117, %._crit_edge ]
  %29 = load ptr, ptr %21, align 8, !tbaa !23
  %30 = getelementptr inbounds ptr, ptr %29, i64 %indvars.iv116
  %31 = load ptr, ptr %30, align 8, !tbaa !24
  %32 = getelementptr inbounds i8, ptr %31, i64 1028
  %33 = load i32, ptr %32, align 4, !tbaa !25
  %.not110 = icmp eq i32 %33, 0
  br i1 %.not110, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %27
  %34 = getelementptr inbounds i8, ptr %31, i64 1048
  %35 = trunc nuw i64 %indvars.iv116 to i32
  br label %39

._crit_edge.loopexit:                             ; preds = %56
  %.pre = load i32, ptr %19, align 8, !tbaa !18
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %27
  %36 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %28, %27 ]
  %indvars.iv.next117 = add nuw nsw i64 %indvars.iv116, 1
  %37 = zext i32 %36 to i64
  %38 = icmp ult i64 %indvars.iv.next117, %37
  br i1 %38, label %27, label %._crit_edge83, !llvm.loop !28

39:                                               ; preds = %.lr.ph, %56
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %56 ]
  %40 = load ptr, ptr %34, align 8, !tbaa !30
  %41 = getelementptr inbounds %struct.aiVertexWeight, ptr %40, i64 %indvars.iv
  %42 = call noundef i64 @_ZNKSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  %43 = load i32, ptr %41, align 4, !tbaa !31
  %44 = zext i32 %43 to i64
  %.not72 = icmp ugt i64 %42, %44
  br i1 %.not72, label %45, label %56

45:                                               ; preds = %39
  %46 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %44) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #6
  %47 = getelementptr inbounds i8, ptr %41, i64 4
  %48 = load float, ptr %47, align 4, !tbaa !33
  call void @_ZN6Assimp23LimitBoneWeightsProcess6WeightC2Ejf(ptr noundef nonnull align 4 dereferenceable(8) %6, i32 noundef %35, float noundef %48)
  invoke void @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE9push_backERKS2_(ptr noundef nonnull align 8 dereferenceable(88) %46, ptr noundef nonnull align 4 dereferenceable(8) %6)
          to label %49 unwind label %60

49:                                               ; preds = %45
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #6
  %50 = load i32, ptr %41, align 4, !tbaa !31
  %51 = zext i32 %50 to i64
  %52 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %51) #6
  %53 = call noundef i64 @_ZNK6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(88) %52)
  store i64 %53, ptr %7, align 8, !tbaa !16
  %54 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxImERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %7)
  %55 = load i64, ptr %54, align 8, !tbaa !16
  store i64 %55, ptr %5, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #6
  br label %56

56:                                               ; preds = %39, %49
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %57 = load i32, ptr %32, align 4, !tbaa !25
  %58 = zext i32 %57 to i64
  %59 = icmp ult i64 %indvars.iv.next, %58
  br i1 %59, label %39, label %._crit_edge.loopexit, !llvm.loop !34

60:                                               ; preds = %45
  %61 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  br label %197

62:                                               ; preds = %._crit_edge83
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #6
  store i32 0, ptr %8, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #6
  store i32 %36, ptr %9, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  %63 = call ptr @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  store ptr %63, ptr %10, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #6
  %64 = call ptr @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  store ptr %64, ptr %11, align 8
  %65 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  br i1 %65, label %.lr.ph96, label %._crit_edge97

._crit_edge97:                                    ; preds = %.loopexit, %62
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  %66 = load i32, ptr %19, align 8, !tbaa !18
  %.not111 = icmp eq i32 %66, 0
  br i1 %.not111, label %.preheader, label %.lr.ph100

.lr.ph100:                                        ; preds = %._crit_edge97
  %67 = getelementptr inbounds i8, ptr %1, i64 224
  %68 = load ptr, ptr %67, align 8, !tbaa !23
  %wide.trip.count = zext i32 %66 to i64
  %xtraiter = and i64 %wide.trip.count, 7
  %69 = icmp ult i32 %66, 8
  br i1 %69, label %.preheader.loopexit.unr-lcssa, label %.lr.ph100.new

.lr.ph100.new:                                    ; preds = %.lr.ph100
  %unroll_iter = and i64 %wide.trip.count, 4294967288
  br label %129

.lr.ph96:                                         ; preds = %62, %.loopexit
  %70 = phi i32 [ %119, %.loopexit ], [ 0, %62 ]
  %71 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  %72 = call noundef i64 @_ZNK6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(88) %71)
  %73 = load i32, ptr %22, align 8, !tbaa !19
  %74 = zext i32 %73 to i64
  %.not67 = icmp ugt i64 %72, %74
  br i1 %.not67, label %77, label %.loopexit

75:                                               ; preds = %77
  %76 = landingpad { ptr, i32 }
          cleanup
  br label %123

77:                                               ; preds = %.lr.ph96
  %78 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  %79 = call noundef ptr @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE5beginEv(ptr noundef nonnull align 8 dereferenceable(88) %78)
  %80 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  %81 = call noundef ptr @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE3endEv(ptr noundef nonnull align 8 dereferenceable(88) %80)
  invoke void @_ZSt4sortIPN6Assimp23LimitBoneWeightsProcess6WeightEEvT_S4_(ptr noundef %79, ptr noundef %81)
          to label %82 unwind label %75

82:                                               ; preds = %77
  %83 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  %84 = call noundef i64 @_ZNK6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(88) %83)
  %85 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  %86 = load i32, ptr %22, align 8, !tbaa !19
  %87 = zext i32 %86 to i64
  invoke void @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(88) %85, i64 noundef %87)
          to label %88 unwind label %99

88:                                               ; preds = %82
  %89 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  %90 = call noundef i64 @_ZNK6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(88) %89)
  %91 = sub i64 %84, %90
  %92 = trunc i64 %91 to i32
  %93 = add i32 %70, %92
  store i32 %93, ptr %8, align 4, !tbaa !35
  %94 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  %95 = call noundef ptr @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE5beginEv(ptr noundef nonnull align 8 dereferenceable(88) %94)
  %96 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  %97 = call noundef ptr @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE3endEv(ptr noundef nonnull align 8 dereferenceable(88) %96)
  %.not7084 = icmp eq ptr %95, %97
  br i1 %.not7084, label %.loopexit, label %.lr.ph88

._crit_edge89:                                    ; preds = %.lr.ph88
  %98 = fcmp une float %103, 0.000000e+00
  br i1 %98, label %107, label %.loopexit

99:                                               ; preds = %82
  %100 = landingpad { ptr, i32 }
          cleanup
  br label %123

.lr.ph88:                                         ; preds = %88, %.lr.ph88
  %.06186 = phi ptr [ %104, %.lr.ph88 ], [ %95, %88 ]
  %.06285 = phi float [ %103, %.lr.ph88 ], [ 0.000000e+00, %88 ]
  %101 = getelementptr inbounds i8, ptr %.06186, i64 4
  %102 = load float, ptr %101, align 4, !tbaa !36
  %103 = fadd float %.06285, %102
  %104 = getelementptr inbounds i8, ptr %.06186, i64 8
  %105 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  %106 = call noundef ptr @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE3endEv(ptr noundef nonnull align 8 dereferenceable(88) %105)
  %.not70 = icmp eq ptr %104, %106
  br i1 %.not70, label %._crit_edge89, label %.lr.ph88, !llvm.loop !38

107:                                              ; preds = %._crit_edge89
  %108 = fdiv float 1.000000e+00, %103
  %109 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  %110 = call noundef ptr @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE5beginEv(ptr noundef nonnull align 8 dereferenceable(88) %109)
  %111 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  %112 = call noundef ptr @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE3endEv(ptr noundef nonnull align 8 dereferenceable(88) %111)
  %.not7191 = icmp eq ptr %110, %112
  br i1 %.not7191, label %.loopexit, label %.lr.ph94

.lr.ph94:                                         ; preds = %107, %.lr.ph94
  %.05992 = phi ptr [ %116, %.lr.ph94 ], [ %110, %107 ]
  %113 = getelementptr inbounds i8, ptr %.05992, i64 4
  %114 = load float, ptr %113, align 4, !tbaa !36
  %115 = fmul float %108, %114
  store float %115, ptr %113, align 4, !tbaa !36
  %116 = getelementptr inbounds i8, ptr %.05992, i64 8
  %117 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  %118 = call noundef ptr @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE3endEv(ptr noundef nonnull align 8 dereferenceable(88) %117)
  %.not71 = icmp eq ptr %116, %118
  br i1 %.not71, label %.loopexit, label %.lr.ph94, !llvm.loop !39

.loopexit:                                        ; preds = %.lr.ph94, %88, %107, %._crit_edge89, %.lr.ph96
  %119 = phi i32 [ %93, %107 ], [ %93, %._crit_edge89 ], [ %70, %.lr.ph96 ], [ %93, %88 ], [ %93, %.lr.ph94 ]
  %120 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #6
  %121 = call ptr @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  store ptr %121, ptr %11, align 8
  %122 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  br i1 %122, label %.lr.ph96, label %._crit_edge97, !llvm.loop !40

123:                                              ; preds = %99, %75
  %.pn = phi { ptr, i32 } [ %100, %99 ], [ %76, %75 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  br label %196

.preheader.loopexit.unr-lcssa:                    ; preds = %129, %.lr.ph100
  %indvars.iv119.unr = phi i64 [ 0, %.lr.ph100 ], [ %indvars.iv.next120.7, %129 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader, label %.epil.preheader

.epil.preheader:                                  ; preds = %.preheader.loopexit.unr-lcssa, %.epil.preheader
  %indvars.iv119.epil = phi i64 [ %indvars.iv.next120.epil, %.epil.preheader ], [ %indvars.iv119.unr, %.preheader.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.preheader.loopexit.unr-lcssa ]
  %124 = getelementptr inbounds ptr, ptr %68, i64 %indvars.iv119.epil
  %125 = load ptr, ptr %124, align 8, !tbaa !24
  %126 = getelementptr inbounds i8, ptr %125, i64 1028
  store i32 0, ptr %126, align 4, !tbaa !25
  %indvars.iv.next120.epil = add nuw nsw i64 %indvars.iv119.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.preheader, label %.epil.preheader, !llvm.loop !41

.preheader:                                       ; preds = %.preheader.loopexit.unr-lcssa, %.epil.preheader, %._crit_edge97
  %127 = call noundef i64 @_ZNKSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  %.not112 = icmp eq i64 %127, 0
  br i1 %.not112, label %._crit_edge108, label %.lr.ph107

.lr.ph107:                                        ; preds = %.preheader
  %128 = getelementptr inbounds i8, ptr %1, i64 224
  br label %157

129:                                              ; preds = %129, %.lr.ph100.new
  %indvars.iv119 = phi i64 [ 0, %.lr.ph100.new ], [ %indvars.iv.next120.7, %129 ]
  %niter = phi i64 [ 0, %.lr.ph100.new ], [ %niter.next.7, %129 ]
  %130 = getelementptr inbounds ptr, ptr %68, i64 %indvars.iv119
  %131 = load ptr, ptr %130, align 8, !tbaa !24
  %132 = getelementptr inbounds i8, ptr %131, i64 1028
  store i32 0, ptr %132, align 4, !tbaa !25
  %indvars.iv.next120 = or disjoint i64 %indvars.iv119, 1
  %133 = getelementptr inbounds ptr, ptr %68, i64 %indvars.iv.next120
  %134 = load ptr, ptr %133, align 8, !tbaa !24
  %135 = getelementptr inbounds i8, ptr %134, i64 1028
  store i32 0, ptr %135, align 4, !tbaa !25
  %indvars.iv.next120.1 = or disjoint i64 %indvars.iv119, 2
  %136 = getelementptr inbounds ptr, ptr %68, i64 %indvars.iv.next120.1
  %137 = load ptr, ptr %136, align 8, !tbaa !24
  %138 = getelementptr inbounds i8, ptr %137, i64 1028
  store i32 0, ptr %138, align 4, !tbaa !25
  %indvars.iv.next120.2 = or disjoint i64 %indvars.iv119, 3
  %139 = getelementptr inbounds ptr, ptr %68, i64 %indvars.iv.next120.2
  %140 = load ptr, ptr %139, align 8, !tbaa !24
  %141 = getelementptr inbounds i8, ptr %140, i64 1028
  store i32 0, ptr %141, align 4, !tbaa !25
  %indvars.iv.next120.3 = or disjoint i64 %indvars.iv119, 4
  %142 = getelementptr inbounds ptr, ptr %68, i64 %indvars.iv.next120.3
  %143 = load ptr, ptr %142, align 8, !tbaa !24
  %144 = getelementptr inbounds i8, ptr %143, i64 1028
  store i32 0, ptr %144, align 4, !tbaa !25
  %indvars.iv.next120.4 = or disjoint i64 %indvars.iv119, 5
  %145 = getelementptr inbounds ptr, ptr %68, i64 %indvars.iv.next120.4
  %146 = load ptr, ptr %145, align 8, !tbaa !24
  %147 = getelementptr inbounds i8, ptr %146, i64 1028
  store i32 0, ptr %147, align 4, !tbaa !25
  %indvars.iv.next120.5 = or disjoint i64 %indvars.iv119, 6
  %148 = getelementptr inbounds ptr, ptr %68, i64 %indvars.iv.next120.5
  %149 = load ptr, ptr %148, align 8, !tbaa !24
  %150 = getelementptr inbounds i8, ptr %149, i64 1028
  store i32 0, ptr %150, align 4, !tbaa !25
  %indvars.iv.next120.6 = or disjoint i64 %indvars.iv119, 7
  %151 = getelementptr inbounds ptr, ptr %68, i64 %indvars.iv.next120.6
  %152 = load ptr, ptr %151, align 8, !tbaa !24
  %153 = getelementptr inbounds i8, ptr %152, i64 1028
  store i32 0, ptr %153, align 4, !tbaa !25
  %indvars.iv.next120.7 = add nuw nsw i64 %indvars.iv119, 8
  %niter.next.7 = add i64 %niter, 8
  %niter.ncmp.7 = icmp eq i64 %niter.next.7, %unroll_iter
  br i1 %niter.ncmp.7, label %.preheader.loopexit.unr-lcssa, label %129, !llvm.loop !43

._crit_edge108:                                   ; preds = %._crit_edge105, %.preheader
  %154 = getelementptr inbounds i8, ptr %0, i64 28
  %155 = load i8, ptr %154, align 4, !tbaa !44, !range !45, !noundef !46
  %156 = trunc nuw i8 %155 to i1
  br i1 %156, label %183, label %188

157:                                              ; preds = %.lr.ph107, %._crit_edge105
  %158 = phi i64 [ 0, %.lr.ph107 ], [ %163, %._crit_edge105 ]
  %.057106 = phi i32 [ 0, %.lr.ph107 ], [ %162, %._crit_edge105 ]
  %159 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %158) #6
  %160 = call noundef ptr @_ZNK6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE5beginEv(ptr noundef nonnull align 8 dereferenceable(88) %159)
  %161 = call noundef ptr @_ZNK6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE3endEv(ptr noundef nonnull align 8 dereferenceable(88) %159)
  %.not66101 = icmp eq ptr %160, %161
  br i1 %.not66101, label %._crit_edge105, label %.lr.ph104

._crit_edge105:                                   ; preds = %.lr.ph104, %157
  %162 = add i32 %.057106, 1
  %163 = zext i32 %162 to i64
  %164 = call noundef i64 @_ZNKSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  %165 = icmp ugt i64 %164, %163
  br i1 %165, label %157, label %._crit_edge108, !llvm.loop !47

.lr.ph104:                                        ; preds = %157, %.lr.ph104
  %.052102 = phi ptr [ %181, %.lr.ph104 ], [ %160, %157 ]
  %166 = load ptr, ptr %128, align 8, !tbaa !23
  %167 = load i32, ptr %.052102, align 4, !tbaa !48
  %168 = zext i32 %167 to i64
  %169 = getelementptr inbounds ptr, ptr %166, i64 %168
  %170 = load ptr, ptr %169, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  %171 = getelementptr inbounds i8, ptr %.052102, i64 4
  %172 = load float, ptr %171, align 4, !tbaa !36
  call void @_ZN14aiVertexWeightC2Ejf(ptr noundef nonnull align 4 dereferenceable(8) %12, i32 noundef %.057106, float noundef %172)
  %173 = getelementptr inbounds i8, ptr %170, i64 1048
  %174 = load ptr, ptr %173, align 8, !tbaa !30
  %175 = getelementptr inbounds i8, ptr %170, i64 1028
  %176 = load i32, ptr %175, align 4, !tbaa !25
  %177 = add i32 %176, 1
  store i32 %177, ptr %175, align 4, !tbaa !25
  %178 = zext i32 %176 to i64
  %179 = getelementptr inbounds %struct.aiVertexWeight, ptr %174, i64 %178
  %180 = load i64, ptr %12, align 8
  store i64 %180, ptr %179, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  %181 = getelementptr inbounds i8, ptr %.052102, i64 8
  %182 = call noundef ptr @_ZNK6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE3endEv(ptr noundef nonnull align 8 dereferenceable(88) %159)
  %.not66 = icmp eq ptr %181, %182
  br i1 %.not66, label %._crit_edge105, label %.lr.ph104, !llvm.loop !49

183:                                              ; preds = %._crit_edge108
  %184 = invoke noundef i32 @_ZN6AssimpL16removeEmptyBonesEP6aiMesh(ptr noundef nonnull %1)
          to label %185 unwind label %186

185:                                              ; preds = %183
  store i32 %184, ptr %19, align 8, !tbaa !18
  br label %188

186:                                              ; preds = %193, %191, %188, %183
  %187 = landingpad { ptr, i32 }
          cleanup
  br label %196

188:                                              ; preds = %185, %._crit_edge108
  %189 = invoke noundef zeroext i1 @_ZN6Assimp13DefaultLogger12isNullLoggerEv()
          to label %190 unwind label %186

190:                                              ; preds = %188
  br i1 %189, label %194, label %191

191:                                              ; preds = %190
  %192 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %193 unwind label %186

193:                                              ; preds = %191
  invoke void @_ZN6Assimp6Logger4infoIJRA9_KcRjRA24_S2_S5_RA17_S2_S5_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12) %192, ptr noundef nonnull align 1 dereferenceable(9) @.str.6, ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 1 dereferenceable(24) @.str.7, ptr noundef nonnull align 4 dereferenceable(4) %9, ptr noundef nonnull align 1 dereferenceable(17) @.str.8, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %194 unwind label %186

194:                                              ; preds = %193, %190
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #6
  br label %._crit_edge83.thread

._crit_edge83.thread:                             ; preds = %18, %._crit_edge83, %194
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #6
  call void @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #6
  br label %195

195:                                              ; preds = %2, %._crit_edge83.thread
  ret void

196:                                              ; preds = %186, %123
  %.pn.pn = phi { ptr, i32 } [ %.pn, %123 ], [ %187, %186 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #6
  br label %197

197:                                              ; preds = %196, %60
  %.pn73 = phi { ptr, i32 } [ %61, %60 ], [ %.pn.pn, %196 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #6
  call void @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  br label %198

198:                                              ; preds = %197, %25
  %.pn73.pn = phi { ptr, i32 } [ %.pn73, %197 ], [ %26, %25 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #6
  resume { ptr, i32 } %.pn73.pn
}

; 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 nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK6aiMesh8HasBonesEv(ptr noundef nonnull align 8 dereferenceable(1320)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EEC2EmRKS5_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, 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 noundef i64 @_ZNKSt6vectorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3 align 2

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPN6Assimp11SmallVectorINS1_23LimitBoneWeightsProcess6WeightELj8EEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4sortIPN6Assimp23LimitBoneWeightsProcess6WeightEEvT_S4_(ptr noundef, ptr noundef) local_unnamed_addr #5

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp11SmallVectorINS_23LimitBoneWeightsProcess6WeightELj8EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(88), i64 noundef) local_unnamed_addr #2 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZN6AssimpL16removeEmptyBonesEP6aiMesh(ptr noundef) local_unnamed_addr #2

declare noundef zeroext i1 @_ZN6Assimp13DefaultLogger12isNullLoggerEv() local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp6Logger4infoIJRA9_KcRjRA24_S2_S5_RA17_S2_S5_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(9), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(17), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIN6Assimp11SmallVectorINS0_23LimitBoneWeightsProcess6WeightELj8EEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 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 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 nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind }

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

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


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