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

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

%"class.std::vector" = type { %"struct.std::_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.0" = type { i8 }
%"struct.std::_Bit_reference" = type { ptr, i64 }
%class.aiVector3t = type { float, float, float }
%"class.Assimp::SpatialSort" = type <{ %class.aiVector3t, %class.aiVector3t, %"class.std::vector.3", i8, [7 x i8] }>
%"class.std::vector.3" = 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.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = 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 }
%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::CalcTangentsProcess" = type { %"class.Assimp::BaseProcess", float, i32 }
%"class.Assimp::BaseProcess" = type { ptr, ptr, ptr }
%struct.aiFace = type { i32, ptr }
%"struct.std::pair" = type { %"class.Assimp::SpatialSort", float, [4 x i8] }

@.str.8 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.11 = 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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN6Assimp19CalcTangentsProcess11ProcessMeshEP6aiMeshj(ptr noundef nonnull align 8 dereferenceable(32) %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 %"class.std::vector", align 8
  %10 = alloca i8, align 1
  %11 = alloca %"class.std::allocator.0", align 1
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca float, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca %"struct.std::_Bit_reference", align 8
  %26 = alloca %class.aiVector3t, align 4
  %27 = alloca %class.aiVector3t, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca %class.aiVector3t, align 4
  %32 = alloca { <2 x float>, float }, align 8
  %33 = alloca %class.aiVector3t, align 4
  %34 = alloca { <2 x float>, float }, align 8
  %35 = alloca float, align 4
  %36 = alloca float, align 4
  %37 = alloca float, align 4
  %38 = alloca float, align 4
  %39 = alloca float, align 4
  %40 = alloca %class.aiVector3t, align 4
  %41 = alloca %class.aiVector3t, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca %class.aiVector3t, align 4
  %45 = alloca %class.aiVector3t, align 4
  %46 = alloca { <2 x float>, float }, align 8
  %47 = alloca { <2 x float>, float }, align 8
  %48 = alloca %class.aiVector3t, align 4
  %49 = alloca %class.aiVector3t, align 4
  %50 = alloca { <2 x float>, float }, align 8
  %51 = alloca { <2 x float>, float }, align 8
  %52 = alloca i8, align 1
  %53 = alloca i8, align 1
  %54 = alloca %class.aiVector3t, align 4
  %55 = alloca { <2 x float>, float }, align 8
  %56 = alloca %class.aiVector3t, align 4
  %57 = alloca { <2 x float>, float }, align 8
  %58 = alloca ptr, align 8
  %59 = alloca %"class.Assimp::SpatialSort", align 8
  %60 = alloca float, align 4
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca %"class.std::vector.15", align 8
  %64 = alloca float, align 4
  %65 = alloca %"class.std::vector.15", align 8
  %66 = alloca i32, align 4
  %67 = alloca %"struct.std::_Bit_reference", align 8
  %68 = alloca ptr, align 8
  %69 = alloca ptr, align 8
  %70 = alloca ptr, align 8
  %71 = alloca ptr, align 8
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca %"struct.std::_Bit_reference", align 8
  %75 = alloca %"struct.std::_Bit_reference", align 8
  %76 = alloca %class.aiVector3t, align 4
  %77 = alloca %class.aiVector3t, align 4
  %78 = alloca i32, align 4
  %79 = alloca i32, 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
  %80 = load ptr, ptr %5, align 8
  %81 = load ptr, ptr %6, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.aiMesh, ptr %81, i32 0, i32 5
  %83 = load ptr, ptr %82, align 8, !tbaa !11
  %84 = icmp ne ptr %83, null
  br i1 %84, label %85, label %86

85:                                               ; preds = %3
  store i1 false, ptr %4, align 1
  br label %955

86:                                               ; preds = %3
  %87 = load ptr, ptr %6, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.aiMesh, ptr %87, i32 0, i32 0
  %89 = load i32, ptr %88, align 8, !tbaa !18
  %90 = and i32 %89, 12
  %91 = icmp ne i32 %90, 0
  br i1 %91, label %94, label %92

92:                                               ; preds = %86
  %93 = call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  call void @_ZN6Assimp6Logger4infoEPKc(ptr noundef nonnull align 8 dereferenceable(12) %93, ptr noundef @.str.8)
  store i1 false, ptr %4, align 1
  br label %955

94:                                               ; preds = %86
  %95 = load ptr, ptr %6, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.aiMesh, ptr %95, i32 0, i32 4
  %97 = load ptr, ptr %96, align 8, !tbaa !19
  %98 = icmp eq ptr %97, null
  br i1 %98, label %99, label %101

99:                                               ; preds = %94
  %100 = call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  call void @_ZN6Assimp6Logger5errorEPKc(ptr noundef nonnull align 8 dereferenceable(12) %100, ptr noundef @.str.9)
  store i1 false, ptr %4, align 1
  br label %955

101:                                              ; preds = %94
  %102 = getelementptr inbounds %"class.Assimp::CalcTangentsProcess", ptr %80, i32 0, i32 2
  %103 = load i32, ptr %102, align 4, !tbaa !20
  %104 = icmp uge i32 %103, 8
  br i1 %104, label %114, label %105

105:                                              ; preds = %101
  %106 = load ptr, ptr %6, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.aiMesh, ptr %106, i32 0, i32 8
  %108 = getelementptr inbounds %"class.Assimp::CalcTangentsProcess", ptr %80, i32 0, i32 2
  %109 = load i32, ptr %108, align 4, !tbaa !20
  %110 = zext i32 %109 to i64
  %111 = getelementptr inbounds [8 x ptr], ptr %107, i64 0, i64 %110
  %112 = load ptr, ptr %111, align 8, !tbaa !5
  %113 = icmp ne ptr %112, null
  br i1 %113, label %117, label %114

114:                                              ; preds = %105, %101
  %115 = call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  %116 = getelementptr inbounds %"class.Assimp::CalcTangentsProcess", ptr %80, i32 0, i32 2
  call void @_ZN6Assimp6Logger5errorIJRA52_KcRjEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12) %115, ptr noundef nonnull align 1 dereferenceable(52) @.str.10, ptr noundef nonnull align 4 dereferenceable(4) %116)
  store i1 false, ptr %4, align 1
  br label %955

117:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #10
  store float 0x3FEFFF2E40000000, ptr %8, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 40, ptr %9) #10
  %118 = load ptr, ptr %6, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.aiMesh, ptr %118, i32 0, i32 1
  %120 = load i32, ptr %119, align 4, !tbaa !24
  %121 = zext i32 %120 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #10
  store i8 0, ptr %10, align 1, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #10
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #10
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %9, i64 noundef %121, ptr noundef nonnull align 1 dereferenceable(1) %10, ptr noundef nonnull align 1 dereferenceable(1) %11)
          to label %122 unwind label %191

122:                                              ; preds = %117
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #10
  %123 = invoke noundef float @_Z8get_qnanv()
          to label %124 unwind label %195

124:                                              ; preds = %122
  store float %123, ptr %14, align 4, !tbaa !23
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.aiMesh, ptr %125, i32 0, i32 1
  %127 = load i32, ptr %126, align 4, !tbaa !24
  %128 = zext i32 %127 to i64
  %129 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %128, i64 12)
  %130 = extractvalue { i64, i1 } %129, 1
  %131 = extractvalue { i64, i1 } %129, 0
  %132 = select i1 %130, i64 -1, i64 %131
  %133 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %132) #11
          to label %134 unwind label %195

134:                                              ; preds = %124
  %135 = icmp eq i64 %128, 0
  br i1 %135, label %142, label %136

136:                                              ; preds = %134
  %137 = getelementptr inbounds %class.aiVector3t, ptr %133, i64 %128
  br label %138

138:                                              ; preds = %138, %136
  %139 = phi ptr [ %133, %136 ], [ %140, %138 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %139) #10
  %140 = getelementptr inbounds %class.aiVector3t, ptr %139, i64 1
  %141 = icmp eq ptr %140, %137
  br i1 %141, label %142, label %138

142:                                              ; preds = %138, %134
  %143 = load ptr, ptr %6, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.aiMesh, ptr %143, i32 0, i32 5
  store ptr %133, ptr %144, align 8, !tbaa !11
  %145 = load ptr, ptr %6, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.aiMesh, ptr %145, i32 0, i32 1
  %147 = load i32, ptr %146, align 4, !tbaa !24
  %148 = zext i32 %147 to i64
  %149 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %148, i64 12)
  %150 = extractvalue { i64, i1 } %149, 1
  %151 = extractvalue { i64, i1 } %149, 0
  %152 = select i1 %150, i64 -1, i64 %151
  %153 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %152) #11
          to label %154 unwind label %195

154:                                              ; preds = %142
  %155 = icmp eq i64 %148, 0
  br i1 %155, label %162, label %156

156:                                              ; preds = %154
  %157 = getelementptr inbounds %class.aiVector3t, ptr %153, i64 %148
  br label %158

158:                                              ; preds = %158, %156
  %159 = phi ptr [ %153, %156 ], [ %160, %158 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %159) #10
  %160 = getelementptr inbounds %class.aiVector3t, ptr %159, i64 1
  %161 = icmp eq ptr %160, %157
  br i1 %161, label %162, label %158

162:                                              ; preds = %158, %154
  %163 = load ptr, ptr %6, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.aiMesh, ptr %163, i32 0, i32 6
  store ptr %153, ptr %164, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #10
  %165 = load ptr, ptr %6, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.aiMesh, ptr %165, i32 0, i32 3
  %167 = load ptr, ptr %166, align 8, !tbaa !28
  store ptr %167, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #10
  %168 = load ptr, ptr %6, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.aiMesh, ptr %168, i32 0, i32 4
  %170 = load ptr, ptr %169, align 8, !tbaa !19
  store ptr %170, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #10
  %171 = load ptr, ptr %6, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.aiMesh, ptr %171, i32 0, i32 8
  %173 = getelementptr inbounds %"class.Assimp::CalcTangentsProcess", ptr %80, i32 0, i32 2
  %174 = load i32, ptr %173, align 4, !tbaa !20
  %175 = zext i32 %174 to i64
  %176 = getelementptr inbounds [8 x ptr], ptr %172, i64 0, i64 %175
  %177 = load ptr, ptr %176, align 8, !tbaa !5
  store ptr %177, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #10
  %178 = load ptr, ptr %6, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.aiMesh, ptr %178, i32 0, i32 5
  %180 = load ptr, ptr %179, align 8, !tbaa !11
  store ptr %180, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #10
  %181 = load ptr, ptr %6, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.aiMesh, ptr %181, i32 0, i32 6
  %183 = load ptr, ptr %182, align 8, !tbaa !27
  store ptr %183, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #10
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %184

184:                                              ; preds = %661, %162
  %185 = load i32, ptr %20, align 4, !tbaa !9
  %186 = load ptr, ptr %6, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.aiMesh, ptr %186, i32 0, i32 2
  %188 = load i32, ptr %187, align 8, !tbaa !29
  %189 = icmp ult i32 %185, %188
  br i1 %189, label %199, label %190

190:                                              ; preds = %184
  store i32 2, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #10
  br label %667

191:                                              ; preds = %117
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %12, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %13, align 4
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #10
  br label %954

195:                                              ; preds = %142, %124, %122
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %12, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %13, align 4
  br label %953

199:                                              ; preds = %184
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #10
  %200 = load ptr, ptr %6, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.aiMesh, ptr %200, i32 0, i32 10
  %202 = load ptr, ptr %201, align 8, !tbaa !30
  %203 = load i32, ptr %20, align 4, !tbaa !9
  %204 = zext i32 %203 to i64
  %205 = getelementptr inbounds %struct.aiFace, ptr %202, i64 %204
  store ptr %205, ptr %22, align 8, !tbaa !5
  %206 = load ptr, ptr %22, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.aiFace, ptr %206, i32 0, i32 0
  %208 = load i32, ptr %207, align 8, !tbaa !31
  %209 = icmp ult i32 %208, 3
  br i1 %209, label %210, label %264

210:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #10
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %211

211:                                              ; preds = %247, %210
  %212 = load i32, ptr %23, align 4, !tbaa !9
  %213 = load ptr, ptr %22, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.aiFace, ptr %213, i32 0, i32 0
  %215 = load i32, ptr %214, align 8, !tbaa !31
  %216 = icmp ult i32 %212, %215
  br i1 %216, label %218, label %217

217:                                              ; preds = %211
  store i32 5, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #10
  br label %263

218:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #10
  %219 = load ptr, ptr %22, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.aiFace, ptr %219, i32 0, i32 1
  %221 = load ptr, ptr %220, align 8, !tbaa !33
  %222 = load i32, ptr %23, align 4, !tbaa !9
  %223 = zext i32 %222 to i64
  %224 = getelementptr inbounds i32, ptr %221, i64 %223
  %225 = load i32, ptr %224, align 4, !tbaa !9
  store i32 %225, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #10
  %226 = load i32, ptr %24, align 4, !tbaa !9
  %227 = zext i32 %226 to i64
  %228 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %9, i64 noundef %227)
          to label %229 unwind label %250

229:                                              ; preds = %218
  %230 = getelementptr inbounds { ptr, i64 }, ptr %25, i32 0, i32 0
  %231 = extractvalue { ptr, i64 } %228, 0
  store ptr %231, ptr %230, align 8
  %232 = getelementptr inbounds { ptr, i64 }, ptr %25, i32 0, i32 1
  %233 = extractvalue { ptr, i64 } %228, 1
  store i64 %233, ptr %232, align 8
  %234 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %25, i1 noundef zeroext true) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #10
  call void @llvm.lifetime.start.p0(i64 12, ptr %26) #10
  %235 = load float, ptr %14, align 4, !tbaa !23
  invoke void @_ZN10aiVector3tIfEC2Ef(ptr noundef nonnull align 4 dereferenceable(12) %26, float noundef %235)
          to label %236 unwind label %254

236:                                              ; preds = %229
  %237 = load ptr, ptr %18, align 8, !tbaa !5
  %238 = load i32, ptr %24, align 4, !tbaa !9
  %239 = zext i32 %238 to i64
  %240 = getelementptr inbounds %class.aiVector3t, ptr %237, i64 %239
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %240, ptr align 4 %26, i64 12, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 12, ptr %26) #10
  call void @llvm.lifetime.start.p0(i64 12, ptr %27) #10
  %241 = load float, ptr %14, align 4, !tbaa !23
  invoke void @_ZN10aiVector3tIfEC2Ef(ptr noundef nonnull align 4 dereferenceable(12) %27, float noundef %241)
          to label %242 unwind label %258

242:                                              ; preds = %236
  %243 = load ptr, ptr %19, align 8, !tbaa !5
  %244 = load i32, ptr %24, align 4, !tbaa !9
  %245 = zext i32 %244 to i64
  %246 = getelementptr inbounds %class.aiVector3t, ptr %243, i64 %245
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %246, ptr align 4 %27, i64 12, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 12, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #10
  br label %247

