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

; 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.aiVector3t = type { float, float, float }
%"class.Assimp::SpatialSort" = type <{ %class.aiVector3t, %class.aiVector3t, %"class.std::vector", i8, [7 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Assimp::SpatialSort::Entry, std::allocator<Assimp::SpatialSort::Entry>>::_Vector_impl" }
%"struct.std::_Vector_base<Assimp::SpatialSort::Entry, std::allocator<Assimp::SpatialSort::Entry>>::_Vector_impl" = type { %"struct.std::_Vector_base<Assimp::SpatialSort::Entry, std::allocator<Assimp::SpatialSort::Entry>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Assimp::SpatialSort::Entry, std::allocator<Assimp::SpatialSort::Entry>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = 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::vector.13" = 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.17" = 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.Assimp::GenVertexNormalsProcess" = type <{ %"class.Assimp::BaseProcess", float, i8, i8, i8, i8 }>
%"class.Assimp::BaseProcess" = type { ptr, ptr, ptr }
%struct.aiFace = type { i32, ptr }
%"struct.std::pair" = type { %"class.Assimp::SpatialSort", float, [4 x i8] }

@.str.5 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [6 x i8], align 1

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

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

declare noundef ptr @_ZN6Assimp13DefaultLogger3getEv() #1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN6Assimp23GenVertexNormalsProcess20GenMeshVertexNormalsEP6aiMeshj(ptr noundef nonnull align 8 dereferenceable(31) %0, ptr noundef %1, i32 noundef %2) #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i1, align 1
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca float, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %class.aiVector3t, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca %class.aiVector3t, align 4
  %18 = alloca %class.aiVector3t, align 4
  %19 = alloca %class.aiVector3t, align 4
  %20 = alloca { <2 x float>, float }, align 8
  %21 = alloca %class.aiVector3t, align 4
  %22 = alloca { <2 x float>, float }, align 8
  %23 = alloca { <2 x float>, float }, align 8
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca %"class.Assimp::SpatialSort", align 8
  %27 = alloca float, align 4
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca %"class.std::vector.8", align 8
  %33 = alloca ptr, align 8
  %34 = alloca %"class.std::vector.13", align 8
  %35 = alloca i8, align 1
  %36 = alloca %"class.std::allocator.17", align 1
  %37 = alloca i32, align 4
  %38 = alloca %"struct.std::_Bit_reference", align 8
  %39 = alloca %class.aiVector3t, align 4
  %40 = alloca i32, align 4
  %41 = alloca ptr, align 8
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca %"struct.std::_Bit_reference", align 8
  %45 = alloca float, align 4
  %46 = alloca i32, align 4
  %47 = alloca %class.aiVector3t, align 4
  %48 = alloca %class.aiVector3t, align 4
  %49 = alloca i32, align 4
  %50 = alloca %class.aiVector3t, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  %51 = load ptr, ptr %5, align 8
  %52 = load ptr, ptr %6, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.aiMesh, ptr %52, i32 0, i32 4
  %54 = load ptr, ptr %53, align 8, !tbaa !11
  %55 = icmp ne ptr null, %54
  br i1 %55, label %56, label %70

56:                                               ; preds = %3
  %57 = getelementptr inbounds %"class.Assimp::GenVertexNormalsProcess", ptr %51, i32 0, i32 2
  %58 = load i8, ptr %57, align 4, !tbaa !18, !range !22, !noundef !23
  %59 = trunc i8 %58 to i1
  br i1 %59, label %61, label %60

60:                                               ; preds = %56
  store i1 false, ptr %4, align 1
  br label %531

61:                                               ; preds = %56
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.aiMesh, ptr %62, i32 0, i32 4
  %64 = load ptr, ptr %63, align 8, !tbaa !11
  %65 = icmp eq ptr %64, null
  br i1 %65, label %67, label %66

66:                                               ; preds = %61
  call void @_ZdaPv(ptr noundef %64) #11
  br label %67

67:                                               ; preds = %66, %61
  %68 = load ptr, ptr %6, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.aiMesh, ptr %68, i32 0, i32 4
  store ptr null, ptr %69, align 8, !tbaa !11
  br label %70

70:                                               ; preds = %67, %3
  %71 = load ptr, ptr %6, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.aiMesh, ptr %71, i32 0, i32 0
  %73 = load i32, ptr %72, align 8, !tbaa !24
  %74 = and i32 %73, 12
  %75 = icmp ne i32 %74, 0
  br i1 %75, label %78, label %76

76:                                               ; preds = %70
  %77 = call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  call void @_ZN6Assimp6Logger4infoEPKc(ptr noundef nonnull align 8 dereferenceable(12) %77, ptr noundef @.str.5)
  store i1 false, ptr %4, align 1
  br label %531

78:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #12
  %79 = call noundef float @_ZNSt14numeric_limitsIfE9quiet_NaNEv() #12
  store float %79, ptr %8, align 4, !tbaa !25
  %80 = load ptr, ptr %6, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.aiMesh, ptr %80, i32 0, i32 1
  %82 = load i32, ptr %81, align 4, !tbaa !26
  %83 = zext i32 %82 to i64
  %84 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %83, i64 12)
  %85 = extractvalue { i64, i1 } %84, 1
  %86 = extractvalue { i64, i1 } %84, 0
  %87 = select i1 %85, i64 -1, i64 %86
  %88 = call noalias noundef nonnull ptr @_Znam(i64 noundef %87) #13
  %89 = icmp eq i64 %83, 0
  br i1 %89, label %96, label %90

90:                                               ; preds = %78
  %91 = getelementptr inbounds %class.aiVector3t, ptr %88, i64 %83
  br label %92

92:                                               ; preds = %92, %90
  %93 = phi ptr [ %88, %90 ], [ %94, %92 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %93) #12
  %94 = getelementptr inbounds %class.aiVector3t, ptr %93, i64 1
  %95 = icmp eq ptr %94, %91
  br i1 %95, label %96, label %92

96:                                               ; preds = %92, %78
  %97 = load ptr, ptr %6, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.aiMesh, ptr %97, i32 0, i32 4
  store ptr %88, ptr %98, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #12
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %99

99:                                               ; preds = %224, %96
  %100 = load i32, ptr %9, align 4, !tbaa !9
  %101 = load ptr, ptr %6, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.aiMesh, ptr %101, i32 0, i32 2
  %103 = load i32, ptr %102, align 8, !tbaa !27
  %104 = icmp ult i32 %100, %103
  br i1 %104, label %106, label %105

105:                                              ; preds = %99
  store i32 2, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #12
  br label %227

106:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #12
  %107 = load ptr, ptr %6, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.aiMesh, ptr %107, i32 0, i32 10
  %109 = load ptr, ptr %108, align 8, !tbaa !28
  %110 = load i32, ptr %9, align 4, !tbaa !9
  %111 = zext i32 %110 to i64
  %112 = getelementptr inbounds %struct.aiFace, ptr %109, i64 %111
  store ptr %112, ptr %11, align 8, !tbaa !5
  %113 = load ptr, ptr %11, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.aiFace, ptr %113, i32 0, i32 0
  %115 = load i32, ptr %114, align 8, !tbaa !29
  %116 = icmp ult i32 %115, 3
  br i1 %116, label %117, label %142

117:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #12
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %118

118:                                              ; preds = %138, %117
  %119 = load i32, ptr %12, align 4, !tbaa !9
  %120 = load ptr, ptr %11, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.aiFace, ptr %120, i32 0, i32 0
  %122 = load i32, ptr %121, align 8, !tbaa !29
  %123 = icmp ult i32 %119, %122
  br i1 %123, label %125, label %124

124:                                              ; preds = %118
  store i32 5, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #12
  br label %141

125:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 12, ptr %13) #12
  call void @_ZN10aiVector3tIfEC2Ef(ptr noundef nonnull align 4 dereferenceable(12) %13, float noundef 0x7FF8000000000000)
  %126 = load ptr, ptr %6, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.aiMesh, ptr %126, i32 0, i32 4
  %128 = load ptr, ptr %127, align 8, !tbaa !11
  %129 = load ptr, ptr %11, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.aiFace, ptr %129, i32 0, i32 1
  %131 = load ptr, ptr %130, align 8, !tbaa !31
  %132 = load i32, ptr %12, align 4, !tbaa !9
  %133 = zext i32 %132 to i64
  %134 = getelementptr inbounds i32, ptr %131, i64 %133
  %135 = load i32, ptr %134, align 4, !tbaa !9
  %136 = zext i32 %135 to i64
  %137 = getelementptr inbounds %class.aiVector3t, ptr %128, i64 %136
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %137, ptr align 4 %13, i64 12, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.end.p0(i64 12, ptr %13) #12
  br label %138

138:                                              ; preds = %125
  %139 = load i32, ptr %12, align 4, !tbaa !9
  %140 = add i32 %139, 1
  store i32 %140, ptr %12, align 4, !tbaa !9
  br label %118, !llvm.loop !33

141:                                              ; preds = %124
  store i32 4, ptr %10, align 4
  br label %221

142:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #12
  %143 = load ptr, ptr %6, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.aiMesh, ptr %143, i32 0, i32 3
  %145 = load ptr, ptr %144, align 8, !tbaa !35
  %146 = load ptr, ptr %11, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.aiFace, ptr %146, i32 0, i32 1
  %148 = load ptr, ptr %147, align 8, !tbaa !31
  %149 = getelementptr inbounds i32, ptr %148, i64 0
  %150 = load i32, ptr %149, align 4, !tbaa !9
  %151 = zext i32 %150 to i64
  %152 = getelementptr inbounds %class.aiVector3t, ptr %145, i64 %151
  store ptr %152, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #12
  %153 = load ptr, ptr %6, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.aiMesh, ptr %153, i32 0, i32 3
  %155 = load ptr, ptr %154, align 8, !tbaa !35
  %156 = load ptr, ptr %11, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.aiFace, ptr %156, i32 0, i32 1
  %158 = load ptr, ptr %157, align 8, !tbaa !31
  %159 = getelementptr inbounds i32, ptr %158, i64 1
  %160 = load i32, ptr %159, align 4, !tbaa !9
  %161 = zext i32 %160 to i64
  %162 = getelementptr inbounds %class.aiVector3t, ptr %155, i64 %161
  store ptr %162, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #12
  %163 = load ptr, ptr %6, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.aiMesh, ptr %163, i32 0, i32 3
  %165 = load ptr, ptr %164, align 8, !tbaa !35
  %166 = load ptr, ptr %11, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.aiFace, ptr %166, i32 0, i32 1
  %168 = load ptr, ptr %167, align 8, !tbaa !31
  %169 = load ptr, ptr %11, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.aiFace, ptr %169, i32 0, i32 0
  %171 = load i32, ptr %170, align 8, !tbaa !29
  %172 = sub i32 %171, 1
  %173 = zext i32 %172 to i64
  %174 = getelementptr inbounds i32, ptr %168, i64 %173
  %175 = load i32, ptr %174, align 4, !tbaa !9
  %176 = zext i32 %175 to i64
  %177 = getelementptr inbounds %class.aiVector3t, ptr %165, i64 %176
  store ptr %177, ptr %16, align 8, !tbaa !5
  %178 = getelementptr inbounds %"class.Assimp::GenVertexNormalsProcess", ptr %51, i32 0, i32 3
  %179 = load i8, ptr %178, align 1, !tbaa !36, !range !22, !noundef !23
  %180 = trunc i8 %179 to i1
  %181 = zext i1 %180 to i32
  %182 = getelementptr inbounds %"class.Assimp::GenVertexNormalsProcess", ptr %51, i32 0, i32 4
  %183 = load i8, ptr %182, align 2, !tbaa !37, !range !22, !noundef !23
  %184 = trunc i8 %183 to i1
  %185 = zext i1 %184 to i32
  %186 = icmp ne i32 %181, %185
  br i1 %186, label %187, label %188

187:                                              ; preds = %142
  call void @_ZSt4swapIPK10aiVector3tIfEENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS7_ESt18is_move_assignableIS7_EEE5valueEvE4typeERS7_SG_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #12
  br label %188

188:                                              ; preds = %187, %142
  call void @llvm.lifetime.start.p0(i64 12, ptr %17) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %18) #12
  call void @llvm.lifetime.start.p0(i64 12, ptr %19) #12
  %189 = load ptr, ptr %15, align 8, !tbaa !5
  %190 = load ptr, ptr %14, align 8, !tbaa !5
  %191 = call { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %189, ptr noundef nonnull align 4 dereferenceable(12) %190)
  store { <2 x float>, float } %191, ptr %20, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %19, ptr align 8 %20, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %21) #12
  %192 = load ptr, ptr %16, align 8, !tbaa !5
  %193 = load ptr, ptr %14, align 8, !tbaa !5
  %194 = call { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %192, ptr noundef nonnull align 4 dereferenceable(12) %193)
  store { <2 x float>, float } %194, ptr %22, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 8 %22, i64 12, i1 false)
  %195 = call { <2 x float>, float } @_ZeoIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %19, ptr noundef nonnull align 4 dereferenceable(12) %21)
  store { <2 x float>, float } %195, ptr %23, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %18, ptr align 8 %23, i64 12, i1 false)
  %196 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE13NormalizeSafeEv(ptr noundef nonnull align 4 dereferenceable(12) %18)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %17, ptr align 4 %196, i64 12, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.end.p0(i64 12, ptr %21) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %19) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %18) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #12
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %197

