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

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

%"class.std::vector" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"struct.std::_Bit_reference" = type { ptr, i64 }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.5" }
%"struct.std::_Head_base.5" = type { ptr }
%"class.Assimp::ValidateDSProcess" = type { %"class.Assimp::BaseProcess", ptr }
%"class.Assimp::BaseProcess" = type { ptr, ptr, ptr }
%struct.aiScene = type { i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, ptr, %struct.aiString, i32, ptr, ptr }
%struct.aiString = type { i32, [1024 x i8] }
%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.aiAABB = type { %class.aiVector3t, %class.aiVector3t }
%class.aiVector3t = type { float, float, float }
%struct.aiFace = type { i32, ptr }
%struct.aiBone = type { %struct.aiString, i32, ptr, ptr, ptr, %class.aiMatrix4x4t }
%class.aiMatrix4x4t = type { float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }

@.str.32 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [55 x i8], align 1

; Function Attrs: mustprogress noreturn uwtable
declare dso_local void @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ...) #0 align 2

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp17ValidateDSProcess13ReportWarningEPKcz(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ...) #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp17ValidateDSProcess8ValidateEPK6aiMesh(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %1) #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca %"class.std::vector", align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca %"struct.std::_Bit_reference", align 8
  %15 = alloca i8, align 1
  %16 = alloca i32, align 4
  %17 = alloca %"struct.std::_Bit_reference", align 8
  %18 = alloca i32, align 4
  %19 = alloca %"class.std::unique_ptr", align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %26 = load ptr, ptr %3, align 8
  %27 = getelementptr inbounds %"class.Assimp::ValidateDSProcess", ptr %26, i32 0, i32 1
  %28 = load ptr, ptr %27, align 8, !tbaa !9
  %29 = getelementptr inbounds %struct.aiScene, ptr %28, i32 0, i32 4
  %30 = load i32, ptr %29, align 8, !tbaa !12
  %31 = icmp ne i32 %30, 0
  br i1 %31, label %32, label %50

32:                                               ; preds = %2
  %33 = load ptr, ptr %4, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.aiMesh, ptr %33, i32 0, i32 13
  %35 = load i32, ptr %34, align 8, !tbaa !16
  %36 = getelementptr inbounds %"class.Assimp::ValidateDSProcess", ptr %26, i32 0, i32 1
  %37 = load ptr, ptr %36, align 8, !tbaa !9
  %38 = getelementptr inbounds %struct.aiScene, ptr %37, i32 0, i32 4
  %39 = load i32, ptr %38, align 8, !tbaa !12
  %40 = icmp uge i32 %35, %39
  br i1 %40, label %41, label %50

41:                                               ; preds = %32
  %42 = load ptr, ptr %4, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.aiMesh, ptr %42, i32 0, i32 13
  %44 = load i32, ptr %43, align 8, !tbaa !16
  %45 = getelementptr inbounds %"class.Assimp::ValidateDSProcess", ptr %26, i32 0, i32 1
  %46 = load ptr, ptr %45, align 8, !tbaa !9
  %47 = getelementptr inbounds %struct.aiScene, ptr %46, i32 0, i32 4
  %48 = load i32, ptr %47, align 8, !tbaa !12
  %49 = sub i32 %48, 1
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.32, i32 noundef %44, i32 noundef %49) #6
  unreachable

50:                                               ; preds = %32, %2
  %51 = load ptr, ptr %4, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.aiMesh, ptr %51, i32 0, i32 14
  call void @_ZN6Assimp17ValidateDSProcess8ValidateEPK8aiString(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef %52)
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  store i32 0, ptr %5, align 4, !tbaa !22
  br label %53

53:                                               ; preds = %122, %50
  %54 = load i32, ptr %5, align 4, !tbaa !22
  %55 = load ptr, ptr %4, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.aiMesh, ptr %55, i32 0, i32 2
  %57 = load i32, ptr %56, align 8, !tbaa !23
  %58 = icmp ult i32 %54, %57
  br i1 %58, label %60, label %59

59:                                               ; preds = %53
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  br label %125

60:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.aiMesh, ptr %61, i32 0, i32 10
  %63 = load ptr, ptr %62, align 8, !tbaa !24
  %64 = load i32, ptr %5, align 4, !tbaa !22
  %65 = zext i32 %64 to i64
  %66 = getelementptr inbounds %struct.aiFace, ptr %63, i64 %65
  store ptr %66, ptr %6, align 8, !tbaa !5
  %67 = load ptr, ptr %4, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.aiMesh, ptr %67, i32 0, i32 0
  %69 = load i32, ptr %68, align 8, !tbaa !25
  %70 = icmp ne i32 %69, 0
  br i1 %70, label %71, label %114

71:                                               ; preds = %60
  %72 = load ptr, ptr %6, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.aiFace, ptr %72, i32 0, i32 0
  %74 = load i32, ptr %73, align 8, !tbaa !26
  switch i32 %74, label %104 [
    i32 0, label %75
    i32 1, label %77
    i32 2, label %86
    i32 3, label %95
  ]

75:                                               ; preds = %71
  %76 = load i32, ptr %5, align 4, !tbaa !22
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.33, i32 noundef %76) #6
  unreachable

77:                                               ; preds = %71
  %78 = load ptr, ptr %4, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.aiMesh, ptr %78, i32 0, i32 0
  %80 = load i32, ptr %79, align 8, !tbaa !25
  %81 = and i32 %80, 1
  %82 = icmp eq i32 0, %81
  br i1 %82, label %83, label %85

83:                                               ; preds = %77
  %84 = load i32, ptr %5, align 4, !tbaa !22
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.34, i32 noundef %84) #6
  unreachable

85:                                               ; preds = %77
  br label %113

86:                                               ; preds = %71
  %87 = load ptr, ptr %4, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.aiMesh, ptr %87, i32 0, i32 0
  %89 = load i32, ptr %88, align 8, !tbaa !25
  %90 = and i32 %89, 2
  %91 = icmp eq i32 0, %90
  br i1 %91, label %92, label %94

92:                                               ; preds = %86
  %93 = load i32, ptr %5, align 4, !tbaa !22
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.35, i32 noundef %93) #6
  unreachable

94:                                               ; preds = %86
  br label %113

95:                                               ; preds = %71
  %96 = load ptr, ptr %4, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.aiMesh, ptr %96, i32 0, i32 0
  %98 = load i32, ptr %97, align 8, !tbaa !25
  %99 = and i32 %98, 4
  %100 = icmp eq i32 0, %99
  br i1 %100, label %101, label %103

101:                                              ; preds = %95
  %102 = load i32, ptr %5, align 4, !tbaa !22
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.36, i32 noundef %102) #6
  unreachable

103:                                              ; preds = %95
  br label %113

104:                                              ; preds = %71
  %105 = load ptr, ptr %4, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.aiMesh, ptr %105, i32 0, i32 0
  %107 = load i32, ptr %106, align 8, !tbaa !25
  %108 = and i32 %107, 8
  %109 = icmp eq i32 0, %108
  br i1 %109, label %110, label %112

110:                                              ; preds = %104
  %111 = load i32, ptr %5, align 4, !tbaa !22
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.37, i32 noundef %111) #6
  unreachable

112:                                              ; preds = %104
  br label %113

113:                                              ; preds = %112, %103, %94, %85
  br label %114

114:                                              ; preds = %113, %60
  %115 = load ptr, ptr %6, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.aiFace, ptr %115, i32 0, i32 1
  %117 = load ptr, ptr %116, align 8, !tbaa !28
  %118 = icmp ne ptr %117, null
  br i1 %118, label %121, label %119

119:                                              ; preds = %114
  %120 = load i32, ptr %5, align 4, !tbaa !22
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.38, i32 noundef %120) #6
  unreachable

121:                                              ; preds = %114
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  br label %122

122:                                              ; preds = %121
  %123 = load i32, ptr %5, align 4, !tbaa !22
  %124 = add i32 %123, 1
  store i32 %124, ptr %5, align 4, !tbaa !22
  br label %53, !llvm.loop !29

125:                                              ; preds = %59
  %126 = load ptr, ptr %4, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.aiMesh, ptr %126, i32 0, i32 1
  %128 = load i32, ptr %127, align 4, !tbaa !31
  %129 = icmp ne i32 %128, 0
  br i1 %129, label %130, label %141

130:                                              ; preds = %125
  %131 = load ptr, ptr %4, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.aiMesh, ptr %131, i32 0, i32 3
  %133 = load ptr, ptr %132, align 8, !tbaa !32
  %134 = icmp ne ptr %133, null
  br i1 %134, label %145, label %135

135:                                              ; preds = %130
  %136 = getelementptr inbounds %"class.Assimp::ValidateDSProcess", ptr %26, i32 0, i32 1
  %137 = load ptr, ptr %136, align 8, !tbaa !9
  %138 = getelementptr inbounds %struct.aiScene, ptr %137, i32 0, i32 0
  %139 = load i32, ptr %138, align 8, !tbaa !33
  %140 = icmp ne i32 %139, 0
  br i1 %140, label %145, label %141

141:                                              ; preds = %135, %125
  %142 = load ptr, ptr %4, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.aiMesh, ptr %142, i32 0, i32 14
  %144 = call noundef ptr @_ZNK8aiString5C_StrEv(ptr noundef nonnull align 4 dereferenceable(1028) %143)
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.39, ptr noundef %144) #6
  unreachable

145:                                              ; preds = %135, %130
  %146 = load ptr, ptr %4, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.aiMesh, ptr %146, i32 0, i32 1
  %148 = load i32, ptr %147, align 4, !tbaa !31
  %149 = icmp ugt i32 %148, 2147483647
  br i1 %149, label %150, label %154