247:                                              ; preds = %242
  %248 = load i32, ptr %23, align 4, !tbaa !9
  %249 = add i32 %248, 1
  store i32 %249, ptr %23, align 4, !tbaa !9
  br label %211, !llvm.loop !35

250:                                              ; preds = %218
  %251 = landingpad { ptr, i32 }
          cleanup
  %252 = extractvalue { ptr, i32 } %251, 0
  store ptr %252, ptr %12, align 8
  %253 = extractvalue { ptr, i32 } %251, 1
  store i32 %253, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #10
  br label %262

254:                                              ; preds = %229
  %255 = landingpad { ptr, i32 }
          cleanup
  %256 = extractvalue { ptr, i32 } %255, 0
  store ptr %256, ptr %12, align 8
  %257 = extractvalue { ptr, i32 } %255, 1
  store i32 %257, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %26) #10
  br label %262

258:                                              ; preds = %236
  %259 = landingpad { ptr, i32 }
          cleanup
  %260 = extractvalue { ptr, i32 } %259, 0
  store ptr %260, ptr %12, align 8
  %261 = extractvalue { ptr, i32 } %259, 1
  store i32 %261, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %27) #10
  br label %262

262:                                              ; preds = %258, %254, %250
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #10
  br label %666

263:                                              ; preds = %217
  store i32 4, ptr %21, align 4
  br label %658

264:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #10
  %265 = load ptr, ptr %22, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.aiFace, ptr %265, i32 0, i32 1
  %267 = load ptr, ptr %266, align 8, !tbaa !33
  %268 = getelementptr inbounds i32, ptr %267, i64 0
  %269 = load i32, ptr %268, align 4, !tbaa !9
  store i32 %269, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #10
  %270 = load ptr, ptr %22, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.aiFace, ptr %270, i32 0, i32 1
  %272 = load ptr, ptr %271, align 8, !tbaa !33
  %273 = getelementptr inbounds i32, ptr %272, i64 1
  %274 = load i32, ptr %273, align 4, !tbaa !9
  store i32 %274, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #10
  %275 = load ptr, ptr %22, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.aiFace, ptr %275, i32 0, i32 1
  %277 = load ptr, ptr %276, align 8, !tbaa !33
  %278 = getelementptr inbounds i32, ptr %277, i64 2
  %279 = load i32, ptr %278, align 4, !tbaa !9
  store i32 %279, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 12, ptr %31) #10
  %280 = load ptr, ptr %15, align 8, !tbaa !5
  %281 = load i32, ptr %29, align 4, !tbaa !9
  %282 = zext i32 %281 to i64
  %283 = getelementptr inbounds %class.aiVector3t, ptr %280, i64 %282
  %284 = load ptr, ptr %15, align 8, !tbaa !5
  %285 = load i32, ptr %28, align 4, !tbaa !9
  %286 = zext i32 %285 to i64
  %287 = getelementptr inbounds %class.aiVector3t, ptr %284, i64 %286
  %288 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %283, ptr noundef nonnull align 4 dereferenceable(12) %287)
          to label %289 unwind label %370

289:                                              ; preds = %264
  store { <2 x float>, float } %288, ptr %32, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %31, ptr align 8 %32, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %33) #10
  %290 = load ptr, ptr %15, align 8, !tbaa !5
  %291 = load i32, ptr %30, align 4, !tbaa !9
  %292 = zext i32 %291 to i64
  %293 = getelementptr inbounds %class.aiVector3t, ptr %290, i64 %292
  %294 = load ptr, ptr %15, align 8, !tbaa !5
  %295 = load i32, ptr %28, align 4, !tbaa !9
  %296 = zext i32 %295 to i64
  %297 = getelementptr inbounds %class.aiVector3t, ptr %294, i64 %296
  %298 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %293, ptr noundef nonnull align 4 dereferenceable(12) %297)
          to label %299 unwind label %374

299:                                              ; preds = %289
  store { <2 x float>, float } %298, ptr %34, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %33, ptr align 8 %34, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #10
  %300 = load ptr, ptr %17, align 8, !tbaa !5
  %301 = load i32, ptr %29, align 4, !tbaa !9
  %302 = zext i32 %301 to i64
  %303 = getelementptr inbounds %class.aiVector3t, ptr %300, i64 %302
  %304 = getelementptr inbounds %class.aiVector3t, ptr %303, i32 0, i32 0
  %305 = load float, ptr %304, align 4, !tbaa !37
  %306 = load ptr, ptr %17, align 8, !tbaa !5
  %307 = load i32, ptr %28, align 4, !tbaa !9
  %308 = zext i32 %307 to i64
  %309 = getelementptr inbounds %class.aiVector3t, ptr %306, i64 %308
  %310 = getelementptr inbounds %class.aiVector3t, ptr %309, i32 0, i32 0
  %311 = load float, ptr %310, align 4, !tbaa !37
  %312 = fsub float %305, %311
  store float %312, ptr %35, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #10
  %313 = load ptr, ptr %17, align 8, !tbaa !5
  %314 = load i32, ptr %29, align 4, !tbaa !9
  %315 = zext i32 %314 to i64
  %316 = getelementptr inbounds %class.aiVector3t, ptr %313, i64 %315
  %317 = getelementptr inbounds %class.aiVector3t, ptr %316, i32 0, i32 1
  %318 = load float, ptr %317, align 4, !tbaa !38
  %319 = load ptr, ptr %17, align 8, !tbaa !5
  %320 = load i32, ptr %28, align 4, !tbaa !9
  %321 = zext i32 %320 to i64
  %322 = getelementptr inbounds %class.aiVector3t, ptr %319, i64 %321
  %323 = getelementptr inbounds %class.aiVector3t, ptr %322, i32 0, i32 1
  %324 = load float, ptr %323, align 4, !tbaa !38
  %325 = fsub float %318, %324
  store float %325, ptr %36, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #10
  %326 = load ptr, ptr %17, align 8, !tbaa !5
  %327 = load i32, ptr %30, align 4, !tbaa !9
  %328 = zext i32 %327 to i64
  %329 = getelementptr inbounds %class.aiVector3t, ptr %326, i64 %328
  %330 = getelementptr inbounds %class.aiVector3t, ptr %329, i32 0, i32 0
  %331 = load float, ptr %330, align 4, !tbaa !37
  %332 = load ptr, ptr %17, align 8, !tbaa !5
  %333 = load i32, ptr %28, align 4, !tbaa !9
  %334 = zext i32 %333 to i64
  %335 = getelementptr inbounds %class.aiVector3t, ptr %332, i64 %334
  %336 = getelementptr inbounds %class.aiVector3t, ptr %335, i32 0, i32 0
  %337 = load float, ptr %336, align 4, !tbaa !37
  %338 = fsub float %331, %337
  store float %338, ptr %37, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #10
  %339 = load ptr, ptr %17, align 8, !tbaa !5
  %340 = load i32, ptr %30, align 4, !tbaa !9
  %341 = zext i32 %340 to i64
  %342 = getelementptr inbounds %class.aiVector3t, ptr %339, i64 %341
  %343 = getelementptr inbounds %class.aiVector3t, ptr %342, i32 0, i32 1
  %344 = load float, ptr %343, align 4, !tbaa !38
  %345 = load ptr, ptr %17, align 8, !tbaa !5
  %346 = load i32, ptr %28, align 4, !tbaa !9
  %347 = zext i32 %346 to i64
  %348 = getelementptr inbounds %class.aiVector3t, ptr %345, i64 %347
  %349 = getelementptr inbounds %class.aiVector3t, ptr %348, i32 0, i32 1
  %350 = load float, ptr %349, align 4, !tbaa !38
  %351 = fsub float %344, %350
  store float %351, ptr %38, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #10
  %352 = load float, ptr %37, align 4, !tbaa !23
  %353 = load float, ptr %36, align 4, !tbaa !23
  %354 = load float, ptr %38, align 4, !tbaa !23
  %355 = load float, ptr %35, align 4, !tbaa !23
  %356 = fmul float %354, %355
  %357 = fneg float %356
  %358 = call float @llvm.fmuladd.f32(float %352, float %353, float %357)
  %359 = fcmp olt float %358, 0.000000e+00
  %360 = zext i1 %359 to i64
  %361 = select i1 %359, float -1.000000e+00, float 1.000000e+00
  store float %361, ptr %39, align 4, !tbaa !23
  %362 = load float, ptr %35, align 4, !tbaa !23
  %363 = load float, ptr %38, align 4, !tbaa !23
  %364 = fmul float %362, %363
  %365 = load float, ptr %36, align 4, !tbaa !23
  %366 = load float, ptr %37, align 4, !tbaa !23
  %367 = fmul float %365, %366
  %368 = fcmp oeq float %364, %367
  br i1 %368, label %369, label %378

369:                                              ; preds = %299
  store float 0.000000e+00, ptr %35, align 4, !tbaa !23
  store float 1.000000e+00, ptr %36, align 4, !tbaa !23
  store float 1.000000e+00, ptr %37, align 4, !tbaa !23
  store float 0.000000e+00, ptr %38, align 4, !tbaa !23
  br label %378

370:                                              ; preds = %264
  %371 = landingpad { ptr, i32 }
          cleanup
  %372 = extractvalue { ptr, i32 } %371, 0
  store ptr %372, ptr %12, align 8
  %373 = extractvalue { ptr, i32 } %371, 1
  store i32 %373, ptr %13, align 4
  br label %665

374:                                              ; preds = %289
  %375 = landingpad { ptr, i32 }
          cleanup
  %376 = extractvalue { ptr, i32 } %375, 0
  store ptr %376, ptr %12, align 8
  %377 = extractvalue { ptr, i32 } %375, 1
  store i32 %377, ptr %13, align 4
  br label %664

378:                                              ; preds = %369, %299
  call void @llvm.lifetime.start.p0(i64 12, ptr %40) #10
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %40) #10
  call void @llvm.lifetime.start.p0(i64 12, ptr %41) #10
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %41) #10
  %379 = getelementptr inbounds %class.aiVector3t, ptr %33, i32 0, i32 0
  %380 = load float, ptr %379, align 4, !tbaa !37
  %381 = load float, ptr %36, align 4, !tbaa !23
  %382 = getelementptr inbounds %class.aiVector3t, ptr %31, i32 0, i32 0
  %383 = load float, ptr %382, align 4, !tbaa !37
  %384 = load float, ptr %38, align 4, !tbaa !23
  %385 = fmul float %383, %384
  %386 = fneg float %385
  %387 = call float @llvm.fmuladd.f32(float %380, float %381, float %386)
  %388 = load float, ptr %39, align 4, !tbaa !23
  %389 = fmul float %387, %388
  %390 = getelementptr inbounds %class.aiVector3t, ptr %40, i32 0, i32 0
  store float %389, ptr %390, align 4, !tbaa !37
  %391 = getelementptr inbounds %class.aiVector3t, ptr %33, i32 0, i32 1
  %392 = load float, ptr %391, align 4, !tbaa !38
  %393 = load float, ptr %36, align 4, !tbaa !23
  %394 = getelementptr inbounds %class.aiVector3t, ptr %31, i32 0, i32 1
  %395 = load float, ptr %394, align 4, !tbaa !38
  %396 = load float, ptr %38, align 4, !tbaa !23
  %397 = fmul float %395, %396
  %398 = fneg float %397
  %399 = call float @llvm.fmuladd.f32(float %392, float %393, float %398)
  %400 = load float, ptr %39, align 4, !tbaa !23
  %401 = fmul float %399, %400
  %402 = getelementptr inbounds %class.aiVector3t, ptr %40, i32 0, i32 1
  store float %401, ptr %402, align 4, !tbaa !38
  %403 = getelementptr inbounds %class.aiVector3t, ptr %33, i32 0, i32 2
  %404 = load float, ptr %403, align 4, !tbaa !39
  %405 = load float, ptr %36, align 4, !tbaa !23
  %406 = getelementptr inbounds %class.aiVector3t, ptr %31, i32 0, i32 2
  %407 = load float, ptr %406, align 4, !tbaa !39
  %408 = load float, ptr %38, align 4, !tbaa !23
  %409 = fmul float %407, %408
  %410 = fneg float %409
  %411 = call float @llvm.fmuladd.f32(float %404, float %405, float %410)
  %412 = load float, ptr %39, align 4, !tbaa !23
  %413 = fmul float %411, %412
  %414 = getelementptr inbounds %class.aiVector3t, ptr %40, i32 0, i32 2
  store float %413, ptr %414, align 4, !tbaa !39
  %415 = getelementptr inbounds %class.aiVector3t, ptr %33, i32 0, i32 0
  %416 = load float, ptr %415, align 4, !tbaa !37
  %417 = load float, ptr %35, align 4, !tbaa !23
  %418 = getelementptr inbounds %class.aiVector3t, ptr %31, i32 0, i32 0
  %419 = load float, ptr %418, align 4, !tbaa !37
  %420 = load float, ptr %37, align 4, !tbaa !23
  %421 = fmul float %419, %420
  %422 = fneg float %421
  %423 = call float @llvm.fmuladd.f32(float %416, float %417, float %422)
  %424 = load float, ptr %39, align 4, !tbaa !23
  %425 = fmul float %423, %424
  %426 = getelementptr inbounds %class.aiVector3t, ptr %41, i32 0, i32 0
  store float %425, ptr %426, align 4, !tbaa !37
  %427 = getelementptr inbounds %class.aiVector3t, ptr %33, i32 0, i32 1
  %428 = load float, ptr %427, align 4, !tbaa !38
  %429 = load float, ptr %35, align 4, !tbaa !23
  %430 = getelementptr inbounds %class.aiVector3t, ptr %31, i32 0, i32 1
  %431 = load float, ptr %430, align 4, !tbaa !38
  %432 = load float, ptr %37, align 4, !tbaa !23
  %433 = fmul float %431, %432
  %434 = fneg float %433
  %435 = call float @llvm.fmuladd.f32(float %428, float %429, float %434)
  %436 = load float, ptr %39, align 4, !tbaa !23
  %437 = fmul float %435, %436
  %438 = getelementptr inbounds %class.aiVector3t, ptr %41, i32 0, i32 1
  store float %437, ptr %438, align 4, !tbaa !38
  %439 = getelementptr inbounds %class.aiVector3t, ptr %33, i32 0, i32 2
  %440 = load float, ptr %439, align 4, !tbaa !39
  %441 = load float, ptr %35, align 4, !tbaa !23
  %442 = getelementptr inbounds %class.aiVector3t, ptr %31, i32 0, i32 2
  %443 = load float, ptr %442, align 4, !tbaa !39
  %444 = load float, ptr %37, align 4, !tbaa !23
  %445 = fmul float %443, %444
  %446 = fneg float %445
  %447 = call float @llvm.fmuladd.f32(float %440, float %441, float %446)
  %448 = load float, ptr %39, align 4, !tbaa !23
  %449 = fmul float %447, %448
  %450 = getelementptr inbounds %class.aiVector3t, ptr %41, i32 0, i32 2
  store float %449, ptr %450, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #10
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %451