197:                                              ; preds = %217, %188
  %198 = load i32, ptr %24, align 4, !tbaa !9
  %199 = load ptr, ptr %11, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.aiFace, ptr %199, i32 0, i32 0
  %201 = load i32, ptr %200, align 8, !tbaa !29
  %202 = icmp ult i32 %198, %201
  br i1 %202, label %204, label %203

203:                                              ; preds = %197
  store i32 8, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #12
  br label %220

204:                                              ; preds = %197
  %205 = load ptr, ptr %6, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.aiMesh, ptr %205, i32 0, i32 4
  %207 = load ptr, ptr %206, align 8, !tbaa !11
  %208 = load ptr, ptr %11, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.aiFace, ptr %208, i32 0, i32 1
  %210 = load ptr, ptr %209, align 8, !tbaa !31
  %211 = load i32, ptr %24, align 4, !tbaa !9
  %212 = zext i32 %211 to i64
  %213 = getelementptr inbounds i32, ptr %210, i64 %212
  %214 = load i32, ptr %213, align 4, !tbaa !9
  %215 = zext i32 %214 to i64
  %216 = getelementptr inbounds %class.aiVector3t, ptr %207, i64 %215
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %216, ptr align 4 %17, i64 12, i1 false), !tbaa.struct !32
  br label %217

217:                                              ; preds = %204
  %218 = load i32, ptr %24, align 4, !tbaa !9
  %219 = add i32 %218, 1
  store i32 %219, ptr %24, align 4, !tbaa !9
  br label %197, !llvm.loop !38

220:                                              ; preds = %203
  call void @llvm.lifetime.end.p0(i64 12, ptr %17) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #12
  store i32 0, ptr %10, align 4
  br label %221

221:                                              ; preds = %220, %141
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #12
  %222 = load i32, ptr %10, align 4
  switch i32 %222, label %538 [
    i32 0, label %223
    i32 4, label %224
  ]

223:                                              ; preds = %221
  br label %224

224:                                              ; preds = %223, %221
  %225 = load i32, ptr %9, align 4, !tbaa !9
  %226 = add i32 %225, 1
  store i32 %226, ptr %9, align 4, !tbaa !9
  br label %99, !llvm.loop !39

227:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #12
  store ptr null, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 56, ptr %26) #12
  call void @_ZN6Assimp11SpatialSortC1Ev(ptr noundef nonnull align 8 dereferenceable(49) %26)
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #12
  store float 0x3EE4F8B580000000, ptr %27, align 4, !tbaa !25
  %228 = getelementptr inbounds %"class.Assimp::BaseProcess", ptr %51, i32 0, i32 1
  %229 = load ptr, ptr %228, align 8, !tbaa !40
  %230 = icmp ne ptr %229, null
  br i1 %230, label %231, label %253

231:                                              ; preds = %227
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #12
  %232 = getelementptr inbounds %"class.Assimp::BaseProcess", ptr %51, i32 0, i32 1
  %233 = load ptr, ptr %232, align 8, !tbaa !40
  %234 = invoke noundef zeroext i1 @_ZNK6Assimp21SharedPostProcessInfo11GetPropertyISt6vectorISt4pairINS_11SpatialSortEfESaIS5_EEEEbPKcRPT_(ptr noundef nonnull align 8 dereferenceable(48) %233, ptr noundef @.str.6, ptr noundef nonnull align 8 dereferenceable(8) %28)
          to label %235 unwind label %248

235:                                              ; preds = %231
  %236 = load ptr, ptr %28, align 8, !tbaa !5
  %237 = icmp ne ptr %236, null
  br i1 %237, label %238, label %252

238:                                              ; preds = %235
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #12
  %239 = load ptr, ptr %28, align 8, !tbaa !5
  %240 = load i32, ptr %7, align 4, !tbaa !9
  %241 = zext i32 %240 to i64
  %242 = call noundef nonnull align 8 dereferenceable(60) ptr @_ZNSt6vectorISt4pairIN6Assimp11SpatialSortEfESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %239, i64 noundef %241) #12
  store ptr %242, ptr %31, align 8, !tbaa !5
  %243 = load ptr, ptr %31, align 8, !tbaa !5
  %244 = getelementptr inbounds %"struct.std::pair", ptr %243, i32 0, i32 0
  store ptr %244, ptr %25, align 8, !tbaa !5
  %245 = load ptr, ptr %31, align 8, !tbaa !5
  %246 = getelementptr inbounds %"struct.std::pair", ptr %245, i32 0, i32 1
  %247 = load float, ptr %246, align 8, !tbaa !41
  store float %247, ptr %27, align 4, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #12
  br label %252

248:                                              ; preds = %231
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %29, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #12
  br label %530

252:                                              ; preds = %238, %235
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #12
  br label %253

253:                                              ; preds = %252, %227
  %254 = load ptr, ptr %25, align 8, !tbaa !5
  %255 = icmp ne ptr %254, null
  br i1 %255, label %271, label %256

256:                                              ; preds = %253
  %257 = load ptr, ptr %6, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.aiMesh, ptr %257, i32 0, i32 3
  %259 = load ptr, ptr %258, align 8, !tbaa !35
  %260 = load ptr, ptr %6, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.aiMesh, ptr %260, i32 0, i32 1
  %262 = load i32, ptr %261, align 4, !tbaa !26
  invoke void @_ZN6Assimp11SpatialSort4FillEPK10aiVector3tIfEjjb(ptr noundef nonnull align 8 dereferenceable(49) %26, ptr noundef %259, i32 noundef %262, i32 noundef 12, i1 noundef zeroext true)
          to label %263 unwind label %267

263:                                              ; preds = %256
  store ptr %26, ptr %25, align 8, !tbaa !5
  %264 = load ptr, ptr %6, align 8, !tbaa !5
  %265 = invoke noundef float @_ZN6Assimp22ComputePositionEpsilonEPK6aiMesh(ptr noundef %264)
          to label %266 unwind label %267

266:                                              ; preds = %263
  store float %265, ptr %27, align 4, !tbaa !25
  br label %271