150:                                              ; preds = %145
  %151 = load ptr, ptr %4, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.aiMesh, ptr %151, i32 0, i32 1
  %153 = load i32, ptr %152, align 4, !tbaa !31
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.40, i32 noundef %153, i32 noundef 2147483647) #6
  unreachable

154:                                              ; preds = %145
  %155 = load ptr, ptr %4, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.aiMesh, ptr %155, i32 0, i32 2
  %157 = load i32, ptr %156, align 8, !tbaa !23
  %158 = icmp ugt i32 %157, 2147483647
  br i1 %158, label %159, label %163

159:                                              ; preds = %154
  %160 = load ptr, ptr %4, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.aiMesh, ptr %160, i32 0, i32 2
  %162 = load i32, ptr %161, align 8, !tbaa !23
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.41, i32 noundef %162, i32 noundef 2147483647) #6
  unreachable

163:                                              ; preds = %154
  %164 = load ptr, ptr %4, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.aiMesh, ptr %164, i32 0, i32 5
  %166 = load ptr, ptr %165, align 8, !tbaa !34
  %167 = icmp ne ptr %166, null
  %168 = zext i1 %167 to i32
  %169 = load ptr, ptr %4, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.aiMesh, ptr %169, i32 0, i32 6
  %171 = load ptr, ptr %170, align 8, !tbaa !35
  %172 = icmp ne ptr %171, null
  %173 = zext i1 %172 to i32
  %174 = icmp ne i32 %168, %173
  br i1 %174, label %175, label %176

175:                                              ; preds = %163
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.42) #6
  unreachable

176:                                              ; preds = %163
  %177 = load ptr, ptr %4, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.aiMesh, ptr %177, i32 0, i32 2
  %179 = load i32, ptr %178, align 8, !tbaa !23
  %180 = icmp ne i32 %179, 0
  br i1 %180, label %181, label %192

181:                                              ; preds = %176
  %182 = load ptr, ptr %4, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.aiMesh, ptr %182, i32 0, i32 10
  %184 = load ptr, ptr %183, align 8, !tbaa !24
  %185 = icmp ne ptr %184, null
  br i1 %185, label %196, label %186

186:                                              ; preds = %181
  %187 = getelementptr inbounds %"class.Assimp::ValidateDSProcess", ptr %26, i32 0, i32 1
  %188 = load ptr, ptr %187, align 8, !tbaa !9
  %189 = getelementptr inbounds %struct.aiScene, ptr %188, i32 0, i32 0
  %190 = load i32, ptr %189, align 8, !tbaa !33
  %191 = icmp ne i32 %190, 0
  br i1 %191, label %196, label %192

192:                                              ; preds = %186, %176
  %193 = load ptr, ptr %4, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.aiMesh, ptr %193, i32 0, i32 14
  %195 = call noundef ptr @_ZNK8aiString5C_StrEv(ptr noundef nonnull align 4 dereferenceable(1028) %194)
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.43, ptr noundef %195) #6
  unreachable

196:                                              ; preds = %186, %181
  call void @llvm.lifetime.start.p0(i64 40, ptr %7) #7
  call void @_ZNSt6vectorIbSaIbEEC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #7
  %197 = load ptr, ptr %4, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.aiMesh, ptr %197, i32 0, i32 1
  %199 = load i32, ptr %198, align 4, !tbaa !31
  %200 = zext i32 %199 to i64
  invoke void @_ZNSt6vectorIbSaIbEE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(40) %7, i64 noundef %200, i1 noundef zeroext false)
          to label %201 unwind label %209

201:                                              ; preds = %196
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 0, ptr %10, align 4, !tbaa !22
  br label %202

202:                                              ; preds = %287, %201
  %203 = load i32, ptr %10, align 4, !tbaa !22
  %204 = load ptr, ptr %4, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.aiMesh, ptr %204, i32 0, i32 2
  %206 = load i32, ptr %205, align 8, !tbaa !23
  %207 = icmp ult i32 %203, %206
  br i1 %207, label %213, label %208

208:                                              ; preds = %202
  store i32 6, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  br label %291

209:                                              ; preds = %196
  %210 = landingpad { ptr, i32 }
          cleanup
  %211 = extractvalue { ptr, i32 } %210, 0
  store ptr %211, ptr %8, align 8
  %212 = extractvalue { ptr, i32 } %210, 1
  store i32 %212, ptr %9, align 4
  br label %607

213:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %214 = load ptr, ptr %4, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.aiMesh, ptr %214, i32 0, i32 10
  %216 = load ptr, ptr %215, align 8, !tbaa !24
  %217 = load i32, ptr %10, align 4, !tbaa !22
  %218 = zext i32 %217 to i64
  %219 = getelementptr inbounds %struct.aiFace, ptr %216, i64 %218
  store ptr %219, ptr %12, align 8, !tbaa !5
  %220 = load ptr, ptr %12, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.aiFace, ptr %220, i32 0, i32 0
  %222 = load i32, ptr %221, align 8, !tbaa !26
  %223 = icmp ugt i32 %222, 32767
  br i1 %223, label %224, label %234

224:                                              ; preds = %213
  %225 = load i32, ptr %10, align 4, !tbaa !22
  %226 = load ptr, ptr %12, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.aiFace, ptr %226, i32 0, i32 0
  %228 = load i32, ptr %227, align 8, !tbaa !26
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.44, i32 noundef %225, i32 noundef %228, i32 noundef 32767) #6
          to label %229 unwind label %230

229:                                              ; preds = %224
  unreachable

230:                                              ; preds = %224
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %8, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %9, align 4
  br label %290

234:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  store i32 0, ptr %13, align 4, !tbaa !22
  br label %235

235:                                              ; preds = %278, %234
  %236 = load i32, ptr %13, align 4, !tbaa !22
  %237 = load ptr, ptr %12, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.aiFace, ptr %237, i32 0, i32 0
  %239 = load i32, ptr %238, align 8, !tbaa !26
  %240 = icmp ult i32 %236, %239
  br i1 %240, label %242, label %241

241:                                              ; preds = %235
  store i32 9, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  br label %286

242:                                              ; preds = %235
  %243 = load ptr, ptr %12, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.aiFace, ptr %243, i32 0, i32 1
  %245 = load ptr, ptr %244, align 8, !tbaa !28
  %246 = load i32, ptr %13, align 4, !tbaa !22
  %247 = zext i32 %246 to i64
  %248 = getelementptr inbounds i32, ptr %245, i64 %247
  %249 = load i32, ptr %248, align 4, !tbaa !22
  %250 = load ptr, ptr %4, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.aiMesh, ptr %250, i32 0, i32 1
  %252 = load i32, ptr %251, align 4, !tbaa !31
  %253 = icmp uge i32 %249, %252
  br i1 %253, label %254, label %262

254:                                              ; preds = %242
  %255 = load i32, ptr %10, align 4, !tbaa !22
  %256 = load i32, ptr %13, align 4, !tbaa !22
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.45, i32 noundef %255, i32 noundef %256) #6
          to label %257 unwind label %258

257:                                              ; preds = %254
  unreachable

258:                                              ; preds = %254
  %259 = landingpad { ptr, i32 }
          cleanup
  %260 = extractvalue { ptr, i32 } %259, 0
  store ptr %260, ptr %8, align 8
  %261 = extractvalue { ptr, i32 } %259, 1
  store i32 %261, ptr %9, align 4
  br label %285

262:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #7
  %263 = load ptr, ptr %12, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.aiFace, ptr %263, i32 0, i32 1
  %265 = load ptr, ptr %264, align 8, !tbaa !28
  %266 = load i32, ptr %13, align 4, !tbaa !22
  %267 = zext i32 %266 to i64
  %268 = getelementptr inbounds i32, ptr %265, i64 %267
  %269 = load i32, ptr %268, align 4, !tbaa !22
  %270 = zext i32 %269 to i64
  %271 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %7, i64 noundef %270)
          to label %272 unwind label %281

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

278:                                              ; preds = %272
  %279 = load i32, ptr %13, align 4, !tbaa !22
  %280 = add i32 %279, 1
  store i32 %280, ptr %13, align 4, !tbaa !22
  br label %235, !llvm.loop !36

281:                                              ; preds = %262
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %8, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #7
  br label %285

285:                                              ; preds = %281, %258
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  br label %290

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

287:                                              ; preds = %286
  %288 = load i32, ptr %10, align 4, !tbaa !22
  %289 = add i32 %288, 1
  store i32 %289, ptr %10, align 4, !tbaa !22
  br label %202, !llvm.loop !37

290:                                              ; preds = %285, %230
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  br label %607

291:                                              ; preds = %208
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #7
  store i8 0, ptr %15, align 1, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  store i32 0, ptr %16, align 4, !tbaa !22
  br label %292

292:                                              ; preds = %316, %291
  %293 = load i32, ptr %16, align 4, !tbaa !22
  %294 = load ptr, ptr %4, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.aiMesh, ptr %294, i32 0, i32 1
  %296 = load i32, ptr %295, align 4, !tbaa !31
  %297 = icmp ult i32 %293, %296
  br i1 %297, label %299, label %298

298:                                              ; preds = %292
  store i32 12, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  br label %319

299:                                              ; preds = %292
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #7
  %300 = load i32, ptr %16, align 4, !tbaa !22
  %301 = zext i32 %300 to i64
  %302 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %7, i64 noundef %301)
          to label %303 unwind label %311

303:                                              ; preds = %299
  %304 = getelementptr inbounds { ptr, i64 }, ptr %17, i32 0, i32 0
  %305 = extractvalue { ptr, i64 } %302, 0
  store ptr %305, ptr %304, align 8
  %306 = getelementptr inbounds { ptr, i64 }, ptr %17, i32 0, i32 1
  %307 = extractvalue { ptr, i64 } %302, 1
  store i64 %307, ptr %306, align 8
  %308 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %17) #7
  %309 = xor i1 %308, true
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #7
  br i1 %309, label %310, label %315