451:                                              ; preds = %650, %378
  %452 = load i32, ptr %42, align 4, !tbaa !9
  %453 = load ptr, ptr %22, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.aiFace, ptr %453, i32 0, i32 0
  %455 = load i32, ptr %454, align 8, !tbaa !31
  %456 = icmp ult i32 %452, %455
  br i1 %456, label %458, label %457

457:                                              ; preds = %451
  store i32 8, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #10
  br label %657

458:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #10
  %459 = load ptr, ptr %22, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.aiFace, ptr %459, i32 0, i32 1
  %461 = load ptr, ptr %460, align 8, !tbaa !33
  %462 = load i32, ptr %42, align 4, !tbaa !9
  %463 = zext i32 %462 to i64
  %464 = getelementptr inbounds i32, ptr %461, i64 %463
  %465 = load i32, ptr %464, align 4, !tbaa !9
  store i32 %465, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 12, ptr %44) #10
  call void @llvm.lifetime.start.p0(i64 12, ptr %45) #10
  %466 = load ptr, ptr %16, align 8, !tbaa !5
  %467 = load i32, ptr %43, align 4, !tbaa !9
  %468 = zext i32 %467 to i64
  %469 = getelementptr inbounds %class.aiVector3t, ptr %466, i64 %468
  %470 = load ptr, ptr %16, align 8, !tbaa !5
  %471 = load i32, ptr %43, align 4, !tbaa !9
  %472 = zext i32 %471 to i64
  %473 = getelementptr inbounds %class.aiVector3t, ptr %470, i64 %472
  %474 = invoke noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %40, ptr noundef nonnull align 4 dereferenceable(12) %473)
          to label %475 unwind label %603

475:                                              ; preds = %458
  %476 = invoke { <2 x float>, float } @_ZmlIfE10aiVector3tIT_ERKS2_S1_(ptr noundef nonnull align 4 dereferenceable(12) %469, float noundef %474)
          to label %477 unwind label %603

477:                                              ; preds = %475
  store { <2 x float>, float } %476, ptr %46, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %45, ptr align 8 %46, i64 12, i1 false)
  %478 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %40, ptr noundef nonnull align 4 dereferenceable(12) %45)
          to label %479 unwind label %603

479:                                              ; preds = %477
  store { <2 x float>, float } %478, ptr %47, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %44, ptr align 8 %47, i64 12, i1 false)
  call void @llvm.lifetime.end.p0(i64 12, ptr %45) #10
  call void @llvm.lifetime.start.p0(i64 12, ptr %48) #10
  call void @llvm.lifetime.start.p0(i64 12, ptr %49) #10
  %480 = load ptr, ptr %16, align 8, !tbaa !5
  %481 = load i32, ptr %43, align 4, !tbaa !9
  %482 = zext i32 %481 to i64
  %483 = getelementptr inbounds %class.aiVector3t, ptr %480, i64 %482
  %484 = load ptr, ptr %16, align 8, !tbaa !5
  %485 = load i32, ptr %43, align 4, !tbaa !9
  %486 = zext i32 %485 to i64
  %487 = getelementptr inbounds %class.aiVector3t, ptr %484, i64 %486
  %488 = invoke noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %41, ptr noundef nonnull align 4 dereferenceable(12) %487)
          to label %489 unwind label %607

489:                                              ; preds = %479
  %490 = invoke { <2 x float>, float } @_ZmlIfE10aiVector3tIT_ERKS2_S1_(ptr noundef nonnull align 4 dereferenceable(12) %483, float noundef %488)
          to label %491 unwind label %607

491:                                              ; preds = %489
  store { <2 x float>, float } %490, ptr %50, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %49, ptr align 8 %50, i64 12, i1 false)
  %492 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %41, ptr noundef nonnull align 4 dereferenceable(12) %49)
          to label %493 unwind label %607

493:                                              ; preds = %491
  store { <2 x float>, float } %492, ptr %51, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %48, ptr align 8 %51, i64 12, i1 false)
  call void @llvm.lifetime.end.p0(i64 12, ptr %49) #10
  %494 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE13NormalizeSafeEv(ptr noundef nonnull align 4 dereferenceable(12) %44)
          to label %495 unwind label %611

495:                                              ; preds = %493
  %496 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE13NormalizeSafeEv(ptr noundef nonnull align 4 dereferenceable(12) %48)
          to label %497 unwind label %611

497:                                              ; preds = %495
  call void @llvm.lifetime.start.p0(i64 1, ptr %52) #10
  %498 = getelementptr inbounds %class.aiVector3t, ptr %44, i32 0, i32 0
  %499 = load float, ptr %498, align 4, !tbaa !37
  %500 = invoke noundef zeroext i1 @_Z16is_special_floatf(float noundef %499)
          to label %501 unwind label %615

501:                                              ; preds = %497
  br i1 %500, label %538, label %502

502:                                              ; preds = %501
  %503 = getelementptr inbounds %class.aiVector3t, ptr %44, i32 0, i32 1
  %504 = load float, ptr %503, align 4, !tbaa !38
  %505 = invoke noundef zeroext i1 @_Z16is_special_floatf(float noundef %504)
          to label %506 unwind label %615

506:                                              ; preds = %502
  br i1 %505, label %538, label %507

507:                                              ; preds = %506
  %508 = getelementptr inbounds %class.aiVector3t, ptr %44, i32 0, i32 2
  %509 = load float, ptr %508, align 4, !tbaa !39
  %510 = invoke noundef zeroext i1 @_Z16is_special_floatf(float noundef %509)
          to label %511 unwind label %615

511:                                              ; preds = %507
  br i1 %510, label %538, label %512

512:                                              ; preds = %511
  %513 = getelementptr inbounds %class.aiVector3t, ptr %44, i32 0, i32 0
  %514 = load float, ptr %513, align 4, !tbaa !37
  %515 = fcmp olt float -5.000000e-01, %514
  br i1 %515, label %516, label %536

516:                                              ; preds = %512
  %517 = getelementptr inbounds %class.aiVector3t, ptr %44, i32 0, i32 0
  %518 = load float, ptr %517, align 4, !tbaa !37
  %519 = fcmp olt float %518, 5.000000e-01
  br i1 %519, label %520, label %536

520:                                              ; preds = %516
  %521 = getelementptr inbounds %class.aiVector3t, ptr %44, i32 0, i32 1
  %522 = load float, ptr %521, align 4, !tbaa !38
  %523 = fcmp olt float -5.000000e-01, %522
  br i1 %523, label %524, label %536

524:                                              ; preds = %520
  %525 = getelementptr inbounds %class.aiVector3t, ptr %44, i32 0, i32 1
  %526 = load float, ptr %525, align 4, !tbaa !38
  %527 = fcmp olt float %526, 5.000000e-01
  br i1 %527, label %528, label %536

528:                                              ; preds = %524
  %529 = getelementptr inbounds %class.aiVector3t, ptr %44, i32 0, i32 2
  %530 = load float, ptr %529, align 4, !tbaa !39
  %531 = fcmp olt float -5.000000e-01, %530
  br i1 %531, label %532, label %536

532:                                              ; preds = %528
  %533 = getelementptr inbounds %class.aiVector3t, ptr %44, i32 0, i32 2
  %534 = load float, ptr %533, align 4, !tbaa !39
  %535 = fcmp olt float %534, 5.000000e-01
  br label %536

536:                                              ; preds = %532, %528, %524, %520, %516, %512
  %537 = phi i1 [ false, %528 ], [ false, %524 ], [ false, %520 ], [ false, %516 ], [ false, %512 ], [ %535, %532 ]
  br label %538

538:                                              ; preds = %536, %511, %506, %501
  %539 = phi i1 [ true, %511 ], [ true, %506 ], [ true, %501 ], [ %537, %536 ]
  %540 = zext i1 %539 to i8
  store i8 %540, ptr %52, align 1, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 1, ptr %53) #10
  %541 = getelementptr inbounds %class.aiVector3t, ptr %48, i32 0, i32 0
  %542 = load float, ptr %541, align 4, !tbaa !37
  %543 = invoke noundef zeroext i1 @_Z16is_special_floatf(float noundef %542)
          to label %544 unwind label %619

544:                                              ; preds = %538
  br i1 %543, label %581, label %545

545:                                              ; preds = %544
  %546 = getelementptr inbounds %class.aiVector3t, ptr %48, i32 0, i32 1
  %547 = load float, ptr %546, align 4, !tbaa !38
  %548 = invoke noundef zeroext i1 @_Z16is_special_floatf(float noundef %547)
          to label %549 unwind label %619

549:                                              ; preds = %545
  br i1 %548, label %581, label %550

550:                                              ; preds = %549
  %551 = getelementptr inbounds %class.aiVector3t, ptr %48, i32 0, i32 2
  %552 = load float, ptr %551, align 4, !tbaa !39
  %553 = invoke noundef zeroext i1 @_Z16is_special_floatf(float noundef %552)
          to label %554 unwind label %619

554:                                              ; preds = %550
  br i1 %553, label %581, label %555

555:                                              ; preds = %554
  %556 = getelementptr inbounds %class.aiVector3t, ptr %48, i32 0, i32 0
  %557 = load float, ptr %556, align 4, !tbaa !37
  %558 = fcmp olt float -5.000000e-01, %557
  br i1 %558, label %559, label %579

559:                                              ; preds = %555
  %560 = getelementptr inbounds %class.aiVector3t, ptr %48, i32 0, i32 0
  %561 = load float, ptr %560, align 4, !tbaa !37
  %562 = fcmp olt float %561, 5.000000e-01
  br i1 %562, label %563, label %579

563:                                              ; preds = %559
  %564 = getelementptr inbounds %class.aiVector3t, ptr %48, i32 0, i32 1
  %565 = load float, ptr %564, align 4, !tbaa !38
  %566 = fcmp olt float -5.000000e-01, %565
  br i1 %566, label %567, label %579

567:                                              ; preds = %563
  %568 = getelementptr inbounds %class.aiVector3t, ptr %48, i32 0, i32 1
  %569 = load float, ptr %568, align 4, !tbaa !38
  %570 = fcmp olt float %569, 5.000000e-01
  br i1 %570, label %571, label %579

571:                                              ; preds = %567
  %572 = getelementptr inbounds %class.aiVector3t, ptr %48, i32 0, i32 2
  %573 = load float, ptr %572, align 4, !tbaa !39
  %574 = fcmp olt float -5.000000e-01, %573
  br i1 %574, label %575, label %579

575:                                              ; preds = %571
  %576 = getelementptr inbounds %class.aiVector3t, ptr %48, i32 0, i32 2
  %577 = load float, ptr %576, align 4, !tbaa !39
  %578 = fcmp olt float %577, 5.000000e-01
  br label %579

579:                                              ; preds = %575, %571, %567, %563, %559, %555
  %580 = phi i1 [ false, %571 ], [ false, %567 ], [ false, %563 ], [ false, %559 ], [ false, %555 ], [ %578, %575 ]
  br label %581

581:                                              ; preds = %579, %554, %549, %544
  %582 = phi i1 [ true, %554 ], [ true, %549 ], [ true, %544 ], [ %580, %579 ]
  %583 = zext i1 %582 to i8
  store i8 %583, ptr %53, align 1, !tbaa !25
  %584 = load i8, ptr %52, align 1, !tbaa !25, !range !40, !noundef !41
  %585 = trunc i8 %584 to i1
  %586 = zext i1 %585 to i32
  %587 = load i8, ptr %53, align 1, !tbaa !25, !range !40, !noundef !41
  %588 = trunc i8 %587 to i1
  %589 = zext i1 %588 to i32
  %590 = icmp ne i32 %586, %589
  br i1 %590, label %591, label %641

591:                                              ; preds = %581
  %592 = load i8, ptr %52, align 1, !tbaa !25, !range !40, !noundef !41
  %593 = trunc i8 %592 to i1
  br i1 %593, label %594, label %627

594:                                              ; preds = %591
  call void @llvm.lifetime.start.p0(i64 12, ptr %54) #10
  %595 = load ptr, ptr %16, align 8, !tbaa !5
  %596 = load i32, ptr %43, align 4, !tbaa !9
  %597 = zext i32 %596 to i64
  %598 = getelementptr inbounds %class.aiVector3t, ptr %595, i64 %597
  %599 = invoke { <2 x float>, float } @_ZeoIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %598, ptr noundef nonnull align 4 dereferenceable(12) %48)
          to label %600 unwind label %623

600:                                              ; preds = %594
  store { <2 x float>, float } %599, ptr %55, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %54, ptr align 8 %55, i64 12, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %44, ptr align 4 %54, i64 12, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 12, ptr %54) #10
  %601 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE13NormalizeSafeEv(ptr noundef nonnull align 4 dereferenceable(12) %44)
          to label %602 unwind label %619

602:                                              ; preds = %600
  br label %640

603:                                              ; preds = %477, %475, %458
  %604 = landingpad { ptr, i32 }
          cleanup
  %605 = extractvalue { ptr, i32 } %604, 0
  store ptr %605, ptr %12, align 8
  %606 = extractvalue { ptr, i32 } %604, 1
  store i32 %606, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %45) #10
  br label %656

607:                                              ; preds = %491, %489, %479
  %608 = landingpad { ptr, i32 }
          cleanup
  %609 = extractvalue { ptr, i32 } %608, 0
  store ptr %609, ptr %12, align 8
  %610 = extractvalue { ptr, i32 } %608, 1
  store i32 %610, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %49) #10
  br label %655

611:                                              ; preds = %495, %493
  %612 = landingpad { ptr, i32 }
          cleanup
  %613 = extractvalue { ptr, i32 } %612, 0
  store ptr %613, ptr %12, align 8
  %614 = extractvalue { ptr, i32 } %612, 1
  store i32 %614, ptr %13, align 4
  br label %655

615:                                              ; preds = %507, %502, %497
  %616 = landingpad { ptr, i32 }
          cleanup
  %617 = extractvalue { ptr, i32 } %616, 0
  store ptr %617, ptr %12, align 8
  %618 = extractvalue { ptr, i32 } %616, 1
  store i32 %618, ptr %13, align 4
  br label %654

619:                                              ; preds = %633, %600, %550, %545, %538
  %620 = landingpad { ptr, i32 }
          cleanup
  %621 = extractvalue { ptr, i32 } %620, 0
  store ptr %621, ptr %12, align 8
  %622 = extractvalue { ptr, i32 } %620, 1
  store i32 %622, ptr %13, align 4
  br label %653

623:                                              ; preds = %594
  %624 = landingpad { ptr, i32 }
          cleanup
  %625 = extractvalue { ptr, i32 } %624, 0
  store ptr %625, ptr %12, align 8
  %626 = extractvalue { ptr, i32 } %624, 1
  store i32 %626, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %54) #10
  br label %653

627:                                              ; preds = %591
  call void @llvm.lifetime.start.p0(i64 12, ptr %56) #10
  %628 = load ptr, ptr %16, align 8, !tbaa !5
  %629 = load i32, ptr %43, align 4, !tbaa !9
  %630 = zext i32 %629 to i64
  %631 = getelementptr inbounds %class.aiVector3t, ptr %628, i64 %630
  %632 = invoke { <2 x float>, float } @_ZeoIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %44, ptr noundef nonnull align 4 dereferenceable(12) %631)
          to label %633 unwind label %636