267:                                              ; preds = %263, %256
  %268 = landingpad { ptr, i32 }
          cleanup
  %269 = extractvalue { ptr, i32 } %268, 0
  store ptr %269, ptr %29, align 8
  %270 = extractvalue { ptr, i32 } %268, 1
  store i32 %270, ptr %30, align 4
  br label %530

271:                                              ; preds = %266, %253
  call void @llvm.lifetime.start.p0(i64 24, ptr %32) #12
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #12
  %272 = load ptr, ptr %6, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.aiMesh, ptr %272, i32 0, i32 1
  %274 = load i32, ptr %273, align 4, !tbaa !26
  %275 = zext i32 %274 to i64
  %276 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %275, i64 12)
  %277 = extractvalue { i64, i1 } %276, 1
  %278 = extractvalue { i64, i1 } %276, 0
  %279 = select i1 %277, i64 -1, i64 %278
  %280 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %279) #13
          to label %281 unwind label %306

281:                                              ; preds = %271
  %282 = icmp eq i64 %275, 0
  br i1 %282, label %289, label %283

283:                                              ; preds = %281
  %284 = getelementptr inbounds %class.aiVector3t, ptr %280, i64 %275
  br label %285

285:                                              ; preds = %285, %283
  %286 = phi ptr [ %280, %283 ], [ %287, %285 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %286) #12
  %287 = getelementptr inbounds %class.aiVector3t, ptr %286, i64 1
  %288 = icmp eq ptr %287, %284
  br i1 %288, label %289, label %285

289:                                              ; preds = %285, %281
  store ptr %280, ptr %33, align 8, !tbaa !5
  %290 = getelementptr inbounds %"class.Assimp::GenVertexNormalsProcess", ptr %51, i32 0, i32 1
  %291 = load float, ptr %290, align 8, !tbaa !48
  %292 = fcmp oge float %291, 0x40086F4280000000
  br i1 %292, label %293, label %422

293:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 40, ptr %34) #12
  %294 = load ptr, ptr %6, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.aiMesh, ptr %294, i32 0, i32 1
  %296 = load i32, ptr %295, align 4, !tbaa !26
  %297 = zext i32 %296 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #12
  store i8 0, ptr %35, align 1, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #12
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #12
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %34, i64 noundef %297, ptr noundef nonnull align 1 dereferenceable(1) %35, ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %298 unwind label %310

298:                                              ; preds = %293
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #12
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %299

299:                                              ; preds = %415, %298
  %300 = load i32, ptr %37, align 4, !tbaa !9
  %301 = load ptr, ptr %6, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.aiMesh, ptr %301, i32 0, i32 1
  %303 = load i32, ptr %302, align 4, !tbaa !26
  %304 = icmp ult i32 %300, %303
  br i1 %304, label %314, label %305

305:                                              ; preds = %299
  store i32 11, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #12
  br label %420

306:                                              ; preds = %271
  %307 = landingpad { ptr, i32 }
          cleanup
  %308 = extractvalue { ptr, i32 } %307, 0
  store ptr %308, ptr %29, align 8
  %309 = extractvalue { ptr, i32 } %307, 1
  store i32 %309, ptr %30, align 4
  br label %529

310:                                              ; preds = %293
  %311 = landingpad { ptr, i32 }
          cleanup
  %312 = extractvalue { ptr, i32 } %311, 0
  store ptr %312, ptr %29, align 8
  %313 = extractvalue { ptr, i32 } %311, 1
  store i32 %313, ptr %30, align 4
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #12
  br label %421

314:                                              ; preds = %299
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #12
  %315 = load i32, ptr %37, align 4, !tbaa !9
  %316 = zext i32 %315 to i64
  %317 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %34, i64 noundef %316)
          to label %318 unwind label %325

318:                                              ; preds = %314
  %319 = getelementptr inbounds { ptr, i64 }, ptr %38, i32 0, i32 0
  %320 = extractvalue { ptr, i64 } %317, 0
  store ptr %320, ptr %319, align 8
  %321 = getelementptr inbounds { ptr, i64 }, ptr %38, i32 0, i32 1
  %322 = extractvalue { ptr, i64 } %317, 1
  store i64 %322, ptr %321, align 8
  %323 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %38) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #12
  br i1 %323, label %324, label %329

324:                                              ; preds = %318
  br label %415

325:                                              ; preds = %314
  %326 = landingpad { ptr, i32 }
          cleanup
  %327 = extractvalue { ptr, i32 } %326, 0
  store ptr %327, ptr %29, align 8
  %328 = extractvalue { ptr, i32 } %326, 1
  store i32 %328, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #12
  br label %419

329:                                              ; preds = %318
  %330 = load ptr, ptr %25, align 8, !tbaa !5
  %331 = load ptr, ptr %6, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.aiMesh, ptr %331, i32 0, i32 3
  %333 = load ptr, ptr %332, align 8, !tbaa !35
  %334 = load i32, ptr %37, align 4, !tbaa !9
  %335 = zext i32 %334 to i64
  %336 = getelementptr inbounds %class.aiVector3t, ptr %333, i64 %335
  %337 = load float, ptr %27, align 4, !tbaa !25
  invoke void @_ZNK6Assimp11SpatialSort13FindPositionsERK10aiVector3tIfEfRSt6vectorIjSaIjEE(ptr noundef nonnull align 8 dereferenceable(49) %330, ptr noundef nonnull align 4 dereferenceable(12) %336, float noundef %337, ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %338 unwind label %345

338:                                              ; preds = %329
  call void @llvm.lifetime.start.p0(i64 12, ptr %39) #12
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %39) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #12
  store i32 0, ptr %40, align 4, !tbaa !9
  br label %339

339:                                              ; preds = %373, %338
  %340 = load i32, ptr %40, align 4, !tbaa !9
  %341 = zext i32 %340 to i64
  %342 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #12
  %343 = icmp ult i64 %341, %342
  br i1 %343, label %349, label %344

344:                                              ; preds = %339
  store i32 14, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #12
  br label %376

345:                                              ; preds = %329
  %346 = landingpad { ptr, i32 }
          cleanup
  %347 = extractvalue { ptr, i32 } %346, 0
  store ptr %347, ptr %29, align 8
  %348 = extractvalue { ptr, i32 } %346, 1
  store i32 %348, ptr %30, align 4
  br label %419

349:                                              ; preds = %339
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #12
  %350 = load ptr, ptr %6, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.aiMesh, ptr %350, i32 0, i32 4
  %352 = load ptr, ptr %351, align 8, !tbaa !11
  %353 = load i32, ptr %40, align 4, !tbaa !9
  %354 = zext i32 %353 to i64
  %355 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %354) #12
  %356 = load i32, ptr %355, align 4, !tbaa !9
  %357 = zext i32 %356 to i64
  %358 = getelementptr inbounds %class.aiVector3t, ptr %352, i64 %357
  store ptr %358, ptr %41, align 8, !tbaa !5
  %359 = load ptr, ptr %41, align 8, !tbaa !5
  %360 = getelementptr inbounds %class.aiVector3t, ptr %359, i32 0, i32 0
  %361 = load float, ptr %360, align 4, !tbaa !50
  %362 = invoke noundef zeroext i1 @_Z11is_not_qnanIfEbT_(float noundef %361)
          to label %363 unwind label %368

363:                                              ; preds = %349
  br i1 %362, label %364, label %372

364:                                              ; preds = %363
  %365 = load ptr, ptr %41, align 8, !tbaa !5
  %366 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfEpLERKS0_(ptr noundef nonnull align 4 dereferenceable(12) %39, ptr noundef nonnull align 4 dereferenceable(12) %365)
          to label %367 unwind label %368

367:                                              ; preds = %364
  br label %372

368:                                              ; preds = %364, %349
  %369 = landingpad { ptr, i32 }
          cleanup
  %370 = extractvalue { ptr, i32 } %369, 0
  store ptr %370, ptr %29, align 8
  %371 = extractvalue { ptr, i32 } %369, 1
  store i32 %371, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #12
  br label %418

372:                                              ; preds = %367, %363
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #12
  br label %373

373:                                              ; preds = %372
  %374 = load i32, ptr %40, align 4, !tbaa !9
  %375 = add i32 %374, 1
  store i32 %375, ptr %40, align 4, !tbaa !9
  br label %339, !llvm.loop !51

376:                                              ; preds = %344
  %377 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE13NormalizeSafeEv(ptr noundef nonnull align 4 dereferenceable(12) %39)
          to label %378 unwind label %385

378:                                              ; preds = %376
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #12
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %379

379:                                              ; preds = %407, %378
  %380 = load i32, ptr %42, align 4, !tbaa !9
  %381 = zext i32 %380 to i64
  %382 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #12
  %383 = icmp ult i64 %381, %382
  br i1 %383, label %389, label %384

384:                                              ; preds = %379
  store i32 17, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #12
  br label %414

385:                                              ; preds = %376
  %386 = landingpad { ptr, i32 }
          cleanup
  %387 = extractvalue { ptr, i32 } %386, 0
  store ptr %387, ptr %29, align 8
  %388 = extractvalue { ptr, i32 } %386, 1
  store i32 %388, ptr %30, align 4
  br label %418

389:                                              ; preds = %379
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #12
  %390 = load i32, ptr %42, align 4, !tbaa !9
  %391 = zext i32 %390 to i64
  %392 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %391) #12
  %393 = load i32, ptr %392, align 4, !tbaa !9
  store i32 %393, ptr %43, align 4, !tbaa !9
  %394 = load ptr, ptr %33, align 8, !tbaa !5
  %395 = load i32, ptr %43, align 4, !tbaa !9
  %396 = zext i32 %395 to i64
  %397 = getelementptr inbounds %class.aiVector3t, ptr %394, i64 %396
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %397, ptr align 4 %39, i64 12, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #12
  %398 = load i32, ptr %43, align 4, !tbaa !9
  %399 = zext i32 %398 to i64
  %400 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %34, i64 noundef %399)
          to label %401 unwind label %410

