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

; 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.Assimp::VertexTriangleAdjacency" = type <{ ptr, ptr, ptr, i32, [4 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::vector.0" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"class.std::allocator.4" = type { i8 }
%"class.std::stack" = type { %"class.std::vector" }
%"class.std::allocator" = type { i8 }
%"struct.std::_Bit_reference" = type { ptr, i64 }
%struct.aiMesh = type { i32, i32, i32, ptr, ptr, ptr, ptr, [8 x ptr], [8 x ptr], [8 x i32], ptr, i32, ptr, i32, %struct.aiString, i32, ptr, i32, %struct.aiAABB, ptr }
%struct.aiString = type { i32, [1024 x i8] }
%struct.aiAABB = type { %class.aiVector3t, %class.aiVector3t }
%class.aiVector3t = type { float, float, float }
%"class.Assimp::ImproveCacheLocalityProcess" = type <{ %"class.Assimp::BaseProcess", i32, [4 x i8] }>
%"class.Assimp::BaseProcess" = type { ptr, ptr, ptr }
%struct.aiFace = type { i32, ptr }

@.str.7 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [129 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [17 x i8], align 1

declare noundef ptr @_ZN6Assimp13DefaultLogger3getEv() #0

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

; Function Attrs: mustprogress uwtable
define dso_local noundef float @_ZN6Assimp27ImproveCacheLocalityProcess11ProcessMeshEP6aiMeshj(ptr noundef nonnull align 8 dereferenceable(28) %0, ptr noundef %1, i32 noundef %2) #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca float, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca float, align 4
  %9 = alloca ptr, align 8
  %10 = alloca %"class.Assimp::VertexTriangleAdjacency", align 8
  %11 = alloca %"class.std::vector", align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca %"class.std::vector", align 8
  %16 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %17 = alloca %"class.std::vector.0", align 8
  %18 = alloca i8, align 1
  %19 = alloca %"class.std::allocator.4", align 1
  %20 = alloca %"class.std::stack", align 8
  %21 = alloca ptr, align 8
  %22 = alloca %"class.std::vector", align 8
  %23 = alloca %"class.std::allocator", align 1
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca %"class.std::vector", align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca %"struct.std::_Bit_reference", align 8
  %39 = alloca ptr, align 8
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %44 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %45 = alloca %"struct.std::_Bit_reference", align 8
  %46 = alloca i32, align 4
  %47 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca float, align 4
  %53 = alloca float, align 4
  %54 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %55 = alloca ptr, align 8
  %56 = alloca i32, align 4
  %57 = alloca ptr, align 8
  %58 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %59 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %60 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  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
  %61 = load ptr, ptr %5, align 8
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = icmp ne ptr null, %62
  br i1 %63, label %65, label %64

64:                                               ; preds = %3
  call void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.7, ptr noundef @.str.8, i32 noundef 159)
  br label %65

65:                                               ; preds = %64, %3
  %66 = phi i1 [ true, %3 ], [ false, %64 ]
  %67 = load ptr, ptr %6, align 8, !tbaa !5
  %68 = call noundef zeroext i1 @_ZNK6aiMesh8HasFacesEv(ptr noundef nonnull align 8 dereferenceable(1320) %67)
  br i1 %68, label %69, label %72

69:                                               ; preds = %65
  %70 = load ptr, ptr %6, align 8, !tbaa !5
  %71 = call noundef zeroext i1 @_ZNK6aiMesh12HasPositionsEv(ptr noundef nonnull align 8 dereferenceable(1320) %70)
  br i1 %71, label %73, label %72

72:                                               ; preds = %69, %65
  store float 0.000000e+00, ptr %4, align 4
  br label %558

73:                                               ; preds = %69
  %74 = load ptr, ptr %6, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.aiMesh, ptr %74, i32 0, i32 0
  %76 = load i32, ptr %75, align 8, !tbaa !11
  %77 = icmp ne i32 %76, 4
  br i1 %77, label %78, label %80

78:                                               ; preds = %73
  %79 = call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  call void @_ZN6Assimp6Logger5errorEPKc(ptr noundef nonnull align 8 dereferenceable(12) %79, ptr noundef @.str.9)
  store float 0.000000e+00, ptr %4, align 4
  br label %558

80:                                               ; preds = %73
  %81 = load ptr, ptr %6, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.aiMesh, ptr %81, i32 0, i32 1
  %83 = load i32, ptr %82, align 4, !tbaa !18
  %84 = getelementptr inbounds %"class.Assimp::ImproveCacheLocalityProcess", ptr %61, i32 0, i32 1
  %85 = load i32, ptr %84, align 8, !tbaa !19
  %86 = icmp ule i32 %83, %85
  br i1 %86, label %87, label %88

87:                                               ; preds = %80
  store float 0.000000e+00, ptr %4, align 4
  br label %558

88:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  store float 3.000000e+00, ptr %8, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  %89 = load ptr, ptr %6, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.aiMesh, ptr %89, i32 0, i32 10
  %91 = load ptr, ptr %90, align 8, !tbaa !23
  %92 = load ptr, ptr %6, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.aiMesh, ptr %92, i32 0, i32 2
  %94 = load i32, ptr %93, align 8, !tbaa !24
  %95 = zext i32 %94 to i64
  %96 = getelementptr inbounds %struct.aiFace, ptr %91, i64 %95
  store ptr %96, ptr %9, align 8, !tbaa !5
  %97 = call noundef zeroext i1 @_ZN6Assimp13DefaultLogger12isNullLoggerEv()
  br i1 %97, label %105, label %98

98:                                               ; preds = %88
  %99 = load ptr, ptr %6, align 8, !tbaa !5
  %100 = load ptr, ptr %9, align 8, !tbaa !5
  %101 = getelementptr inbounds %"class.Assimp::ImproveCacheLocalityProcess", ptr %61, i32 0, i32 1
  %102 = load i32, ptr %101, align 8, !tbaa !19
  %103 = load i32, ptr %7, align 4, !tbaa !9
  %104 = call noundef float @_ZN6AssimpL18calculateInputACMREP6aiMeshPK6aiFacejj(ptr noundef %99, ptr noundef %100, i32 noundef %102, i32 noundef %103)
  store float %104, ptr %8, align 4, !tbaa !22
  br label %105

105:                                              ; preds = %98, %88
  call void @llvm.lifetime.start.p0(i64 32, ptr %10) #8
  %106 = load ptr, ptr %6, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.aiMesh, ptr %106, i32 0, i32 10
  %108 = load ptr, ptr %107, align 8, !tbaa !23
  %109 = load ptr, ptr %6, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.aiMesh, ptr %109, i32 0, i32 2
  %111 = load i32, ptr %110, align 8, !tbaa !24
  %112 = load ptr, ptr %6, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.aiMesh, ptr %112, i32 0, i32 1
  %114 = load i32, ptr %113, align 4, !tbaa !18
  call void @_ZN6Assimp23VertexTriangleAdjacencyC1EP6aiFacejjb(ptr noundef nonnull align 8 dereferenceable(28) %10, ptr noundef %108, i32 noundef %111, i32 noundef %114, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #8
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #8
  %115 = load ptr, ptr %6, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.aiMesh, ptr %115, i32 0, i32 1
  %117 = load i32, ptr %116, align 4, !tbaa !18
  %118 = zext i32 %117 to i64
  invoke void @_ZNSt6vectorIjSaIjEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %118)
          to label %119 unwind label %172

119:                                              ; preds = %105
  %120 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef 0) #8
  %121 = load ptr, ptr %6, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.aiMesh, ptr %121, i32 0, i32 1
  %123 = load i32, ptr %122, align 4, !tbaa !18
  %124 = zext i32 %123 to i64
  %125 = mul i64 %124, 4
  call void @llvm.memset.p0.i64(ptr align 4 %120, i8 0, i64 %125, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #8
  %126 = load ptr, ptr %6, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.aiMesh, ptr %126, i32 0, i32 2
  %128 = load i32, ptr %127, align 8, !tbaa !24
  %129 = mul i32 %128, 3
  store i32 %129, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #8
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  %130 = load i32, ptr %14, align 4, !tbaa !9
  %131 = zext i32 %130 to i64
  invoke void @_ZNSt6vectorIjSaIjEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %15, i64 noundef %131)
          to label %132 unwind label %176

132:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %133 = call ptr @_ZNSt6vectorIjSaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  %134 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %16, i32 0, i32 0
  store ptr %133, ptr %134, align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr %17) #8
  %135 = load ptr, ptr %6, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.aiMesh, ptr %135, i32 0, i32 2
  %137 = load i32, ptr %136, align 8, !tbaa !24
  %138 = zext i32 %137 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #8
  store i8 0, ptr %18, align 1, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #8
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #8
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %17, i64 noundef %138, ptr noundef nonnull align 1 dereferenceable(1) %18, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %139 unwind label %180

139:                                              ; preds = %132
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %20) #8
  invoke void @_ZNSt5stackIjSt6vectorIjSaIjEEEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(24) %20)
          to label %140 unwind label %184

140:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %141 = getelementptr inbounds %"class.Assimp::VertexTriangleAdjacency", ptr %10, i32 0, i32 2
  %142 = load ptr, ptr %141, align 8, !tbaa !27
  store ptr %142, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #8
  %143 = load ptr, ptr %21, align 8, !tbaa !5
  %144 = load ptr, ptr %21, align 8, !tbaa !5
  %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 !18
  %148 = zext i32 %147 to i64
  %149 = getelementptr inbounds i32, ptr %144, i64 %148
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #8
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #8
  invoke void @_ZNSt6vectorIjSaIjEEC2IPjvEET_S4_RKS0_(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef %143, ptr noundef %149, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %150 unwind label %188

150:                                              ; preds = %140
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  store i32 0, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %151 = getelementptr inbounds %"class.Assimp::VertexTriangleAdjacency", ptr %10, i32 0, i32 2
  %152 = load ptr, ptr %151, align 8, !tbaa !27
  store ptr %152, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %153 = getelementptr inbounds %"class.Assimp::VertexTriangleAdjacency", ptr %10, i32 0, i32 2
  %154 = load ptr, ptr %153, align 8, !tbaa !27
  %155 = load ptr, ptr %6, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.aiMesh, ptr %155, i32 0, i32 1
  %157 = load i32, ptr %156, align 4, !tbaa !18
  %158 = zext i32 %157 to i64
  %159 = getelementptr inbounds i32, ptr %154, i64 %158
  store ptr %159, ptr %26, align 8, !tbaa !5
  br label %160

160:                                              ; preds = %169, %150
  %161 = load ptr, ptr %25, align 8, !tbaa !5
  %162 = load ptr, ptr %26, align 8, !tbaa !5
  %163 = icmp ne ptr %161, %162
  br i1 %163, label %164, label %196

164:                                              ; preds = %160
  %165 = load ptr, ptr %25, align 8, !tbaa !5
  %166 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIjERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %24, ptr noundef nonnull align 4 dereferenceable(4) %165)
          to label %167 unwind label %192

167:                                              ; preds = %164
  %168 = load i32, ptr %166, align 4, !tbaa !9
  store i32 %168, ptr %24, align 4, !tbaa !9
  br label %169

169:                                              ; preds = %167
  %170 = load ptr, ptr %25, align 8, !tbaa !5
  %171 = getelementptr inbounds i32, ptr %170, i32 1
  store ptr %171, ptr %25, align 8, !tbaa !5
  br label %160, !llvm.loop !29

172:                                              ; preds = %105
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %12, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %13, align 4
  br label %557

176:                                              ; preds = %119
  %177 = landingpad { ptr, i32 }
          cleanup
  %178 = extractvalue { ptr, i32 } %177, 0
  store ptr %178, ptr %12, align 8
  %179 = extractvalue { ptr, i32 } %177, 1
  store i32 %179, ptr %13, align 4
  br label %556

180:                                              ; preds = %132
  %181 = landingpad { ptr, i32 }
          cleanup
  %182 = extractvalue { ptr, i32 } %181, 0
  store ptr %182, ptr %12, align 8
  %183 = extractvalue { ptr, i32 } %181, 1
  store i32 %183, ptr %13, align 4
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #8
  br label %555

184:                                              ; preds = %139
  %185 = landingpad { ptr, i32 }
          cleanup
  %186 = extractvalue { ptr, i32 } %185, 0
  store ptr %186, ptr %12, align 8
  %187 = extractvalue { ptr, i32 } %185, 1
  store i32 %187, ptr %13, align 4
  br label %554

188:                                              ; preds = %140
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %12, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %13, align 4
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #8
  br label %553

192:                                              ; preds = %164
  %193 = landingpad { ptr, i32 }
          cleanup
  %194 = extractvalue { ptr, i32 } %193, 0
  store ptr %194, ptr %12, align 8
  %195 = extractvalue { ptr, i32 } %193, 1
  store i32 %195, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  br label %552

196:                                              ; preds = %160
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  %197 = load i32, ptr %24, align 4, !tbaa !9
  %198 = icmp ugt i32 %197, 0
  br i1 %198, label %201, label %199

199:                                              ; preds = %196
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.10, ptr noundef @.str.8, i32 noundef 220)
          to label %200 unwind label %228

200:                                              ; preds = %199
  br label %201

201:                                              ; preds = %200, %196
  %202 = phi i1 [ true, %196 ], [ false, %200 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #8
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #8
  %203 = load i32, ptr %24, align 4, !tbaa !9
  %204 = mul i32 %203, 3
  %205 = zext i32 %204 to i64
  invoke void @_ZNSt6vectorIjSaIjEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %205)
          to label %206 unwind label %232

206:                                              ; preds = %201
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  store i32 0, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  store i32 0, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  store i32 1, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  %207 = getelementptr inbounds %"class.Assimp::ImproveCacheLocalityProcess", ptr %61, i32 0, i32 1
  %208 = load i32, ptr %207, align 8, !tbaa !19
  %209 = add i32 %208, 1
  store i32 %209, ptr %31, align 4, !tbaa !9
  br label %210

210:                                              ; preds = %452, %206
  %211 = load i32, ptr %29, align 4, !tbaa !9
  %212 = icmp sge i32 %211, 0
  br i1 %212, label %213, label %456

213:                                              ; preds = %210
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  %214 = load i32, ptr %29, align 4, !tbaa !9
  %215 = sext i32 %214 to i64
  %216 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %215) #8
  %217 = load i32, ptr %216, align 4, !tbaa !9
  store i32 %217, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  %218 = load i32, ptr %29, align 4, !tbaa !9
  %219 = invoke noundef ptr @_ZNK6Assimp23VertexTriangleAdjacency20GetAdjacentTrianglesEj(ptr noundef nonnull align 8 dereferenceable(28) %10, i32 noundef %218)
          to label %220 unwind label %236

220:                                              ; preds = %213
  store ptr %219, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  %221 = call ptr @_ZNSt6vectorIjSaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %27) #8
  %222 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %34, i32 0, i32 0
  store ptr %221, ptr %222, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  store i32 0, ptr %35, align 4, !tbaa !9
  br label %223

223:                                              ; preds = %342, %220
  %224 = load i32, ptr %35, align 4, !tbaa !9
  %225 = load i32, ptr %32, align 4, !tbaa !9
  %226 = icmp ult i32 %224, %225
  br i1 %226, label %240, label %227

227:                                              ; preds = %223
  store i32 7, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  br label %346

228:                                              ; preds = %199
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %12, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %13, align 4
  br label %552

232:                                              ; preds = %201
  %233 = landingpad { ptr, i32 }
          cleanup
  %234 = extractvalue { ptr, i32 } %233, 0
  store ptr %234, ptr %12, align 8
  %235 = extractvalue { ptr, i32 } %233, 1
  store i32 %235, ptr %13, align 4
  br label %551

236:                                              ; preds = %213
  %237 = landingpad { ptr, i32 }
          cleanup
  %238 = extractvalue { ptr, i32 } %237, 0
  store ptr %238, ptr %12, align 8
  %239 = extractvalue { ptr, i32 } %237, 1
  store i32 %239, ptr %13, align 4
  br label %455

240:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  %241 = load ptr, ptr %33, align 8, !tbaa !5
  %242 = getelementptr inbounds i32, ptr %241, i32 1
  store ptr %242, ptr %33, align 8, !tbaa !5
  %243 = load i32, ptr %241, align 4, !tbaa !9
  store i32 %243, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #8
  %244 = load i32, ptr %37, align 4, !tbaa !9
  %245 = zext i32 %244 to i64
  %246 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %17, i64 noundef %245)
          to label %247 unwind label %269

247:                                              ; preds = %240
  %248 = getelementptr inbounds { ptr, i64 }, ptr %38, i32 0, i32 0
  %249 = extractvalue { ptr, i64 } %246, 0
  store ptr %249, ptr %248, align 8
  %250 = getelementptr inbounds { ptr, i64 }, ptr %38, i32 0, i32 1
  %251 = extractvalue { ptr, i64 } %246, 1
  store i64 %251, ptr %250, align 8
  %252 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %38) #8
  %253 = xor i1 %252, true
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #8
  br i1 %253, label %254, label %341

254:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  %255 = load ptr, ptr %6, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.aiMesh, ptr %255, i32 0, i32 10
  %257 = load ptr, ptr %256, align 8, !tbaa !23
  %258 = load i32, ptr %37, align 4, !tbaa !9
  %259 = zext i32 %258 to i64
  %260 = getelementptr inbounds %struct.aiFace, ptr %257, i64 %259
  store ptr %260, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  %261 = load ptr, ptr %39, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.aiFace, ptr %261, i32 0, i32 0
  %263 = load i32, ptr %262, align 8, !tbaa !31
  store i32 %263, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %264

264:                                              ; preds = %323, %254
  %265 = load i32, ptr %41, align 4, !tbaa !9
  %266 = load i32, ptr %40, align 4, !tbaa !9
  %267 = icmp ult i32 %265, %266
  br i1 %267, label %273, label %268