633:                                              ; preds = %627
  store { <2 x float>, float } %632, ptr %57, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %56, ptr align 8 %57, i64 12, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %48, ptr align 4 %56, i64 12, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 12, ptr %56) #10
  %634 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE13NormalizeSafeEv(ptr noundef nonnull align 4 dereferenceable(12) %48)
          to label %635 unwind label %619

635:                                              ; preds = %633
  br label %640

636:                                              ; preds = %627
  %637 = landingpad { ptr, i32 }
          cleanup
  %638 = extractvalue { ptr, i32 } %637, 0
  store ptr %638, ptr %12, align 8
  %639 = extractvalue { ptr, i32 } %637, 1
  store i32 %639, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %56) #10
  br label %653

640:                                              ; preds = %635, %602
  br label %641

641:                                              ; preds = %640, %581
  %642 = load ptr, ptr %18, align 8, !tbaa !5
  %643 = load i32, ptr %43, align 4, !tbaa !9
  %644 = zext i32 %643 to i64
  %645 = getelementptr inbounds %class.aiVector3t, ptr %642, i64 %644
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %645, ptr align 4 %44, i64 12, i1 false), !tbaa.struct !34
  %646 = load ptr, ptr %19, align 8, !tbaa !5
  %647 = load i32, ptr %43, align 4, !tbaa !9
  %648 = zext i32 %647 to i64
  %649 = getelementptr inbounds %class.aiVector3t, ptr %646, i64 %648
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %649, ptr align 4 %48, i64 12, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 12, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 12, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  br label %650

650:                                              ; preds = %641
  %651 = load i32, ptr %42, align 4, !tbaa !9
  %652 = add i32 %651, 1
  store i32 %652, ptr %42, align 4, !tbaa !9
  br label %451, !llvm.loop !42

653:                                              ; preds = %636, %623, %619
  call void @llvm.lifetime.end.p0(i64 1, ptr %53) #10
  br label %654

654:                                              ; preds = %653, %615
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #10
  br label %655

655:                                              ; preds = %654, %611, %607
  call void @llvm.lifetime.end.p0(i64 12, ptr %48) #10
  br label %656

656:                                              ; preds = %655, %603
  call void @llvm.lifetime.end.p0(i64 12, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 12, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 12, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #10
  br label %664

657:                                              ; preds = %457
  call void @llvm.lifetime.end.p0(i64 12, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 12, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 12, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 12, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #10
  store i32 0, ptr %21, align 4
  br label %658

658:                                              ; preds = %657, %263
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  %659 = load i32, ptr %21, align 4
  switch i32 %659, label %962 [
    i32 0, label %660
    i32 4, label %661
  ]

660:                                              ; preds = %658
  br label %661

661:                                              ; preds = %660, %658
  %662 = load i32, ptr %20, align 4, !tbaa !9
  %663 = add i32 %662, 1
  store i32 %663, ptr %20, align 4, !tbaa !9
  br label %184, !llvm.loop !43

664:                                              ; preds = %656, %374
  call void @llvm.lifetime.end.p0(i64 12, ptr %33) #10
  br label %665

665:                                              ; preds = %664, %370
  call void @llvm.lifetime.end.p0(i64 12, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #10
  br label %666

666:                                              ; preds = %665, %262
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #10
  br label %952

667:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #10
  store ptr null, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 56, ptr %59) #10
  invoke void @_ZN6Assimp11SpatialSortC1Ev(ptr noundef nonnull align 8 dereferenceable(49) %59)
          to label %668 unwind label %689

668:                                              ; preds = %667
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #10
  store float 0x3EE4F8B580000000, ptr %60, align 4, !tbaa !23
  %669 = getelementptr inbounds %"class.Assimp::BaseProcess", ptr %80, i32 0, i32 1
  %670 = load ptr, ptr %669, align 8, !tbaa !44
  %671 = icmp ne ptr %670, null
  br i1 %671, label %672, label %698

672:                                              ; preds = %668
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #10
  %673 = getelementptr inbounds %"class.Assimp::BaseProcess", ptr %80, i32 0, i32 1
  %674 = load ptr, ptr %673, align 8, !tbaa !44
  %675 = invoke noundef zeroext i1 @_ZNK6Assimp21SharedPostProcessInfo11GetPropertyISt6vectorISt4pairINS_11SpatialSortEfESaIS5_EEEEbPKcRPT_(ptr noundef nonnull align 8 dereferenceable(48) %674, ptr noundef @.str.11, ptr noundef nonnull align 8 dereferenceable(8) %61)
          to label %676 unwind label %693

676:                                              ; preds = %672
  %677 = load ptr, ptr %61, align 8, !tbaa !5
  %678 = icmp ne ptr %677, null
  br i1 %678, label %679, label %697

679:                                              ; preds = %676
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #10
  %680 = load ptr, ptr %61, align 8, !tbaa !5
  %681 = load i32, ptr %7, align 4, !tbaa !9
  %682 = zext i32 %681 to i64
  %683 = call noundef nonnull align 8 dereferenceable(60) ptr @_ZNSt6vectorISt4pairIN6Assimp11SpatialSortEfESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %680, i64 noundef %682) #10
  store ptr %683, ptr %62, align 8, !tbaa !5
  %684 = load ptr, ptr %62, align 8, !tbaa !5
  %685 = getelementptr inbounds %"struct.std::pair", ptr %684, i32 0, i32 0
  store ptr %685, ptr %58, align 8, !tbaa !5
  %686 = load ptr, ptr %62, align 8, !tbaa !5
  %687 = getelementptr inbounds %"struct.std::pair", ptr %686, i32 0, i32 1
  %688 = load float, ptr %687, align 8, !tbaa !45
  store float %688, ptr %60, align 4, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #10
  br label %697

689:                                              ; preds = %667
  %690 = landingpad { ptr, i32 }
          cleanup
  %691 = extractvalue { ptr, i32 } %690, 0
  store ptr %691, ptr %12, align 8
  %692 = extractvalue { ptr, i32 } %690, 1
  store i32 %692, ptr %13, align 4
  br label %951

693:                                              ; preds = %672
  %694 = landingpad { ptr, i32 }
          cleanup
  %695 = extractvalue { ptr, i32 } %694, 0
  store ptr %695, ptr %12, align 8
  %696 = extractvalue { ptr, i32 } %694, 1
  store i32 %696, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #10
  br label %950

697:                                              ; preds = %679, %676
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #10
  br label %698

698:                                              ; preds = %697, %668
  %699 = load ptr, ptr %58, align 8, !tbaa !5
  %700 = icmp ne ptr %699, null
  br i1 %700, label %716, label %701

701:                                              ; preds = %698
  %702 = load ptr, ptr %6, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.aiMesh, ptr %702, i32 0, i32 3
  %704 = load ptr, ptr %703, align 8, !tbaa !28
  %705 = load ptr, ptr %6, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.aiMesh, ptr %705, i32 0, i32 1
  %707 = load i32, ptr %706, align 4, !tbaa !24
  invoke void @_ZN6Assimp11SpatialSort4FillEPK10aiVector3tIfEjjb(ptr noundef nonnull align 8 dereferenceable(49) %59, ptr noundef %704, i32 noundef %707, i32 noundef 12, i1 noundef zeroext true)
          to label %708 unwind label %712

708:                                              ; preds = %701
  store ptr %59, ptr %58, align 8, !tbaa !5
  %709 = load ptr, ptr %6, align 8, !tbaa !5
  %710 = invoke noundef float @_ZN6Assimp22ComputePositionEpsilonEPK6aiMesh(ptr noundef %709)
          to label %711 unwind label %712

711:                                              ; preds = %708
  store float %710, ptr %60, align 4, !tbaa !23
  br label %716

712:                                              ; preds = %708, %701
  %713 = landingpad { ptr, i32 }
          cleanup
  %714 = extractvalue { ptr, i32 } %713, 0
  store ptr %714, ptr %12, align 8
  %715 = extractvalue { ptr, i32 } %713, 1
  store i32 %715, ptr %13, align 4
  br label %950

716:                                              ; preds = %711, %698
  call void @llvm.lifetime.start.p0(i64 24, ptr %63) #10
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %63) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #10
  %717 = getelementptr inbounds %"class.Assimp::CalcTangentsProcess", ptr %80, i32 0, i32 1
  %718 = load float, ptr %717, align 8, !tbaa !52
  %719 = invoke noundef float @_ZSt3cosf(float noundef %718)
          to label %720 unwind label %728

720:                                              ; preds = %716
  store float %719, ptr %64, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 24, ptr %65) #10
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %65) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #10
  store i32 0, ptr %66, align 4, !tbaa !9
  br label %721

721:                                              ; preds = %941, %720
  %722 = load i32, ptr %66, align 4, !tbaa !9
  %723 = load ptr, ptr %6, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.aiMesh, ptr %723, i32 0, i32 1
  %725 = load i32, ptr %724, align 4, !tbaa !24
  %726 = icmp ult i32 %722, %725
  br i1 %726, label %732, label %727

727:                                              ; preds = %721
  store i32 11, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #10
  br label %948

728:                                              ; preds = %716
  %729 = landingpad { ptr, i32 }
          cleanup
  %730 = extractvalue { ptr, i32 } %729, 0
  store ptr %730, ptr %12, align 8
  %731 = extractvalue { ptr, i32 } %729, 1
  store i32 %731, ptr %13, align 4
  br label %949

732:                                              ; preds = %721
  call void @llvm.lifetime.start.p0(i64 16, ptr %67) #10
  %733 = load i32, ptr %66, align 4, !tbaa !9
  %734 = zext i32 %733 to i64
  %735 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %9, i64 noundef %734)
          to label %736 unwind label %743

736:                                              ; preds = %732
  %737 = getelementptr inbounds { ptr, i64 }, ptr %67, i32 0, i32 0
  %738 = extractvalue { ptr, i64 } %735, 0
  store ptr %738, ptr %737, align 8
  %739 = getelementptr inbounds { ptr, i64 }, ptr %67, i32 0, i32 1
  %740 = extractvalue { ptr, i64 } %735, 1
  store i64 %740, ptr %739, align 8
  %741 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %67) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %67) #10
  br i1 %741, label %742, label %747

742:                                              ; preds = %736
  br label %941

743:                                              ; preds = %732
  %744 = landingpad { ptr, i32 }
          cleanup
  %745 = extractvalue { ptr, i32 } %744, 0
  store ptr %745, ptr %12, align 8
  %746 = extractvalue { ptr, i32 } %744, 1
  store i32 %746, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %67) #10
  br label %947

747:                                              ; preds = %736
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #10
  %748 = load ptr, ptr %6, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.aiMesh, ptr %748, i32 0, i32 3
  %750 = load ptr, ptr %749, align 8, !tbaa !28
  %751 = load i32, ptr %66, align 4, !tbaa !9
  %752 = zext i32 %751 to i64
  %753 = getelementptr inbounds %class.aiVector3t, ptr %750, i64 %752
  store ptr %753, ptr %68, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #10
  %754 = load ptr, ptr %6, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.aiMesh, ptr %754, i32 0, i32 4
  %756 = load ptr, ptr %755, align 8, !tbaa !19
  %757 = load i32, ptr %66, align 4, !tbaa !9
  %758 = zext i32 %757 to i64
  %759 = getelementptr inbounds %class.aiVector3t, ptr %756, i64 %758
  store ptr %759, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #10
  %760 = load ptr, ptr %6, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.aiMesh, ptr %760, i32 0, i32 5
  %762 = load ptr, ptr %761, align 8, !tbaa !11
  %763 = load i32, ptr %66, align 4, !tbaa !9
  %764 = zext i32 %763 to i64
  %765 = getelementptr inbounds %class.aiVector3t, ptr %762, i64 %764
  store ptr %765, ptr %70, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #10
  %766 = load ptr, ptr %6, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.aiMesh, ptr %766, i32 0, i32 6
  %768 = load ptr, ptr %767, align 8, !tbaa !27
  %769 = load i32, ptr %66, align 4, !tbaa !9
  %770 = zext i32 %769 to i64
  %771 = getelementptr inbounds %class.aiVector3t, ptr %768, i64 %770
  store ptr %771, ptr %71, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIjSaIjEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %65, i64 noundef 0)
          to label %772 unwind label %787

772:                                              ; preds = %747
  %773 = load ptr, ptr %58, align 8, !tbaa !5
  %774 = load ptr, ptr %68, align 8, !tbaa !5
  %775 = load float, ptr %60, align 4, !tbaa !23
  invoke void @_ZNK6Assimp11SpatialSort13FindPositionsERK10aiVector3tIfEfRSt6vectorIjSaIjEE(ptr noundef nonnull align 8 dereferenceable(49) %773, ptr noundef nonnull align 4 dereferenceable(12) %774, float noundef %775, ptr noundef nonnull align 8 dereferenceable(24) %63)
          to label %776 unwind label %787

776:                                              ; preds = %772
  %777 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %63) #10
  %778 = add i64 %777, 5
  invoke void @_ZNSt6vectorIjSaIjEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %65, i64 noundef %778)
          to label %779 unwind label %787

779:                                              ; preds = %776
  invoke void @_ZNSt6vectorIjSaIjEE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(24) %65, ptr noundef nonnull align 4 dereferenceable(4) %66)
          to label %780 unwind label %787

780:                                              ; preds = %779
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #10
  store i32 0, ptr %72, align 4, !tbaa !9
  br label %781

781:                                              ; preds = %860, %780
  %782 = load i32, ptr %72, align 4, !tbaa !9
  %783 = zext i32 %782 to i64
  %784 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %63) #10
  %785 = icmp ult i64 %783, %784
  br i1 %785, label %791, label %786

786:                                              ; preds = %781
  store i32 14, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #10
  br label %868

787:                                              ; preds = %779, %776, %772, %747
  %788 = landingpad { ptr, i32 }
          cleanup
  %789 = extractvalue { ptr, i32 } %788, 0
  store ptr %789, ptr %12, align 8
  %790 = extractvalue { ptr, i32 } %788, 1
  store i32 %790, ptr %13, align 4
  br label %946

791:                                              ; preds = %781
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #10
  %792 = load i32, ptr %72, align 4, !tbaa !9
  %793 = zext i32 %792 to i64
  %794 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %63, i64 noundef %793) #10
  %795 = load i32, ptr %794, align 4, !tbaa !9
  store i32 %795, ptr %73, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %74) #10
  %796 = load i32, ptr %73, align 4, !tbaa !9
  %797 = zext i32 %796 to i64
  %798 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %9, i64 noundef %797)
          to label %799 unwind label %806