401:                                              ; preds = %389
  %402 = getelementptr inbounds { ptr, i64 }, ptr %44, i32 0, i32 0
  %403 = extractvalue { ptr, i64 } %400, 0
  store ptr %403, ptr %402, align 8
  %404 = getelementptr inbounds { ptr, i64 }, ptr %44, i32 0, i32 1
  %405 = extractvalue { ptr, i64 } %400, 1
  store i64 %405, ptr %404, align 8
  %406 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %44, i1 noundef zeroext true) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #12
  br label %407

407:                                              ; preds = %401
  %408 = load i32, ptr %42, align 4, !tbaa !9
  %409 = add i32 %408, 1
  store i32 %409, ptr %42, align 4, !tbaa !9
  br label %379, !llvm.loop !52

410:                                              ; preds = %389
  %411 = landingpad { ptr, i32 }
          cleanup
  %412 = extractvalue { ptr, i32 } %411, 0
  store ptr %412, ptr %29, align 8
  %413 = extractvalue { ptr, i32 } %411, 1
  store i32 %413, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #12
  br label %418

414:                                              ; preds = %384
  call void @llvm.lifetime.end.p0(i64 12, ptr %39) #12
  br label %415

415:                                              ; preds = %414, %324
  %416 = load i32, ptr %37, align 4, !tbaa !9
  %417 = add i32 %416, 1
  store i32 %417, ptr %37, align 4, !tbaa !9
  br label %299, !llvm.loop !53

418:                                              ; preds = %410, %385, %368
  call void @llvm.lifetime.end.p0(i64 12, ptr %39) #12
  br label %419

419:                                              ; preds = %418, %345, %325
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #12
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %34) #12
  br label %421

420:                                              ; preds = %305
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %34) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %34) #12
  br label %519

421:                                              ; preds = %419, %310
  call void @llvm.lifetime.end.p0(i64 40, ptr %34) #12
  br label %529

422:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #12
  %423 = getelementptr inbounds %"class.Assimp::GenVertexNormalsProcess", ptr %51, i32 0, i32 1
  %424 = load float, ptr %423, align 8, !tbaa !48
  %425 = invoke noundef float @_ZSt3cosf(float noundef %424)
          to label %426 unwind label %434

426:                                              ; preds = %422
  store float %425, ptr %45, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #12
  store i32 0, ptr %46, align 4, !tbaa !9
  br label %427

427:                                              ; preds = %508, %426
  %428 = load i32, ptr %46, align 4, !tbaa !9
  %429 = load ptr, ptr %6, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.aiMesh, ptr %429, i32 0, i32 1
  %431 = load i32, ptr %430, align 4, !tbaa !26
  %432 = icmp ult i32 %428, %431
  br i1 %432, label %438, label %433

433:                                              ; preds = %427
  store i32 20, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #12
  br label %517

434:                                              ; preds = %422
  %435 = landingpad { ptr, i32 }
          cleanup
  %436 = extractvalue { ptr, i32 } %435, 0
  store ptr %436, ptr %29, align 8
  %437 = extractvalue { ptr, i32 } %435, 1
  store i32 %437, ptr %30, align 4
  br label %518

438:                                              ; preds = %427
  %439 = load ptr, ptr %25, align 8, !tbaa !5
  %440 = load ptr, ptr %6, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.aiMesh, ptr %440, i32 0, i32 3
  %442 = load ptr, ptr %441, align 8, !tbaa !35
  %443 = load i32, ptr %46, align 4, !tbaa !9
  %444 = zext i32 %443 to i64
  %445 = getelementptr inbounds %class.aiVector3t, ptr %442, i64 %444
  %446 = load float, ptr %27, align 4, !tbaa !25
  invoke void @_ZNK6Assimp11SpatialSort13FindPositionsERK10aiVector3tIfEfRSt6vectorIjSaIjEE(ptr noundef nonnull align 8 dereferenceable(49) %439, ptr noundef nonnull align 4 dereferenceable(12) %445, float noundef %446, ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %447 unwind label %460

447:                                              ; preds = %438
  call void @llvm.lifetime.start.p0(i64 12, ptr %47) #12
  %448 = load ptr, ptr %6, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.aiMesh, ptr %448, i32 0, i32 4
  %450 = load ptr, ptr %449, align 8, !tbaa !11
  %451 = load i32, ptr %46, align 4, !tbaa !9
  %452 = zext i32 %451 to i64
  %453 = getelementptr inbounds %class.aiVector3t, ptr %450, i64 %452
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %47, ptr align 4 %453, i64 12, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.start.p0(i64 12, ptr %48) #12
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %48) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #12
  store i32 0, ptr %49, align 4, !tbaa !9
  br label %454

454:                                              ; preds = %498, %447
  %455 = load i32, ptr %49, align 4, !tbaa !9
  %456 = zext i32 %455 to i64
  %457 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #12
  %458 = icmp ult i64 %456, %457
  br i1 %458, label %464, label %459

459:                                              ; preds = %454
  store i32 23, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #12
  br label %501

460:                                              ; preds = %438
  %461 = landingpad { ptr, i32 }
          cleanup
  %462 = extractvalue { ptr, i32 } %461, 0
  store ptr %462, ptr %29, align 8
  %463 = extractvalue { ptr, i32 } %461, 1
  store i32 %463, ptr %30, align 4
  br label %516

464:                                              ; preds = %454
  call void @llvm.lifetime.start.p0(i64 12, ptr %50) #12
  %465 = load ptr, ptr %6, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.aiMesh, ptr %465, i32 0, i32 4
  %467 = load ptr, ptr %466, align 8, !tbaa !11
  %468 = load i32, ptr %49, align 4, !tbaa !9
  %469 = zext i32 %468 to i64
  %470 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %469) #12
  %471 = load i32, ptr %470, align 4, !tbaa !9
  %472 = zext i32 %471 to i64
  %473 = getelementptr inbounds %class.aiVector3t, ptr %467, i64 %472
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %50, ptr align 4 %473, i64 12, i1 false), !tbaa.struct !32
  %474 = getelementptr inbounds %class.aiVector3t, ptr %50, i32 0, i32 0
  %475 = load float, ptr %474, align 4, !tbaa !50
  %476 = invoke noundef zeroext i1 @_Z11is_not_qnanIfEbT_(float noundef %475)
          to label %477 unwind label %493

477:                                              ; preds = %464
  br i1 %476, label %478, label %497

478:                                              ; preds = %477
  %479 = load i32, ptr %49, align 4, !tbaa !9
  %480 = zext i32 %479 to i64
  %481 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %480) #12
  %482 = load i32, ptr %481, align 4, !tbaa !9
  %483 = load i32, ptr %46, align 4, !tbaa !9
  %484 = icmp eq i32 %482, %483
  br i1 %484, label %490, label %485

485:                                              ; preds = %478
  %486 = invoke noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %50, ptr noundef nonnull align 4 dereferenceable(12) %47)
          to label %487 unwind label %493

487:                                              ; preds = %485
  %488 = load float, ptr %45, align 4, !tbaa !25
  %489 = fcmp oge float %486, %488
  br i1 %489, label %490, label %497

490:                                              ; preds = %487, %478
  %491 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfEpLERKS0_(ptr noundef nonnull align 4 dereferenceable(12) %48, ptr noundef nonnull align 4 dereferenceable(12) %50)
          to label %492 unwind label %493

492:                                              ; preds = %490
  br label %497

493:                                              ; preds = %490, %485, %464
  %494 = landingpad { ptr, i32 }
          cleanup
  %495 = extractvalue { ptr, i32 } %494, 0
  store ptr %495, ptr %29, align 8
  %496 = extractvalue { ptr, i32 } %494, 1
  store i32 %496, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %50) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #12
  br label %515

497:                                              ; preds = %492, %487, %477
  call void @llvm.lifetime.end.p0(i64 12, ptr %50) #12
  br label %498

498:                                              ; preds = %497
  %499 = load i32, ptr %49, align 4, !tbaa !9
  %500 = add i32 %499, 1
  store i32 %500, ptr %49, align 4, !tbaa !9
  br label %454, !llvm.loop !54

501:                                              ; preds = %459
  %502 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE13NormalizeSafeEv(ptr noundef nonnull align 4 dereferenceable(12) %48)
          to label %503 unwind label %511

503:                                              ; preds = %501
  %504 = load ptr, ptr %33, align 8, !tbaa !5
  %505 = load i32, ptr %46, align 4, !tbaa !9
  %506 = zext i32 %505 to i64
  %507 = getelementptr inbounds %class.aiVector3t, ptr %504, i64 %506
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %507, ptr align 4 %502, i64 12, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.end.p0(i64 12, ptr %48) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %47) #12
  br label %508

508:                                              ; preds = %503
  %509 = load i32, ptr %46, align 4, !tbaa !9
  %510 = add i32 %509, 1
  store i32 %510, ptr %46, align 4, !tbaa !9
  br label %427, !llvm.loop !55

511:                                              ; preds = %501
  %512 = landingpad { ptr, i32 }
          cleanup
  %513 = extractvalue { ptr, i32 } %512, 0
  store ptr %513, ptr %29, align 8
  %514 = extractvalue { ptr, i32 } %512, 1
  store i32 %514, ptr %30, align 4
  br label %515

515:                                              ; preds = %511, %493
  call void @llvm.lifetime.end.p0(i64 12, ptr %48) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %47) #12
  br label %516

516:                                              ; preds = %515, %460
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #12
  br label %518

517:                                              ; preds = %433
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #12
  br label %519

518:                                              ; preds = %516, %434
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #12
  br label %529