268:                                              ; preds = %264
  store i32 10, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  br label %326

269:                                              ; preds = %240
  %270 = landingpad { ptr, i32 }
          cleanup
  %271 = extractvalue { ptr, i32 } %270, 0
  store ptr %271, ptr %12, align 8
  %272 = extractvalue { ptr, i32 } %270, 1
  store i32 %272, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #8
  br label %345

273:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  %274 = load ptr, ptr %39, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.aiFace, ptr %274, i32 0, i32 1
  %276 = load ptr, ptr %275, align 8, !tbaa !33
  %277 = load i32, ptr %41, align 4, !tbaa !9
  %278 = zext i32 %277 to i64
  %279 = getelementptr inbounds i32, ptr %276, i64 %278
  %280 = load i32, ptr %279, align 4, !tbaa !9
  store i32 %280, ptr %42, align 4, !tbaa !9
  %281 = load i32, ptr %29, align 4, !tbaa !9
  %282 = load i32, ptr %42, align 4, !tbaa !9
  %283 = icmp ne i32 %281, %282
  br i1 %283, label %284, label %300

284:                                              ; preds = %273
  invoke void @_ZNSt5stackIjSt6vectorIjSaIjEEE4pushERKj(ptr noundef nonnull align 8 dereferenceable(24) %20, ptr noundef nonnull align 4 dereferenceable(4) %42)
          to label %285 unwind label %296

285:                                              ; preds = %284
  %286 = load i32, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  %287 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %34, i32 noundef 0) #8
  %288 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %43, i32 0, i32 0
  store ptr %287, ptr %288, align 8
  %289 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #8
  store i32 %286, ptr %289, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  %290 = load ptr, ptr %21, align 8, !tbaa !5
  %291 = load i32, ptr %42, align 4, !tbaa !9
  %292 = zext i32 %291 to i64
  %293 = getelementptr inbounds i32, ptr %290, i64 %292
  %294 = load i32, ptr %293, align 4, !tbaa !9
  %295 = add i32 %294, -1
  store i32 %295, ptr %293, align 4, !tbaa !9
  br label %300

296:                                              ; preds = %284
  %297 = landingpad { ptr, i32 }
          cleanup
  %298 = extractvalue { ptr, i32 } %297, 0
  store ptr %298, ptr %12, align 8
  %299 = extractvalue { ptr, i32 } %297, 1
  store i32 %299, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  br label %340

300:                                              ; preds = %285, %273
  %301 = load i32, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #8
  %302 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %16, i32 noundef 0) #8
  %303 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %44, i32 0, i32 0
  store ptr %302, ptr %303, align 8
  %304 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %44) #8
  store i32 %301, ptr %304, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  %305 = load i32, ptr %31, align 4, !tbaa !9
  %306 = load i32, ptr %42, align 4, !tbaa !9
  %307 = zext i32 %306 to i64
  %308 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %307) #8
  %309 = load i32, ptr %308, align 4, !tbaa !9
  %310 = sub i32 %305, %309
  %311 = getelementptr inbounds %"class.Assimp::ImproveCacheLocalityProcess", ptr %61, i32 0, i32 1
  %312 = load i32, ptr %311, align 8, !tbaa !19
  %313 = icmp ugt i32 %310, %312
  br i1 %313, label %314, label %322

314:                                              ; preds = %300
  %315 = load i32, ptr %31, align 4, !tbaa !9
  %316 = add nsw i32 %315, 1
  store i32 %316, ptr %31, align 4, !tbaa !9
  %317 = load i32, ptr %42, align 4, !tbaa !9
  %318 = zext i32 %317 to i64
  %319 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %318) #8
  store i32 %315, ptr %319, align 4, !tbaa !9
  %320 = load i32, ptr %28, align 4, !tbaa !9
  %321 = add i32 %320, 1
  store i32 %321, ptr %28, align 4, !tbaa !9
  br label %322

322:                                              ; preds = %314, %300
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  br label %323

323:                                              ; preds = %322
  %324 = load i32, ptr %41, align 4, !tbaa !9
  %325 = add i32 %324, 1
  store i32 %325, ptr %41, align 4, !tbaa !9
  br label %264, !llvm.loop !34

326:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #8
  %327 = load i32, ptr %37, align 4, !tbaa !9
  %328 = zext i32 %327 to i64
  %329 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %17, i64 noundef %328)
          to label %330 unwind label %336

330:                                              ; preds = %326
  %331 = getelementptr inbounds { ptr, i64 }, ptr %45, i32 0, i32 0
  %332 = extractvalue { ptr, i64 } %329, 0
  store ptr %332, ptr %331, align 8
  %333 = getelementptr inbounds { ptr, i64 }, ptr %45, i32 0, i32 1
  %334 = extractvalue { ptr, i64 } %329, 1
  store i64 %334, ptr %333, align 8
  %335 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %45, i1 noundef zeroext true) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %341

336:                                              ; preds = %326
  %337 = landingpad { ptr, i32 }
          cleanup
  %338 = extractvalue { ptr, i32 } %337, 0
  store ptr %338, ptr %12, align 8
  %339 = extractvalue { ptr, i32 } %337, 1
  store i32 %339, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #8
  br label %340

340:                                              ; preds = %336, %296
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %345

341:                                              ; preds = %330, %247
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  br label %342

342:                                              ; preds = %341
  %343 = load i32, ptr %35, align 4, !tbaa !9
  %344 = add i32 %343, 1
  store i32 %344, ptr %35, align 4, !tbaa !9
  br label %223, !llvm.loop !35

345:                                              ; preds = %340, %269
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  br label %454

346:                                              ; preds = %227
  %347 = load ptr, ptr %21, align 8, !tbaa !5
  %348 = load i32, ptr %29, align 4, !tbaa !9
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds i32, ptr %347, i64 %349
  store i32 0, ptr %350, align 4, !tbaa !9
  store i32 -1, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #8
  store i32 -1, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #8
  %351 = call ptr @_ZNSt6vectorIjSaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %27) #8
  %352 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %47, i32 0, i32 0
  store ptr %351, ptr %352, align 8
  br label %353

353:                                              ; preds = %393, %346
  %354 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPjSt6vectorIjSaIjEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %47, ptr noundef nonnull align 8 dereferenceable(8) %34) #8
  br i1 %354, label %356, label %355

355:                                              ; preds = %353
  store i32 13, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  br label %395

356:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #8
  %357 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %47) #8
  %358 = load i32, ptr %357, align 4, !tbaa !9
  store i32 %358, ptr %48, align 4, !tbaa !9
  %359 = load ptr, ptr %21, align 8, !tbaa !5
  %360 = load i32, ptr %48, align 4, !tbaa !9
  %361 = zext i32 %360 to i64
  %362 = getelementptr inbounds i32, ptr %359, i64 %361
  %363 = load i32, ptr %362, align 4, !tbaa !9
  %364 = icmp ugt i32 %363, 0
  br i1 %364, label %365, label %392

365:                                              ; preds = %356
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #8
  store i32 0, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #8
  %366 = load i32, ptr %31, align 4, !tbaa !9
  %367 = load i32, ptr %48, align 4, !tbaa !9
  %368 = zext i32 %367 to i64
  %369 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %368) #8
  %370 = load i32, ptr %369, align 4, !tbaa !9
  %371 = sub i32 %366, %370
  store i32 %371, ptr %50, align 4, !tbaa !9
  %372 = load ptr, ptr %21, align 8, !tbaa !5
  %373 = load i32, ptr %48, align 4, !tbaa !9
  %374 = zext i32 %373 to i64
  %375 = getelementptr inbounds i32, ptr %372, i64 %374
  %376 = load i32, ptr %375, align 4, !tbaa !9
  %377 = mul i32 2, %376
  %378 = add i32 %371, %377
  %379 = getelementptr inbounds %"class.Assimp::ImproveCacheLocalityProcess", ptr %61, i32 0, i32 1
  %380 = load i32, ptr %379, align 8, !tbaa !19
  %381 = icmp ule i32 %378, %380
  br i1 %381, label %382, label %384

382:                                              ; preds = %365
  %383 = load i32, ptr %50, align 4, !tbaa !9
  store i32 %383, ptr %49, align 4, !tbaa !9
  br label %384

384:                                              ; preds = %382, %365
  %385 = load i32, ptr %49, align 4, !tbaa !9
  %386 = load i32, ptr %46, align 4, !tbaa !9
  %387 = icmp sgt i32 %385, %386
  br i1 %387, label %388, label %391

388:                                              ; preds = %384
  %389 = load i32, ptr %49, align 4, !tbaa !9
  store i32 %389, ptr %46, align 4, !tbaa !9
  %390 = load i32, ptr %48, align 4, !tbaa !9
  store i32 %390, ptr %29, align 4, !tbaa !9
  br label %391

391:                                              ; preds = %388, %384
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  br label %392

392:                                              ; preds = %391, %356
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  br label %393

393:                                              ; preds = %392
  %394 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %47) #8
  br label %353, !llvm.loop !36