310:                                              ; preds = %303
  store i8 1, ptr %15, align 1, !tbaa !38
  br label %315

311:                                              ; preds = %299
  %312 = landingpad { ptr, i32 }
          cleanup
  %313 = extractvalue { ptr, i32 } %312, 0
  store ptr %313, ptr %8, align 8
  %314 = extractvalue { ptr, i32 } %312, 1
  store i32 %314, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  br label %606

315:                                              ; preds = %310, %303
  br label %316

316:                                              ; preds = %315
  %317 = load i32, ptr %16, align 4, !tbaa !22
  %318 = add i32 %317, 1
  store i32 %318, ptr %16, align 4, !tbaa !22
  br label %292, !llvm.loop !40

319:                                              ; preds = %298
  call void @_ZNSt6vectorIbSaIbEE5clearEv(ptr noundef nonnull align 8 dereferenceable(40) %7) #7
  %320 = load i8, ptr %15, align 1, !tbaa !38, !range !41, !noundef !42
  %321 = trunc i8 %320 to i1
  br i1 %321, label %322, label %328

322:                                              ; preds = %319
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess13ReportWarningEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.46)
          to label %323 unwind label %324

323:                                              ; preds = %322
  br label %328

324:                                              ; preds = %602, %372, %322
  %325 = landingpad { ptr, i32 }
          cleanup
  %326 = extractvalue { ptr, i32 } %325, 0
  store ptr %326, ptr %8, align 8
  %327 = extractvalue { ptr, i32 } %325, 1
  store i32 %327, ptr %9, align 4
  br label %606

328:                                              ; preds = %323, %319
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  store i32 0, ptr %18, align 4, !tbaa !22
  br label %329

329:                                              ; preds = %343, %328
  %330 = load i32, ptr %18, align 4, !tbaa !22
  %331 = icmp ult i32 %330, 8
  br i1 %331, label %332, label %346

332:                                              ; preds = %329
  %333 = load ptr, ptr %4, align 8, !tbaa !5
  %334 = load i32, ptr %18, align 4, !tbaa !22
  %335 = invoke noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %333, i32 noundef %334)
          to label %336 unwind label %338

336:                                              ; preds = %332
  br i1 %335, label %342, label %337

337:                                              ; preds = %336
  br label %346

338:                                              ; preds = %355, %350, %332
  %339 = landingpad { ptr, i32 }
          cleanup
  %340 = extractvalue { ptr, i32 } %339, 0
  store ptr %340, ptr %8, align 8
  %341 = extractvalue { ptr, i32 } %339, 1
  store i32 %341, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  br label %606

342:                                              ; preds = %336
  br label %343

343:                                              ; preds = %342
  %344 = load i32, ptr %18, align 4, !tbaa !22
  %345 = add i32 %344, 1
  store i32 %345, ptr %18, align 4, !tbaa !22
  br label %329, !llvm.loop !43

346:                                              ; preds = %337, %329
  br label %347

347:                                              ; preds = %359, %346
  %348 = load i32, ptr %18, align 4, !tbaa !22
  %349 = icmp ult i32 %348, 8
  br i1 %349, label %350, label %362

350:                                              ; preds = %347
  %351 = load ptr, ptr %4, align 8, !tbaa !5
  %352 = load i32, ptr %18, align 4, !tbaa !22
  %353 = invoke noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %351, i32 noundef %352)
          to label %354 unwind label %338

354:                                              ; preds = %350
  br i1 %353, label %355, label %358

355:                                              ; preds = %354
  %356 = load i32, ptr %18, align 4, !tbaa !22
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.47, i32 noundef %356) #6
          to label %357 unwind label %338

357:                                              ; preds = %355
  unreachable

358:                                              ; preds = %354
  br label %359

359:                                              ; preds = %358
  %360 = load i32, ptr %18, align 4, !tbaa !22
  %361 = add i32 %360, 1
  store i32 %361, ptr %18, align 4, !tbaa !22
  br label %347, !llvm.loop !44

362:                                              ; preds = %347
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  %363 = load ptr, ptr %4, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.aiMesh, ptr %363, i32 0, i32 11
  %365 = load i32, ptr %364, align 8, !tbaa !45
  %366 = icmp ne i32 %365, 0
  br i1 %366, label %367, label %597

367:                                              ; preds = %362
  %368 = load ptr, ptr %4, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.aiMesh, ptr %368, i32 0, i32 12
  %370 = load ptr, ptr %369, align 8, !tbaa !46
  %371 = icmp ne ptr %370, null
  br i1 %371, label %377, label %372

372:                                              ; preds = %367
  %373 = load ptr, ptr %4, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.aiMesh, ptr %373, i32 0, i32 11
  %375 = load i32, ptr %374, align 8, !tbaa !45
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.48, i32 noundef %375) #6
          to label %376 unwind label %324

376:                                              ; preds = %372
  unreachable

377:                                              ; preds = %367
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  call void @_ZNSt10unique_ptrIA_fSt14default_deleteIS0_EEC2IS2_vEEDn(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr null) #7
  %378 = load ptr, ptr %4, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.aiMesh, ptr %378, i32 0, i32 1
  %380 = load i32, ptr %379, align 4, !tbaa !31
  %381 = icmp ne i32 %380, 0
  br i1 %381, label %382, label %417

382:                                              ; preds = %377
  %383 = load ptr, ptr %4, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.aiMesh, ptr %383, i32 0, i32 1
  %385 = load i32, ptr %384, align 4, !tbaa !31
  %386 = zext i32 %385 to i64
  %387 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %386, i64 4)
  %388 = extractvalue { i64, i1 } %387, 1
  %389 = extractvalue { i64, i1 } %387, 0
  %390 = select i1 %388, i64 -1, i64 %389
  %391 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %390) #8
          to label %392 unwind label %400

392:                                              ; preds = %382
  call void @_ZNSt10unique_ptrIA_fSt14default_deleteIS0_EE5resetIPfvEEvT_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef %391) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 0, ptr %20, align 4, !tbaa !22
  br label %393

393:                                              ; preds = %409, %392
  %394 = load i32, ptr %20, align 4, !tbaa !22
  %395 = load ptr, ptr %4, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.aiMesh, ptr %395, i32 0, i32 1
  %397 = load i32, ptr %396, align 4, !tbaa !31
  %398 = icmp ult i32 %394, %397
  br i1 %398, label %404, label %399

399:                                              ; preds = %393
  store i32 21, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %416

400:                                              ; preds = %382
  %401 = landingpad { ptr, i32 }
          cleanup
  %402 = extractvalue { ptr, i32 } %401, 0
  store ptr %402, ptr %8, align 8
  %403 = extractvalue { ptr, i32 } %401, 1
  store i32 %403, ptr %9, align 4
  br label %596

404:                                              ; preds = %393
  %405 = load i32, ptr %20, align 4, !tbaa !22
  %406 = zext i32 %405 to i64
  %407 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_fSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %19, i64 noundef %406)
          to label %408 unwind label %412

408:                                              ; preds = %404
  store float 0.000000e+00, ptr %407, align 4, !tbaa !47
  br label %409

409:                                              ; preds = %408
  %410 = load i32, ptr %20, align 4, !tbaa !22
  %411 = add i32 %410, 1
  store i32 %411, ptr %20, align 4, !tbaa !22
  br label %393, !llvm.loop !48

412:                                              ; preds = %404
  %413 = landingpad { ptr, i32 }
          cleanup
  %414 = extractvalue { ptr, i32 } %413, 0
  store ptr %414, ptr %8, align 8
  %415 = extractvalue { ptr, i32 } %413, 1
  store i32 %415, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %596

416:                                              ; preds = %399
  br label %417

417:                                              ; preds = %416, %377
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  store i32 0, ptr %21, align 4, !tbaa !22
  br label %418

418:                                              ; preds = %543, %417
  %419 = load i32, ptr %21, align 4, !tbaa !22
  %420 = load ptr, ptr %4, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.aiMesh, ptr %420, i32 0, i32 11
  %422 = load i32, ptr %421, align 8, !tbaa !45
  %423 = icmp ult i32 %419, %422
  br i1 %423, label %425, label %424

424:                                              ; preds = %418
  store i32 24, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %547

425:                                              ; preds = %418
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %426 = load ptr, ptr %4, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.aiMesh, ptr %426, i32 0, i32 12
  %428 = load ptr, ptr %427, align 8, !tbaa !46
  %429 = load i32, ptr %21, align 4, !tbaa !22
  %430 = zext i32 %429 to i64
  %431 = getelementptr inbounds ptr, ptr %428, i64 %430
  %432 = load ptr, ptr %431, align 8, !tbaa !5
  store ptr %432, ptr %22, align 8, !tbaa !5
  %433 = load ptr, ptr %22, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.aiBone, ptr %433, i32 0, i32 1
  %435 = load i32, ptr %434, align 4, !tbaa !49
  %436 = icmp ugt i32 %435, 2147483647
  br i1 %436, label %437, label %447

437:                                              ; preds = %425
  %438 = load i32, ptr %21, align 4, !tbaa !22
  %439 = load ptr, ptr %22, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.aiBone, ptr %439, i32 0, i32 1
  %441 = load i32, ptr %440, align 4, !tbaa !49
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.49, i32 noundef %438, i32 noundef %441, i32 noundef 2147483647) #6
          to label %442 unwind label %443

442:                                              ; preds = %437
  unreachable

443:                                              ; preds = %462, %456, %437
  %444 = landingpad { ptr, i32 }
          cleanup
  %445 = extractvalue { ptr, i32 } %444, 0
  store ptr %445, ptr %8, align 8
  %446 = extractvalue { ptr, i32 } %444, 1
  store i32 %446, ptr %9, align 4
  br label %546