519:                                              ; preds = %517, %420
  %520 = load ptr, ptr %6, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.aiMesh, ptr %520, i32 0, i32 4
  %522 = load ptr, ptr %521, align 8, !tbaa !11
  %523 = icmp eq ptr %522, null
  br i1 %523, label %525, label %524

524:                                              ; preds = %519
  call void @_ZdaPv(ptr noundef %522) #11
  br label %525

525:                                              ; preds = %524, %519
  %526 = load ptr, ptr %33, align 8, !tbaa !5
  %527 = load ptr, ptr %6, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct.aiMesh, ptr %527, i32 0, i32 4
  store ptr %526, ptr %528, align 8, !tbaa !11
  store i1 true, ptr %4, align 1
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #12
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #12
  call void @_ZN6Assimp11SpatialSortD2Ev(ptr noundef nonnull align 8 dereferenceable(49) %26) #12
  call void @llvm.lifetime.end.p0(i64 56, ptr %26) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #12
  br label %531

529:                                              ; preds = %518, %421, %306
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #12
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #12
  br label %530

530:                                              ; preds = %529, %267, %248
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #12
  call void @_ZN6Assimp11SpatialSortD2Ev(ptr noundef nonnull align 8 dereferenceable(49) %26) #12
  call void @llvm.lifetime.end.p0(i64 56, ptr %26) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #12
  br label %533

531:                                              ; preds = %525, %76, %60
  %532 = load i1, ptr %4, align 1
  ret i1 %532

533:                                              ; preds = %530
  %534 = load ptr, ptr %29, align 8
  %535 = load i32, ptr %30, align 4
  %536 = insertvalue { ptr, i32 } poison, ptr %534, 0
  %537 = insertvalue { ptr, i32 } %536, i32 %535, 1
  resume { ptr, i32 } %537

538:                                              ; preds = %221
  unreachable
}

declare void @_ZN6Assimp6Logger4infoEPKc(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef) #1

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZNSt14numeric_limitsIfE9quiet_NaNEv() #4 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN10aiVector3tIfEC2Ef(ptr noundef nonnull align 4 dereferenceable(12), float noundef) unnamed_addr #4 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) #7

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZeoIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) #9

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) #9

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE13NormalizeSafeEv(ptr noundef nonnull align 4 dereferenceable(12)) #9 align 2

declare void @_ZN6Assimp11SpatialSortC1Ev(ptr noundef nonnull align 8 dereferenceable(49)) unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK6Assimp21SharedPostProcessInfo11GetPropertyISt6vectorISt4pairINS_11SpatialSortEfESaIS5_EEEEbPKcRPT_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef, ptr noundef nonnull align 8 dereferenceable(8)) #10 align 2

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

declare void @_ZN6Assimp11SpatialSort4FillEPK10aiVector3tIfEjjb(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef, i32 noundef, i32 noundef, i1 noundef zeroext) #1

declare noundef float @_ZN6Assimp22ComputePositionEpsilonEPK6aiMesh(ptr noundef) #1

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 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 #10 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) #10 align 2

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

declare void @_ZNK6Assimp11SpatialSort13FindPositionsERK10aiVector3tIfEfRSt6vectorIjSaIjEE(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 4 dereferenceable(12), float noundef, ptr noundef nonnull align 8 dereferenceable(24)) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 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) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z11is_not_qnanIfEbT_(float noundef) #9

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfEpLERKS0_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) #8 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) #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3cosf(float noundef) #8

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 24}
!12 = !{!"_ZTS6aiMesh", !10, i64 0, !10, i64 4, !10, 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, !10, i64 216, !6, i64 224, !10, i64 232, !13, i64 236, !10, i64 1264, !6, i64 1272, !14, i64 1280, !15, i64 1284, !6, i64 1312}
!13 = !{!"_ZTS8aiString", !10, i64 0, !7, i64 4}
!14 = !{!"_ZTS16aiMorphingMethod", !7, i64 0}
!15 = !{!"_ZTS6aiAABB", !16, i64 0, !16, i64 12}
!16 = !{!"_ZTS10aiVector3tIfE", !17, i64 0, !17, i64 4, !17, i64 8}
!17 = !{!"float", !7, i64 0}
!18 = !{!19, !21, i64 28}
!19 = !{!"_ZTSN6Assimp23GenVertexNormalsProcessE", !20, i64 0, !17, i64 24, !21, i64 28, !21, i64 29, !21, i64 30}
!20 = !{!"_ZTSN6Assimp11BaseProcessE", !6, i64 8, !6, i64 16}
!21 = !{!"bool", !7, i64 0}
!22 = !{i8 0, i8 2}
!23 = !{}
!24 = !{!12, !10, i64 0}
!25 = !{!17, !17, i64 0}
!26 = !{!12, !10, i64 4}
!27 = !{!12, !10, i64 8}
!28 = !{!12, !6, i64 208}
!29 = !{!30, !10, i64 0}
!30 = !{!"_ZTS6aiFace", !10, i64 0, !6, i64 8}
!31 = !{!30, !6, i64 8}
!32 = !{i64 0, i64 4, !25, i64 4, i64 4, !25, i64 8, i64 4, !25}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!12, !6, i64 16}
!36 = !{!19, !21, i64 29}
!37 = !{!19, !21, i64 30}
!38 = distinct !{!38, !34}
!39 = distinct !{!39, !34}
!40 = !{!20, !6, i64 8}
!41 = !{!42, !17, i64 56}
!42 = !{!"_ZTSSt4pairIN6Assimp11SpatialSortEfE", !43, i64 0, !17, i64 56}
!43 = !{!"_ZTSN6Assimp11SpatialSortE", !16, i64 0, !16, i64 12, !44, i64 24, !21, i64 48}
!44 = !{!"_ZTSSt6vectorIN6Assimp11SpatialSort5EntryESaIS2_EE", !45, i64 0}
!45 = !{!"_ZTSSt12_Vector_baseIN6Assimp11SpatialSort5EntryESaIS2_EE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseIN6Assimp11SpatialSort5EntryESaIS2_EE12_Vector_implE", !47, i64 0}
!47 = !{!"_ZTSNSt12_Vector_baseIN6Assimp11SpatialSort5EntryESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!48 = !{!19, !17, i64 24}
!49 = !{!21, !21, i64 0}
!50 = !{!16, !17, i64 0}
!51 = distinct !{!51, !34}
!52 = distinct !{!52, !34}
!53 = distinct !{!53, !34}
!54 = distinct !{!54, !34}
!55 = distinct !{!55, !34}


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

%class.aiVector3t = type { float, float, float }
%"class.Assimp::SpatialSort" = type <{ %class.aiVector3t, %class.aiVector3t, %"class.std::vector", i8, [7 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Assimp::SpatialSort::Entry, std::allocator<Assimp::SpatialSort::Entry>>::_Vector_impl" }
%"struct.std::_Vector_base<Assimp::SpatialSort::Entry, std::allocator<Assimp::SpatialSort::Entry>>::_Vector_impl" = type { %"struct.std::_Vector_base<Assimp::SpatialSort::Entry, std::allocator<Assimp::SpatialSort::Entry>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Assimp::SpatialSort::Entry, std::allocator<Assimp::SpatialSort::Entry>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = 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::vector.13" = 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.17" = type { i8 }
%"struct.std::_Bit_reference" = type { ptr, i64 }
%struct.aiFace = type { i32, ptr }

@.str.5 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [6 x i8], align 1

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

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

declare noundef ptr @_ZN6Assimp13DefaultLogger3getEv() local_unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN6Assimp23GenVertexNormalsProcess20GenMeshVertexNormalsEP6aiMeshj(ptr nocapture noundef nonnull readonly align 8 dereferenceable(31) %0, ptr noundef %1, i32 noundef %2) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %class.aiVector3t, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %class.aiVector3t, align 4
  %8 = alloca %class.aiVector3t, align 8
  %9 = alloca %class.aiVector3t, align 8
  %10 = alloca %class.aiVector3t, align 8
  %11 = alloca %"class.Assimp::SpatialSort", align 8
  %12 = alloca ptr, align 8
  %13 = alloca %"class.std::vector.8", align 8
  %14 = alloca %"class.std::vector.13", align 8
  %15 = alloca i8, align 1
  %16 = alloca %"class.std::allocator.17", align 1
  %17 = alloca %"struct.std::_Bit_reference", align 8
  %18 = alloca %class.aiVector3t, align 4
  %19 = alloca %"struct.std::_Bit_reference", align 8
  %20 = alloca %class.aiVector3t, align 4
  %21 = alloca %class.aiVector3t, align 4
  %22 = alloca %class.aiVector3t, align 4
  %23 = getelementptr inbounds i8, ptr %1, i64 24
  %24 = load ptr, ptr %23, align 8, !tbaa !5
  %.not = icmp eq ptr %24, null
  br i1 %.not, label %30, label %25

25:                                               ; preds = %3
  %26 = getelementptr inbounds i8, ptr %0, i64 28
  %27 = load i8, ptr %26, align 4, !tbaa !16, !range !20, !noundef !21
  %28 = trunc nuw i8 %27 to i1
  br i1 %28, label %29, label %274

29:                                               ; preds = %25
  tail call void @_ZdaPv(ptr noundef nonnull %24) #10
  store ptr null, ptr %23, align 8, !tbaa !5
  br label %30

30:                                               ; preds = %29, %3
  %31 = load i32, ptr %1, align 8, !tbaa !22
  %32 = and i32 %31, 12
  %.not125 = icmp eq i32 %32, 0
  br i1 %.not125, label %33, label %35

33:                                               ; preds = %30
  %34 = tail call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  tail call void @_ZN6Assimp6Logger4infoEPKc(ptr noundef nonnull align 8 dereferenceable(12) %34, ptr noundef nonnull @.str.5)
  br label %274

35:                                               ; preds = %30
  %36 = tail call noundef float @_ZNSt14numeric_limitsIfE9quiet_NaNEv() #11
  %37 = getelementptr inbounds i8, ptr %1, i64 4
  %38 = load i32, ptr %37, align 4, !tbaa !23
  %39 = zext i32 %38 to i64
  %40 = mul nuw nsw i64 %39, 12
  %41 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %40) #12
  %42 = icmp eq i32 %38, 0
  br i1 %42, label %.loopexit148, label %43

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

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

.loopexit148:                                     ; preds = %45, %35
  store ptr %41, ptr %23, align 8, !tbaa !5
  %49 = getelementptr inbounds i8, ptr %1, i64 8
  %50 = load i32, ptr %49, align 8, !tbaa !24
  %.not174 = icmp eq i32 %50, 0
  br i1 %.not174, label %._crit_edge155, label %.lr.ph154

.lr.ph154:                                        ; preds = %.loopexit148
  %51 = getelementptr inbounds i8, ptr %1, i64 208
  %52 = getelementptr inbounds i8, ptr %1, i64 16
  %53 = getelementptr inbounds i8, ptr %0, i64 29
  %54 = getelementptr inbounds i8, ptr %0, i64 30
  %.sroa.246.0..sroa_idx = getelementptr inbounds i8, ptr %9, i64 8
  %.sroa.242.0..sroa_idx = getelementptr inbounds i8, ptr %10, i64 8
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %8, i64 8
  br label %57

._crit_edge155:                                   ; preds = %.loopexit147, %.loopexit148
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %11) #11
  call void @_ZN6Assimp11SpatialSortC1Ev(ptr noundef nonnull align 8 dereferenceable(49) %11)
  %55 = getelementptr inbounds i8, ptr %0, i64 8
  %56 = load ptr, ptr %55, align 8, !tbaa !25
  %.not126 = icmp eq ptr %56, null
  br i1 %.not126, label %.thread, label %114

57:                                               ; preds = %.lr.ph154, %.loopexit147
  %indvars.iv186 = phi i64 [ 0, %.lr.ph154 ], [ %indvars.iv.next187, %.loopexit147 ]
  %58 = load ptr, ptr %51, align 8, !tbaa !26
  %59 = getelementptr inbounds %struct.aiFace, ptr %58, i64 %indvars.iv186
  %60 = load i32, ptr %59, align 8, !tbaa !27
  %61 = icmp ult i32 %60, 3
  br i1 %61, label %.preheader146, label %73

.preheader146:                                    ; preds = %57
  %.not176 = icmp eq i32 %60, 0
  br i1 %.not176, label %.loopexit147, label %.lr.ph151

.lr.ph151:                                        ; preds = %.preheader146
  %62 = getelementptr inbounds i8, ptr %59, i64 8
  br label %63

63:                                               ; preds = %.lr.ph151, %63
  %indvars.iv183 = phi i64 [ 0, %.lr.ph151 ], [ %indvars.iv.next184, %63 ]
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %4) #11
  call void @_ZN10aiVector3tIfEC2Ef(ptr noundef nonnull align 4 dereferenceable(12) %4, float noundef 0x7FF8000000000000)
  %64 = load ptr, ptr %23, align 8, !tbaa !5
  %65 = load ptr, ptr %62, align 8, !tbaa !29
  %66 = getelementptr inbounds i32, ptr %65, i64 %indvars.iv183
  %67 = load i32, ptr %66, align 4, !tbaa !30
  %68 = zext i32 %67 to i64
  %69 = getelementptr inbounds %class.aiVector3t, ptr %64, i64 %68
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %69, ptr noundef nonnull align 4 dereferenceable(12) %4, i64 12, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %4) #11
  %indvars.iv.next184 = add nuw nsw i64 %indvars.iv183, 1
  %70 = load i32, ptr %59, align 8, !tbaa !27
  %71 = zext i32 %70 to i64
  %72 = icmp ult i64 %indvars.iv.next184, %71
  br i1 %72, label %63, label %.loopexit147, !llvm.loop !33