395:                                              ; preds = %355
  %396 = load i32, ptr %29, align 4, !tbaa !9
  %397 = icmp eq i32 -1, %396
  br i1 %397, label %398, label %452

398:                                              ; preds = %395
  br label %399

399:                                              ; preds = %427, %398
  %400 = invoke noundef zeroext i1 @_ZNKSt5stackIjSt6vectorIjSaIjEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %20)
          to label %401 unwind label %416

401:                                              ; preds = %399
  %402 = xor i1 %400, true
  br i1 %402, label %403, label %428

403:                                              ; preds = %401
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  %404 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5stackIjSt6vectorIjSaIjEEE3topEv(ptr noundef nonnull align 8 dereferenceable(24) %20)
          to label %405 unwind label %420

405:                                              ; preds = %403
  %406 = load i32, ptr %404, align 4, !tbaa !9
  store i32 %406, ptr %51, align 4, !tbaa !9
  invoke void @_ZNSt5stackIjSt6vectorIjSaIjEEE3popEv(ptr noundef nonnull align 8 dereferenceable(24) %20)
          to label %407 unwind label %420

407:                                              ; preds = %405
  %408 = load ptr, ptr %21, align 8, !tbaa !5
  %409 = load i32, ptr %51, align 4, !tbaa !9
  %410 = zext i32 %409 to i64
  %411 = getelementptr inbounds i32, ptr %408, i64 %410
  %412 = load i32, ptr %411, align 4, !tbaa !9
  %413 = icmp ugt i32 %412, 0
  br i1 %413, label %414, label %424

414:                                              ; preds = %407
  %415 = load i32, ptr %51, align 4, !tbaa !9
  store i32 %415, ptr %29, align 4, !tbaa !9
  store i32 17, ptr %36, align 4
  br label %425

416:                                              ; preds = %399
  %417 = landingpad { ptr, i32 }
          cleanup
  %418 = extractvalue { ptr, i32 } %417, 0
  store ptr %418, ptr %12, align 8
  %419 = extractvalue { ptr, i32 } %417, 1
  store i32 %419, ptr %13, align 4
  br label %453

420:                                              ; preds = %405, %403
  %421 = landingpad { ptr, i32 }
          cleanup
  %422 = extractvalue { ptr, i32 } %421, 0
  store ptr %422, ptr %12, align 8
  %423 = extractvalue { ptr, i32 } %421, 1
  store i32 %423, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  br label %453

424:                                              ; preds = %407
  store i32 0, ptr %36, align 4
  br label %425

425:                                              ; preds = %424, %414
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  %426 = load i32, ptr %36, align 4
  switch i32 %426, label %565 [
    i32 0, label %427
    i32 17, label %428
  ]

427:                                              ; preds = %425
  br label %399, !llvm.loop !37

428:                                              ; preds = %425, %401
  %429 = load i32, ptr %29, align 4, !tbaa !9
  %430 = icmp eq i32 -1, %429
  br i1 %430, label %431, label %451

431:                                              ; preds = %428
  br label %432

432:                                              ; preds = %449, %431
  %433 = load i32, ptr %30, align 4, !tbaa !9
  %434 = load ptr, ptr %6, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.aiMesh, ptr %434, i32 0, i32 1
  %436 = load i32, ptr %435, align 4, !tbaa !18
  %437 = icmp slt i32 %433, %436
  br i1 %437, label %438, label %450

438:                                              ; preds = %432
  %439 = load i32, ptr %30, align 4, !tbaa !9
  %440 = add nsw i32 %439, 1
  store i32 %440, ptr %30, align 4, !tbaa !9
  %441 = load ptr, ptr %21, align 8, !tbaa !5
  %442 = load i32, ptr %30, align 4, !tbaa !9
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds i32, ptr %441, i64 %443
  %445 = load i32, ptr %444, align 4, !tbaa !9
  %446 = icmp ugt i32 %445, 0
  br i1 %446, label %447, label %449

447:                                              ; preds = %438
  %448 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %448, ptr %29, align 4, !tbaa !9
  br label %450

449:                                              ; preds = %438
  br label %432, !llvm.loop !38

450:                                              ; preds = %447, %432
  br label %451

451:                                              ; preds = %450, %428
  br label %452

452:                                              ; preds = %451, %395
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  br label %210, !llvm.loop !39

453:                                              ; preds = %420, %416
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  br label %454

454:                                              ; preds = %453, %345
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  br label %455

455:                                              ; preds = %454, %236
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  br label %550

456:                                              ; preds = %210
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  store float 0.000000e+00, ptr %52, align 4, !tbaa !22
  %457 = invoke noundef zeroext i1 @_ZN6Assimp13DefaultLogger12isNullLoggerEv()
          to label %458 unwind label %481

458:                                              ; preds = %456
  br i1 %457, label %496, label %459

459:                                              ; preds = %458
  %460 = load i32, ptr %28, align 4, !tbaa !9
  %461 = load ptr, ptr %6, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.aiMesh, ptr %461, i32 0, i32 2
  %463 = load i32, ptr %462, align 8, !tbaa !24
  %464 = udiv i32 %460, %463
  %465 = uitofp i32 %464 to float
  store float %465, ptr %52, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #8
  %466 = load float, ptr %8, align 4, !tbaa !22
  %467 = load float, ptr %52, align 4, !tbaa !22
  %468 = fsub float %466, %467
  %469 = load float, ptr %8, align 4, !tbaa !22
  %470 = fdiv float %468, %469
  %471 = fmul float %470, 1.000000e+02
  store float %471, ptr %53, align 4, !tbaa !22
  %472 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %473 unwind label %485

473:                                              ; preds = %459
  %474 = invoke noundef i32 @_ZNK6Assimp6Logger14getLogSeverityEv(ptr noundef nonnull align 8 dereferenceable(12) %472)
          to label %475 unwind label %485

475:                                              ; preds = %473
  %476 = icmp eq i32 %474, 2
  br i1 %476, label %477, label %489

477:                                              ; preds = %475
  %478 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %479 unwind label %485

479:                                              ; preds = %477
  invoke void @_ZN6Assimp6Logger12verboseDebugIJRA6_KcRjRA12_S2_RfRA7_S2_S8_RA17_S2_RKfEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12) %478, ptr noundef nonnull align 1 dereferenceable(6) @.str.11, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 1 dereferenceable(12) @.str.12, ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 1 dereferenceable(7) @.str.13, ptr noundef nonnull align 4 dereferenceable(4) %52, ptr noundef nonnull align 1 dereferenceable(17) @.str.14, ptr noundef nonnull align 4 dereferenceable(4) %53)
          to label %480 unwind label %485

480:                                              ; preds = %479
  br label %489

481:                                              ; preds = %456
  %482 = landingpad { ptr, i32 }
          cleanup
  %483 = extractvalue { ptr, i32 } %482, 0
  store ptr %483, ptr %12, align 8
  %484 = extractvalue { ptr, i32 } %482, 1
  store i32 %484, ptr %13, align 4
  br label %549

485:                                              ; preds = %479, %477, %473, %459
  %486 = landingpad { ptr, i32 }
          cleanup
  %487 = extractvalue { ptr, i32 } %486, 0
  store ptr %487, ptr %12, align 8
  %488 = extractvalue { ptr, i32 } %486, 1
  store i32 %488, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  br label %549

489:                                              ; preds = %480, %475
  %490 = load ptr, ptr %6, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.aiMesh, ptr %490, i32 0, i32 2
  %492 = load i32, ptr %491, align 8, !tbaa !24
  %493 = uitofp i32 %492 to float
  %494 = load float, ptr %52, align 4, !tbaa !22
  %495 = fmul float %494, %493
  store float %495, ptr %52, align 4, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  br label %496

496:                                              ; preds = %489, %458
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #8
  %497 = call ptr @_ZNSt6vectorIjSaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  %498 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %54, i32 0, i32 0
  store ptr %497, ptr %498, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %16, ptr align 8 %54, i64 8, i1 false), !tbaa.struct !40
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #8
  %499 = load ptr, ptr %6, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.aiMesh, ptr %499, i32 0, i32 10
  %501 = load ptr, ptr %500, align 8, !tbaa !23
  store ptr %501, ptr %55, align 8, !tbaa !5
  br label %502

502:                                              ; preds = %544, %496
  %503 = load ptr, ptr %55, align 8, !tbaa !5
  %504 = load ptr, ptr %9, align 8, !tbaa !5
  %505 = icmp ne ptr %503, %504
  br i1 %505, label %507, label %506

506:                                              ; preds = %502
  store i32 20, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  br label %547

507:                                              ; preds = %502
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #8
  %508 = load ptr, ptr %55, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.aiFace, ptr %508, i32 0, i32 0
  %510 = load i32, ptr %509, align 8, !tbaa !31
  store i32 %510, ptr %56, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #8
  %511 = load ptr, ptr %55, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.aiFace, ptr %511, i32 0, i32 1
  %513 = load ptr, ptr %512, align 8, !tbaa !33
  store ptr %513, ptr %57, align 8, !tbaa !5
  %514 = load i32, ptr %56, align 4, !tbaa !9
  %515 = icmp ugt i32 %514, 0
  br i1 %515, label %516, label %523