799:                                              ; preds = %791
  %800 = getelementptr inbounds { ptr, i64 }, ptr %74, i32 0, i32 0
  %801 = extractvalue { ptr, i64 } %798, 0
  store ptr %801, ptr %800, align 8
  %802 = getelementptr inbounds { ptr, i64 }, ptr %74, i32 0, i32 1
  %803 = extractvalue { ptr, i64 } %798, 1
  store i64 %803, ptr %802, align 8
  %804 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %74) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %74) #10
  br i1 %804, label %805, label %810

805:                                              ; preds = %799
  store i32 16, ptr %21, align 4
  br label %857

806:                                              ; preds = %791
  %807 = landingpad { ptr, i32 }
          cleanup
  %808 = extractvalue { ptr, i32 } %807, 0
  store ptr %808, ptr %12, align 8
  %809 = extractvalue { ptr, i32 } %807, 1
  store i32 %809, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %74) #10
  br label %867

810:                                              ; preds = %799
  %811 = load ptr, ptr %16, align 8, !tbaa !5
  %812 = load i32, ptr %73, align 4, !tbaa !9
  %813 = zext i32 %812 to i64
  %814 = getelementptr inbounds %class.aiVector3t, ptr %811, i64 %813
  %815 = load ptr, ptr %69, align 8, !tbaa !5
  %816 = invoke noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %814, ptr noundef nonnull align 4 dereferenceable(12) %815)
          to label %817 unwind label %820

817:                                              ; preds = %810
  %818 = fcmp olt float %816, 0x3FEFFF2E40000000
  br i1 %818, label %819, label %824

819:                                              ; preds = %817
  store i32 16, ptr %21, align 4
  br label %857

820:                                              ; preds = %846, %835, %824, %810
  %821 = landingpad { ptr, i32 }
          cleanup
  %822 = extractvalue { ptr, i32 } %821, 0
  store ptr %822, ptr %12, align 8
  %823 = extractvalue { ptr, i32 } %821, 1
  store i32 %823, ptr %13, align 4
  br label %867

824:                                              ; preds = %817
  %825 = load ptr, ptr %18, align 8, !tbaa !5
  %826 = load i32, ptr %73, align 4, !tbaa !9
  %827 = zext i32 %826 to i64
  %828 = getelementptr inbounds %class.aiVector3t, ptr %825, i64 %827
  %829 = load ptr, ptr %70, align 8, !tbaa !5
  %830 = invoke noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %828, ptr noundef nonnull align 4 dereferenceable(12) %829)
          to label %831 unwind label %820

831:                                              ; preds = %824
  %832 = load float, ptr %64, align 4, !tbaa !23
  %833 = fcmp olt float %830, %832
  br i1 %833, label %834, label %835

834:                                              ; preds = %831
  store i32 16, ptr %21, align 4
  br label %857

835:                                              ; preds = %831
  %836 = load ptr, ptr %19, align 8, !tbaa !5
  %837 = load i32, ptr %73, align 4, !tbaa !9
  %838 = zext i32 %837 to i64
  %839 = getelementptr inbounds %class.aiVector3t, ptr %836, i64 %838
  %840 = load ptr, ptr %71, align 8, !tbaa !5
  %841 = invoke noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %839, ptr noundef nonnull align 4 dereferenceable(12) %840)
          to label %842 unwind label %820

842:                                              ; preds = %835
  %843 = load float, ptr %64, align 4, !tbaa !23
  %844 = fcmp olt float %841, %843
  br i1 %844, label %845, label %846

845:                                              ; preds = %842
  store i32 16, ptr %21, align 4
  br label %857

846:                                              ; preds = %842
  invoke void @_ZNSt6vectorIjSaIjEE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(24) %65, ptr noundef nonnull align 4 dereferenceable(4) %73)
          to label %847 unwind label %820

847:                                              ; preds = %846
  call void @llvm.lifetime.start.p0(i64 16, ptr %75) #10
  %848 = load i32, ptr %73, align 4, !tbaa !9
  %849 = zext i32 %848 to i64
  %850 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %9, i64 noundef %849)
          to label %851 unwind label %863

851:                                              ; preds = %847
  %852 = getelementptr inbounds { ptr, i64 }, ptr %75, i32 0, i32 0
  %853 = extractvalue { ptr, i64 } %850, 0
  store ptr %853, ptr %852, align 8
  %854 = getelementptr inbounds { ptr, i64 }, ptr %75, i32 0, i32 1
  %855 = extractvalue { ptr, i64 } %850, 1
  store i64 %855, ptr %854, align 8
  %856 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %75, i1 noundef zeroext true) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %75) #10
  store i32 0, ptr %21, align 4
  br label %857

857:                                              ; preds = %851, %845, %834, %819, %805
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #10
  %858 = load i32, ptr %21, align 4
  switch i32 %858, label %962 [
    i32 0, label %859
    i32 16, label %860
  ]

859:                                              ; preds = %857
  br label %860

860:                                              ; preds = %859, %857
  %861 = load i32, ptr %72, align 4, !tbaa !9
  %862 = add i32 %861, 1
  store i32 %862, ptr %72, align 4, !tbaa !9
  br label %781, !llvm.loop !53

863:                                              ; preds = %847
  %864 = landingpad { ptr, i32 }
          cleanup
  %865 = extractvalue { ptr, i32 } %864, 0
  store ptr %865, ptr %12, align 8
  %866 = extractvalue { ptr, i32 } %864, 1
  store i32 %866, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %75) #10
  br label %867

867:                                              ; preds = %863, %820, %806
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #10
  br label %946

868:                                              ; preds = %786
  call void @llvm.lifetime.start.p0(i64 12, ptr %76) #10
  invoke void @_ZN10aiVector3tIfEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %76, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %869 unwind label %877

869:                                              ; preds = %868
  call void @llvm.lifetime.start.p0(i64 12, ptr %77) #10
  invoke void @_ZN10aiVector3tIfEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %77, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %870 unwind label %881

870:                                              ; preds = %869
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #10
  store i32 0, ptr %78, align 4, !tbaa !9
  br label %871

871:                                              ; preds = %904, %870
  %872 = load i32, ptr %78, align 4, !tbaa !9
  %873 = zext i32 %872 to i64
  %874 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %65) #10
  %875 = icmp ult i64 %873, %874
  br i1 %875, label %885, label %876

876:                                              ; preds = %871
  store i32 17, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #10
  br label %911

877:                                              ; preds = %868
  %878 = landingpad { ptr, i32 }
          cleanup
  %879 = extractvalue { ptr, i32 } %878, 0
  store ptr %879, ptr %12, align 8
  %880 = extractvalue { ptr, i32 } %878, 1
  store i32 %880, ptr %13, align 4
  br label %945

881:                                              ; preds = %913, %911, %869
  %882 = landingpad { ptr, i32 }
          cleanup
  %883 = extractvalue { ptr, i32 } %882, 0
  store ptr %883, ptr %12, align 8
  %884 = extractvalue { ptr, i32 } %882, 1
  store i32 %884, ptr %13, align 4
  br label %944

885:                                              ; preds = %871
  %886 = load ptr, ptr %18, align 8, !tbaa !5
  %887 = load i32, ptr %78, align 4, !tbaa !9
  %888 = zext i32 %887 to i64
  %889 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %65, i64 noundef %888) #10
  %890 = load i32, ptr %889, align 4, !tbaa !9
  %891 = zext i32 %890 to i64
  %892 = getelementptr inbounds %class.aiVector3t, ptr %886, i64 %891
  %893 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfEpLERKS0_(ptr noundef nonnull align 4 dereferenceable(12) %76, ptr noundef nonnull align 4 dereferenceable(12) %892)
          to label %894 unwind label %907

894:                                              ; preds = %885
  %895 = load ptr, ptr %19, align 8, !tbaa !5
  %896 = load i32, ptr %78, align 4, !tbaa !9
  %897 = zext i32 %896 to i64
  %898 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %65, i64 noundef %897) #10
  %899 = load i32, ptr %898, align 4, !tbaa !9
  %900 = zext i32 %899 to i64
  %901 = getelementptr inbounds %class.aiVector3t, ptr %895, i64 %900
  %902 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfEpLERKS0_(ptr noundef nonnull align 4 dereferenceable(12) %77, ptr noundef nonnull align 4 dereferenceable(12) %901)
          to label %903 unwind label %907

903:                                              ; preds = %894
  br label %904

904:                                              ; preds = %903
  %905 = load i32, ptr %78, align 4, !tbaa !9
  %906 = add i32 %905, 1
  store i32 %906, ptr %78, align 4, !tbaa !9
  br label %871, !llvm.loop !54

907:                                              ; preds = %894, %885
  %908 = landingpad { ptr, i32 }
          cleanup
  %909 = extractvalue { ptr, i32 } %908, 0
  store ptr %909, ptr %12, align 8
  %910 = extractvalue { ptr, i32 } %908, 1
  store i32 %910, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #10
  br label %944

911:                                              ; preds = %876
  %912 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %76)
          to label %913 unwind label %881

913:                                              ; preds = %911
  %914 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %77)
          to label %915 unwind label %881

915:                                              ; preds = %913
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #10
  store i32 0, ptr %79, align 4, !tbaa !9
  br label %916

916:                                              ; preds = %937, %915
  %917 = load i32, ptr %79, align 4, !tbaa !9
  %918 = zext i32 %917 to i64
  %919 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %65) #10
  %920 = icmp ult i64 %918, %919
  br i1 %920, label %922, label %921

921:                                              ; preds = %916
  store i32 20, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #10
  br label %940

922:                                              ; preds = %916
  %923 = load ptr, ptr %18, align 8, !tbaa !5
  %924 = load i32, ptr %79, align 4, !tbaa !9
  %925 = zext i32 %924 to i64
  %926 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %65, i64 noundef %925) #10
  %927 = load i32, ptr %926, align 4, !tbaa !9
  %928 = zext i32 %927 to i64
  %929 = getelementptr inbounds %class.aiVector3t, ptr %923, i64 %928
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %929, ptr align 4 %76, i64 12, i1 false), !tbaa.struct !34
  %930 = load ptr, ptr %19, align 8, !tbaa !5
  %931 = load i32, ptr %79, align 4, !tbaa !9
  %932 = zext i32 %931 to i64
  %933 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %65, i64 noundef %932) #10
  %934 = load i32, ptr %933, align 4, !tbaa !9
  %935 = zext i32 %934 to i64
  %936 = getelementptr inbounds %class.aiVector3t, ptr %930, i64 %935
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %936, ptr align 4 %77, i64 12, i1 false), !tbaa.struct !34
  br label %937

937:                                              ; preds = %922
  %938 = load i32, ptr %79, align 4, !tbaa !9
  %939 = add i32 %938, 1
  store i32 %939, ptr %79, align 4, !tbaa !9
  br label %916, !llvm.loop !55

940:                                              ; preds = %921
  call void @llvm.lifetime.end.p0(i64 12, ptr %77) #10
  call void @llvm.lifetime.end.p0(i64 12, ptr %76) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #10
  br label %941

941:                                              ; preds = %940, %742
  %942 = load i32, ptr %66, align 4, !tbaa !9
  %943 = add i32 %942, 1
  store i32 %943, ptr %66, align 4, !tbaa !9
  br label %721, !llvm.loop !56

944:                                              ; preds = %907, %881
  call void @llvm.lifetime.end.p0(i64 12, ptr %77) #10
  br label %945

945:                                              ; preds = %944, %877
  call void @llvm.lifetime.end.p0(i64 12, ptr %76) #10
  br label %946

946:                                              ; preds = %945, %867, %787
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #10
  br label %947

947:                                              ; preds = %946, %743
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #10
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %65) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %65) #10
  br label %949

948:                                              ; preds = %727
  store i1 true, ptr %4, align 1
  store i32 1, ptr %21, align 4
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %65) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %65) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #10
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %63) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %63) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #10
  call void @_ZN6Assimp11SpatialSortD2Ev(ptr noundef nonnull align 8 dereferenceable(49) %59) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %59) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #10
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %9) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %9) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  br label %955

949:                                              ; preds = %947, %728
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #10
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %63) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %63) #10
  br label %950

950:                                              ; preds = %949, %712, %693
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #10
  call void @_ZN6Assimp11SpatialSortD2Ev(ptr noundef nonnull align 8 dereferenceable(49) %59) #10
  br label %951

951:                                              ; preds = %950, %689
  call void @llvm.lifetime.end.p0(i64 56, ptr %59) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  br label %952

952:                                              ; preds = %951, %666
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  br label %953

953:                                              ; preds = %952, %195
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #10
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %9) #10
  br label %954

954:                                              ; preds = %953, %191
  call void @llvm.lifetime.end.p0(i64 40, ptr %9) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  br label %957

955:                                              ; preds = %948, %114, %99, %92, %85
  %956 = load i1, ptr %4, align 1
  ret i1 %956

957:                                              ; preds = %954
  %958 = load ptr, ptr %12, align 8
  %959 = load i32, ptr %13, align 4
  %960 = insertvalue { ptr, i32 } poison, ptr %958, 0
  %961 = insertvalue { ptr, i32 } %960, i32 %959, 1
  resume { ptr, i32 } %961

962:                                              ; preds = %857, %658
  unreachable
}

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp6Logger5errorIJRA52_KcRjEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(52), ptr noundef nonnull align 4 dereferenceable(4)) #3 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 #3 align 2

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #6

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

; 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)) #5

; 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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_Z16is_special_floatf(float noundef) #5

; 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

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)) #3 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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3cosf(float noundef) #5

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

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

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

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

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

; 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)) #5 align 2

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