73:                                               ; preds = %57
  %74 = load ptr, ptr %52, align 8, !tbaa !35
  %75 = getelementptr inbounds i8, ptr %59, i64 8
  %76 = load ptr, ptr %75, align 8, !tbaa !29
  %77 = load i32, ptr %76, align 4, !tbaa !30
  %78 = zext i32 %77 to i64
  %79 = getelementptr inbounds %class.aiVector3t, ptr %74, i64 %78
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #11
  %80 = getelementptr inbounds i8, ptr %76, i64 4
  %81 = load i32, ptr %80, align 4, !tbaa !30
  %82 = zext i32 %81 to i64
  %83 = getelementptr inbounds %class.aiVector3t, ptr %74, i64 %82
  store ptr %83, ptr %5, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #11
  %84 = load ptr, ptr %75, align 8, !tbaa !29
  %85 = add i32 %60, -1
  %86 = zext i32 %85 to i64
  %87 = getelementptr inbounds i32, ptr %84, i64 %86
  %88 = load i32, ptr %87, align 4, !tbaa !30
  %89 = zext i32 %88 to i64
  %90 = getelementptr inbounds %class.aiVector3t, ptr %74, i64 %89
  store ptr %90, ptr %6, align 8, !tbaa !36
  %91 = load i8, ptr %53, align 1, !tbaa !37, !range !20, !noundef !21
  %92 = load i8, ptr %54, align 2, !tbaa !38, !range !20, !noundef !21
  %.not137 = icmp eq i8 %91, %92
  br i1 %.not137, label %94, label %93

93:                                               ; preds = %73
  call void @_ZSt4swapIPK10aiVector3tIfEENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS7_ESt18is_move_assignableIS7_EEE5valueEvE4typeERS7_SG_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %6) #11
  %.pre = load ptr, ptr %5, align 8, !tbaa !36
  br label %94

94:                                               ; preds = %93, %73
  %95 = phi ptr [ %.pre, %93 ], [ %83, %73 ]
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %7)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %8) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %9) #11
  %96 = call { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %95, ptr noundef nonnull align 4 dereferenceable(12) %79)
  %.fca.0.extract43 = extractvalue { <2 x float>, float } %96, 0
  %.fca.1.extract44 = extractvalue { <2 x float>, float } %96, 1
  store <2 x float> %.fca.0.extract43, ptr %9, align 8
  store float %.fca.1.extract44, ptr %.sroa.246.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %10) #11
  %97 = load ptr, ptr %6, align 8, !tbaa !36
  %98 = call { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %97, ptr noundef nonnull align 4 dereferenceable(12) %79)
  %.fca.0.extract39 = extractvalue { <2 x float>, float } %98, 0
  %.fca.1.extract40 = extractvalue { <2 x float>, float } %98, 1
  store <2 x float> %.fca.0.extract39, ptr %10, align 8
  store float %.fca.1.extract40, ptr %.sroa.242.0..sroa_idx, align 8
  %99 = call { <2 x float>, float } @_ZeoIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %9, ptr noundef nonnull align 4 dereferenceable(12) %10)
  %.fca.0.extract = extractvalue { <2 x float>, float } %99, 0
  %.fca.1.extract = extractvalue { <2 x float>, float } %99, 1
  store <2 x float> %.fca.0.extract, ptr %8, align 8
  store float %.fca.1.extract, ptr %.sroa.2.0..sroa_idx, align 8
  %100 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE13NormalizeSafeEv(ptr noundef nonnull align 4 dereferenceable(12) %8)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %7, ptr noundef nonnull align 4 dereferenceable(12) %100, i64 12, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %8) #11
  %101 = load i32, ptr %59, align 8, !tbaa !27
  %.not175 = icmp eq i32 %101, 0
  br i1 %.not175, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %94
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %7)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #11
  br label %.loopexit147

.lr.ph:                                           ; preds = %94, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %94 ]
  %102 = load ptr, ptr %23, align 8, !tbaa !5
  %103 = load ptr, ptr %75, align 8, !tbaa !29
  %104 = getelementptr inbounds i32, ptr %103, i64 %indvars.iv
  %105 = load i32, ptr %104, align 4, !tbaa !30
  %106 = zext i32 %105 to i64
  %107 = getelementptr inbounds %class.aiVector3t, ptr %102, i64 %106
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %107, ptr noundef nonnull align 4 dereferenceable(12) %7, i64 12, i1 false), !tbaa.struct !31
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %108 = load i32, ptr %59, align 8, !tbaa !27
  %109 = zext i32 %108 to i64
  %110 = icmp ult i64 %indvars.iv.next, %109
  br i1 %110, label %.lr.ph, label %._crit_edge, !llvm.loop !39

.loopexit147:                                     ; preds = %63, %.preheader146, %._crit_edge
  %indvars.iv.next187 = add nuw nsw i64 %indvars.iv186, 1
  %111 = load i32, ptr %49, align 8, !tbaa !24
  %112 = zext i32 %111 to i64
  %113 = icmp ult i64 %indvars.iv.next187, %112
  br i1 %113, label %57, label %._crit_edge155, !llvm.loop !40

114:                                              ; preds = %._crit_edge155
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #11
  %115 = invoke noundef zeroext i1 @_ZNK6Assimp21SharedPostProcessInfo11GetPropertyISt6vectorISt4pairINS_11SpatialSortEfESaIS5_EEEEbPKcRPT_(ptr noundef nonnull align 8 dereferenceable(48) %56, ptr noundef nonnull @.str.6, ptr noundef nonnull align 8 dereferenceable(8) %12)
          to label %116 unwind label %118

116:                                              ; preds = %114
  %117 = load ptr, ptr %12, align 8, !tbaa !36
  %.not127 = icmp eq ptr %117, null
  br i1 %.not127, label %.thread141, label %120

.thread141:                                       ; preds = %116
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #11
  br label %.thread