516:                                              ; preds = %507
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #8
  %517 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %16, i32 noundef 0) #8
  %518 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %58, i32 0, i32 0
  store ptr %517, ptr %518, align 8
  %519 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %58) #8
  %520 = load i32, ptr %519, align 4, !tbaa !9
  %521 = load ptr, ptr %57, align 8, !tbaa !5
  %522 = getelementptr inbounds i32, ptr %521, i64 0
  store i32 %520, ptr %522, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  br label %523

523:                                              ; preds = %516, %507
  %524 = load i32, ptr %56, align 4, !tbaa !9
  %525 = icmp ugt i32 %524, 1
  br i1 %525, label %526, label %533

526:                                              ; preds = %523
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #8
  %527 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %16, i32 noundef 0) #8
  %528 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %59, i32 0, i32 0
  store ptr %527, ptr %528, align 8
  %529 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %59) #8
  %530 = load i32, ptr %529, align 4, !tbaa !9
  %531 = load ptr, ptr %57, align 8, !tbaa !5
  %532 = getelementptr inbounds i32, ptr %531, i64 1
  store i32 %530, ptr %532, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  br label %533

533:                                              ; preds = %526, %523
  %534 = load i32, ptr %56, align 4, !tbaa !9
  %535 = icmp ugt i32 %534, 2
  br i1 %535, label %536, label %543

536:                                              ; preds = %533
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #8
  %537 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %16, i32 noundef 0) #8
  %538 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %60, i32 0, i32 0
  store ptr %537, ptr %538, align 8
  %539 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %60) #8
  %540 = load i32, ptr %539, align 4, !tbaa !9
  %541 = load ptr, ptr %57, align 8, !tbaa !5
  %542 = getelementptr inbounds i32, ptr %541, i64 2
  store i32 %540, ptr %542, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #8
  br label %543

543:                                              ; preds = %536, %533
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #8
  br label %544

544:                                              ; preds = %543
  %545 = load ptr, ptr %55, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.aiFace, ptr %545, i32 1
  store ptr %546, ptr %55, align 8, !tbaa !5
  br label %502, !llvm.loop !41

547:                                              ; preds = %506
  %548 = load float, ptr %52, align 4, !tbaa !22
  store float %548, ptr %4, align 4
  store i32 1, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @_ZNSt5stackIjSt6vectorIjSaIjEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #8
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %17) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #8
  call void @_ZN6Assimp23VertexTriangleAdjacencyD1Ev(ptr noundef nonnull align 8 dereferenceable(28) %10) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  br label %558

549:                                              ; preds = %485, %481
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %550

550:                                              ; preds = %549, %455
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  br label %551

551:                                              ; preds = %550, %232
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #8
  br label %552

552:                                              ; preds = %551, %228, %192
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #8
  br label %553

553:                                              ; preds = %552, %188
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @_ZNSt5stackIjSt6vectorIjSaIjEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #8
  br label %554

554:                                              ; preds = %553, %184
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #8
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %17) #8
  br label %555

555:                                              ; preds = %554, %180
  call void @llvm.lifetime.end.p0(i64 40, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  br label %556

556:                                              ; preds = %555, %176
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  br label %557

557:                                              ; preds = %556, %172
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #8
  call void @_ZN6Assimp23VertexTriangleAdjacencyD1Ev(ptr noundef nonnull align 8 dereferenceable(28) %10) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  br label %560

558:                                              ; preds = %547, %87, %78, %72
  %559 = load float, ptr %4, align 4
  ret float %559

560:                                              ; preds = %557
  %561 = load ptr, ptr %12, align 8
  %562 = load i32, ptr %13, align 4
  %563 = insertvalue { ptr, i32 } poison, ptr %561, 0
  %564 = insertvalue { ptr, i32 } %563, i32 %562, 1
  resume { ptr, i32 } %564

565:                                              ; preds = %425
  unreachable
}

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

declare noundef zeroext i1 @_ZN6Assimp13DefaultLogger12isNullLoggerEv() #0

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

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

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

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

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

declare void @_ZN6Assimp23VertexTriangleAdjacencyC1EP6aiFacejjb(ptr noundef nonnull align 8 dereferenceable(28), ptr noundef, i32 noundef, i32 noundef, i1 noundef zeroext) unnamed_addr #0

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

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK6Assimp23VertexTriangleAdjacency20GetAdjacentTrianglesEj(ptr noundef nonnull align 8 dereferenceable(28), i32 noundef) #2 align 2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6Assimp6Logger14getLogSeverityEv(ptr noundef nonnull align 8 dereferenceable(12)) #5 align 2

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

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

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

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

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

; Function Attrs: nounwind
declare void @_ZN6Assimp23VertexTriangleAdjacencyD1Ev(ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #7

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!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 4}
!19 = !{!20, !10, i64 24}
!20 = !{!"_ZTSN6Assimp27ImproveCacheLocalityProcessE", !21, i64 0, !10, i64 24}
!21 = !{!"_ZTSN6Assimp11BaseProcessE", !6, i64 8, !6, i64 16}
!22 = !{!17, !17, i64 0}
!23 = !{!12, !6, i64 208}
!24 = !{!12, !10, i64 8}
!25 = !{!26, !26, i64 0}
!26 = !{!"bool", !7, i64 0}
!27 = !{!28, !6, i64 16}
!28 = !{!"_ZTSN6Assimp23VertexTriangleAdjacencyE", !6, i64 0, !6, i64 8, !6, i64 16, !10, i64 24}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!32, !10, i64 0}
!32 = !{!"_ZTS6aiFace", !10, i64 0, !6, i64 8}
!33 = !{!32, !6, i64 8}
!34 = distinct !{!34, !30}
!35 = distinct !{!35, !30}
!36 = distinct !{!36, !30}
!37 = distinct !{!37, !30}
!38 = distinct !{!38, !30}
!39 = distinct !{!39, !30}
!40 = !{i64 0, i64 8, !5}
!41 = distinct !{!41, !30}


; 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.Assimp::VertexTriangleAdjacency" = type <{ ptr, ptr, ptr, i32, [4 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::vector.0" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"class.std::allocator.4" = type { i8 }
%"class.std::stack" = type { %"class.std::vector" }
%"class.std::allocator" = type { i8 }
%"struct.std::_Bit_reference" = type { ptr, i64 }
%struct.aiFace = type { i32, ptr }

@.str.7 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [129 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [17 x i8], align 1

declare noundef ptr @_ZN6Assimp13DefaultLogger3getEv() local_unnamed_addr #0

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

; Function Attrs: mustprogress uwtable
define dso_local noundef float @_ZN6Assimp27ImproveCacheLocalityProcess11ProcessMeshEP6aiMeshj(ptr nocapture noundef nonnull readonly align 8 dereferenceable(28) %0, ptr noundef %1, i32 noundef %2) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i32, align 4
  %5 = alloca float, align 4
  %6 = alloca %"class.Assimp::VertexTriangleAdjacency", align 8
  %7 = alloca %"class.std::vector", align 8
  %8 = alloca %"class.std::vector", align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %10 = alloca %"class.std::vector.0", align 8
  %11 = alloca i8, align 1
  %12 = alloca %"class.std::allocator.4", align 1
  %13 = alloca %"class.std::stack", align 8
  %14 = alloca %"class.std::vector", align 8
  %15 = alloca %"class.std::allocator", align 1
  %16 = alloca i32, align 4
  %17 = alloca %"class.std::vector", align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %19 = alloca %"struct.std::_Bit_reference", align 8
  %20 = alloca i32, align 4
  %21 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %22 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %23 = alloca %"struct.std::_Bit_reference", align 8
  %24 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %25 = alloca float, align 4
  %26 = alloca float, align 4
  %27 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %28 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %29 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  store i32 %2, ptr %4, align 4, !tbaa !5
  %.not = icmp eq ptr %1, null
  br i1 %.not, label %30, label %31

30:                                               ; preds = %3
  tail call void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.8, i32 noundef 159)
  br label %31

31:                                               ; preds = %30, %3
  %32 = tail call noundef zeroext i1 @_ZNK6aiMesh8HasFacesEv(ptr noundef nonnull align 8 dereferenceable(1320) %1)
  br i1 %32, label %33, label %271

33:                                               ; preds = %31
  %34 = tail call noundef zeroext i1 @_ZNK6aiMesh12HasPositionsEv(ptr noundef nonnull align 8 dereferenceable(1320) %1)
  br i1 %34, label %35, label %271

35:                                               ; preds = %33
  %36 = load i32, ptr %1, align 8, !tbaa !9
  %.not133 = icmp eq i32 %36, 4
  br i1 %.not133, label %39, label %37

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

39:                                               ; preds = %35
  %40 = getelementptr inbounds i8, ptr %1, i64 4
  %41 = load i32, ptr %40, align 4, !tbaa !17
  %42 = getelementptr inbounds i8, ptr %0, i64 24
  %43 = load i32, ptr %42, align 8, !tbaa !18
  %.not134 = icmp ugt i32 %41, %43
  br i1 %.not134, label %44, label %271

44:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #8
  store float 3.000000e+00, ptr %5, align 4, !tbaa !21
  %45 = getelementptr inbounds i8, ptr %1, i64 208
  %46 = load ptr, ptr %45, align 8, !tbaa !22
  %47 = getelementptr inbounds i8, ptr %1, i64 8
  %48 = load i32, ptr %47, align 8, !tbaa !23
  %49 = zext i32 %48 to i64
  %50 = getelementptr inbounds %struct.aiFace, ptr %46, i64 %49
  %51 = tail call noundef zeroext i1 @_ZN6Assimp13DefaultLogger12isNullLoggerEv()
  br i1 %51, label %55, label %52

52:                                               ; preds = %44
  %53 = load i32, ptr %42, align 8, !tbaa !18
  %54 = tail call noundef float @_ZN6AssimpL18calculateInputACMREP6aiMeshPK6aiFacejj(ptr noundef nonnull %1, ptr noundef %50, i32 noundef %53, i32 noundef %2)
  store float %54, ptr %5, align 4, !tbaa !21
  br label %55

55:                                               ; preds = %52, %44
  %56 = phi float [ %54, %52 ], [ 3.000000e+00, %44 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #8
  %57 = load ptr, ptr %45, align 8, !tbaa !22
  %58 = load i32, ptr %47, align 8, !tbaa !23
  %59 = load i32, ptr %40, align 4, !tbaa !17
  call void @_ZN6Assimp23VertexTriangleAdjacencyC1EP6aiFacejjb(ptr noundef nonnull align 8 dereferenceable(28) %6, ptr noundef %57, i32 noundef %58, i32 noundef %59, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #8
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  %60 = load i32, ptr %40, align 4, !tbaa !17
  %61 = zext i32 %60 to i64
  invoke void @_ZNSt6vectorIjSaIjEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %61)
          to label %62 unwind label %88

62:                                               ; preds = %55
  %63 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef 0) #8
  %64 = load i32, ptr %40, align 4, !tbaa !17
  %65 = zext i32 %64 to i64
  %66 = shl nuw nsw i64 %65, 2
  call void @llvm.memset.p0.i64(ptr nonnull align 4 %63, i8 0, i64 %66, i1 false)
  %67 = load i32, ptr %47, align 8, !tbaa !23
  %68 = mul i32 %67, 3
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #8
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  %69 = zext i32 %68 to i64
  invoke void @_ZNSt6vectorIjSaIjEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %69)
          to label %70 unwind label %90

70:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  %71 = call ptr @_ZNSt6vectorIjSaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  store ptr %71, ptr %9, align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %10) #8
  %72 = load i32, ptr %47, align 8, !tbaa !23
  %73 = zext i32 %72 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #8
  store i8 0, ptr %11, align 1, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #8
  call void @_ZNSaIbEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #8
  invoke void @_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_(ptr noundef nonnull align 8 dereferenceable(40) %10, i64 noundef %73, ptr noundef nonnull align 1 dereferenceable(1) %11, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %74 unwind label %92

74:                                               ; preds = %70
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #8
  call void @_ZNSt5stackIjSt6vectorIjSaIjEEEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %75 = getelementptr inbounds i8, ptr %6, i64 16
  %76 = load ptr, ptr %75, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #8
  %77 = load i32, ptr %40, align 4, !tbaa !17
  %78 = zext i32 %77 to i64
  %79 = getelementptr inbounds i32, ptr %76, i64 %78
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #8
  call void @_ZNSaIjEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #8
  invoke void @_ZNSt6vectorIjSaIjEEC2IPjvEET_S4_RKS0_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef %76, ptr noundef %79, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %80 unwind label %94

80:                                               ; preds = %74
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #8
  store i32 0, ptr %16, align 4, !tbaa !5
  %81 = load ptr, ptr %75, align 8, !tbaa !26
  %82 = load i32, ptr %40, align 4, !tbaa !17
  %83 = zext i32 %82 to i64
  %84 = getelementptr inbounds i32, ptr %81, i64 %83
  %.not135171 = icmp eq i32 %82, 0
  br i1 %.not135171, label %._crit_edge.thread, label %.lr.ph

.lr.ph:                                           ; preds = %80, %.lr.ph
  %.0103172 = phi ptr [ %87, %.lr.ph ], [ %81, %80 ]
  %85 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIjERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %16, ptr noundef nonnull align 4 dereferenceable(4) %.0103172)
  %86 = load i32, ptr %85, align 4, !tbaa !5
  store i32 %86, ptr %16, align 4, !tbaa !5
  %87 = getelementptr inbounds i8, ptr %.0103172, i64 4
  %.not135 = icmp eq ptr %87, %84
  br i1 %.not135, label %._crit_edge, label %.lr.ph, !llvm.loop !28

88:                                               ; preds = %55
  %89 = landingpad { ptr, i32 }
          cleanup
  br label %270

90:                                               ; preds = %62
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %269

92:                                               ; preds = %70
  %93 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIbED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #8
  br label %268

94:                                               ; preds = %74
  %95 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIjED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #8
  br label %267

._crit_edge:                                      ; preds = %.lr.ph
  %.not136 = icmp eq i32 %86, 0
  br i1 %.not136, label %._crit_edge.thread, label %96

._crit_edge.thread:                               ; preds = %80, %._crit_edge
  invoke void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.8, i32 noundef 220)
          to label %96 unwind label %115

96:                                               ; preds = %._crit_edge.thread, %._crit_edge
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #8
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  %97 = load i32, ptr %16, align 4, !tbaa !5
  %98 = mul i32 %97, 3
  %99 = zext i32 %98 to i64
  invoke void @_ZNSt6vectorIjSaIjEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %99)
          to label %100 unwind label %117

100:                                              ; preds = %96
  %101 = load i32, ptr %42, align 8, !tbaa !18
  %102 = add i32 %101, 1
  %103 = getelementptr inbounds i8, ptr %19, i64 8
  %104 = getelementptr inbounds i8, ptr %23, i64 8
  br label %105

105:                                              ; preds = %100, %.loopexit
  %.0104198 = phi i32 [ 0, %100 ], [ %.1105.lcssa, %.loopexit ]
  %.0110197 = phi i32 [ 0, %100 ], [ %.7117, %.loopexit ]
  %.0122196 = phi i32 [ 1, %100 ], [ %.2124, %.loopexit ]
  %.0125195 = phi i32 [ %102, %100 ], [ %.1126.lcssa, %.loopexit ]
  %106 = zext nneg i32 %.0110197 to i64
  %107 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %106) #8
  %108 = load i32, ptr %107, align 4, !tbaa !5
  %109 = invoke noundef ptr @_ZNK6Assimp23VertexTriangleAdjacency20GetAdjacentTrianglesEj(ptr noundef nonnull align 8 dereferenceable(28) %6, i32 noundef %.0110197)
          to label %110 unwind label %119

110:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #8
  %111 = call ptr @_ZNSt6vectorIjSaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  store ptr %111, ptr %18, align 8
  %.not204 = icmp eq i32 %108, 0
  br i1 %.not204, label %._crit_edge186, label %.lr.ph185

._crit_edge186:                                   ; preds = %177, %110
  %.1126.lcssa = phi i32 [ %.0125195, %110 ], [ %.4129, %177 ]
  %.1105.lcssa = phi i32 [ %.0104198, %110 ], [ %.4108, %177 ]
  %112 = getelementptr inbounds i32, ptr %76, i64 %106
  store i32 0, ptr %112, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #8
  %113 = call ptr @_ZNSt6vectorIjSaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  store ptr %113, ptr %24, align 8
  %114 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPjSt6vectorIjSaIjEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %18) #8
  br i1 %114, label %.lr.ph192, label %._crit_edge193.thread

._crit_edge193.thread:                            ; preds = %._crit_edge186
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  br label %.preheader158.preheader

115:                                              ; preds = %._crit_edge.thread
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %266

117:                                              ; preds = %96
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %265

119:                                              ; preds = %105
  %120 = landingpad { ptr, i32 }
          cleanup
  br label %265

.lr.ph185:                                        ; preds = %110, %177
  %.1105183 = phi i32 [ %.4108, %177 ], [ %.0104198, %110 ]
  %.1126182 = phi i32 [ %.4129, %177 ], [ %.0125195, %110 ]
  %.0130181 = phi ptr [ %121, %177 ], [ %109, %110 ]
  %.0132180 = phi i32 [ %178, %177 ], [ 0, %110 ]
  %121 = getelementptr inbounds i8, ptr %.0130181, i64 4
  %122 = load i32, ptr %.0130181, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #8
  %123 = zext i32 %122 to i64
  %124 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %10, i64 noundef %123)
          to label %125 unwind label %135

125:                                              ; preds = %.lr.ph185
  %126 = extractvalue { ptr, i64 } %124, 0
  store ptr %126, ptr %19, align 8
  %127 = extractvalue { ptr, i64 } %124, 1
  store i64 %127, ptr %103, align 8
  %128 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %19) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #8
  br i1 %128, label %177, label %129