447:                                              ; preds = %425
  %448 = load ptr, ptr %4, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.aiMesh, ptr %448, i32 0, i32 12
  %450 = load ptr, ptr %449, align 8, !tbaa !46
  %451 = load i32, ptr %21, align 4, !tbaa !22
  %452 = zext i32 %451 to i64
  %453 = getelementptr inbounds ptr, ptr %450, i64 %452
  %454 = load ptr, ptr %453, align 8, !tbaa !5
  %455 = icmp ne ptr %454, null
  br i1 %455, label %462, label %456

456:                                              ; preds = %447
  %457 = load i32, ptr %21, align 4, !tbaa !22
  %458 = load ptr, ptr %4, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.aiMesh, ptr %458, i32 0, i32 11
  %460 = load i32, ptr %459, align 8, !tbaa !45
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.50, i32 noundef %457, i32 noundef %460) #6
          to label %461 unwind label %443

461:                                              ; preds = %456
  unreachable

462:                                              ; preds = %447
  %463 = load ptr, ptr %4, align 8, !tbaa !5
  %464 = load ptr, ptr %4, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.aiMesh, ptr %464, i32 0, i32 12
  %466 = load ptr, ptr %465, align 8, !tbaa !46
  %467 = load i32, ptr %21, align 4, !tbaa !22
  %468 = zext i32 %467 to i64
  %469 = getelementptr inbounds ptr, ptr %466, i64 %468
  %470 = load ptr, ptr %469, align 8, !tbaa !5
  %471 = call noundef ptr @_ZNKSt10unique_ptrIA_fSt14default_deleteIS0_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  invoke void @_ZN6Assimp17ValidateDSProcess8ValidateEPK6aiMeshPK6aiBonePf(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef %463, ptr noundef %470, ptr noundef %471)
          to label %472 unwind label %443

472:                                              ; preds = %462
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  %473 = load i32, ptr %21, align 4, !tbaa !22
  %474 = add i32 %473, 1
  store i32 %474, ptr %23, align 4, !tbaa !22
  br label %475

475:                                              ; preds = %538, %472
  %476 = load i32, ptr %23, align 4, !tbaa !22
  %477 = load ptr, ptr %4, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.aiMesh, ptr %477, i32 0, i32 11
  %479 = load i32, ptr %478, align 8, !tbaa !45
  %480 = icmp ult i32 %476, %479
  br i1 %480, label %482, label %481

481:                                              ; preds = %475
  store i32 27, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  br label %542

482:                                              ; preds = %475
  %483 = load ptr, ptr %4, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.aiMesh, ptr %483, i32 0, i32 12
  %485 = load ptr, ptr %484, align 8, !tbaa !46
  %486 = load i32, ptr %21, align 4, !tbaa !22
  %487 = zext i32 %486 to i64
  %488 = getelementptr inbounds ptr, ptr %485, i64 %487
  %489 = load ptr, ptr %488, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.aiBone, ptr %489, i32 0, i32 0
  %491 = load ptr, ptr %4, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.aiMesh, ptr %491, i32 0, i32 12
  %493 = load ptr, ptr %492, align 8, !tbaa !46
  %494 = load i32, ptr %23, align 4, !tbaa !22
  %495 = zext i32 %494 to i64
  %496 = getelementptr inbounds ptr, ptr %493, i64 %495
  %497 = load ptr, ptr %496, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.aiBone, ptr %497, i32 0, i32 0
  %499 = invoke noundef zeroext i1 @_ZNK8aiStringeqERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %490, ptr noundef nonnull align 4 dereferenceable(1028) %498)
          to label %500 unwind label %524

500:                                              ; preds = %482
  br i1 %499, label %501, label %537

501:                                              ; preds = %500
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  store ptr @.str.51, ptr %24, align 8, !tbaa !5
  %502 = load ptr, ptr %4, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.aiMesh, ptr %502, i32 0, i32 12
  %504 = load ptr, ptr %503, align 8, !tbaa !46
  %505 = load i32, ptr %21, align 4, !tbaa !22
  %506 = zext i32 %505 to i64
  %507 = getelementptr inbounds ptr, ptr %504, i64 %506
  %508 = load ptr, ptr %507, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.aiBone, ptr %508, i32 0, i32 0
  %510 = invoke noundef ptr @_ZNK8aiString5C_StrEv(ptr noundef nonnull align 4 dereferenceable(1028) %509)
          to label %511 unwind label %528

511:                                              ; preds = %501
  %512 = icmp ne ptr null, %510
  br i1 %512, label %513, label %532

513:                                              ; preds = %511
  %514 = load ptr, ptr %4, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.aiMesh, ptr %514, i32 0, i32 12
  %516 = load ptr, ptr %515, align 8, !tbaa !46
  %517 = load i32, ptr %21, align 4, !tbaa !22
  %518 = zext i32 %517 to i64
  %519 = getelementptr inbounds ptr, ptr %516, i64 %518
  %520 = load ptr, ptr %519, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.aiBone, ptr %520, i32 0, i32 0
  %522 = invoke noundef ptr @_ZNK8aiString5C_StrEv(ptr noundef nonnull align 4 dereferenceable(1028) %521)
          to label %523 unwind label %528

523:                                              ; preds = %513
  store ptr %522, ptr %24, align 8, !tbaa !5
  br label %532

524:                                              ; preds = %482
  %525 = landingpad { ptr, i32 }
          cleanup
  %526 = extractvalue { ptr, i32 } %525, 0
  store ptr %526, ptr %8, align 8
  %527 = extractvalue { ptr, i32 } %525, 1
  store i32 %527, ptr %9, align 4
  br label %541

528:                                              ; preds = %532, %513, %501
  %529 = landingpad { ptr, i32 }
          cleanup
  %530 = extractvalue { ptr, i32 } %529, 0
  store ptr %530, ptr %8, align 8
  %531 = extractvalue { ptr, i32 } %529, 1
  store i32 %531, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  br label %541

532:                                              ; preds = %523, %511
  %533 = load i32, ptr %21, align 4, !tbaa !22
  %534 = load ptr, ptr %24, align 8, !tbaa !5
  %535 = load i32, ptr %23, align 4, !tbaa !22
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.52, i32 noundef %533, ptr noundef %534, i32 noundef %535) #6
          to label %536 unwind label %528

536:                                              ; preds = %532
  unreachable

537:                                              ; preds = %500
  br label %538

538:                                              ; preds = %537
  %539 = load i32, ptr %23, align 4, !tbaa !22
  %540 = add i32 %539, 1
  store i32 %540, ptr %23, align 4, !tbaa !22
  br label %475, !llvm.loop !52

541:                                              ; preds = %528, %524
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  br label %546

542:                                              ; preds = %481
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  br label %543

543:                                              ; preds = %542
  %544 = load i32, ptr %21, align 4, !tbaa !22
  %545 = add i32 %544, 1
  store i32 %545, ptr %21, align 4, !tbaa !22
  br label %418, !llvm.loop !53

546:                                              ; preds = %541, %443
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %596

547:                                              ; preds = %424
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  store i32 0, ptr %25, align 4, !tbaa !22
  br label %548

548:                                              ; preds = %592, %547
  %549 = load i32, ptr %25, align 4, !tbaa !22
  %550 = load ptr, ptr %4, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.aiMesh, ptr %550, i32 0, i32 1
  %552 = load i32, ptr %551, align 4, !tbaa !31
  %553 = icmp ult i32 %549, %552
  br i1 %553, label %555, label %554

554:                                              ; preds = %548
  store i32 30, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %595

555:                                              ; preds = %548
  %556 = load i32, ptr %25, align 4, !tbaa !22
  %557 = zext i32 %556 to i64
  %558 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_fSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %19, i64 noundef %557)
          to label %559 unwind label %587

559:                                              ; preds = %555
  %560 = load float, ptr %558, align 4, !tbaa !47
  %561 = fcmp une float %560, 0.000000e+00
  br i1 %561, label %562, label %591

562:                                              ; preds = %559
  %563 = load i32, ptr %25, align 4, !tbaa !22
  %564 = zext i32 %563 to i64
  %565 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_fSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %19, i64 noundef %564)
          to label %566 unwind label %587

566:                                              ; preds = %562
  %567 = load float, ptr %565, align 4, !tbaa !47
  %568 = fpext float %567 to double
  %569 = fcmp ole double %568, 0x3FEE147AE147AE14
  br i1 %569, label %578, label %570

570:                                              ; preds = %566
  %571 = load i32, ptr %25, align 4, !tbaa !22
  %572 = zext i32 %571 to i64
  %573 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_fSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %19, i64 noundef %572)
          to label %574 unwind label %587

574:                                              ; preds = %570
  %575 = load float, ptr %573, align 4, !tbaa !47
  %576 = fpext float %575 to double
  %577 = fcmp oge double %576, 1.050000e+00
  br i1 %577, label %578, label %591

578:                                              ; preds = %574, %566
  %579 = load i32, ptr %25, align 4, !tbaa !22
  %580 = load i32, ptr %25, align 4, !tbaa !22
  %581 = zext i32 %580 to i64
  %582 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_fSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %19, i64 noundef %581)
          to label %583 unwind label %587

583:                                              ; preds = %578
  %584 = load float, ptr %582, align 4, !tbaa !47
  %585 = fpext float %584 to double
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess13ReportWarningEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.53, i32 noundef %579, double noundef %585)
          to label %586 unwind label %587

586:                                              ; preds = %583
  br label %591

587:                                              ; preds = %583, %578, %570, %562, %555
  %588 = landingpad { ptr, i32 }
          cleanup
  %589 = extractvalue { ptr, i32 } %588, 0
  store ptr %589, ptr %8, align 8
  %590 = extractvalue { ptr, i32 } %588, 1
  store i32 %590, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %596

591:                                              ; preds = %586, %574, %559
  br label %592