118:                                              ; preds = %114
  %119 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #11
  br label %273

120:                                              ; preds = %116
  %121 = zext i32 %2 to i64
  %122 = call noundef nonnull align 8 dereferenceable(60) ptr @_ZNSt6vectorISt4pairIN6Assimp11SpatialSortEfESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %117, i64 noundef %121) #11
  %123 = getelementptr inbounds i8, ptr %122, i64 56
  %124 = load float, ptr %123, align 8, !tbaa !41
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #11
  br label %132

.thread:                                          ; preds = %._crit_edge155, %.thread141
  %125 = getelementptr inbounds i8, ptr %1, i64 16
  %126 = load ptr, ptr %125, align 8, !tbaa !35
  %127 = load i32, ptr %37, align 4, !tbaa !23
  invoke void @_ZN6Assimp11SpatialSort4FillEPK10aiVector3tIfEjjb(ptr noundef nonnull align 8 dereferenceable(49) %11, ptr noundef %126, i32 noundef %127, i32 noundef 12, i1 noundef zeroext true)
          to label %128 unwind label %130

128:                                              ; preds = %.thread
  %129 = invoke noundef float @_ZN6Assimp22ComputePositionEpsilonEPK6aiMesh(ptr noundef nonnull %1)
          to label %132 unwind label %130

130:                                              ; preds = %128, %.thread
  %131 = landingpad { ptr, i32 }
          cleanup
  br label %273

132:                                              ; preds = %120, %128
  %.2115 = phi ptr [ %122, %120 ], [ %11, %128 ]
  %.2112 = phi float [ %124, %120 ], [ %129, %128 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #11
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #11
  %133 = load i32, ptr %37, align 4, !tbaa !23
  %134 = zext i32 %133 to i64
  %135 = mul nuw nsw i64 %134, 12
  %136 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %135) #12
          to label %137 unwind label %156

137:                                              ; preds = %132
  %138 = icmp eq i32 %133, 0
  br i1 %138, label %.loopexit145, label %139

139:                                              ; preds = %137
  %140 = getelementptr inbounds %class.aiVector3t, ptr %136, i64 %134
  br label %141

141:                                              ; preds = %141, %139
  %142 = phi ptr [ %136, %139 ], [ %143, %141 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %142) #11
  %143 = getelementptr inbounds i8, ptr %142, i64 12
  %144 = icmp eq ptr %143, %140
  br i1 %144, label %.loopexit145, label %141

.loopexit145:                                     ; preds = %141, %137
  %145 = getelementptr inbounds i8, ptr %0, i64 24
  %146 = load float, ptr %145, align 8, !tbaa !48
  %147 = fcmp ult float %146, 0x40086F4280000000
  br i1 %147, label %220, label %148

148:                                              ; preds = %.loopexit145
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %14) #11
  %149 = load i32, ptr %37, align 4, !tbaa !23
  %150 = zext i32 %149 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #11
  store i8 0, ptr %15, align 1, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #11
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #11
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %14, i64 noundef %150, ptr noundef nonnull align 1 dereferenceable(1) %15, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %151 unwind label %158

151:                                              ; preds = %148
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #11
  %152 = load i32, ptr %37, align 4, !tbaa !23
  %.not177 = icmp eq i32 %152, 0
  br i1 %.not177, label %._crit_edge166, label %.lr.ph165

.lr.ph165:                                        ; preds = %151
  %153 = getelementptr inbounds i8, ptr %17, i64 8
  %154 = getelementptr inbounds i8, ptr %1, i64 16
  %155 = getelementptr inbounds i8, ptr %19, i64 8
  br label %160

._crit_edge166:                                   ; preds = %213, %151
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %14) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %14) #11
  br label %.loopexit

156:                                              ; preds = %132
  %157 = landingpad { ptr, i32 }
          cleanup
  br label %272

158:                                              ; preds = %148
  %159 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #11
  br label %219

160:                                              ; preds = %.lr.ph165, %213
  %indvars.iv189 = phi i64 [ 0, %.lr.ph165 ], [ %indvars.iv.next190, %213 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #11
  %161 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %14, i64 noundef %indvars.iv189)
          to label %162 unwind label %166

162:                                              ; preds = %160
  %163 = extractvalue { ptr, i64 } %161, 0
  store ptr %163, ptr %17, align 8
  %164 = extractvalue { ptr, i64 } %161, 1
  store i64 %164, ptr %153, align 8
  %165 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %17) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #11
  br i1 %165, label %213, label %168

166:                                              ; preds = %160
  %167 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #11
  br label %218

168:                                              ; preds = %162
  %169 = load ptr, ptr %154, align 8, !tbaa !35
  %170 = getelementptr inbounds %class.aiVector3t, ptr %169, i64 %indvars.iv189
  invoke void @_ZNK6Assimp11SpatialSort13FindPositionsERK10aiVector3tIfEfRSt6vectorIjSaIjEE(ptr noundef nonnull align 8 dereferenceable(49) %.2115, ptr noundef nonnull align 4 dereferenceable(12) %170, float noundef %.2112, ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %171 unwind label %175

171:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %18) #11
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %18) #11
  %172 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #11
  %.not178 = icmp eq i64 %172, 0
  br i1 %.not178, label %._crit_edge159, label %.lr.ph158

._crit_edge159:                                   ; preds = %190, %171
  %173 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE13NormalizeSafeEv(ptr noundef nonnull align 4 dereferenceable(12) %18)
          to label %.preheader unwind label %195

.preheader:                                       ; preds = %._crit_edge159
  %174 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #11
  %.not179 = icmp eq i64 %174, 0
  br i1 %.not179, label %._crit_edge162, label %.lr.ph161

175:                                              ; preds = %168
  %176 = landingpad { ptr, i32 }
          cleanup
  br label %218

.lr.ph158:                                        ; preds = %171, %190
  %177 = phi i64 [ %192, %190 ], [ 0, %171 ]
  %.098156 = phi i32 [ %191, %190 ], [ 0, %171 ]
  %178 = load ptr, ptr %23, align 8, !tbaa !5
  %179 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %177) #11
  %180 = load i32, ptr %179, align 4, !tbaa !30
  %181 = zext i32 %180 to i64
  %182 = getelementptr inbounds %class.aiVector3t, ptr %178, i64 %181
  %183 = load float, ptr %182, align 4, !tbaa !50
  %184 = invoke noundef zeroext i1 @_Z11is_not_qnanIfEbT_(float noundef %183)
          to label %185 unwind label %188

185:                                              ; preds = %.lr.ph158
  br i1 %184, label %186, label %190

186:                                              ; preds = %185
  %187 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfEpLERKS0_(ptr noundef nonnull align 4 dereferenceable(12) %18, ptr noundef nonnull align 4 dereferenceable(12) %182)
  br label %190

188:                                              ; preds = %.lr.ph158
  %189 = landingpad { ptr, i32 }
          cleanup
  br label %217

190:                                              ; preds = %186, %185
  %191 = add i32 %.098156, 1
  %192 = zext i32 %191 to i64
  %193 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #11
  %194 = icmp ugt i64 %193, %192
  br i1 %194, label %.lr.ph158, label %._crit_edge159, !llvm.loop !51

._crit_edge162:                                   ; preds = %203, %.preheader
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %18) #11
  br label %213

195:                                              ; preds = %._crit_edge159
  %196 = landingpad { ptr, i32 }
          cleanup
  br label %217

.lr.ph161:                                        ; preds = %.preheader, %203
  %197 = phi i64 [ %208, %203 ], [ 0, %.preheader ]
  %.097160 = phi i32 [ %207, %203 ], [ 0, %.preheader ]
  %198 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %197) #11
  %199 = load i32, ptr %198, align 4, !tbaa !30
  %200 = zext i32 %199 to i64
  %201 = getelementptr inbounds %class.aiVector3t, ptr %136, i64 %200
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %201, ptr noundef nonnull align 4 dereferenceable(12) %18, i64 12, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #11
  %202 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %14, i64 noundef %200)
          to label %203 unwind label %211

203:                                              ; preds = %.lr.ph161
  %204 = extractvalue { ptr, i64 } %202, 0
  store ptr %204, ptr %19, align 8
  %205 = extractvalue { ptr, i64 } %202, 1
  store i64 %205, ptr %155, align 8
  %206 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %19, i1 noundef zeroext true) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #11
  %207 = add i32 %.097160, 1
  %208 = zext i32 %207 to i64
  %209 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #11
  %210 = icmp ugt i64 %209, %208
  br i1 %210, label %.lr.ph161, label %._crit_edge162, !llvm.loop !52

211:                                              ; preds = %.lr.ph161
  %212 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #11
  br label %217

213:                                              ; preds = %162, %._crit_edge162
  %indvars.iv.next190 = add nuw nsw i64 %indvars.iv189, 1
  %214 = load i32, ptr %37, align 4, !tbaa !23
  %215 = zext i32 %214 to i64
  %216 = icmp ult i64 %indvars.iv.next190, %215
  br i1 %216, label %160, label %._crit_edge166, !llvm.loop !53

217:                                              ; preds = %211, %195, %188
  %.pn131 = phi { ptr, i32 } [ %189, %188 ], [ %212, %211 ], [ %196, %195 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %18) #11
  br label %218

218:                                              ; preds = %217, %175, %166
  %.pn131.pn = phi { ptr, i32 } [ %.pn131, %217 ], [ %176, %175 ], [ %167, %166 ]
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %14) #11
  br label %219

219:                                              ; preds = %218, %158
  %.pn131.pn.pn = phi { ptr, i32 } [ %.pn131.pn, %218 ], [ %159, %158 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %14) #11
  br label %272

220:                                              ; preds = %.loopexit145
  %221 = call noundef float @_ZSt3cosf(float noundef %146)
  %222 = load i32, ptr %37, align 4, !tbaa !23
  %.not180 = icmp eq i32 %222, 0
  br i1 %.not180, label %.loopexit, label %.lr.ph173