129:                                              ; preds = %125
  %130 = load ptr, ptr %45, align 8, !tbaa !22
  %131 = getelementptr inbounds %struct.aiFace, ptr %130, i64 %123
  %132 = load i32, ptr %131, align 8, !tbaa !30
  %.not205 = icmp eq i32 %132, 0
  br i1 %.not205, label %._crit_edge178, label %.lr.ph177

.lr.ph177:                                        ; preds = %129
  %133 = getelementptr inbounds i8, ptr %131, i64 8
  %wide.trip.count = zext i32 %132 to i64
  br label %137

._crit_edge178:                                   ; preds = %170, %129
  %.2127.lcssa = phi i32 [ %.1126182, %129 ], [ %.3128, %170 ]
  %.2106.lcssa = phi i32 [ %.1105183, %129 ], [ %.3107, %170 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #8
  %134 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %10, i64 noundef %123)
          to label %171 unwind label %175

135:                                              ; preds = %.lr.ph185
  %136 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #8
  br label %179

137:                                              ; preds = %.lr.ph177, %170
  %indvars.iv = phi i64 [ 0, %.lr.ph177 ], [ %indvars.iv.next, %170 ]
  %.2106175 = phi i32 [ %.1105183, %.lr.ph177 ], [ %.3107, %170 ]
  %.2127173 = phi i32 [ %.1126182, %.lr.ph177 ], [ %.3128, %170 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #8
  %138 = load ptr, ptr %133, align 8, !tbaa !32
  %139 = getelementptr inbounds i32, ptr %138, i64 %indvars.iv
  %140 = load i32, ptr %139, align 4, !tbaa !5
  store i32 %140, ptr %20, align 4, !tbaa !5
  %.not144 = icmp eq i32 %.0110197, %140
  br i1 %.not144, label %153, label %141

141:                                              ; preds = %137
  invoke void @_ZNSt5stackIjSt6vectorIjSaIjEEE4pushERKj(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 4 dereferenceable(4) %20)
          to label %142 unwind label %151

142:                                              ; preds = %141
  %143 = load i32, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #8
  %144 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %18, i32 noundef 0) #8
  store ptr %144, ptr %21, align 8
  %145 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %21) #8
  store i32 %143, ptr %145, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #8
  %146 = load i32, ptr %20, align 4, !tbaa !5
  %147 = zext i32 %146 to i64
  %148 = getelementptr inbounds i32, ptr %76, i64 %147
  %149 = load i32, ptr %148, align 4, !tbaa !5
  %150 = add i32 %149, -1
  store i32 %150, ptr %148, align 4, !tbaa !5
  %.pre = load i32, ptr %20, align 4, !tbaa !5
  br label %153

151:                                              ; preds = %141
  %152 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #8
  br label %179

153:                                              ; preds = %142, %137
  %154 = phi i32 [ %.pre, %142 ], [ %.0110197, %137 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #8
  %155 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %9, i32 noundef 0) #8
  store ptr %155, ptr %22, align 8
  %156 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %22) #8
  store i32 %154, ptr %156, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #8
  %157 = load i32, ptr %20, align 4, !tbaa !5
  %158 = zext i32 %157 to i64
  %159 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %158) #8
  %160 = load i32, ptr %159, align 4, !tbaa !5
  %161 = sub i32 %.2127173, %160
  %162 = load i32, ptr %42, align 8, !tbaa !18
  %163 = icmp ugt i32 %161, %162
  br i1 %163, label %164, label %170

164:                                              ; preds = %153
  %165 = add nsw i32 %.2127173, 1
  %166 = load i32, ptr %20, align 4, !tbaa !5
  %167 = zext i32 %166 to i64
  %168 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %167) #8
  store i32 %.2127173, ptr %168, align 4, !tbaa !5
  %169 = add i32 %.2106175, 1
  br label %170

170:                                              ; preds = %164, %153
  %.3128 = phi i32 [ %165, %164 ], [ %.2127173, %153 ]
  %.3107 = phi i32 [ %169, %164 ], [ %.2106175, %153 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #8
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge178, label %137, !llvm.loop !33

171:                                              ; preds = %._crit_edge178
  %172 = extractvalue { ptr, i64 } %134, 0
  store ptr %172, ptr %23, align 8
  %173 = extractvalue { ptr, i64 } %134, 1
  store i64 %173, ptr %104, align 8
  %174 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %23, i1 noundef zeroext true) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #8
  br label %177

175:                                              ; preds = %._crit_edge178
  %176 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #8
  br label %179

177:                                              ; preds = %171, %125
  %.4129 = phi i32 [ %.2127.lcssa, %171 ], [ %.1126182, %125 ]
  %.4108 = phi i32 [ %.2106.lcssa, %171 ], [ %.1105183, %125 ]
  %178 = add nuw i32 %.0132180, 1
  %exitcond207.not = icmp eq i32 %178, %108
  br i1 %exitcond207.not, label %._crit_edge186, label %.lr.ph185, !llvm.loop !34

179:                                              ; preds = %151, %175, %135
  %.pn145.pn = phi { ptr, i32 } [ %136, %135 ], [ %152, %151 ], [ %176, %175 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #8
  br label %265

._crit_edge193:                                   ; preds = %195
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  %180 = icmp eq i32 %.3113, -1
  br i1 %180, label %.preheader158.preheader, label %.loopexit

.preheader158.preheader:                          ; preds = %._crit_edge193.thread, %._crit_edge193
  br label %.preheader158

.lr.ph192:                                        ; preds = %._crit_edge186, %195
  %.1111190 = phi i32 [ %.3113, %195 ], [ -1, %._crit_edge186 ]
  %.0118189 = phi i32 [ %.2120, %195 ], [ -1, %._crit_edge186 ]
  %181 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #8
  %182 = load i32, ptr %181, align 4, !tbaa !5
  %183 = zext i32 %182 to i64
  %184 = getelementptr inbounds i32, ptr %76, i64 %183
  %185 = load i32, ptr %184, align 4, !tbaa !5
  %.not142 = icmp eq i32 %185, 0
  br i1 %.not142, label %195, label %186

186:                                              ; preds = %.lr.ph192
  %187 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %183) #8
  %188 = load i32, ptr %187, align 4, !tbaa !5
  %189 = sub i32 %.1126.lcssa, %188
  %190 = load i32, ptr %184, align 4, !tbaa !5
  %191 = shl i32 %190, 1
  %192 = add i32 %191, %189
  %193 = load i32, ptr %42, align 8, !tbaa !18
  %.not143 = icmp ugt i32 %192, %193
  %spec.select = select i1 %.not143, i32 0, i32 %189
  %194 = icmp sgt i32 %spec.select, %.0118189
  %.1119 = call i32 @llvm.smax.i32(i32 %spec.select, i32 %.0118189)
  %.2112 = select i1 %194, i32 %182, i32 %.1111190
  br label %195

195:                                              ; preds = %186, %.lr.ph192
  %.2120 = phi i32 [ %.1119, %186 ], [ %.0118189, %.lr.ph192 ]
  %.3113 = phi i32 [ %.2112, %186 ], [ %.1111190, %.lr.ph192 ]
  %196 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #8
  %197 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPjSt6vectorIjSaIjEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %18) #8
  br i1 %197, label %.lr.ph192, label %._crit_edge193, !llvm.loop !35

.preheader158:                                    ; preds = %.preheader158.preheader, %199
  %198 = call noundef zeroext i1 @_ZNKSt5stackIjSt6vectorIjSaIjEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  br i1 %198, label %.preheader, label %199

199:                                              ; preds = %.preheader158
  %200 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5stackIjSt6vectorIjSaIjEEE3topEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %201 = load i32, ptr %200, align 4, !tbaa !5
  call void @_ZNSt5stackIjSt6vectorIjSaIjEEE3popEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %202 = zext i32 %201 to i64
  %203 = getelementptr inbounds i32, ptr %76, i64 %202
  %204 = load i32, ptr %203, align 4, !tbaa !5
  %.not140 = icmp eq i32 %204, 0
  br i1 %.not140, label %.preheader158, label %205

205:                                              ; preds = %199
  %206 = icmp eq i32 %201, -1
  br i1 %206, label %.preheader, label %.loopexit

.preheader:                                       ; preds = %.preheader158, %205
  %207 = load i32, ptr %40, align 4, !tbaa !17
  %208 = sext i32 %.0122196 to i64
  %209 = sext i32 %207 to i64
  br label %210

210:                                              ; preds = %.preheader, %212
  %indvars.iv208 = phi i64 [ %208, %.preheader ], [ %indvars.iv.next209, %212 ]
  %211 = icmp slt i64 %indvars.iv208, %209
  br i1 %211, label %212, label %.loopexit.thread

.loopexit.thread:                                 ; preds = %210
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #8
  br label %.loopexit218