; 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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40)) 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 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { 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 #8 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = { nounwind }
attributes #11 = { 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 32}
!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 = !{!12, !10, i64 0}
!19 = !{!12, !6, i64 24}
!20 = !{!21, !10, i64 28}
!21 = !{!"_ZTSN6Assimp19CalcTangentsProcessE", !22, i64 0, !17, i64 24, !10, i64 28}
!22 = !{!"_ZTSN6Assimp11BaseProcessE", !6, i64 8, !6, i64 16}
!23 = !{!17, !17, i64 0}
!24 = !{!12, !10, i64 4}
!25 = !{!26, !26, i64 0}
!26 = !{!"bool", !7, i64 0}
!27 = !{!12, !6, i64 40}
!28 = !{!12, !6, i64 16}
!29 = !{!12, !10, i64 8}
!30 = !{!12, !6, i64 208}
!31 = !{!32, !10, i64 0}
!32 = !{!"_ZTS6aiFace", !10, i64 0, !6, i64 8}
!33 = !{!32, !6, i64 8}
!34 = !{i64 0, i64 4, !23, i64 4, i64 4, !23, i64 8, i64 4, !23}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = !{!16, !17, i64 0}
!38 = !{!16, !17, i64 4}
!39 = !{!16, !17, i64 8}
!40 = !{i8 0, i8 2}
!41 = !{}
!42 = distinct !{!42, !36}
!43 = distinct !{!43, !36}
!44 = !{!22, !6, i64 8}
!45 = !{!46, !17, i64 56}
!46 = !{!"_ZTSSt4pairIN6Assimp11SpatialSortEfE", !47, i64 0, !17, i64 56}
!47 = !{!"_ZTSN6Assimp11SpatialSortE", !16, i64 0, !16, i64 12, !48, i64 24, !26, i64 48}
!48 = !{!"_ZTSSt6vectorIN6Assimp11SpatialSort5EntryESaIS2_EE", !49, i64 0}
!49 = !{!"_ZTSSt12_Vector_baseIN6Assimp11SpatialSort5EntryESaIS2_EE", !50, i64 0}
!50 = !{!"_ZTSNSt12_Vector_baseIN6Assimp11SpatialSort5EntryESaIS2_EE12_Vector_implE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseIN6Assimp11SpatialSort5EntryESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!52 = !{!21, !17, i64 24}
!53 = distinct !{!53, !36}
!54 = distinct !{!54, !36}
!55 = distinct !{!55, !36}
!56 = distinct !{!56, !36}


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

%"class.std::vector" = type { %"struct.std::_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.0" = type { i8 }
%"struct.std::_Bit_reference" = type { ptr, i64 }
%class.aiVector3t = type { float, float, float }
%"class.Assimp::SpatialSort" = type <{ %class.aiVector3t, %class.aiVector3t, %"class.std::vector.3", i8, [7 x i8] }>
%"class.std::vector.3" = 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.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = 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 }
%struct.aiFace = type { i32, ptr }

@.str.8 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.11 = 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

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

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

32:                                               ; preds = %29
  %33 = tail call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  tail call void @_ZN6Assimp6Logger4infoEPKc(ptr noundef nonnull align 8 dereferenceable(12) %33, ptr noundef nonnull @.str.8)
  br label %433

34:                                               ; preds = %29
  %35 = getelementptr inbounds i8, ptr %1, i64 24
  %36 = load ptr, ptr %35, align 8, !tbaa !17
  %37 = icmp eq ptr %36, null
  br i1 %37, label %38, label %40

38:                                               ; preds = %34
  %39 = tail call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  tail call void @_ZN6Assimp6Logger5errorEPKc(ptr noundef nonnull align 8 dereferenceable(12) %39, ptr noundef nonnull @.str.9)
  br label %433

40:                                               ; preds = %34
  %41 = getelementptr inbounds i8, ptr %0, i64 28
  %42 = load i32, ptr %41, align 4, !tbaa !18
  %43 = icmp ugt i32 %42, 7
  br i1 %43, label %49, label %44

44:                                               ; preds = %40
  %45 = getelementptr inbounds i8, ptr %1, i64 112
  %46 = zext nneg i32 %42 to i64
  %47 = getelementptr inbounds [8 x ptr], ptr %45, i64 0, i64 %46
  %48 = load ptr, ptr %47, align 8, !tbaa !21
  %.not257 = icmp eq ptr %48, null
  br i1 %.not257, label %49, label %51

49:                                               ; preds = %44, %40
  %50 = tail call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  tail call void @_ZN6Assimp6Logger5errorIJRA52_KcRjEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12) %50, ptr noundef nonnull align 1 dereferenceable(52) @.str.10, ptr noundef nonnull align 4 dereferenceable(4) %41)
  br label %433

51:                                               ; preds = %44
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #11
  %52 = getelementptr inbounds i8, ptr %1, i64 4
  %53 = load i32, ptr %52, align 4, !tbaa !22
  %54 = zext i32 %53 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #11
  store i8 0, ptr %5, align 1, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #11
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #11
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %4, i64 noundef %54, ptr noundef nonnull align 1 dereferenceable(1) %5, ptr noundef nonnull align 1 dereferenceable(1) %6)
          to label %55 unwind label %99

55:                                               ; preds = %51
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #11
  %56 = call noundef float @_Z8get_qnanv()
  %57 = load i32, ptr %52, align 4, !tbaa !22
  %58 = zext i32 %57 to i64
  %59 = mul nuw nsw i64 %58, 12
  %60 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %59) #12
          to label %61 unwind label %101

61:                                               ; preds = %55
  %62 = icmp eq i32 %57, 0
  br i1 %62, label %69, label %63

63:                                               ; preds = %61
  %64 = getelementptr inbounds %class.aiVector3t, ptr %60, i64 %58
  br label %65

65:                                               ; preds = %65, %63
  %66 = phi ptr [ %60, %63 ], [ %67, %65 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %66) #11
  %67 = getelementptr inbounds i8, ptr %66, i64 12
  %68 = icmp eq ptr %67, %64
  br i1 %68, label %thread-pre-split, label %65

thread-pre-split:                                 ; preds = %65
  %.pr = load i32, ptr %52, align 4, !tbaa !22
  br label %69

69:                                               ; preds = %thread-pre-split, %61
  %70 = phi i32 [ %.pr, %thread-pre-split ], [ 0, %61 ]
  store ptr %60, ptr %27, align 8, !tbaa !5
  %71 = zext i32 %70 to i64
  %72 = mul nuw nsw i64 %71, 12
  %73 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %72) #12
          to label %74 unwind label %101

74:                                               ; preds = %69
  %75 = icmp eq i32 %70, 0
  br i1 %75, label %.loopexit288, label %76

76:                                               ; preds = %74
  %77 = getelementptr inbounds %class.aiVector3t, ptr %73, i64 %71
  br label %78

78:                                               ; preds = %78, %76
  %79 = phi ptr [ %73, %76 ], [ %80, %78 ]
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %79) #11
  %80 = getelementptr inbounds i8, ptr %79, i64 12
  %81 = icmp eq ptr %80, %77
  br i1 %81, label %.loopexit288.loopexit, label %78

.loopexit288.loopexit:                            ; preds = %78
  %.pre = load ptr, ptr %27, align 8, !tbaa !5
  br label %.loopexit288

.loopexit288:                                     ; preds = %.loopexit288.loopexit, %74
  %82 = phi ptr [ %.pre, %.loopexit288.loopexit ], [ %60, %74 ]
  %83 = getelementptr inbounds i8, ptr %1, i64 40
  store ptr %73, ptr %83, align 8, !tbaa !25
  %84 = getelementptr inbounds i8, ptr %1, i64 16
  %85 = load ptr, ptr %84, align 8, !tbaa !26
  %86 = load ptr, ptr %35, align 8, !tbaa !17
  %87 = load i32, ptr %41, align 4, !tbaa !18
  %88 = zext i32 %87 to i64
  %89 = getelementptr inbounds [8 x ptr], ptr %45, i64 0, i64 %88
  %90 = load ptr, ptr %89, align 8, !tbaa !21
  %91 = getelementptr inbounds i8, ptr %1, i64 8
  %92 = load i32, ptr %91, align 8, !tbaa !27
  %.not310 = icmp eq i32 %92, 0
  br i1 %.not310, label %._crit_edge295, label %.lr.ph294

.lr.ph294:                                        ; preds = %.loopexit288
  %93 = getelementptr inbounds i8, ptr %1, i64 208
  %94 = getelementptr inbounds i8, ptr %10, i64 8
  %95 = getelementptr inbounds i8, ptr %11, i64 8
  %.sroa.269.0..sroa_idx = getelementptr inbounds i8, ptr %13, i64 8
  %.sroa.265.0..sroa_idx = getelementptr inbounds i8, ptr %12, i64 8
  %.sroa.261.0..sroa_idx = getelementptr inbounds i8, ptr %15, i64 8
  %.sroa.257.0..sroa_idx = getelementptr inbounds i8, ptr %14, i64 8
  %96 = getelementptr inbounds i8, ptr %12, i64 4
  %97 = getelementptr inbounds i8, ptr %14, i64 4
  %98 = getelementptr inbounds i8, ptr %7, i64 8
  br label %103

._crit_edge295:                                   ; preds = %.loopexit, %.loopexit288
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %16) #11
  invoke void @_ZN6Assimp11SpatialSortC1Ev(ptr noundef nonnull align 8 dereferenceable(49) %16)
          to label %282 unwind label %289

99:                                               ; preds = %51
  %100 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #11
  br label %432

101:                                              ; preds = %69, %55
  %102 = landingpad { ptr, i32 }
          cleanup
  br label %431

103:                                              ; preds = %.lr.ph294, %.loopexit
  %indvars.iv321 = phi i64 [ 0, %.lr.ph294 ], [ %indvars.iv.next322, %.loopexit ]
  %104 = load ptr, ptr %93, align 8, !tbaa !28
  %105 = getelementptr inbounds %struct.aiFace, ptr %104, i64 %indvars.iv321
  %106 = load i32, ptr %105, align 8, !tbaa !29
  %107 = icmp ult i32 %106, 3
  br i1 %107, label %.preheader287, label %126

.preheader287:                                    ; preds = %103
  %.not312 = icmp eq i32 %106, 0
  br i1 %.not312, label %.loopexit, label %.lr.ph291

.lr.ph291:                                        ; preds = %.preheader287
  %108 = getelementptr inbounds i8, ptr %105, i64 8
  br label %109

109:                                              ; preds = %.lr.ph291, %115
  %indvars.iv318 = phi i64 [ 0, %.lr.ph291 ], [ %indvars.iv.next319, %115 ]
  %110 = load ptr, ptr %108, align 8, !tbaa !31
  %111 = getelementptr inbounds i32, ptr %110, i64 %indvars.iv318
  %112 = load i32, ptr %111, align 4, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #11
  %113 = zext i32 %112 to i64
  %114 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %4, i64 noundef %113)
          to label %115 unwind label %124

115:                                              ; preds = %109
  %116 = extractvalue { ptr, i64 } %114, 0
  store ptr %116, ptr %7, align 8
  %117 = extractvalue { ptr, i64 } %114, 1
  store i64 %117, ptr %98, align 8
  %118 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %7, i1 noundef zeroext true) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %8) #11
  call void @_ZN10aiVector3tIfEC2Ef(ptr noundef nonnull align 4 dereferenceable(12) %8, float noundef %56)
  %119 = getelementptr inbounds %class.aiVector3t, ptr %82, i64 %113
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %119, ptr noundef nonnull align 4 dereferenceable(12) %8, i64 12, i1 false), !tbaa.struct !33
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %8) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %9) #11
  call void @_ZN10aiVector3tIfEC2Ef(ptr noundef nonnull align 4 dereferenceable(12) %9, float noundef %56)
  %120 = getelementptr inbounds %class.aiVector3t, ptr %73, i64 %113
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %120, ptr noundef nonnull align 4 dereferenceable(12) %9, i64 12, i1 false), !tbaa.struct !33
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %9) #11
  %indvars.iv.next319 = add nuw nsw i64 %indvars.iv318, 1
  %121 = load i32, ptr %105, align 8, !tbaa !29
  %122 = zext i32 %121 to i64
  %123 = icmp ult i64 %indvars.iv.next319, %122
  br i1 %123, label %109, label %.loopexit, !llvm.loop !35

124:                                              ; preds = %109
  %125 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #11
  br label %431

126:                                              ; preds = %103
  %127 = getelementptr inbounds i8, ptr %105, i64 8
  %128 = load ptr, ptr %127, align 8, !tbaa !31
  %129 = load i32, ptr %128, align 4, !tbaa !32
  %130 = getelementptr inbounds i8, ptr %128, i64 4
  %131 = load i32, ptr %130, align 4, !tbaa !32
  %132 = getelementptr inbounds i8, ptr %128, i64 8
  %133 = load i32, ptr %132, align 4, !tbaa !32
  %134 = zext i32 %131 to i64
  %135 = getelementptr inbounds %class.aiVector3t, ptr %85, i64 %134
  %136 = zext i32 %129 to i64
  %137 = getelementptr inbounds %class.aiVector3t, ptr %85, i64 %136
  %138 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %135, ptr noundef nonnull align 4 dereferenceable(12) %137)
          to label %139 unwind label %191

139:                                              ; preds = %126
  %.fca.0.extract117 = extractvalue { <2 x float>, float } %138, 0
  %.fca.1.extract118 = extractvalue { <2 x float>, float } %138, 1
  %140 = zext i32 %133 to i64
  %141 = getelementptr inbounds %class.aiVector3t, ptr %85, i64 %140
  %142 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %141, ptr noundef nonnull align 4 dereferenceable(12) %137)
          to label %143 unwind label %193

143:                                              ; preds = %139
  %.fca.0.extract107 = extractvalue { <2 x float>, float } %142, 0
  %.fca.1.extract108 = extractvalue { <2 x float>, float } %142, 1
  %144 = getelementptr inbounds %class.aiVector3t, ptr %90, i64 %134
  %145 = getelementptr inbounds %class.aiVector3t, ptr %90, i64 %136
  %146 = load <2 x float>, ptr %144, align 4, !tbaa !34
  %147 = getelementptr inbounds %class.aiVector3t, ptr %90, i64 %140
  %148 = load <2 x float>, ptr %147, align 4, !tbaa !34
  %149 = load <2 x float>, ptr %145, align 4, !tbaa !34
  %150 = shufflevector <2 x float> %149, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %151 = shufflevector <2 x float> %148, <2 x float> %146, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %152 = fsub <4 x float> %151, %150
  %153 = extractelement <4 x float> %152, i64 0
  %154 = extractelement <4 x float> %152, i64 3
  %155 = shufflevector <4 x float> %152, <4 x float> poison, <2 x i32> <i32 2, i32 3>
  %156 = shufflevector <4 x float> %152, <4 x float> poison, <2 x i32> <i32 1, i32 0>
  %157 = fmul <2 x float> %155, %156
  %158 = extractelement <2 x float> %157, i64 0
  %159 = fneg float %158
  %160 = call float @llvm.fmuladd.f32(float %153, float %154, float %159)
  %161 = fcmp olt float %160, 0.000000e+00
  %162 = select i1 %161, float -1.000000e+00, float 1.000000e+00
  %163 = extractelement <2 x float> %157, i64 1
  %164 = fcmp oeq float %158, %163
  %165 = select i1 %164, <4 x float> <float 1.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00>, <4 x float> %152
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %10) #11
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %10) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %11) #11
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %11) #11
  %166 = fneg <2 x float> %.fca.0.extract117
  %167 = shufflevector <4 x float> %165, <4 x float> poison, <2 x i32> <i32 1, i32 1>
  %168 = fmul <2 x float> %167, %166
  %169 = shufflevector <4 x float> %165, <4 x float> poison, <2 x i32> <i32 3, i32 3>
  %170 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %.fca.0.extract107, <2 x float> %169, <2 x float> %168)
  %171 = insertelement <2 x float> poison, float %162, i64 0
  %172 = shufflevector <2 x float> %171, <2 x float> poison, <2 x i32> zeroinitializer
  %173 = fmul <2 x float> %172, %170
  store <2 x float> %173, ptr %10, align 8, !tbaa !34
  %174 = fneg float %.fca.1.extract118
  %175 = extractelement <4 x float> %165, i64 1
  %176 = fmul float %175, %174
  %177 = extractelement <4 x float> %165, i64 3
  %178 = call float @llvm.fmuladd.f32(float %.fca.1.extract108, float %177, float %176)
  %179 = fmul float %162, %178
  store float %179, ptr %94, align 8, !tbaa !37
  %180 = shufflevector <4 x float> %165, <4 x float> poison, <2 x i32> zeroinitializer
  %181 = fmul <2 x float> %180, %166
  %182 = shufflevector <4 x float> %165, <4 x float> poison, <2 x i32> <i32 2, i32 2>
  %183 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %.fca.0.extract107, <2 x float> %182, <2 x float> %181)
  %184 = fmul <2 x float> %172, %183
  store <2 x float> %184, ptr %11, align 8, !tbaa !34
  %185 = extractelement <4 x float> %165, i64 0
  %186 = fmul float %185, %174
  %187 = extractelement <4 x float> %165, i64 2
  %188 = call float @llvm.fmuladd.f32(float %.fca.1.extract108, float %187, float %186)
  %189 = fmul float %162, %188
  store float %189, ptr %95, align 8, !tbaa !37
  %190 = load i32, ptr %105, align 8, !tbaa !29
  %.not311 = icmp eq i32 %190, 0
  br i1 %.not311, label %._crit_edge, label %.lr.ph