.lr.ph173:                                        ; preds = %220
  %223 = getelementptr inbounds i8, ptr %1, i64 16
  br label %224

224:                                              ; preds = %.lr.ph173, %260
  %indvars.iv192 = phi i64 [ 0, %.lr.ph173 ], [ %indvars.iv.next193, %260 ]
  %225 = load ptr, ptr %223, align 8, !tbaa !35
  %226 = getelementptr inbounds %class.aiVector3t, ptr %225, i64 %indvars.iv192
  invoke void @_ZNK6Assimp11SpatialSort13FindPositionsERK10aiVector3tIfEfRSt6vectorIjSaIjEE(ptr noundef nonnull align 8 dereferenceable(49) %.2115, ptr noundef nonnull align 4 dereferenceable(12) %226, float noundef %.2112, ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %227 unwind label %232

227:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %20) #11
  %228 = load ptr, ptr %23, align 8, !tbaa !5
  %229 = getelementptr inbounds %class.aiVector3t, ptr %228, i64 %indvars.iv192
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %20, ptr noundef nonnull align 4 dereferenceable(12) %229, i64 12, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %21) #11
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %21) #11
  %230 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #11
  %.not181 = icmp eq i64 %230, 0
  br i1 %.not181, label %._crit_edge170, label %.lr.ph169

._crit_edge170:                                   ; preds = %255, %227
  %231 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE13NormalizeSafeEv(ptr noundef nonnull align 4 dereferenceable(12) %21)
          to label %260 unwind label %265

232:                                              ; preds = %224
  %233 = landingpad { ptr, i32 }
          cleanup
  br label %272

.lr.ph169:                                        ; preds = %227, %255
  %234 = phi i64 [ %257, %255 ], [ 0, %227 ]
  %.0167 = phi i32 [ %256, %255 ], [ 0, %227 ]
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %22) #11
  %235 = load ptr, ptr %23, align 8, !tbaa !5
  %236 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %234) #11
  %237 = load i32, ptr %236, align 4, !tbaa !30
  %238 = zext i32 %237 to i64
  %239 = getelementptr inbounds %class.aiVector3t, ptr %235, i64 %238
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %22, ptr noundef nonnull align 4 dereferenceable(12) %239, i64 12, i1 false), !tbaa.struct !31
  %240 = load float, ptr %22, align 4, !tbaa !50
  %241 = invoke noundef zeroext i1 @_Z11is_not_qnanIfEbT_(float noundef %240)
          to label %242 unwind label %253

242:                                              ; preds = %.lr.ph169
  br i1 %241, label %243, label %255

243:                                              ; preds = %242
  %244 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %234) #11
  %245 = load i32, ptr %244, align 4, !tbaa !30
  %246 = zext i32 %245 to i64
  %247 = icmp eq i64 %indvars.iv192, %246
  br i1 %247, label %251, label %248

248:                                              ; preds = %243
  %249 = call noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %22, ptr noundef nonnull align 4 dereferenceable(12) %20)
  %250 = fcmp ult float %249, %221
  br i1 %250, label %255, label %251

251:                                              ; preds = %248, %243
  %252 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfEpLERKS0_(ptr noundef nonnull align 4 dereferenceable(12) %21, ptr noundef nonnull align 4 dereferenceable(12) %22)
  br label %255

253:                                              ; preds = %.lr.ph169
  %254 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %22) #11
  br label %267

255:                                              ; preds = %251, %248, %242
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %22) #11
  %256 = add i32 %.0167, 1
  %257 = zext i32 %256 to i64
  %258 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #11
  %259 = icmp ugt i64 %258, %257
  br i1 %259, label %.lr.ph169, label %._crit_edge170, !llvm.loop !54

260:                                              ; preds = %._crit_edge170
  %261 = getelementptr inbounds %class.aiVector3t, ptr %136, i64 %indvars.iv192
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %261, ptr noundef nonnull align 4 dereferenceable(12) %231, i64 12, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %21) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %20) #11
  %indvars.iv.next193 = add nuw nsw i64 %indvars.iv192, 1
  %262 = load i32, ptr %37, align 4, !tbaa !23
  %263 = zext i32 %262 to i64
  %264 = icmp ult i64 %indvars.iv.next193, %263
  br i1 %264, label %224, label %.loopexit, !llvm.loop !55

265:                                              ; preds = %._crit_edge170
  %266 = landingpad { ptr, i32 }
          cleanup
  br label %267

267:                                              ; preds = %265, %253
  %.pn = phi { ptr, i32 } [ %254, %253 ], [ %266, %265 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %21) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %20) #11
  br label %272

.loopexit:                                        ; preds = %260, %220, %._crit_edge166
  %268 = load ptr, ptr %23, align 8, !tbaa !5
  %269 = icmp eq ptr %268, null
  br i1 %269, label %271, label %270

270:                                              ; preds = %.loopexit
  call void @_ZdaPv(ptr noundef nonnull %268) #10
  br label %271

271:                                              ; preds = %270, %.loopexit
  store ptr %136, ptr %23, align 8, !tbaa !5
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #11
  call void @_ZN6Assimp11SpatialSortD2Ev(ptr noundef nonnull align 8 dereferenceable(49) %11) #11
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %11) #11
  br label %274

272:                                              ; preds = %232, %267, %219, %156
  %.pn131.pn.pn.pn = phi { ptr, i32 } [ %.pn131.pn.pn, %219 ], [ %157, %156 ], [ %.pn, %267 ], [ %233, %232 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #11
  br label %273

273:                                              ; preds = %272, %130, %118
  %.pn131.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn131.pn.pn.pn, %272 ], [ %131, %130 ], [ %119, %118 ]
  call void @_ZN6Assimp11SpatialSortD2Ev(ptr noundef nonnull align 8 dereferenceable(49) %11) #11
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %11) #11
  resume { ptr, i32 } %.pn131.pn.pn.pn.pn

274:                                              ; preds = %25, %271, %33
  %.095 = phi i1 [ true, %271 ], [ false, %33 ], [ false, %25 ]
  ret i1 %.095
}

declare void @_ZN6Assimp6Logger4infoEPKc(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef) local_unnamed_addr #1

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZNSt14numeric_limitsIfE9quiet_NaNEv() local_unnamed_addr #4 align 2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZeoIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #8

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #8

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

declare void @_ZN6Assimp11SpatialSortC1Ev(ptr noundef nonnull align 8 dereferenceable(49)) unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK6Assimp21SharedPostProcessInfo11GetPropertyISt6vectorISt4pairINS_11SpatialSortEfESaIS5_EEEEbPKcRPT_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef, ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #9 align 2

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

declare void @_ZN6Assimp11SpatialSort4FillEPK10aiVector3tIfEjjb(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef, i32 noundef, i32 noundef, i1 noundef zeroext) local_unnamed_addr #1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 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 #9 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef) local_unnamed_addr #9 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 #4 align 2

declare void @_ZNK6Assimp11SpatialSort13FindPositionsERK10aiVector3tIfEfRSt6vectorIjSaIjEE(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 4 dereferenceable(12), float noundef, ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 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 #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z11is_not_qnanIfEbT_(float noundef) local_unnamed_addr #8

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfEpLERKS0_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #7 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 #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3cosf(float noundef) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #7

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 24}
!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, !19, i64 28}
!17 = !{!"_ZTSN6Assimp23GenVertexNormalsProcessE", !18, i64 0, !15, i64 24, !19, i64 28, !19, i64 29, !19, i64 30}
!18 = !{!"_ZTSN6Assimp11BaseProcessE", !10, i64 8, !10, i64 16}
!19 = !{!"bool", !8, i64 0}
!20 = !{i8 0, i8 2}
!21 = !{}
!22 = !{!6, !7, i64 0}
!23 = !{!6, !7, i64 4}
!24 = !{!6, !7, i64 8}
!25 = !{!18, !10, i64 8}
!26 = !{!6, !10, i64 208}
!27 = !{!28, !7, i64 0}
!28 = !{!"_ZTS6aiFace", !7, i64 0, !10, i64 8}
!29 = !{!28, !10, i64 8}
!30 = !{!7, !7, i64 0}
!31 = !{i64 0, i64 4, !32, i64 4, i64 4, !32, i64 8, i64 4, !32}
!32 = !{!15, !15, i64 0}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!6, !10, i64 16}
!36 = !{!10, !10, i64 0}
!37 = !{!17, !19, i64 29}
!38 = !{!17, !19, i64 30}
!39 = distinct !{!39, !34}
!40 = distinct !{!40, !34}
!41 = !{!42, !15, i64 56}
!42 = !{!"_ZTSSt4pairIN6Assimp11SpatialSortEfE", !43, i64 0, !15, i64 56}
!43 = !{!"_ZTSN6Assimp11SpatialSortE", !14, i64 0, !14, i64 12, !44, i64 24, !19, i64 48}
!44 = !{!"_ZTSSt6vectorIN6Assimp11SpatialSort5EntryESaIS2_EE", !45, i64 0}
!45 = !{!"_ZTSSt12_Vector_baseIN6Assimp11SpatialSort5EntryESaIS2_EE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseIN6Assimp11SpatialSort5EntryESaIS2_EE12_Vector_implE", !47, i64 0}
!47 = !{!"_ZTSNSt12_Vector_baseIN6Assimp11SpatialSort5EntryESaIS2_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!48 = !{!17, !15, i64 24}
!49 = !{!19, !19, i64 0}
!50 = !{!14, !15, i64 0}
!51 = distinct !{!51, !34}
!52 = distinct !{!52, !34}
!53 = distinct !{!53, !34}
!54 = distinct !{!54, !34}
!55 = distinct !{!55, !34}


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