212:                                              ; preds = %210
  %indvars.iv.next209 = add nsw i64 %indvars.iv208, 1
  %213 = getelementptr inbounds i32, ptr %76, i64 %indvars.iv.next209
  %214 = load i32, ptr %213, align 4, !tbaa !5
  %.not141 = icmp eq i32 %214, 0
  br i1 %.not141, label %210, label %.loopexit.loopexit, !llvm.loop !36

.loopexit.loopexit:                               ; preds = %212
  %indvars.le = trunc i64 %indvars.iv.next209 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %205, %._crit_edge193
  %.2124 = phi i32 [ %.0122196, %205 ], [ %.0122196, %._crit_edge193 ], [ %indvars.le, %.loopexit.loopexit ]
  %.7117 = phi i32 [ %201, %205 ], [ %.3113, %._crit_edge193 ], [ %indvars.le, %.loopexit.loopexit ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #8
  %215 = icmp sgt i32 %.7117, -1
  br i1 %215, label %105, label %.loopexit218, !llvm.loop !37

.loopexit218:                                     ; preds = %.loopexit, %.loopexit.thread
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #8
  store float 0.000000e+00, ptr %25, align 4, !tbaa !21
  %216 = invoke noundef zeroext i1 @_ZN6Assimp13DefaultLogger12isNullLoggerEv()
          to label %217 unwind label %232

217:                                              ; preds = %.loopexit218
  br i1 %216, label %241, label %218

218:                                              ; preds = %217
  %219 = load i32, ptr %47, align 8, !tbaa !23
  %220 = udiv i32 %.1105.lcssa, %219
  %221 = uitofp i32 %220 to float
  store float %221, ptr %25, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #8
  %222 = fsub float %56, %221
  %223 = fdiv float %222, %56
  %224 = fmul float %223, 1.000000e+02
  store float %224, ptr %26, align 4, !tbaa !21
  %225 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %226 unwind label %234

226:                                              ; preds = %218
  %227 = call noundef i32 @_ZNK6Assimp6Logger14getLogSeverityEv(ptr noundef nonnull align 8 dereferenceable(12) %225)
  %228 = icmp eq i32 %227, 2
  br i1 %228, label %229, label %236

229:                                              ; preds = %226
  %230 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %231 unwind label %234

231:                                              ; preds = %229
  invoke void @_ZN6Assimp6Logger12verboseDebugIJRA6_KcRjRA12_S2_RfRA7_S2_S8_RA17_S2_RKfEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(12) %230, ptr noundef nonnull align 1 dereferenceable(6) @.str.11, ptr noundef nonnull align 4 dereferenceable(4) %4, ptr noundef nonnull align 1 dereferenceable(12) @.str.12, ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 1 dereferenceable(7) @.str.13, ptr noundef nonnull align 4 dereferenceable(4) %25, ptr noundef nonnull align 1 dereferenceable(17) @.str.14, ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %._crit_edge211 unwind label %234

._crit_edge211:                                   ; preds = %231
  %.pre212 = load float, ptr %25, align 4, !tbaa !21
  br label %236

232:                                              ; preds = %.loopexit218
  %233 = landingpad { ptr, i32 }
          cleanup
  br label %264

234:                                              ; preds = %231, %229, %218
  %235 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #8
  br label %264

236:                                              ; preds = %._crit_edge211, %226
  %237 = phi float [ %.pre212, %._crit_edge211 ], [ %221, %226 ]
  %238 = load i32, ptr %47, align 8, !tbaa !23
  %239 = uitofp i32 %238 to float
  %240 = fmul float %237, %239
  store float %240, ptr %25, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #8
  br label %241

241:                                              ; preds = %236, %217
  %242 = call ptr @_ZNSt6vectorIjSaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  store ptr %242, ptr %9, align 8, !tbaa !38
  %243 = load ptr, ptr %45, align 8, !tbaa !22
  %.not138199 = icmp eq ptr %243, %50
  br i1 %.not138199, label %._crit_edge203, label %.lr.ph202

._crit_edge203:                                   ; preds = %.thread156, %241
  %244 = load float, ptr %25, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #8
  call void @_ZNSt5stackIjSt6vectorIjSaIjEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #8
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #8
  call void @_ZN6Assimp23VertexTriangleAdjacencyD1Ev(ptr noundef nonnull align 8 dereferenceable(28) %6) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #8
  br label %271

.lr.ph202:                                        ; preds = %241, %.thread156
  %.091200 = phi ptr [ %263, %.thread156 ], [ %243, %241 ]
  %245 = load i32, ptr %.091200, align 8, !tbaa !30
  %246 = getelementptr inbounds i8, ptr %.091200, i64 8
  %247 = load ptr, ptr %246, align 8, !tbaa !32
  %.not139 = icmp eq i32 %245, 0
  br i1 %.not139, label %.thread156, label %248

248:                                              ; preds = %.lr.ph202
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #8
  %249 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %9, i32 noundef 0) #8
  store ptr %249, ptr %27, align 8
  %250 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #8
  %251 = load i32, ptr %250, align 4, !tbaa !5
  store i32 %251, ptr %247, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #8
  %.not157 = icmp eq i32 %245, 1
  br i1 %.not157, label %.thread156, label %252

252:                                              ; preds = %248
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #8
  %253 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %9, i32 noundef 0) #8
  store ptr %253, ptr %28, align 8
  %254 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %28) #8
  %255 = load i32, ptr %254, align 4, !tbaa !5
  %256 = getelementptr inbounds i8, ptr %247, i64 4
  store i32 %255, ptr %256, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #8
  %257 = icmp ugt i32 %245, 2
  br i1 %257, label %258, label %.thread156

258:                                              ; preds = %252
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #8
  %259 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %9, i32 noundef 0) #8
  store ptr %259, ptr %29, align 8
  %260 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #8
  %261 = load i32, ptr %260, align 4, !tbaa !5
  %262 = getelementptr inbounds i8, ptr %247, i64 8
  store i32 %261, ptr %262, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #8
  br label %.thread156

.thread156:                                       ; preds = %.lr.ph202, %248, %258, %252
  %263 = getelementptr inbounds i8, ptr %.091200, i64 16
  %.not138 = icmp eq ptr %263, %50
  br i1 %.not138, label %._crit_edge203, label %.lr.ph202, !llvm.loop !39

264:                                              ; preds = %234, %232
  %.pn = phi { ptr, i32 } [ %235, %234 ], [ %233, %232 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #8
  br label %265

265:                                              ; preds = %264, %179, %119, %117
  %.pn145.pn.pn.pn.pn = phi { ptr, i32 } [ %118, %117 ], [ %.pn, %264 ], [ %.pn145.pn, %179 ], [ %120, %119 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #8
  br label %266

266:                                              ; preds = %265, %115
  %.pn145.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn145.pn.pn.pn.pn, %265 ], [ %116, %115 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #8
  br label %267

267:                                              ; preds = %266, %94
  %.pn145.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn145.pn.pn.pn.pn.pn, %266 ], [ %95, %94 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #8
  call void @_ZNSt5stackIjSt6vectorIjSaIjEEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #8
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #8
  br label %268

268:                                              ; preds = %267, %92
  %.pn145.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn145.pn.pn.pn.pn.pn.pn, %267 ], [ %93, %92 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  br label %269

269:                                              ; preds = %268, %90
  %.pn145.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn145.pn.pn.pn.pn.pn.pn.pn, %268 ], [ %91, %90 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #8
  br label %270

270:                                              ; preds = %269, %88
  %.pn145.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn145.pn.pn.pn.pn.pn.pn.pn.pn, %269 ], [ %89, %88 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #8
  call void @_ZN6Assimp23VertexTriangleAdjacencyD1Ev(ptr noundef nonnull align 8 dereferenceable(28) %6) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #8
  resume { ptr, i32 } %.pn145.pn.pn.pn.pn.pn.pn.pn.pn.pn

271:                                              ; preds = %39, %31, %33, %._crit_edge203, %37
  %.0 = phi float [ 0.000000e+00, %37 ], [ %244, %._crit_edge203 ], [ 0.000000e+00, %33 ], [ 0.000000e+00, %31 ], [ 0.000000e+00, %39 ]
  ret float %.0
}

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

declare noundef zeroext i1 @_ZN6Assimp13DefaultLogger12isNullLoggerEv() local_unnamed_addr #0

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

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

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

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

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

declare void @_ZN6Assimp23VertexTriangleAdjacencyC1EP6aiFacejjb(ptr noundef nonnull align 8 dereferenceable(28), ptr noundef, i32 noundef, i32 noundef, i1 noundef zeroext) unnamed_addr #0

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

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK6Assimp23VertexTriangleAdjacency20GetAdjacentTrianglesEj(ptr noundef nonnull align 8 dereferenceable(28), i32 noundef) local_unnamed_addr #2 align 2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK6Assimp6Logger14getLogSeverityEv(ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #5 align 2

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

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

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

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

; Function Attrs: nounwind
declare void @_ZN6Assimp23VertexTriangleAdjacencyD1Ev(ptr noundef nonnull align 8 dereferenceable(28)) unnamed_addr #6

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #7

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

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

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


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