592:                                              ; preds = %591
  %593 = load i32, ptr %25, align 4, !tbaa !22
  %594 = add i32 %593, 1
  store i32 %594, ptr %25, align 4, !tbaa !22
  br label %548, !llvm.loop !54

595:                                              ; preds = %554
  call void @_ZNSt10unique_ptrIA_fSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %605

596:                                              ; preds = %587, %546, %412, %400
  call void @_ZNSt10unique_ptrIA_fSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %606

597:                                              ; preds = %362
  %598 = load ptr, ptr %4, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.aiMesh, ptr %598, i32 0, i32 12
  %600 = load ptr, ptr %599, align 8, !tbaa !46
  %601 = icmp ne ptr %600, null
  br i1 %601, label %602, label %604

602:                                              ; preds = %597
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.54) #6
          to label %603 unwind label %324

603:                                              ; preds = %602
  unreachable

604:                                              ; preds = %597
  br label %605

605:                                              ; preds = %604, %595
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #7
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %7) #7
  ret void

606:                                              ; preds = %596, %338, %324, %311
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #7
  br label %607

607:                                              ; preds = %606, %290, %209
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %7) #7
  br label %608

608:                                              ; preds = %607
  %609 = load ptr, ptr %8, align 8
  %610 = load i32, ptr %9, align 4
  %611 = insertvalue { ptr, i32 } poison, ptr %609, 0
  %612 = insertvalue { ptr, i32 } %611, i32 %610, 1
  resume { ptr, i32 } %612
}

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK8aiStringeqERKS_(ptr noundef nonnull align 4 dereferenceable(1028), ptr noundef nonnull align 4 dereferenceable(1028)) #3 align 2

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

attributes #0 = { mustprogress noreturn 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 #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 nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { noreturn }
attributes #7 = { nounwind }
attributes #8 = { builtin allocsize(0) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 24}
!10 = !{!"_ZTSN6Assimp17ValidateDSProcessE", !11, i64 0, !6, i64 24}
!11 = !{!"_ZTSN6Assimp11BaseProcessE", !6, i64 8, !6, i64 16}
!12 = !{!13, !14, i64 32}
!13 = !{!"_ZTS7aiScene", !14, i64 0, !6, i64 8, !14, i64 16, !6, i64 24, !14, i64 32, !6, i64 40, !14, i64 48, !6, i64 56, !14, i64 64, !6, i64 72, !14, i64 80, !6, i64 88, !14, i64 96, !6, i64 104, !6, i64 112, !15, i64 120, !14, i64 1148, !6, i64 1152, !6, i64 1160}
!14 = !{!"int", !7, i64 0}
!15 = !{!"_ZTS8aiString", !14, i64 0, !7, i64 4}
!16 = !{!17, !14, i64 232}
!17 = !{!"_ZTS6aiMesh", !14, i64 0, !14, i64 4, !14, 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, !14, i64 216, !6, i64 224, !14, i64 232, !15, i64 236, !14, i64 1264, !6, i64 1272, !18, i64 1280, !19, i64 1284, !6, i64 1312}
!18 = !{!"_ZTS16aiMorphingMethod", !7, i64 0}
!19 = !{!"_ZTS6aiAABB", !20, i64 0, !20, i64 12}
!20 = !{!"_ZTS10aiVector3tIfE", !21, i64 0, !21, i64 4, !21, i64 8}
!21 = !{!"float", !7, i64 0}
!22 = !{!14, !14, i64 0}
!23 = !{!17, !14, i64 8}
!24 = !{!17, !6, i64 208}
!25 = !{!17, !14, i64 0}
!26 = !{!27, !14, i64 0}
!27 = !{!"_ZTS6aiFace", !14, i64 0, !6, i64 8}
!28 = !{!27, !6, i64 8}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!17, !14, i64 4}
!32 = !{!17, !6, i64 16}
!33 = !{!13, !14, i64 0}
!34 = !{!17, !6, i64 32}
!35 = !{!17, !6, i64 40}
!36 = distinct !{!36, !30}
!37 = distinct !{!37, !30}
!38 = !{!39, !39, i64 0}
!39 = !{!"bool", !7, i64 0}
!40 = distinct !{!40, !30}
!41 = !{i8 0, i8 2}
!42 = !{}
!43 = distinct !{!43, !30}
!44 = distinct !{!44, !30}
!45 = !{!17, !14, i64 216}
!46 = !{!17, !6, i64 224}
!47 = !{!21, !21, i64 0}
!48 = distinct !{!48, !30}
!49 = !{!50, !14, i64 1028}
!50 = !{!"_ZTS6aiBone", !15, i64 0, !14, i64 1028, !6, i64 1032, !6, i64 1040, !6, i64 1048, !51, i64 1056}
!51 = !{!"_ZTS12aiMatrix4x4tIfE", !21, i64 0, !21, i64 4, !21, i64 8, !21, i64 12, !21, i64 16, !21, i64 20, !21, i64 24, !21, i64 28, !21, i64 32, !21, i64 36, !21, i64 40, !21, i64 44, !21, i64 48, !21, i64 52, !21, i64 56, !21, i64 60}
!52 = distinct !{!52, !30}
!53 = distinct !{!53, !30}
!54 = distinct !{!54, !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.std::vector" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"struct.std::_Bit_reference" = type { ptr, i64 }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.5" }
%"struct.std::_Head_base.5" = type { ptr }
%struct.aiFace = type { i32, ptr }

@.str.32 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [95 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [55 x i8], align 1

; Function Attrs: mustprogress noreturn uwtable
declare dso_local void @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ...) local_unnamed_addr #0 align 2

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Assimp17ValidateDSProcess13ReportWarningEPKcz(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ...) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp17ValidateDSProcess8ValidateEPK6aiMesh(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %1) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::vector", align 8
  %4 = alloca %"struct.std::_Bit_reference", align 8
  %5 = alloca %"struct.std::_Bit_reference", align 8
  %6 = alloca %"class.std::unique_ptr", align 8
  %7 = getelementptr inbounds i8, ptr %0, i64 24
  %8 = load ptr, ptr %7, align 8, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %8, i64 32
  %10 = load i32, ptr %9, align 8, !tbaa !11
  %.not = icmp eq i32 %10, 0
  br i1 %.not, label %16, label %11

11:                                               ; preds = %2
  %12 = getelementptr inbounds i8, ptr %1, i64 232
  %13 = load i32, ptr %12, align 8, !tbaa !15
  %.not147 = icmp ult i32 %13, %10
  br i1 %.not147, label %16, label %14

14:                                               ; preds = %11
  %15 = add i32 %10, -1
  tail call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.32, i32 noundef %13, i32 noundef %15) #5
  unreachable

16:                                               ; preds = %11, %2
  %17 = getelementptr inbounds i8, ptr %1, i64 236
  tail call void @_ZN6Assimp17ValidateDSProcess8ValidateEPK8aiString(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %17)
  %18 = getelementptr inbounds i8, ptr %1, i64 8
  %19 = load i32, ptr %18, align 8, !tbaa !21
  %.not246 = icmp eq i32 %19, 0
  br i1 %.not246, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %16
  %20 = getelementptr inbounds i8, ptr %1, i64 208
  %21 = load ptr, ptr %20, align 8, !tbaa !22
  %22 = load i32, ptr %1, align 8, !tbaa !23
  %.not171 = icmp eq i32 %22, 0
  br i1 %.not171, label %.lr.ph.split.us, label %.lr.ph.split.preheader

.lr.ph.split.preheader:                           ; preds = %.lr.ph
  %23 = insertelement <4 x i32> poison, i32 %22, i64 0
  %24 = shufflevector <4 x i32> %23, <4 x i32> poison, <4 x i32> zeroinitializer
  %25 = and <4 x i32> %24, <i32 8, i32 1, i32 2, i32 4>
  %26 = icmp eq <4 x i32> %25, zeroinitializer
  %wide.trip.count = zext i32 %19 to i64
  %27 = extractelement <4 x i1> %26, i64 0
  %28 = extractelement <4 x i1> %26, i64 1
  %29 = extractelement <4 x i1> %26, i64 2
  %30 = extractelement <4 x i1> %26, i64 3
  br label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph
  %invariant.gep = getelementptr inbounds i8, ptr %21, i64 8
  %wide.trip.count287 = zext i32 %19 to i64
  br label %31

31:                                               ; preds = %33, %.lr.ph.split.us
  %indvars.iv284 = phi i64 [ %indvars.iv.next285, %33 ], [ 0, %.lr.ph.split.us ]
  %gep = getelementptr inbounds %struct.aiFace, ptr %invariant.gep, i64 %indvars.iv284
  %32 = load ptr, ptr %gep, align 8, !tbaa !24
  %.not172.us = icmp eq ptr %32, null
  br i1 %.not172.us, label %.split.us, label %33

33:                                               ; preds = %31
  %indvars.iv.next285 = add nuw nsw i64 %indvars.iv284, 1
  %exitcond288.not = icmp eq i64 %indvars.iv.next285, %wide.trip.count287
  br i1 %exitcond288.not, label %._crit_edge, label %31, !llvm.loop !26

._crit_edge:                                      ; preds = %55, %33, %16
  %34 = getelementptr inbounds i8, ptr %1, i64 4
  %35 = load i32, ptr %34, align 4, !tbaa !28
  %.not148 = icmp eq i32 %35, 0
  br i1 %.not148, label %62, label %56

.lr.ph.split:                                     ; preds = %.lr.ph.split.preheader, %55
  %indvars.iv = phi i64 [ 0, %.lr.ph.split.preheader ], [ %indvars.iv.next, %55 ]
  %36 = getelementptr inbounds %struct.aiFace, ptr %21, i64 %indvars.iv
  %37 = load i32, ptr %36, align 8, !tbaa !29
  switch i32 %37, label %49 [
    i32 0, label %38
    i32 1, label %40
    i32 2, label %43
    i32 3, label %46
  ]