191:                                              ; preds = %126
  %192 = landingpad { ptr, i32 }
          cleanup
  br label %431

193:                                              ; preds = %139
  %194 = landingpad { ptr, i32 }
          cleanup
  br label %431

._crit_edge:                                      ; preds = %271, %143
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #11
  br label %.loopexit

.lr.ph:                                           ; preds = %143, %271
  %indvars.iv = phi i64 [ %indvars.iv.next, %271 ], [ 0, %143 ]
  %195 = load ptr, ptr %127, align 8, !tbaa !31
  %196 = getelementptr inbounds i32, ptr %195, i64 %indvars.iv
  %197 = load i32, ptr %196, align 4, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %12) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %13) #11
  %198 = zext i32 %197 to i64
  %199 = getelementptr inbounds %class.aiVector3t, ptr %86, i64 %198
  %200 = call noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %10, ptr noundef nonnull align 4 dereferenceable(12) %199)
  %201 = invoke { <2 x float>, float } @_ZmlIfE10aiVector3tIT_ERKS2_S1_(ptr noundef nonnull align 4 dereferenceable(12) %199, float noundef %200)
          to label %202 unwind label %255

202:                                              ; preds = %.lr.ph
  %.fca.0.extract66 = extractvalue { <2 x float>, float } %201, 0
  %.fca.1.extract67 = extractvalue { <2 x float>, float } %201, 1
  store <2 x float> %.fca.0.extract66, ptr %13, align 8
  store float %.fca.1.extract67, ptr %.sroa.269.0..sroa_idx, align 8
  %203 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %10, ptr noundef nonnull align 4 dereferenceable(12) %13)
          to label %204 unwind label %255

204:                                              ; preds = %202
  %.fca.0.extract62 = extractvalue { <2 x float>, float } %203, 0
  %.fca.1.extract63 = extractvalue { <2 x float>, float } %203, 1
  store <2 x float> %.fca.0.extract62, ptr %12, align 8
  store float %.fca.1.extract63, ptr %.sroa.265.0..sroa_idx, align 8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %13) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %14) #11
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %15) #11
  %205 = call noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %11, ptr noundef nonnull align 4 dereferenceable(12) %199)
  %206 = invoke { <2 x float>, float } @_ZmlIfE10aiVector3tIT_ERKS2_S1_(ptr noundef nonnull align 4 dereferenceable(12) %199, float noundef %205)
          to label %207 unwind label %257

207:                                              ; preds = %204
  %.fca.0.extract58 = extractvalue { <2 x float>, float } %206, 0
  %.fca.1.extract59 = extractvalue { <2 x float>, float } %206, 1
  store <2 x float> %.fca.0.extract58, ptr %15, align 8
  store float %.fca.1.extract59, ptr %.sroa.261.0..sroa_idx, align 8
  %208 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %11, ptr noundef nonnull align 4 dereferenceable(12) %15)
          to label %209 unwind label %257

209:                                              ; preds = %207
  %.fca.0.extract54 = extractvalue { <2 x float>, float } %208, 0
  %.fca.1.extract55 = extractvalue { <2 x float>, float } %208, 1
  store <2 x float> %.fca.0.extract54, ptr %14, align 8
  store float %.fca.1.extract55, ptr %.sroa.257.0..sroa_idx, align 8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %15) #11
  %210 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE13NormalizeSafeEv(ptr noundef nonnull align 4 dereferenceable(12) %12)
          to label %211 unwind label %259

211:                                              ; preds = %209
  %212 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE13NormalizeSafeEv(ptr noundef nonnull align 4 dereferenceable(12) %14)
          to label %213 unwind label %259

213:                                              ; preds = %211
  %214 = load float, ptr %12, align 8, !tbaa !38
  %215 = call noundef zeroext i1 @_Z16is_special_floatf(float noundef %214)
  br i1 %215, label %231, label %216

216:                                              ; preds = %213
  %217 = load float, ptr %96, align 4, !tbaa !39
  %218 = call noundef zeroext i1 @_Z16is_special_floatf(float noundef %217)
  br i1 %218, label %231, label %219

219:                                              ; preds = %216
  %220 = load float, ptr %.sroa.265.0..sroa_idx, align 8, !tbaa !37
  %221 = call noundef zeroext i1 @_Z16is_special_floatf(float noundef %220)
  br i1 %221, label %231, label %222

222:                                              ; preds = %219
  %223 = load <2 x float>, ptr %12, align 8
  %224 = call <2 x float> @llvm.fabs.v2f32(<2 x float> %223)
  %225 = fcmp olt <2 x float> %224, <float 5.000000e-01, float 5.000000e-01>
  %226 = extractelement <2 x i1> %225, i64 0
  %227 = extractelement <2 x i1> %225, i64 1
  %or.cond8 = select i1 %226, i1 %227, i1 false
  %228 = load float, ptr %.sroa.265.0..sroa_idx, align 8
  %229 = call float @llvm.fabs.f32(float %228)
  %230 = fcmp olt float %229, 5.000000e-01
  %spec.select = select i1 %or.cond8, i1 %230, i1 false
  br label %231

231:                                              ; preds = %222, %219, %216, %213
  %232 = phi i1 [ true, %219 ], [ true, %216 ], [ true, %213 ], [ %spec.select, %222 ]
  %233 = load float, ptr %14, align 8, !tbaa !38
  %234 = call noundef zeroext i1 @_Z16is_special_floatf(float noundef %233)
  br i1 %234, label %.thr_comm, label %235

235:                                              ; preds = %231
  %236 = load float, ptr %97, align 4, !tbaa !39
  %237 = call noundef zeroext i1 @_Z16is_special_floatf(float noundef %236)
  br i1 %237, label %.thr_comm, label %238

238:                                              ; preds = %235
  %239 = load float, ptr %.sroa.257.0..sroa_idx, align 8, !tbaa !37
  %240 = call noundef zeroext i1 @_Z16is_special_floatf(float noundef %239)
  br i1 %240, label %.thr_comm, label %241

.thr_comm:                                        ; preds = %231, %235, %238
  br i1 %232, label %271, label %.critedge

241:                                              ; preds = %238
  %242 = load <2 x float>, ptr %14, align 8
  %243 = call <2 x float> @llvm.fabs.v2f32(<2 x float> %242)
  %244 = fcmp olt <2 x float> %243, <float 5.000000e-01, float 5.000000e-01>
  %245 = extractelement <2 x i1> %244, i64 0
  %246 = extractelement <2 x i1> %244, i64 1
  %or.cond20 = select i1 %245, i1 %246, i1 false
  %247 = load float, ptr %.sroa.257.0..sroa_idx, align 8
  %248 = call float @llvm.fabs.f32(float %247)
  %249 = fcmp olt float %248, 5.000000e-01
  %spec.select278 = select i1 %or.cond20, i1 %249, i1 false
  %250 = xor i1 %232, %spec.select278
  br i1 %250, label %251, label %271

251:                                              ; preds = %241
  br i1 %232, label %252, label %.critedge

252:                                              ; preds = %251
  %253 = invoke { <2 x float>, float } @_ZeoIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %199, ptr noundef nonnull align 4 dereferenceable(12) %14)
          to label %254 unwind label %263

254:                                              ; preds = %252
  %.fca.0.extract45 = extractvalue { <2 x float>, float } %253, 0
  %.fca.1.extract46 = extractvalue { <2 x float>, float } %253, 1
  store <2 x float> %.fca.0.extract45, ptr %12, align 8
  store float %.fca.1.extract46, ptr %.sroa.265.0..sroa_idx, align 8, !tbaa !34
  br label %.invoke

255:                                              ; preds = %202, %.lr.ph
  %256 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %13) #11
  br label %278

257:                                              ; preds = %207, %204
  %258 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %15) #11
  br label %277

259:                                              ; preds = %211, %209
  %260 = landingpad { ptr, i32 }
          cleanup
  br label %277

261:                                              ; preds = %.invoke
  %262 = landingpad { ptr, i32 }
          cleanup
  br label %277

263:                                              ; preds = %252
  %264 = landingpad { ptr, i32 }
          cleanup
  br label %277

.critedge:                                        ; preds = %.thr_comm, %251
  %265 = invoke { <2 x float>, float } @_ZeoIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %12, ptr noundef nonnull align 4 dereferenceable(12) %199)
          to label %266 unwind label %269

266:                                              ; preds = %.critedge
  %.fca.0.extract = extractvalue { <2 x float>, float } %265, 0
  %.fca.1.extract = extractvalue { <2 x float>, float } %265, 1
  store <2 x float> %.fca.0.extract, ptr %14, align 8
  store float %.fca.1.extract, ptr %.sroa.257.0..sroa_idx, align 8, !tbaa !34
  br label %.invoke

.invoke:                                          ; preds = %254, %266
  %267 = phi ptr [ %14, %266 ], [ %12, %254 ]
  %268 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE13NormalizeSafeEv(ptr noundef nonnull align 4 dereferenceable(12) %267)
          to label %271 unwind label %261

269:                                              ; preds = %.critedge
  %270 = landingpad { ptr, i32 }
          cleanup
  br label %277

271:                                              ; preds = %.invoke, %.thr_comm, %241
  %272 = getelementptr inbounds %class.aiVector3t, ptr %82, i64 %198
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %272, ptr noundef nonnull align 8 dereferenceable(12) %12, i64 12, i1 false), !tbaa.struct !33
  %273 = getelementptr inbounds %class.aiVector3t, ptr %73, i64 %198
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %273, ptr noundef nonnull align 8 dereferenceable(12) %14, i64 12, i1 false), !tbaa.struct !33
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %14) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %12) #11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %274 = load i32, ptr %105, align 8, !tbaa !29
  %275 = zext i32 %274 to i64
  %276 = icmp ult i64 %indvars.iv.next, %275
  br i1 %276, label %.lr.ph, label %._crit_edge, !llvm.loop !40

277:                                              ; preds = %261, %263, %269, %259, %257
  %.pn267.pn = phi { ptr, i32 } [ %260, %259 ], [ %258, %257 ], [ %262, %261 ], [ %264, %263 ], [ %270, %269 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %14) #11
  br label %278

278:                                              ; preds = %277, %255
  %.pn267.pn.pn = phi { ptr, i32 } [ %.pn267.pn, %277 ], [ %256, %255 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #11
  br label %431

.loopexit:                                        ; preds = %115, %.preheader287, %._crit_edge
  %indvars.iv.next322 = add nuw nsw i64 %indvars.iv321, 1
  %279 = load i32, ptr %91, align 8, !tbaa !27
  %280 = zext i32 %279 to i64
  %281 = icmp ult i64 %indvars.iv.next322, %280
  br i1 %281, label %103, label %._crit_edge295, !llvm.loop !41

282:                                              ; preds = %._crit_edge295
  %283 = getelementptr inbounds i8, ptr %0, i64 8
  %284 = load ptr, ptr %283, align 8, !tbaa !42
  %.not258 = icmp eq ptr %284, null
  br i1 %.not258, label %.thread, label %285

285:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #11
  %286 = invoke noundef zeroext i1 @_ZNK6Assimp21SharedPostProcessInfo11GetPropertyISt6vectorISt4pairINS_11SpatialSortEfESaIS5_EEEEbPKcRPT_(ptr noundef nonnull align 8 dereferenceable(48) %284, ptr noundef nonnull @.str.11, ptr noundef nonnull align 8 dereferenceable(8) %17)
          to label %287 unwind label %291

287:                                              ; preds = %285
  %288 = load ptr, ptr %17, align 8, !tbaa !21
  %.not259 = icmp eq ptr %288, null
  br i1 %.not259, label %.thread282, label %293

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

289:                                              ; preds = %._crit_edge295
  %290 = landingpad { ptr, i32 }
          cleanup
  br label %430

291:                                              ; preds = %285
  %292 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #11
  br label %429

293:                                              ; preds = %287
  %294 = zext i32 %2 to i64
  %295 = call noundef nonnull align 8 dereferenceable(60) ptr @_ZNSt6vectorISt4pairIN6Assimp11SpatialSortEfESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %288, i64 noundef %294) #11
  %296 = getelementptr inbounds i8, ptr %295, i64 56
  %297 = load float, ptr %296, align 8, !tbaa !43
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #11
  br label %304

.thread:                                          ; preds = %282, %.thread282
  %298 = load ptr, ptr %84, align 8, !tbaa !26
  %299 = load i32, ptr %52, align 4, !tbaa !22
  invoke void @_ZN6Assimp11SpatialSort4FillEPK10aiVector3tIfEjjb(ptr noundef nonnull align 8 dereferenceable(49) %16, ptr noundef %298, i32 noundef %299, i32 noundef 12, i1 noundef zeroext true)
          to label %300 unwind label %302

300:                                              ; preds = %.thread
  %301 = invoke noundef float @_ZN6Assimp22ComputePositionEpsilonEPK6aiMesh(ptr noundef nonnull %1)
          to label %304 unwind label %302

302:                                              ; preds = %300, %.thread
  %303 = landingpad { ptr, i32 }
          cleanup
  br label %429

304:                                              ; preds = %293, %300
  %.2242 = phi ptr [ %295, %293 ], [ %16, %300 ]
  %.2239 = phi float [ %297, %293 ], [ %301, %300 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %18) #11
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #11
  %305 = getelementptr inbounds i8, ptr %0, i64 24
  %306 = load float, ptr %305, align 8, !tbaa !50
  %307 = call noundef float @_ZSt3cosf(float noundef %306)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %19) #11
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #11
  store i32 0, ptr %20, align 4, !tbaa !32
  %308 = load i32, ptr %52, align 4, !tbaa !22
  %.not313 = icmp eq i32 %308, 0
  br i1 %.not313, label %._crit_edge309, label %.lr.ph308

.lr.ph308:                                        ; preds = %304
  %309 = getelementptr inbounds i8, ptr %21, i64 8
  %310 = getelementptr inbounds i8, ptr %23, i64 8
  %311 = getelementptr inbounds i8, ptr %24, i64 8
  br label %312