38:                                               ; preds = %.lr.ph.split
  %39 = trunc nuw i64 %indvars.iv to i32
  tail call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.33, i32 noundef %39) #5
  unreachable

40:                                               ; preds = %.lr.ph.split
  br i1 %28, label %41, label %52

41:                                               ; preds = %40
  %42 = trunc nuw i64 %indvars.iv to i32
  tail call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.34, i32 noundef %42) #5
  unreachable

43:                                               ; preds = %.lr.ph.split
  br i1 %29, label %44, label %52

44:                                               ; preds = %43
  %45 = trunc nuw i64 %indvars.iv to i32
  tail call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.35, i32 noundef %45) #5
  unreachable

46:                                               ; preds = %.lr.ph.split
  br i1 %30, label %47, label %52

47:                                               ; preds = %46
  %48 = trunc nuw i64 %indvars.iv to i32
  tail call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.36, i32 noundef %48) #5
  unreachable

49:                                               ; preds = %.lr.ph.split
  br i1 %27, label %50, label %52

50:                                               ; preds = %49
  %51 = trunc nuw i64 %indvars.iv to i32
  tail call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.37, i32 noundef %51) #5
  unreachable

52:                                               ; preds = %40, %43, %46, %49
  %53 = getelementptr inbounds i8, ptr %36, i64 8
  %54 = load ptr, ptr %53, align 8, !tbaa !24
  %.not172 = icmp eq ptr %54, null
  br i1 %.not172, label %.split.us, label %55

.split.us:                                        ; preds = %52, %31
  %.us-phi.in = phi i64 [ %indvars.iv284, %31 ], [ %indvars.iv, %52 ]
  %.us-phi = trunc i64 %.us-phi.in to i32
  tail call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.38, i32 noundef %.us-phi) #5
  unreachable

55:                                               ; preds = %52
  %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_edge, label %.lr.ph.split, !llvm.loop !26

56:                                               ; preds = %._crit_edge
  %57 = getelementptr inbounds i8, ptr %1, i64 16
  %58 = load ptr, ptr %57, align 8, !tbaa !30
  %.not149 = icmp eq ptr %58, null
  br i1 %.not149, label %59, label %64

59:                                               ; preds = %56
  %60 = load ptr, ptr %7, align 8, !tbaa !5
  %61 = load i32, ptr %60, align 8, !tbaa !31
  %.not150 = icmp eq i32 %61, 0
  br i1 %.not150, label %62, label %64

62:                                               ; preds = %59, %._crit_edge
  %63 = tail call noundef ptr @_ZNK8aiString5C_StrEv(ptr noundef nonnull align 4 dereferenceable(1028) %17)
  tail call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.39, ptr noundef %63) #5
  unreachable

64:                                               ; preds = %59, %56
  %65 = icmp slt i32 %35, 0
  br i1 %65, label %66, label %67

66:                                               ; preds = %64
  tail call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.40, i32 noundef %35, i32 noundef 2147483647) #5
  unreachable

67:                                               ; preds = %64
  %68 = icmp slt i32 %19, 0
  br i1 %68, label %69, label %70

69:                                               ; preds = %67
  tail call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.41, i32 noundef %19, i32 noundef 2147483647) #5
  unreachable

70:                                               ; preds = %67
  %71 = getelementptr inbounds i8, ptr %1, i64 32
  %72 = load ptr, ptr %71, align 8, !tbaa !32
  %73 = icmp ne ptr %72, null
  %74 = getelementptr inbounds i8, ptr %1, i64 40
  %75 = load ptr, ptr %74, align 8, !tbaa !33
  %76 = icmp eq ptr %75, null
  %.not151 = xor i1 %73, %76
  br i1 %.not151, label %78, label %77

77:                                               ; preds = %70
  tail call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.42) #5
  unreachable

78:                                               ; preds = %70
  br i1 %.not246, label %85, label %79

79:                                               ; preds = %78
  %80 = getelementptr inbounds i8, ptr %1, i64 208
  %81 = load ptr, ptr %80, align 8, !tbaa !22
  %.not153 = icmp eq ptr %81, null
  br i1 %.not153, label %82, label %87

82:                                               ; preds = %79
  %83 = load ptr, ptr %7, align 8, !tbaa !5
  %84 = load i32, ptr %83, align 8, !tbaa !31
  %.not154 = icmp eq i32 %84, 0
  br i1 %.not154, label %85, label %87

85:                                               ; preds = %82, %78
  %86 = tail call noundef ptr @_ZNK8aiString5C_StrEv(ptr noundef nonnull align 4 dereferenceable(1028) %17)
  tail call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.43, ptr noundef %86) #5
  unreachable

87:                                               ; preds = %82, %79
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %3) #6
  call void @_ZNSt6vectorIbSaIbEEC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %3) #6
  %88 = load i32, ptr %34, align 4, !tbaa !28
  %89 = zext i32 %88 to i64
  invoke void @_ZNSt6vectorIbSaIbEE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(40) %3, i64 noundef %89, i1 noundef zeroext false)
          to label %.preheader177 unwind label %94

.preheader177:                                    ; preds = %87
  %90 = load i32, ptr %18, align 8, !tbaa !21
  %.not247 = icmp eq i32 %90, 0
  br i1 %.not247, label %.preheader175, label %.lr.ph223

.lr.ph223:                                        ; preds = %.preheader177
  %91 = getelementptr inbounds i8, ptr %4, i64 8
  br label %96

.preheader175:                                    ; preds = %._crit_edge221, %.preheader177
  %92 = load i32, ptr %34, align 4, !tbaa !28
  %.not249 = icmp eq i32 %92, 0
  br i1 %.not249, label %.critedge, label %.lr.ph226

.lr.ph226:                                        ; preds = %.preheader175
  %93 = getelementptr inbounds i8, ptr %5, i64 8
  br label %133

94:                                               ; preds = %87
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %265

96:                                               ; preds = %.lr.ph223, %._crit_edge221
  %97 = phi i32 [ %90, %.lr.ph223 ], [ %108, %._crit_edge221 ]
  %.0128222 = phi i32 [ 0, %.lr.ph223 ], [ %109, %._crit_edge221 ]
  %98 = load ptr, ptr %80, align 8, !tbaa !22
  %99 = zext i32 %.0128222 to i64
  %100 = getelementptr inbounds %struct.aiFace, ptr %98, i64 %99
  %101 = load i32, ptr %100, align 8, !tbaa !29
  %102 = icmp ugt i32 %101, 32767
  br i1 %102, label %104, label %.preheader176

.preheader176:                                    ; preds = %96
  %.not248 = icmp eq i32 %101, 0
  br i1 %.not248, label %._crit_edge221, label %.lr.ph220

.lr.ph220:                                        ; preds = %.preheader176
  %103 = getelementptr inbounds i8, ptr %100, i64 8
  br label %111

104:                                              ; preds = %96
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.44, i32 noundef %.0128222, i32 noundef %101, i32 noundef 32767) #5
          to label %105 unwind label %106

105:                                              ; preds = %104
  unreachable

106:                                              ; preds = %104
  %107 = landingpad { ptr, i32 }
          cleanup
  br label %265

._crit_edge221.loopexit:                          ; preds = %124
  %.pre = load i32, ptr %18, align 8, !tbaa !21
  br label %._crit_edge221

._crit_edge221:                                   ; preds = %._crit_edge221.loopexit, %.preheader176
  %108 = phi i32 [ %.pre, %._crit_edge221.loopexit ], [ %97, %.preheader176 ]
  %109 = add nuw i32 %.0128222, 1
  %110 = icmp ult i32 %109, %108
  br i1 %110, label %96, label %.preheader175, !llvm.loop !34

111:                                              ; preds = %.lr.ph220, %124
  %indvars.iv289 = phi i64 [ 0, %.lr.ph220 ], [ %indvars.iv.next290, %124 ]
  %112 = load ptr, ptr %103, align 8, !tbaa !24
  %113 = getelementptr inbounds i32, ptr %112, i64 %indvars.iv289
  %114 = load i32, ptr %113, align 4, !tbaa !35
  %115 = load i32, ptr %34, align 4, !tbaa !28
  %.not165 = icmp ult i32 %114, %115
  br i1 %.not165, label %121, label %116

116:                                              ; preds = %111
  %117 = trunc nuw i64 %indvars.iv289 to i32
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.45, i32 noundef %.0128222, i32 noundef %117) #5
          to label %118 unwind label %119

118:                                              ; preds = %116
  unreachable

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

121:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #6
  %122 = zext i32 %114 to i64
  %123 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %3, i64 noundef %122)
          to label %124 unwind label %131

124:                                              ; preds = %121
  %125 = extractvalue { ptr, i64 } %123, 0
  store ptr %125, ptr %4, align 8
  %126 = extractvalue { ptr, i64 } %123, 1
  store i64 %126, ptr %91, align 8
  %127 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt14_Bit_referenceaSEb(ptr noundef nonnull align 8 dereferenceable(16) %4, i1 noundef zeroext true) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #6
  %indvars.iv.next290 = add nuw nsw i64 %indvars.iv289, 1
  %128 = load i32, ptr %100, align 8, !tbaa !29
  %129 = zext i32 %128 to i64
  %130 = icmp ult i64 %indvars.iv.next290, %129
  br i1 %130, label %111, label %._crit_edge221.loopexit, !llvm.loop !36

131:                                              ; preds = %121
  %132 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #6
  br label %265

._crit_edge227:                                   ; preds = %135
  call void @_ZNSt6vectorIbSaIbEE5clearEv(ptr noundef nonnull align 8 dereferenceable(40) %3) #6
  br i1 %spec.select, label %144, label %147

133:                                              ; preds = %.lr.ph226, %135
  %indvars.iv292 = phi i64 [ 0, %.lr.ph226 ], [ %indvars.iv.next293, %135 ]
  %.0123224 = phi i1 [ false, %.lr.ph226 ], [ %spec.select, %135 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #6
  %134 = invoke { ptr, i64 } @_ZNSt6vectorIbSaIbEEixEm(ptr noundef nonnull align 8 dereferenceable(40) %3, i64 noundef %indvars.iv292)
          to label %135 unwind label %142

135:                                              ; preds = %133
  %136 = extractvalue { ptr, i64 } %134, 0
  store ptr %136, ptr %5, align 8
  %137 = extractvalue { ptr, i64 } %134, 1
  store i64 %137, ptr %93, align 8
  %138 = call noundef zeroext i1 @_ZNKSt14_Bit_referencecvbEv(ptr noundef nonnull align 8 dereferenceable(16) %5) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #6
  %not. = xor i1 %138, true
  %spec.select = select i1 %not., i1 true, i1 %.0123224
  %indvars.iv.next293 = add nuw nsw i64 %indvars.iv292, 1
  %139 = load i32, ptr %34, align 4, !tbaa !28
  %140 = zext i32 %139 to i64
  %141 = icmp ult i64 %indvars.iv.next293, %140
  br i1 %141, label %133, label %._crit_edge227, !llvm.loop !37

142:                                              ; preds = %133
  %143 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #6
  br label %265

144:                                              ; preds = %._crit_edge227
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess13ReportWarningEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.46)
          to label %147 unwind label %145

145:                                              ; preds = %262, %175, %144
  %146 = landingpad { ptr, i32 }
          cleanup
  br label %265

.critedge:                                        ; preds = %.preheader175
  call void @_ZNSt6vectorIbSaIbEE5clearEv(ptr noundef nonnull align 8 dereferenceable(40) %3) #6
  br label %147

147:                                              ; preds = %.critedge, %144, %._crit_edge227
  %148 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 0)
  br i1 %148, label %151, label %.lr.ph232.preheader

149:                                              ; preds = %166
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %265

151:                                              ; preds = %147
  %152 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 1)
  br i1 %152, label %153, label %.lr.ph232.preheader

153:                                              ; preds = %151
  %154 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 2)
  br i1 %154, label %155, label %.lr.ph232.preheader

155:                                              ; preds = %153
  %156 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 3)
  br i1 %156, label %157, label %.lr.ph232.preheader

157:                                              ; preds = %155
  %158 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 4)
  br i1 %158, label %159, label %.lr.ph232.preheader

159:                                              ; preds = %157
  %160 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 5)
  br i1 %160, label %161, label %.lr.ph232.preheader

161:                                              ; preds = %159
  %162 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 6)
  br i1 %162, label %163, label %.lr.ph232.preheader

163:                                              ; preds = %161
  %164 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef 7)
  br i1 %164, label %._crit_edge233, label %.lr.ph232.preheader

.lr.ph232.preheader:                              ; preds = %147, %151, %153, %155, %157, %159, %161, %163
  %.1230.ph = phi i32 [ 0, %147 ], [ 1, %151 ], [ 2, %153 ], [ 3, %155 ], [ 4, %157 ], [ 5, %159 ], [ 6, %161 ], [ 7, %163 ]
  br label %.lr.ph232

.lr.ph232:                                        ; preds = %.lr.ph232.preheader, %168
  %.1230 = phi i32 [ %169, %168 ], [ %.1230.ph, %.lr.ph232.preheader ]
  %165 = call noundef zeroext i1 @_ZNK6aiMesh15HasVertexColorsEj(ptr noundef nonnull align 8 dereferenceable(1320) %1, i32 noundef %.1230)
  br i1 %165, label %166, label %168

166:                                              ; preds = %.lr.ph232
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.47, i32 noundef %.1230) #5
          to label %167 unwind label %149

167:                                              ; preds = %166
  unreachable

168:                                              ; preds = %.lr.ph232
  %169 = add nuw nsw i32 %.1230, 1
  %exitcond295.not = icmp eq i32 %169, 8
  br i1 %exitcond295.not, label %._crit_edge233, label %.lr.ph232, !llvm.loop !38

._crit_edge233:                                   ; preds = %168, %163
  %170 = getelementptr inbounds i8, ptr %1, i64 216
  %171 = load i32, ptr %170, align 8, !tbaa !39
  %.not155 = icmp eq i32 %171, 0
  %172 = getelementptr inbounds i8, ptr %1, i64 224
  %173 = load ptr, ptr %172, align 8, !tbaa !40
  %.not156 = icmp eq ptr %173, null
  br i1 %.not155, label %261, label %174

174:                                              ; preds = %._crit_edge233
  br i1 %.not156, label %175, label %177

175:                                              ; preds = %174
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.48, i32 noundef %171) #5
          to label %176 unwind label %145

176:                                              ; preds = %175
  unreachable

177:                                              ; preds = %174
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #6
  call void @_ZNSt10unique_ptrIA_fSt14default_deleteIS0_EEC2IS2_vEEDn(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr null) #6
  %178 = load i32, ptr %34, align 4, !tbaa !28
  %.not158 = icmp eq i32 %178, 0
  br i1 %.not158, label %.loopexit174, label %179

179:                                              ; preds = %177
  %180 = zext i32 %178 to i64
  %181 = shl nuw nsw i64 %180, 2
  %182 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %181) #7
          to label %183 unwind label %185

183:                                              ; preds = %179
  call void @_ZNSt10unique_ptrIA_fSt14default_deleteIS0_EE5resetIPfvEEvT_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull %182) #6
  %184 = load i32, ptr %34, align 4, !tbaa !28
  %.not250 = icmp eq i32 %184, 0
  br i1 %.not250, label %.loopexit174, label %.lr.ph236

185:                                              ; preds = %179
  %186 = landingpad { ptr, i32 }
          cleanup
  br label %260

.lr.ph236:                                        ; preds = %183, %.lr.ph236
  %indvars.iv296 = phi i64 [ %indvars.iv.next297, %.lr.ph236 ], [ 0, %183 ]
  %187 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_fSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %6, i64 noundef %indvars.iv296)
  store float 0.000000e+00, ptr %187, align 4, !tbaa !41
  %indvars.iv.next297 = add nuw nsw i64 %indvars.iv296, 1
  %188 = load i32, ptr %34, align 4, !tbaa !28
  %189 = zext i32 %188 to i64
  %190 = icmp ult i64 %indvars.iv.next297, %189
  br i1 %190, label %.lr.ph236, label %.loopexit174, !llvm.loop !42

.loopexit174:                                     ; preds = %.lr.ph236, %183, %177
  %191 = phi i32 [ 0, %183 ], [ 0, %177 ], [ %188, %.lr.ph236 ]
  %192 = load i32, ptr %170, align 8, !tbaa !39
  %.not251 = icmp eq i32 %192, 0
  br i1 %.not251, label %.preheader, label %.lr.ph242

.loopexit:                                        ; preds = %232, %206
  %.pre-phi = phi i64 [ %208, %206 ], [ %234, %232 ]
  %193 = icmp ult i64 %indvars.iv.next305, %.pre-phi
  %indvars.iv.next300 = add nuw nsw i64 %indvars.iv299, 1
  br i1 %193, label %.lr.ph242, label %.preheader.loopexit, !llvm.loop !43

.preheader.loopexit:                              ; preds = %.loopexit
  %.pre310 = load i32, ptr %34, align 4, !tbaa !28
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit, %.loopexit174
  %194 = phi i32 [ %.pre310, %.preheader.loopexit ], [ %191, %.loopexit174 ]
  %.not252 = icmp eq i32 %194, 0
  br i1 %.not252, label %._crit_edge245, label %.lr.ph244

.lr.ph242:                                        ; preds = %.loopexit174, %.loopexit
  %indvars.iv304 = phi i64 [ %indvars.iv.next305, %.loopexit ], [ 0, %.loopexit174 ]
  %indvars.iv299 = phi i64 [ %indvars.iv.next300, %.loopexit ], [ 1, %.loopexit174 ]
  %195 = load ptr, ptr %172, align 8, !tbaa !40
  %196 = getelementptr inbounds ptr, ptr %195, i64 %indvars.iv304
  %197 = load ptr, ptr %196, align 8, !tbaa !44
  %198 = getelementptr inbounds i8, ptr %197, i64 1028
  %199 = load i32, ptr %198, align 4, !tbaa !45
  %200 = icmp slt i32 %199, 0
  br i1 %200, label %201, label %204

201:                                              ; preds = %.lr.ph242
  %202 = trunc nuw i64 %indvars.iv304 to i32
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.49, i32 noundef %202, i32 noundef %199, i32 noundef 2147483647) #5
          to label %203 unwind label %.loopexit.split-lp

203:                                              ; preds = %201
  unreachable

.loopexit173:                                     ; preds = %204
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %260

.loopexit.split-lp:                               ; preds = %201
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %260

204:                                              ; preds = %.lr.ph242
  %205 = call noundef ptr @_ZNKSt10unique_ptrIA_fSt14default_deleteIS0_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #6
  invoke void @_ZN6Assimp17ValidateDSProcess8ValidateEPK6aiMeshPK6aiBonePf(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %1, ptr noundef nonnull %197, ptr noundef %205)
          to label %206 unwind label %.loopexit173

206:                                              ; preds = %204
  %indvars.iv.next305 = add nuw nsw i64 %indvars.iv304, 1
  %207 = load i32, ptr %170, align 8, !tbaa !39
  %208 = zext i32 %207 to i64
  %209 = icmp ult i64 %indvars.iv.next305, %208
  br i1 %209, label %.lr.ph239, label %.loopexit