._crit_edge309:                                   ; preds = %423, %304
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #11
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #11
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #11
  call void @_ZN6Assimp11SpatialSortD2Ev(ptr noundef nonnull align 8 dereferenceable(49) %16) #11
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %16) #11
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %4) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #11
  br label %433

312:                                              ; preds = %.lr.ph308, %423
  %storemerge306 = phi i32 [ 0, %.lr.ph308 ], [ %425, %423 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #11
  %313 = zext i32 %storemerge306 to i64
  %314 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %4, i64 noundef %313)
          to label %315 unwind label %319

315:                                              ; preds = %312
  %316 = extractvalue { ptr, i64 } %314, 0
  store ptr %316, ptr %21, align 8
  %317 = extractvalue { ptr, i64 } %314, 1
  store i64 %317, ptr %309, align 8
  %318 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %21) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #11
  br i1 %318, label %423, label %321

319:                                              ; preds = %312
  %320 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #11
  br label %428

321:                                              ; preds = %315
  %322 = load ptr, ptr %84, align 8, !tbaa !26
  %323 = load i32, ptr %20, align 4, !tbaa !32
  %324 = zext i32 %323 to i64
  %325 = load ptr, ptr %35, align 8, !tbaa !17
  %326 = getelementptr inbounds %class.aiVector3t, ptr %325, i64 %324
  %327 = load ptr, ptr %27, align 8, !tbaa !5
  %328 = getelementptr inbounds %class.aiVector3t, ptr %327, i64 %324
  %329 = load ptr, ptr %83, align 8, !tbaa !25
  %330 = getelementptr inbounds %class.aiVector3t, ptr %329, i64 %324
  invoke void @_ZNSt6vectorIjSaIjEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef 0)
          to label %331 unwind label %339

331:                                              ; preds = %321
  %332 = getelementptr inbounds %class.aiVector3t, ptr %322, i64 %324
  invoke void @_ZNK6Assimp11SpatialSort13FindPositionsERK10aiVector3tIfEfRSt6vectorIjSaIjEE(ptr noundef nonnull align 8 dereferenceable(49) %.2242, ptr noundef nonnull align 4 dereferenceable(12) %332, float noundef %.2239, ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %333 unwind label %339

333:                                              ; preds = %331
  %334 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #11
  %335 = add i64 %334, 5
  invoke void @_ZNSt6vectorIjSaIjEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %335)
          to label %336 unwind label %339

336:                                              ; preds = %333
  invoke void @_ZNSt6vectorIjSaIjEE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 4 dereferenceable(4) %20)
          to label %.preheader286 unwind label %339

.preheader286:                                    ; preds = %336
  %337 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #11
  %.not314 = icmp eq i64 %337, 0
  br i1 %.not314, label %._crit_edge298, label %.lr.ph297

._crit_edge298:                                   ; preds = %381, %.preheader286
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %25) #11
  call void @_ZN10aiVector3tIfEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %25, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %26) #11
  call void @_ZN10aiVector3tIfEC2Efff(ptr noundef nonnull align 4 dereferenceable(12) %26, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %338 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #11
  %.not315 = icmp eq i64 %338, 0
  br i1 %.not315, label %._crit_edge302, label %.lr.ph301

339:                                              ; preds = %336, %333, %331, %321
  %340 = landingpad { ptr, i32 }
          cleanup
  br label %428

.lr.ph297:                                        ; preds = %.preheader286, %381
  %341 = phi i64 [ %383, %381 ], [ 0, %.preheader286 ]
  %.0218296 = phi i32 [ %382, %381 ], [ 0, %.preheader286 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #11
  %342 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %341) #11
  %343 = load i32, ptr %342, align 4, !tbaa !32
  store i32 %343, ptr %22, align 4, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #11
  %344 = zext i32 %343 to i64
  %345 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %4, i64 noundef %344)
          to label %346 unwind label %350

346:                                              ; preds = %.lr.ph297
  %347 = extractvalue { ptr, i64 } %345, 0
  store ptr %347, ptr %23, align 8
  %348 = extractvalue { ptr, i64 } %345, 1
  store i64 %348, ptr %310, align 8
  %349 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %23) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #11
  br i1 %349, label %381, label %352

350:                                              ; preds = %.lr.ph297
  %351 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #11
  br label %388

352:                                              ; preds = %346
  %353 = load i32, ptr %22, align 4, !tbaa !32
  %354 = zext i32 %353 to i64
  %355 = getelementptr inbounds %class.aiVector3t, ptr %86, i64 %354
  %356 = call noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %355, ptr noundef nonnull align 4 dereferenceable(12) %326)
  %357 = fcmp olt float %356, 0x3FEFFF2E40000000
  br i1 %357, label %381, label %360

358:                                              ; preds = %372
  %359 = landingpad { ptr, i32 }
          cleanup
  br label %388

360:                                              ; preds = %352
  %361 = load i32, ptr %22, align 4, !tbaa !32
  %362 = zext i32 %361 to i64
  %363 = getelementptr inbounds %class.aiVector3t, ptr %82, i64 %362
  %364 = call noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %363, ptr noundef nonnull align 4 dereferenceable(12) %328)
  %365 = fcmp olt float %364, %307
  br i1 %365, label %381, label %366

366:                                              ; preds = %360
  %367 = load i32, ptr %22, align 4, !tbaa !32
  %368 = zext i32 %367 to i64
  %369 = getelementptr inbounds %class.aiVector3t, ptr %73, i64 %368
  %370 = call noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %369, ptr noundef nonnull align 4 dereferenceable(12) %330)
  %371 = fcmp olt float %370, %307
  br i1 %371, label %381, label %372

372:                                              ; preds = %366
  invoke void @_ZNSt6vectorIjSaIjEE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 4 dereferenceable(4) %22)
          to label %373 unwind label %358

373:                                              ; preds = %372
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #11
  %374 = load i32, ptr %22, align 4, !tbaa !32
  %375 = zext i32 %374 to i64
  %376 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %4, i64 noundef %375)
          to label %377 unwind label %386

377:                                              ; preds = %373
  %378 = extractvalue { ptr, i64 } %376, 0
  store ptr %378, ptr %24, align 8
  %379 = extractvalue { ptr, i64 } %376, 1
  store i64 %379, ptr %311, align 8
  %380 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %24, i1 noundef zeroext true) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #11
  br label %381

381:                                              ; preds = %366, %360, %352, %346, %377
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #11
  %382 = add i32 %.0218296, 1
  %383 = zext i32 %382 to i64
  %384 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #11
  %385 = icmp ugt i64 %384, %383
  br i1 %385, label %.lr.ph297, label %._crit_edge298, !llvm.loop !51

386:                                              ; preds = %373
  %387 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #11
  br label %388

388:                                              ; preds = %386, %358, %350
  %.pn = phi { ptr, i32 } [ %387, %386 ], [ %359, %358 ], [ %351, %350 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #11
  br label %428

._crit_edge302:                                   ; preds = %.lr.ph301, %._crit_edge298
  %389 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %25)
          to label %407 unwind label %390

390:                                              ; preds = %407, %._crit_edge302
  %391 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %26) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %25) #11
  br label %428

.lr.ph301:                                        ; preds = %._crit_edge298, %.lr.ph301
  %392 = phi i64 [ %404, %.lr.ph301 ], [ 0, %._crit_edge298 ]
  %.0217299 = phi i32 [ %403, %.lr.ph301 ], [ 0, %._crit_edge298 ]
  %393 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %392) #11
  %394 = load i32, ptr %393, align 4, !tbaa !32
  %395 = zext i32 %394 to i64
  %396 = getelementptr inbounds %class.aiVector3t, ptr %82, i64 %395
  %397 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfEpLERKS0_(ptr noundef nonnull align 4 dereferenceable(12) %25, ptr noundef nonnull align 4 dereferenceable(12) %396)
  %398 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %392) #11
  %399 = load i32, ptr %398, align 4, !tbaa !32
  %400 = zext i32 %399 to i64
  %401 = getelementptr inbounds %class.aiVector3t, ptr %73, i64 %400
  %402 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfEpLERKS0_(ptr noundef nonnull align 4 dereferenceable(12) %26, ptr noundef nonnull align 4 dereferenceable(12) %401)
  %403 = add i32 %.0217299, 1
  %404 = zext i32 %403 to i64
  %405 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #11
  %406 = icmp ugt i64 %405, %404
  br i1 %406, label %.lr.ph301, label %._crit_edge302, !llvm.loop !52

407:                                              ; preds = %._crit_edge302
  %408 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %26)
          to label %.preheader unwind label %390

.preheader:                                       ; preds = %407
  %409 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #11
  %.not316 = icmp eq i64 %409, 0
  br i1 %.not316, label %._crit_edge305, label %.lr.ph304

._crit_edge305:                                   ; preds = %.lr.ph304, %.preheader
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %26) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %25) #11
  br label %423

.lr.ph304:                                        ; preds = %.preheader, %.lr.ph304
  %410 = phi i64 [ %420, %.lr.ph304 ], [ 0, %.preheader ]
  %.0303 = phi i32 [ %419, %.lr.ph304 ], [ 0, %.preheader ]
  %411 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %410) #11
  %412 = load i32, ptr %411, align 4, !tbaa !32
  %413 = zext i32 %412 to i64
  %414 = getelementptr inbounds %class.aiVector3t, ptr %82, i64 %413
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %414, ptr noundef nonnull align 4 dereferenceable(12) %25, i64 12, i1 false), !tbaa.struct !33
  %415 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %410) #11
  %416 = load i32, ptr %415, align 4, !tbaa !32
  %417 = zext i32 %416 to i64
  %418 = getelementptr inbounds %class.aiVector3t, ptr %73, i64 %417
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %418, ptr noundef nonnull align 4 dereferenceable(12) %26, i64 12, i1 false), !tbaa.struct !33
  %419 = add i32 %.0303, 1
  %420 = zext i32 %419 to i64
  %421 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #11
  %422 = icmp ugt i64 %421, %420
  br i1 %422, label %.lr.ph304, label %._crit_edge305, !llvm.loop !53

423:                                              ; preds = %315, %._crit_edge305
  %424 = load i32, ptr %20, align 4, !tbaa !32
  %425 = add i32 %424, 1
  store i32 %425, ptr %20, align 4, !tbaa !32
  %426 = load i32, ptr %52, align 4, !tbaa !22
  %427 = icmp ult i32 %425, %426
  br i1 %427, label %312, label %._crit_edge309, !llvm.loop !54

428:                                              ; preds = %339, %388, %390, %319
  %.pn.pn.pn = phi { ptr, i32 } [ %320, %319 ], [ %.pn, %388 ], [ %391, %390 ], [ %340, %339 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #11
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #11
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #11
  br label %429

429:                                              ; preds = %428, %302, %291
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %428 ], [ %303, %302 ], [ %292, %291 ]
  call void @_ZN6Assimp11SpatialSortD2Ev(ptr noundef nonnull align 8 dereferenceable(49) %16) #11
  br label %430

430:                                              ; preds = %429, %289
  %.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn, %429 ], [ %290, %289 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %16) #11
  br label %431

431:                                              ; preds = %430, %191, %278, %193, %124, %101
  %.pn273.pn.pn = phi { ptr, i32 } [ %102, %101 ], [ %.pn.pn.pn.pn.pn, %430 ], [ %125, %124 ], [ %192, %191 ], [ %.pn267.pn.pn, %278 ], [ %194, %193 ]
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %4) #11
  br label %432

432:                                              ; preds = %431, %99
  %.pn273.pn.pn.pn = phi { ptr, i32 } [ %.pn273.pn.pn, %431 ], [ %100, %99 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #11
  resume { ptr, i32 } %.pn273.pn.pn.pn

433:                                              ; preds = %3, %._crit_edge309, %49, %38, %32
  %.0219 = phi i1 [ false, %38 ], [ false, %49 ], [ true, %._crit_edge309 ], [ false, %32 ], [ false, %3 ]
  ret i1 %.0219
}

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp6Logger5errorIJRA52_KcRjEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(52), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 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 #3 align 2

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; 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: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #9

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, float } @_ZmlIfE10aiVector3tIT_ERKS2_S1_(ptr noundef nonnull align 4 dereferenceable(12), float noundef) local_unnamed_addr #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)) local_unnamed_addr #5

; 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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_Z16is_special_floatf(float noundef) local_unnamed_addr #5

; 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

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 #3 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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3cosf(float noundef) local_unnamed_addr #5

; 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

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

; 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 uwtable
declare dso_local void @_ZNSt6vectorIjSaIjEE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

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

; 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 #5 align 2

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

; 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

; 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: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fabs.f32(float) #10

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x float> @llvm.fabs.v2f32(<2 x float>) #10

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x float> @llvm.fmuladd.v2f32(<2 x float>, <2 x float>, <2 x float>) #10

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 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 32}
!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 = !{!6, !7, i64 0}
!17 = !{!6, !10, i64 24}
!18 = !{!19, !7, i64 28}
!19 = !{!"_ZTSN6Assimp19CalcTangentsProcessE", !20, i64 0, !15, i64 24, !7, i64 28}
!20 = !{!"_ZTSN6Assimp11BaseProcessE", !10, i64 8, !10, i64 16}
!21 = !{!10, !10, i64 0}
!22 = !{!6, !7, i64 4}
!23 = !{!24, !24, i64 0}
!24 = !{!"bool", !8, i64 0}
!25 = !{!6, !10, i64 40}
!26 = !{!6, !10, i64 16}
!27 = !{!6, !7, i64 8}
!28 = !{!6, !10, i64 208}
!29 = !{!30, !7, i64 0}
!30 = !{!"_ZTS6aiFace", !7, i64 0, !10, i64 8}
!31 = !{!30, !10, i64 8}
!32 = !{!7, !7, i64 0}
!33 = !{i64 0, i64 4, !34, i64 4, i64 4, !34, i64 8, i64 4, !34}
!34 = !{!15, !15, i64 0}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = !{!14, !15, i64 8}
!38 = !{!14, !15, i64 0}
!39 = !{!14, !15, i64 4}
!40 = distinct !{!40, !36}
!41 = distinct !{!41, !36}
!42 = !{!20, !10, i64 8}
!43 = !{!44, !15, i64 56}
!44 = !{!"_ZTSSt4pairIN6Assimp11SpatialSortEfE", !45, i64 0, !15, i64 56}
!45 = !{!"_ZTSN6Assimp11SpatialSortE", !14, i64 0, !14, i64 12, !46, i64 24, !24, i64 48}
!46 = !{!"_ZTSSt6vectorIN6Assimp11SpatialSort5EntryESaIS2_EE", !47, i64 0}
!47 = !{!"_ZTSSt12_Vector_baseIN6Assimp11SpatialSort5EntryESaIS2_EE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseIN6Assimp11SpatialSort5EntryESaIS2_EE12_Vector_implE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseIN6Assimp11SpatialSort5EntryESaIS2_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!50 = !{!19, !15, i64 24}
!51 = distinct !{!51, !36}
!52 = distinct !{!52, !36}
!53 = distinct !{!53, !36}
!54 = distinct !{!54, !36}


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