.lr.ph239:                                        ; preds = %206, %232
  %indvars.iv301 = phi i64 [ %indvars.iv.next302, %232 ], [ %indvars.iv299, %206 ]
  %210 = load ptr, ptr %172, align 8, !tbaa !40
  %211 = getelementptr inbounds ptr, ptr %210, i64 %indvars.iv304
  %212 = load ptr, ptr %211, align 8, !tbaa !44
  %213 = getelementptr inbounds ptr, ptr %210, i64 %indvars.iv301
  %214 = load ptr, ptr %213, align 8, !tbaa !44
  %215 = call noundef zeroext i1 @_ZNK8aiStringeqERKS_(ptr noundef nonnull align 4 dereferenceable(1028) %212, ptr noundef nonnull align 4 dereferenceable(1028) %214)
  br i1 %215, label %216, label %232

216:                                              ; preds = %.lr.ph239
  %217 = trunc nuw i64 %indvars.iv304 to i32
  %218 = trunc nuw i64 %indvars.iv301 to i32
  %219 = load ptr, ptr %172, align 8, !tbaa !40
  %220 = getelementptr inbounds ptr, ptr %219, i64 %indvars.iv304
  %221 = load ptr, ptr %220, align 8, !tbaa !44
  %222 = call noundef ptr @_ZNK8aiString5C_StrEv(ptr noundef nonnull align 4 dereferenceable(1028) %221)
  %.not160 = icmp eq ptr %222, null
  br i1 %.not160, label %230, label %223

223:                                              ; preds = %216
  %224 = load ptr, ptr %172, align 8, !tbaa !40
  %225 = getelementptr inbounds ptr, ptr %224, i64 %indvars.iv304
  %226 = load ptr, ptr %225, align 8, !tbaa !44
  %227 = call noundef ptr @_ZNK8aiString5C_StrEv(ptr noundef nonnull align 4 dereferenceable(1028) %226)
  br label %230

228:                                              ; preds = %230
  %229 = landingpad { ptr, i32 }
          cleanup
  br label %260

230:                                              ; preds = %223, %216
  %.0116 = phi ptr [ %227, %223 ], [ @.str.51, %216 ]
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.52, i32 noundef %217, ptr noundef %.0116, i32 noundef %218) #5
          to label %231 unwind label %228

231:                                              ; preds = %230
  unreachable

232:                                              ; preds = %.lr.ph239
  %indvars.iv.next302 = add nuw nsw i64 %indvars.iv301, 1
  %233 = load i32, ptr %170, align 8, !tbaa !39
  %234 = zext i32 %233 to i64
  %235 = icmp ult i64 %indvars.iv.next302, %234
  br i1 %235, label %.lr.ph239, label %.loopexit, !llvm.loop !48

._crit_edge245:                                   ; preds = %256, %.preheader
  call void @_ZNSt10unique_ptrIA_fSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  br label %264

.lr.ph244:                                        ; preds = %.preheader, %256
  %indvars.iv307 = phi i64 [ %indvars.iv.next308, %256 ], [ 0, %.preheader ]
  %236 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_fSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %6, i64 noundef %indvars.iv307)
  %237 = load float, ptr %236, align 4, !tbaa !41
  %238 = fcmp une float %237, 0.000000e+00
  br i1 %238, label %239, label %256

239:                                              ; preds = %.lr.ph244
  %240 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_fSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %6, i64 noundef %indvars.iv307)
  %241 = load float, ptr %240, align 4, !tbaa !41
  %242 = fpext float %241 to double
  %243 = fcmp ugt double %242, 0x3FEE147AE147AE14
  br i1 %243, label %244, label %249

244:                                              ; preds = %239
  %245 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_fSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %6, i64 noundef %indvars.iv307)
  %246 = load float, ptr %245, align 4, !tbaa !41
  %247 = fpext float %246 to double
  %248 = fcmp ult double %247, 1.050000e+00
  br i1 %248, label %256, label %249

249:                                              ; preds = %244, %239
  %250 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt10unique_ptrIA_fSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %6, i64 noundef %indvars.iv307)
  %251 = load float, ptr %250, align 4, !tbaa !41
  %252 = fpext float %251 to double
  %253 = trunc nuw i64 %indvars.iv307 to i32
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess13ReportWarningEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.53, i32 noundef %253, double noundef %252)
          to label %256 unwind label %254

254:                                              ; preds = %249
  %255 = landingpad { ptr, i32 }
          cleanup
  br label %260

256:                                              ; preds = %.lr.ph244, %244, %249
  %indvars.iv.next308 = add nuw nsw i64 %indvars.iv307, 1
  %257 = load i32, ptr %34, align 4, !tbaa !28
  %258 = zext i32 %257 to i64
  %259 = icmp ult i64 %indvars.iv.next308, %258
  br i1 %259, label %.lr.ph244, label %._crit_edge245, !llvm.loop !49

260:                                              ; preds = %.loopexit173, %.loopexit.split-lp, %228, %254, %185
  %.pn.pn = phi { ptr, i32 } [ %255, %254 ], [ %186, %185 ], [ %229, %228 ], [ %lpad.loopexit, %.loopexit173 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZNSt10unique_ptrIA_fSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  br label %265

261:                                              ; preds = %._crit_edge233
  br i1 %.not156, label %264, label %262

262:                                              ; preds = %261
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.54) #5
          to label %263 unwind label %145

263:                                              ; preds = %262
  unreachable

264:                                              ; preds = %261, %._crit_edge245
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %3) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %3) #6
  ret void

265:                                              ; preds = %142, %145, %149, %260, %106, %131, %119, %94
  %.pn168.pn = phi { ptr, i32 } [ %95, %94 ], [ %107, %106 ], [ %120, %119 ], [ %132, %131 ], [ %143, %142 ], [ %150, %149 ], [ %.pn.pn, %260 ], [ %146, %145 ]
  call void @_ZNSt13_Bvector_baseISaIbEED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %3) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %3) #6
  resume { ptr, i32 } %.pn168.pn
}

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIbSaIbEE6resizeEmb(ptr noundef nonnull align 8 dereferenceable(40), i64 noundef, i1 noundef zeroext) 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 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: 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 nounwind uwtable
declare dso_local void @_ZNSt6vectorIbSaIbEE5clearEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #3 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK8aiStringeqERKS_(ptr noundef nonnull align 4 dereferenceable(1028), ptr noundef nonnull align 4 dereferenceable(1028)) local_unnamed_addr #3 align 2

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

attributes #0 = { mustprogress noreturn 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 #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 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { noreturn }
attributes #6 = { nounwind }
attributes #7 = { builtin allocsize(0) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !8, i64 24}
!6 = !{!"_ZTSN6Assimp17ValidateDSProcessE", !7, i64 0, !8, i64 24}
!7 = !{!"_ZTSN6Assimp11BaseProcessE", !8, i64 8, !8, i64 16}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!12, !13, i64 32}
!12 = !{!"_ZTS7aiScene", !13, i64 0, !8, i64 8, !13, i64 16, !8, i64 24, !13, i64 32, !8, i64 40, !13, i64 48, !8, i64 56, !13, i64 64, !8, i64 72, !13, i64 80, !8, i64 88, !13, i64 96, !8, i64 104, !8, i64 112, !14, i64 120, !13, i64 1148, !8, i64 1152, !8, i64 1160}
!13 = !{!"int", !9, i64 0}
!14 = !{!"_ZTS8aiString", !13, i64 0, !9, i64 4}
!15 = !{!16, !13, i64 232}
!16 = !{!"_ZTS6aiMesh", !13, i64 0, !13, i64 4, !13, i64 8, !8, i64 16, !8, i64 24, !8, i64 32, !8, i64 40, !9, i64 48, !9, i64 112, !9, i64 176, !8, i64 208, !13, i64 216, !8, i64 224, !13, i64 232, !14, i64 236, !13, i64 1264, !8, i64 1272, !17, i64 1280, !18, i64 1284, !8, i64 1312}
!17 = !{!"_ZTS16aiMorphingMethod", !9, i64 0}
!18 = !{!"_ZTS6aiAABB", !19, i64 0, !19, i64 12}
!19 = !{!"_ZTS10aiVector3tIfE", !20, i64 0, !20, i64 4, !20, i64 8}
!20 = !{!"float", !9, i64 0}
!21 = !{!16, !13, i64 8}
!22 = !{!16, !8, i64 208}
!23 = !{!16, !13, i64 0}
!24 = !{!25, !8, i64 8}
!25 = !{!"_ZTS6aiFace", !13, i64 0, !8, i64 8}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!16, !13, i64 4}
!29 = !{!25, !13, i64 0}
!30 = !{!16, !8, i64 16}
!31 = !{!12, !13, i64 0}
!32 = !{!16, !8, i64 32}
!33 = !{!16, !8, i64 40}
!34 = distinct !{!34, !27}
!35 = !{!13, !13, i64 0}
!36 = distinct !{!36, !27}
!37 = distinct !{!37, !27}
!38 = distinct !{!38, !27}
!39 = !{!16, !13, i64 216}
!40 = !{!16, !8, i64 224}
!41 = !{!20, !20, i64 0}
!42 = distinct !{!42, !27}
!43 = distinct !{!43, !27}
!44 = !{!8, !8, i64 0}
!45 = !{!46, !13, i64 1028}
!46 = !{!"_ZTS6aiBone", !14, i64 0, !13, i64 1028, !8, i64 1032, !8, i64 1040, !8, i64 1048, !47, i64 1056}
!47 = !{!"_ZTS12aiMatrix4x4tIfE", !20, i64 0, !20, i64 4, !20, i64 8, !20, i64 12, !20, i64 16, !20, i64 20, !20, i64 24, !20, i64 28, !20, i64 32, !20, i64 36, !20, i64 40, !20, i64 44, !20, i64 48, !20, i64 52, !20, i64 56, !20, i64 60}
!48 = distinct !{!48, !27}
!49 = distinct !{!49, !27}


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