; 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.6" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<aiTextureMapping, std::allocator<aiTextureMapping>>::_Vector_impl" }
%"struct.std::_Vector_base<aiTextureMapping, std::allocator<aiTextureMapping>>::_Vector_impl" = type { %"struct.std::_Vector_base<aiTextureMapping, std::allocator<aiTextureMapping>>::_Vector_impl_data" }
%"struct.std::_Vector_base<aiTextureMapping, std::allocator<aiTextureMapping>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.7" = type { i8 }
%struct.aiMaterial = type { ptr, i32, i32 }
%struct.aiMaterialProperty = type { %struct.aiString, i32, i32, i32, i32, ptr }
%struct.aiString = type { i32, [1024 x i8] }
%"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.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 }

@.str.1 = external hidden unnamed_addr constant [130 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [46 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

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

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

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) #2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp17ValidateDSProcess24SearchForInvalidTexturesEPK10aiMaterial13aiTextureType(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %1, i32 noundef %2) #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %"class.std::vector.6", align 8
  %15 = alloca %"class.std::allocator.7", align 1
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i8, align 1
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store i32 %2, ptr %6, align 4, !tbaa !9
  %26 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  %27 = load i32, ptr %6, align 4, !tbaa !9
  %28 = call ptr @aiTextureTypeToString(i32 noundef %27)
  store ptr %28, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  store i32 0, ptr %8, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  store i32 -1, ptr %9, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 0, ptr %10, align 4, !tbaa !11
  br label %29

29:                                               ; preds = %80, %3
  %30 = load i32, ptr %10, align 4, !tbaa !11
  %31 = load ptr, ptr %5, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.aiMaterial, ptr %31, i32 0, i32 1
  %33 = load i32, ptr %32, align 8, !tbaa !13
  %34 = icmp ult i32 %30, %33
  br i1 %34, label %36, label %35

35:                                               ; preds = %29
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  br label %83

36:                                               ; preds = %29
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %37 = load ptr, ptr %5, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.aiMaterial, ptr %37, i32 0, i32 0
  %39 = load ptr, ptr %38, align 8, !tbaa !15
  %40 = load i32, ptr %10, align 4, !tbaa !11
  %41 = zext i32 %40 to i64
  %42 = getelementptr inbounds ptr, ptr %39, i64 %41
  %43 = load ptr, ptr %42, align 8, !tbaa !5
  store ptr %43, ptr %11, align 8, !tbaa !5
  %44 = load ptr, ptr %11, align 8, !tbaa !5
  %45 = icmp ne ptr null, %44
  br i1 %45, label %47, label %46

46:                                               ; preds = %36
  call void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef @.str.63, ptr noundef @.str.1, i32 noundef 504)
  br label %47

47:                                               ; preds = %46, %36
  %48 = phi i1 [ true, %36 ], [ false, %46 ]
  %49 = load ptr, ptr %11, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.aiMaterialProperty, ptr %49, i32 0, i32 0
  %51 = getelementptr inbounds %struct.aiString, ptr %50, i32 0, i32 1
  %52 = getelementptr inbounds [1024 x i8], ptr %51, i64 0, i64 0
  %53 = call i32 @strcmp(ptr noundef %52, ptr noundef @.str.64) #8
  %54 = icmp ne i32 %53, 0
  br i1 %54, label %79, label %55

55:                                               ; preds = %47
  %56 = load ptr, ptr %11, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.aiMaterialProperty, ptr %56, i32 0, i32 1
  %58 = load i32, ptr %57, align 4, !tbaa !16
  %59 = load i32, ptr %6, align 4, !tbaa !9
  %60 = icmp eq i32 %58, %59
  br i1 %60, label %61, label %79

61:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  %62 = load ptr, ptr %11, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.aiMaterialProperty, ptr %62, i32 0, i32 2
  %64 = load i32, ptr %63, align 8, !tbaa !20
  store i32 %64, ptr %12, align 4, !tbaa !11
  %65 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %9, ptr noundef nonnull align 4 dereferenceable(4) %12)
  %66 = load i32, ptr %65, align 4, !tbaa !11
  store i32 %66, ptr %9, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  %67 = load i32, ptr %8, align 4, !tbaa !11
  %68 = add nsw i32 %67, 1
  store i32 %68, ptr %8, align 4, !tbaa !11
  %69 = load ptr, ptr %11, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.aiMaterialProperty, ptr %69, i32 0, i32 4
  %71 = load i32, ptr %70, align 8, !tbaa !21
  %72 = icmp ne i32 3, %71
  br i1 %72, label %73, label %78

73:                                               ; preds = %61
  %74 = load ptr, ptr %11, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.aiMaterialProperty, ptr %74, i32 0, i32 0
  %76 = getelementptr inbounds %struct.aiString, ptr %75, i32 0, i32 1
  %77 = getelementptr inbounds [1024 x i8], ptr %76, i64 0, i64 0
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.65, ptr noundef %77) #9
  unreachable

78:                                               ; preds = %61
  br label %79

79:                                               ; preds = %78, %55, %47
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  br label %80

80:                                               ; preds = %79
  %81 = load i32, ptr %10, align 4, !tbaa !11
  %82 = add i32 %81, 1
  store i32 %82, ptr %10, align 4, !tbaa !11
  br label %29, !llvm.loop !22

83:                                               ; preds = %35
  %84 = load i32, ptr %9, align 4, !tbaa !11
  %85 = add nsw i32 %84, 1
  %86 = load i32, ptr %8, align 4, !tbaa !11
  %87 = icmp ne i32 %85, %86
  br i1 %87, label %88, label %93

88:                                               ; preds = %83
  %89 = load ptr, ptr %7, align 8, !tbaa !5
  %90 = load i32, ptr %9, align 4, !tbaa !11
  %91 = load i32, ptr %8, align 4, !tbaa !11
  %92 = load ptr, ptr %7, align 8, !tbaa !5
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.66, ptr noundef %89, i32 noundef %90, i32 noundef %91, ptr noundef %92) #9
  unreachable

93:                                               ; preds = %83
  %94 = load i32, ptr %8, align 4, !tbaa !11
  %95 = icmp ne i32 %94, 0
  br i1 %95, label %97, label %96

96:                                               ; preds = %93
  store i32 1, ptr %13, align 4
  br label %362

97:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #7
  %98 = load i32, ptr %8, align 4, !tbaa !11
  %99 = sext i32 %98 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #7
  call void @_ZNSaI16aiTextureMappingEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #7
  invoke void @_ZNSt6vectorI16aiTextureMappingSaIS0_EEC2EmRKS1_(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %99, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %100 unwind label %108

100:                                              ; preds = %97
  call void @_ZNSt15__new_allocatorI16aiTextureMappingED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #7
  store i8 1, ptr %18, align 1, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 0, ptr %19, align 4, !tbaa !11
  br label %101

101:                                              ; preds = %309, %100
  %102 = load i32, ptr %19, align 4, !tbaa !11
  %103 = load ptr, ptr %5, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.aiMaterial, ptr %103, i32 0, i32 1
  %105 = load i32, ptr %104, align 8, !tbaa !13
  %106 = icmp ult i32 %102, %105
  br i1 %106, label %112, label %107

107:                                              ; preds = %101
  store i32 5, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  br label %313

108:                                              ; preds = %97
  %109 = landingpad { ptr, i32 }
          cleanup
  %110 = extractvalue { ptr, i32 } %109, 0
  store ptr %110, ptr %16, align 8
  %111 = extractvalue { ptr, i32 } %109, 1
  store i32 %111, ptr %17, align 4
  call void @_ZNSt15__new_allocatorI16aiTextureMappingED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #7
  br label %366

112:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %113 = load ptr, ptr %5, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.aiMaterial, ptr %113, i32 0, i32 0
  %115 = load ptr, ptr %114, align 8, !tbaa !15
  %116 = load i32, ptr %19, align 4, !tbaa !11
  %117 = zext i32 %116 to i64
  %118 = getelementptr inbounds ptr, ptr %115, i64 %117
  %119 = load ptr, ptr %118, align 8, !tbaa !5
  store ptr %119, ptr %20, align 8, !tbaa !5
  %120 = load ptr, ptr %20, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.aiMaterialProperty, ptr %120, i32 0, i32 1
  %122 = load i32, ptr %121, align 4, !tbaa !16
  %123 = load i32, ptr %6, align 4, !tbaa !9
  %124 = icmp ne i32 %122, %123
  br i1 %124, label %125, label %126

125:                                              ; preds = %112
  store i32 7, ptr %13, align 4
  br label %306

126:                                              ; preds = %112
  %127 = load ptr, ptr %20, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.aiMaterialProperty, ptr %127, i32 0, i32 2
  %129 = load i32, ptr %128, align 8, !tbaa !20
  %130 = load i32, ptr %8, align 4, !tbaa !11
  %131 = icmp sge i32 %129, %130
  br i1 %131, label %132, label %143

132:                                              ; preds = %126
  %133 = load ptr, ptr %20, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.aiMaterialProperty, ptr %133, i32 0, i32 2
  %135 = load i32, ptr %134, align 8, !tbaa !20
  %136 = load i32, ptr %8, align 4, !tbaa !11
  %137 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.67, i32 noundef %135, i32 noundef %136, ptr noundef %137) #9
          to label %138 unwind label %139

138:                                              ; preds = %132
  unreachable

139:                                              ; preds = %232, %201, %161, %132
  %140 = landingpad { ptr, i32 }
          cleanup
  %141 = extractvalue { ptr, i32 } %140, 0
  store ptr %141, ptr %16, align 8
  %142 = extractvalue { ptr, i32 } %140, 1
  store i32 %142, ptr %17, align 4
  br label %312

143:                                              ; preds = %126
  %144 = load ptr, ptr %20, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.aiMaterialProperty, ptr %144, i32 0, i32 0
  %146 = getelementptr inbounds %struct.aiString, ptr %145, i32 0, i32 1
  %147 = getelementptr inbounds [1024 x i8], ptr %146, i64 0, i64 0
  %148 = call i32 @strcmp(ptr noundef %147, ptr noundef @.str.68) #8
  %149 = icmp ne i32 %148, 0
  br i1 %149, label %183, label %150

150:                                              ; preds = %143
  %151 = load ptr, ptr %20, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.aiMaterialProperty, ptr %151, i32 0, i32 4
  %153 = load i32, ptr %152, align 8, !tbaa !21
  %154 = icmp ne i32 4, %153
  br i1 %154, label %161, label %155

155:                                              ; preds = %150
  %156 = load ptr, ptr %20, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.aiMaterialProperty, ptr %156, i32 0, i32 3
  %158 = load i32, ptr %157, align 4, !tbaa !26
  %159 = zext i32 %158 to i64
  %160 = icmp ult i64 %159, 4
  br i1 %160, label %161, label %173

161:                                              ; preds = %155, %150
  %162 = load ptr, ptr %20, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.aiMaterialProperty, ptr %162, i32 0, i32 0
  %164 = getelementptr inbounds %struct.aiString, ptr %163, i32 0, i32 1
  %165 = getelementptr inbounds [1024 x i8], ptr %164, i64 0, i64 0
  %166 = load ptr, ptr %20, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.aiMaterialProperty, ptr %166, i32 0, i32 2
  %168 = load i32, ptr %167, align 8, !tbaa !20
  %169 = load ptr, ptr %20, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.aiMaterialProperty, ptr %169, i32 0, i32 3
  %171 = load i32, ptr %170, align 4, !tbaa !26
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.69, ptr noundef %165, i32 noundef %168, i32 noundef %171) #9
          to label %172 unwind label %139

172:                                              ; preds = %161
  unreachable

173:                                              ; preds = %155
  %174 = load ptr, ptr %20, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.aiMaterialProperty, ptr %174, i32 0, i32 5
  %176 = load ptr, ptr %175, align 8, !tbaa !27
  %177 = load i32, ptr %176, align 4, !tbaa !28
  %178 = load ptr, ptr %20, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.aiMaterialProperty, ptr %178, i32 0, i32 2
  %180 = load i32, ptr %179, align 8, !tbaa !20
  %181 = zext i32 %180 to i64
  %182 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI16aiTextureMappingSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %181) #7
  store i32 %177, ptr %182, align 4, !tbaa !28
  br label %305

183:                                              ; preds = %143
  %184 = load ptr, ptr %20, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.aiMaterialProperty, ptr %184, i32 0, i32 0
  %186 = getelementptr inbounds %struct.aiString, ptr %185, i32 0, i32 1
  %187 = getelementptr inbounds [1024 x i8], ptr %186, i64 0, i64 0
  %188 = call i32 @strcmp(ptr noundef %187, ptr noundef @.str.70) #8
  %189 = icmp ne i32 %188, 0
  br i1 %189, label %214, label %190

190:                                              ; preds = %183
  %191 = load ptr, ptr %20, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.aiMaterialProperty, ptr %191, i32 0, i32 4
  %193 = load i32, ptr %192, align 8, !tbaa !21
  %194 = icmp ne i32 1, %193
  br i1 %194, label %201, label %195

195:                                              ; preds = %190
  %196 = load ptr, ptr %20, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.aiMaterialProperty, ptr %196, i32 0, i32 3
  %198 = load i32, ptr %197, align 4, !tbaa !26
  %199 = zext i32 %198 to i64
  %200 = icmp ult i64 %199, 20
  br i1 %200, label %201, label %213

201:                                              ; preds = %195, %190
  %202 = load ptr, ptr %20, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.aiMaterialProperty, ptr %202, i32 0, i32 0
  %204 = getelementptr inbounds %struct.aiString, ptr %203, i32 0, i32 1
  %205 = getelementptr inbounds [1024 x i8], ptr %204, i64 0, i64 0
  %206 = load ptr, ptr %20, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.aiMaterialProperty, ptr %206, i32 0, i32 2
  %208 = load i32, ptr %207, align 8, !tbaa !20
  %209 = load ptr, ptr %20, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.aiMaterialProperty, ptr %209, i32 0, i32 3
  %211 = load i32, ptr %210, align 4, !tbaa !26
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.71, ptr noundef %205, i32 noundef %208, i32 noundef %211) #9
          to label %212 unwind label %139

212:                                              ; preds = %201
  unreachable

213:                                              ; preds = %195
  br label %304

214:                                              ; preds = %183
  %215 = load ptr, ptr %20, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.aiMaterialProperty, ptr %215, i32 0, i32 0
  %217 = getelementptr inbounds %struct.aiString, ptr %216, i32 0, i32 1
  %218 = getelementptr inbounds [1024 x i8], ptr %217, i64 0, i64 0
  %219 = call i32 @strcmp(ptr noundef %218, ptr noundef @.str.72) #8
  %220 = icmp ne i32 %219, 0
  br i1 %220, label %303, label %221

221:                                              ; preds = %214
  %222 = load ptr, ptr %20, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.aiMaterialProperty, ptr %222, i32 0, i32 4
  %224 = load i32, ptr %223, align 8, !tbaa !21
  %225 = icmp ne i32 4, %224
  br i1 %225, label %232, label %226

226:                                              ; preds = %221
  %227 = load ptr, ptr %20, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.aiMaterialProperty, ptr %227, i32 0, i32 3
  %229 = load i32, ptr %228, align 4, !tbaa !26
  %230 = zext i32 %229 to i64
  %231 = icmp ugt i64 4, %230
  br i1 %231, label %232, label %244

232:                                              ; preds = %226, %221
  %233 = load ptr, ptr %20, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.aiMaterialProperty, ptr %233, i32 0, i32 0
  %235 = getelementptr inbounds %struct.aiString, ptr %234, i32 0, i32 1
  %236 = getelementptr inbounds [1024 x i8], ptr %235, i64 0, i64 0
  %237 = load ptr, ptr %20, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.aiMaterialProperty, ptr %237, i32 0, i32 2
  %239 = load i32, ptr %238, align 8, !tbaa !20
  %240 = load ptr, ptr %20, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.aiMaterialProperty, ptr %240, i32 0, i32 3
  %242 = load i32, ptr %241, align 4, !tbaa !26
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.69, ptr noundef %236, i32 noundef %239, i32 noundef %242) #9
          to label %243 unwind label %139

243:                                              ; preds = %232
  unreachable

244:                                              ; preds = %226
  store i8 0, ptr %18, align 1, !tbaa !24
  %245 = load ptr, ptr %20, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.aiMaterialProperty, ptr %245, i32 0, i32 5
  %247 = load ptr, ptr %246, align 8, !tbaa !27
  %248 = load i32, ptr %247, align 4, !tbaa !11
  store i32 %248, ptr %9, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  store i32 0, ptr %21, align 4, !tbaa !11
  br label %249

249:                                              ; preds = %299, %244
  %250 = load i32, ptr %21, align 4, !tbaa !11
  %251 = getelementptr inbounds %"class.Assimp::ValidateDSProcess", ptr %26, i32 0, i32 1
  %252 = load ptr, ptr %251, align 8, !tbaa !30
  %253 = getelementptr inbounds %struct.aiScene, ptr %252, i32 0, i32 2
  %254 = load i32, ptr %253, align 8, !tbaa !33
  %255 = icmp ult i32 %250, %254
  br i1 %255, label %257, label %256

256:                                              ; preds = %249
  store i32 8, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %302

257:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %258 = getelementptr inbounds %"class.Assimp::ValidateDSProcess", ptr %26, i32 0, i32 1
  %259 = load ptr, ptr %258, align 8, !tbaa !30
  %260 = getelementptr inbounds %struct.aiScene, ptr %259, i32 0, i32 3
  %261 = load ptr, ptr %260, align 8, !tbaa !35
  %262 = load i32, ptr %21, align 4, !tbaa !11
  %263 = zext i32 %262 to i64
  %264 = getelementptr inbounds ptr, ptr %261, i64 %263
  %265 = load ptr, ptr %264, align 8, !tbaa !5
  store ptr %265, ptr %22, align 8, !tbaa !5
  %266 = load ptr, ptr %22, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.aiMesh, ptr %266, i32 0, i32 13
  %268 = load i32, ptr %267, align 8, !tbaa !36
  %269 = load i32, ptr %19, align 4, !tbaa !11
  %270 = icmp eq i32 %268, %269
  br i1 %270, label %271, label %298

271:                                              ; preds = %257
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  store i32 0, ptr %23, align 4, !tbaa !11
  br label %272

272:                                              ; preds = %277, %271
  %273 = load ptr, ptr %22, align 8, !tbaa !5
  %274 = load i32, ptr %23, align 4, !tbaa !11
  %275 = invoke noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %273, i32 noundef %274)
          to label %276 unwind label %280

276:                                              ; preds = %272
  br i1 %275, label %277, label %284

277:                                              ; preds = %276
  %278 = load i32, ptr %23, align 4, !tbaa !11
  %279 = add nsw i32 %278, 1
  store i32 %279, ptr %23, align 4, !tbaa !11
  br label %272, !llvm.loop !42

280:                                              ; preds = %288, %272
  %281 = landingpad { ptr, i32 }
          cleanup
  %282 = extractvalue { ptr, i32 } %281, 0
  store ptr %282, ptr %16, align 8
  %283 = extractvalue { ptr, i32 } %281, 1
  store i32 %283, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %312

284:                                              ; preds = %276
  %285 = load i32, ptr %9, align 4, !tbaa !11
  %286 = load i32, ptr %23, align 4, !tbaa !11
  %287 = icmp sge i32 %285, %286
  br i1 %287, label %288, label %297

288:                                              ; preds = %284
  %289 = load i32, ptr %9, align 4, !tbaa !11
  %290 = load ptr, ptr %20, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.aiMaterialProperty, ptr %290, i32 0, i32 0
  %292 = getelementptr inbounds %struct.aiString, ptr %291, i32 0, i32 1
  %293 = getelementptr inbounds [1024 x i8], ptr %292, i64 0, i64 0
  %294 = load i32, ptr %21, align 4, !tbaa !11
  %295 = load i32, ptr %23, align 4, !tbaa !11
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess13ReportWarningEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.73, i32 noundef %289, ptr noundef %293, i32 noundef %294, i32 noundef %295)
          to label %296 unwind label %280

296:                                              ; preds = %288
  br label %297

297:                                              ; preds = %296, %284
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  br label %298

298:                                              ; preds = %297, %257
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  br label %299

299:                                              ; preds = %298
  %300 = load i32, ptr %21, align 4, !tbaa !11
  %301 = add i32 %300, 1
  store i32 %301, ptr %21, align 4, !tbaa !11
  br label %249, !llvm.loop !43

302:                                              ; preds = %256
  br label %303

303:                                              ; preds = %302, %214
  br label %304

304:                                              ; preds = %303, %213
  br label %305

305:                                              ; preds = %304, %173
  store i32 0, ptr %13, align 4
  br label %306

306:                                              ; preds = %305, %125
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  %307 = load i32, ptr %13, align 4
  switch i32 %307, label %372 [
    i32 0, label %308
    i32 7, label %309
  ]

308:                                              ; preds = %306
  br label %309

309:                                              ; preds = %308, %306
  %310 = load i32, ptr %19, align 4, !tbaa !11
  %311 = add i32 %310, 1
  store i32 %311, ptr %19, align 4, !tbaa !11
  br label %101, !llvm.loop !44

312:                                              ; preds = %280, %139
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  br label %365

313:                                              ; preds = %107
  %314 = load i8, ptr %18, align 1, !tbaa !24, !range !45, !noundef !46
  %315 = trunc i8 %314 to i1
  br i1 %315, label %316, label %361

316:                                              ; preds = %313
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  store i32 0, ptr %24, align 4, !tbaa !11
  br label %317

317:                                              ; preds = %357, %316
  %318 = load i32, ptr %24, align 4, !tbaa !11
  %319 = getelementptr inbounds %"class.Assimp::ValidateDSProcess", ptr %26, i32 0, i32 1
  %320 = load ptr, ptr %319, align 8, !tbaa !30
  %321 = getelementptr inbounds %struct.aiScene, ptr %320, i32 0, i32 2
  %322 = load i32, ptr %321, align 8, !tbaa !33
  %323 = icmp ult i32 %318, %322
  br i1 %323, label %325, label %324

324:                                              ; preds = %317
  store i32 13, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %360

325:                                              ; preds = %317
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %326 = getelementptr inbounds %"class.Assimp::ValidateDSProcess", ptr %26, i32 0, i32 1
  %327 = load ptr, ptr %326, align 8, !tbaa !30
  %328 = getelementptr inbounds %struct.aiScene, ptr %327, i32 0, i32 3
  %329 = load ptr, ptr %328, align 8, !tbaa !35
  %330 = load i32, ptr %24, align 4, !tbaa !11
  %331 = zext i32 %330 to i64
  %332 = getelementptr inbounds ptr, ptr %329, i64 %331
  %333 = load ptr, ptr %332, align 8, !tbaa !5
  store ptr %333, ptr %25, align 8, !tbaa !5
  %334 = load ptr, ptr %25, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.aiMesh, ptr %334, i32 0, i32 13
  %336 = load i32, ptr %335, align 8, !tbaa !36
  %337 = load i32, ptr %9, align 4, !tbaa !11
  %338 = icmp eq i32 %336, %337
  br i1 %338, label %339, label %356

339:                                              ; preds = %325
  %340 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI16aiTextureMappingSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef 0) #7
  %341 = load i32, ptr %340, align 4, !tbaa !28
  %342 = icmp eq i32 %341, 0
  br i1 %342, label %343, label %356

343:                                              ; preds = %339
  %344 = load ptr, ptr %25, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.aiMesh, ptr %344, i32 0, i32 8
  %346 = getelementptr inbounds [8 x ptr], ptr %345, i64 0, i64 0
  %347 = load ptr, ptr %346, align 8, !tbaa !5
  %348 = icmp ne ptr %347, null
  br i1 %348, label %355, label %349

349:                                              ; preds = %343
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess13ReportWarningEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.74)
          to label %350 unwind label %351

350:                                              ; preds = %349
  br label %355

351:                                              ; preds = %349
  %352 = landingpad { ptr, i32 }
          cleanup
  %353 = extractvalue { ptr, i32 } %352, 0
  store ptr %353, ptr %16, align 8
  %354 = extractvalue { ptr, i32 } %352, 1
  store i32 %354, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %365

355:                                              ; preds = %350, %343
  br label %356

356:                                              ; preds = %355, %339, %325
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  br label %357

357:                                              ; preds = %356
  %358 = load i32, ptr %24, align 4, !tbaa !11
  %359 = add i32 %358, 1
  store i32 %359, ptr %24, align 4, !tbaa !11
  br label %317, !llvm.loop !47

360:                                              ; preds = %324
  br label %361

361:                                              ; preds = %360, %313
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  call void @_ZNSt6vectorI16aiTextureMappingSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #7
  store i32 0, ptr %13, align 4
  br label %362

362:                                              ; preds = %361, %96
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  %363 = load i32, ptr %13, align 4
  switch i32 %363, label %372 [
    i32 0, label %364
    i32 1, label %364
  ]

364:                                              ; preds = %362, %362
  ret void

365:                                              ; preds = %351, %312
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  call void @_ZNSt6vectorI16aiTextureMappingSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #7
  br label %366

366:                                              ; preds = %365, %108
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  br label %367

367:                                              ; preds = %366
  %368 = load ptr, ptr %16, align 8
  %369 = load i32, ptr %17, align 4
  %370 = insertvalue { ptr, i32 } poison, ptr %368, 0
  %371 = insertvalue { ptr, i32 } %370, i32 %369, 1
  resume { ptr, i32 } %371

372:                                              ; preds = %362, %306
  unreachable
}

declare ptr @aiTextureTypeToString(i32 noundef) #1

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #4

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

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

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

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

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

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

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

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

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


; 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.6" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<aiTextureMapping, std::allocator<aiTextureMapping>>::_Vector_impl" }
%"struct.std::_Vector_base<aiTextureMapping, std::allocator<aiTextureMapping>>::_Vector_impl" = type { %"struct.std::_Vector_base<aiTextureMapping, std::allocator<aiTextureMapping>>::_Vector_impl_data" }
%"struct.std::_Vector_base<aiTextureMapping, std::allocator<aiTextureMapping>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.7" = type { i8 }

@.str.1 = external hidden unnamed_addr constant [130 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [46 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

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

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

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) #2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Assimp17ValidateDSProcess24SearchForInvalidTexturesEPK10aiMaterial13aiTextureType(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr nocapture noundef readonly %1, i32 noundef %2) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca %"class.std::vector.6", align 8
  %7 = alloca %"class.std::allocator.7", align 1
  %8 = tail call ptr @aiTextureTypeToString(i32 noundef %2)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #7
  store i32 -1, ptr %4, align 4, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %1, i64 8
  %10 = load i32, ptr %9, align 8, !tbaa !9
  %.not142 = icmp eq i32 %10, 0
  br i1 %.not142, label %.thread, label %.lr.ph

._crit_edge:                                      ; preds = %32
  %.pre = load i32, ptr %4, align 4, !tbaa !5
  %11 = add nsw i32 %.pre, 1
  %.not = icmp eq i32 %11, %.1
  br i1 %.not, label %37, label %36

.lr.ph:                                           ; preds = %3, %32
  %indvars.iv = phi i64 [ %indvars.iv.next, %32 ], [ 0, %3 ]
  %.0130 = phi i32 [ %.1, %32 ], [ 0, %3 ]
  %12 = load ptr, ptr %1, align 8, !tbaa !12
  %13 = getelementptr inbounds ptr, ptr %12, i64 %indvars.iv
  %14 = load ptr, ptr %13, align 8, !tbaa !13
  %.not103 = icmp eq ptr %14, null
  br i1 %.not103, label %15, label %16

15:                                               ; preds = %.lr.ph
  call void @_ZN6Assimp17aiAssertViolationEPKcS1_i(ptr noundef nonnull @.str.63, ptr noundef nonnull @.str.1, i32 noundef 504)
  br label %16

16:                                               ; preds = %15, %.lr.ph
  %17 = getelementptr inbounds i8, ptr %14, i64 4
  %18 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %17, ptr noundef nonnull dereferenceable(1) @.str.64) #8
  %.not104 = icmp eq i32 %18, 0
  br i1 %.not104, label %19, label %32

19:                                               ; preds = %16
  %20 = getelementptr inbounds i8, ptr %14, i64 1028
  %21 = load i32, ptr %20, align 4, !tbaa !14
  %22 = icmp eq i32 %21, %2
  br i1 %22, label %23, label %32

23:                                               ; preds = %19
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #7
  %24 = getelementptr inbounds i8, ptr %14, i64 1032
  %25 = load i32, ptr %24, align 8, !tbaa !18
  store i32 %25, ptr %5, align 4, !tbaa !5
  %26 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %4, ptr noundef nonnull align 4 dereferenceable(4) %5)
  %27 = load i32, ptr %26, align 4, !tbaa !5
  store i32 %27, ptr %4, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  %28 = add nsw i32 %.0130, 1
  %29 = getelementptr inbounds i8, ptr %14, i64 1040
  %30 = load i32, ptr %29, align 8, !tbaa !19
  %.not105 = icmp eq i32 %30, 3
  br i1 %.not105, label %32, label %31

31:                                               ; preds = %23
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.65, ptr noundef nonnull %17) #9
  unreachable

32:                                               ; preds = %23, %19, %16
  %.1 = phi i32 [ %.0130, %16 ], [ %28, %23 ], [ %.0130, %19 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %33 = load i32, ptr %9, align 8, !tbaa !9
  %34 = zext i32 %33 to i64
  %35 = icmp ult i64 %indvars.iv.next, %34
  br i1 %35, label %.lr.ph, label %._crit_edge, !llvm.loop !20

36:                                               ; preds = %._crit_edge
  call void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.66, ptr noundef %8, i32 noundef %.pre, i32 noundef %.1, ptr noundef %8) #9
  unreachable

37:                                               ; preds = %._crit_edge
  %.not89 = icmp eq i32 %.1, 0
  br i1 %.not89, label %.thread, label %38

38:                                               ; preds = %37
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #7
  %39 = sext i32 %.1 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #7
  call void @_ZNSaI16aiTextureMappingEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #7
  invoke void @_ZNSt6vectorI16aiTextureMappingSaIS0_EEC2EmRKS1_(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %39, ptr noundef nonnull align 1 dereferenceable(1) %7)
          to label %40 unwind label %47

40:                                               ; preds = %38
  call void @_ZNSt15__new_allocatorI16aiTextureMappingED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #7
  %41 = load i32, ptr %9, align 8, !tbaa !9
  %.not143 = icmp eq i32 %41, 0
  br i1 %.not143, label %.preheader, label %.lr.ph137

.lr.ph137:                                        ; preds = %40
  %42 = getelementptr inbounds i8, ptr %0, i64 24
  br label %49

._crit_edge138:                                   ; preds = %.loopexit107
  br i1 %.2, label %.preheader, label %.loopexit

.preheader:                                       ; preds = %40, %._crit_edge138
  %43 = getelementptr inbounds i8, ptr %0, i64 24
  %44 = load ptr, ptr %43, align 8, !tbaa !22
  %45 = getelementptr inbounds i8, ptr %44, i64 16
  %46 = load i32, ptr %45, align 8, !tbaa !25
  %.not145 = icmp eq i32 %46, 0
  br i1 %.not145, label %.loopexit, label %.lr.ph141

47:                                               ; preds = %38
  %48 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorI16aiTextureMappingED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #7
  br label %157

49:                                               ; preds = %.lr.ph137, %.loopexit107
  %indvars.iv166 = phi i64 [ 0, %.lr.ph137 ], [ %indvars.iv.next167, %.loopexit107 ]
  %.078134 = phi i1 [ true, %.lr.ph137 ], [ %.2, %.loopexit107 ]
  %50 = load ptr, ptr %1, align 8, !tbaa !12
  %51 = getelementptr inbounds ptr, ptr %50, i64 %indvars.iv166
  %52 = load ptr, ptr %51, align 8, !tbaa !13
  %53 = getelementptr inbounds i8, ptr %52, i64 1028
  %54 = load i32, ptr %53, align 4, !tbaa !14
  %.not91 = icmp eq i32 %54, %2
  br i1 %.not91, label %55, label %.loopexit107

55:                                               ; preds = %49
  %56 = getelementptr inbounds i8, ptr %52, i64 1032
  %57 = load i32, ptr %56, align 8, !tbaa !18
  %.not92 = icmp slt i32 %57, %.1
  br i1 %.not92, label %62, label %58

58:                                               ; preds = %55
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.67, i32 noundef %57, i32 noundef %.1, ptr noundef %8) #9
          to label %59 unwind label %60

59:                                               ; preds = %58
  unreachable

60:                                               ; preds = %split.invoke, %58
  %61 = landingpad { ptr, i32 }
          cleanup
  br label %156

62:                                               ; preds = %55
  %63 = getelementptr inbounds i8, ptr %52, i64 4
  %64 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %63, ptr noundef nonnull dereferenceable(1) @.str.68) #8
  %.not93 = icmp eq i32 %64, 0
  br i1 %.not93, label %65, label %78

65:                                               ; preds = %62
  %66 = getelementptr inbounds i8, ptr %52, i64 1040
  %67 = load i32, ptr %66, align 8, !tbaa !19
  %.not94 = icmp eq i32 %67, 4
  br i1 %.not94, label %68, label %split.invoke.sink.split

68:                                               ; preds = %65
  %69 = getelementptr inbounds i8, ptr %52, i64 1036
  %70 = load i32, ptr %69, align 4, !tbaa !27
  %71 = icmp ult i32 %70, 4
  br i1 %71, label %split.invoke, label %72

72:                                               ; preds = %68
  %73 = getelementptr inbounds i8, ptr %52, i64 1048
  %74 = load ptr, ptr %73, align 8, !tbaa !28
  %75 = load i32, ptr %74, align 4, !tbaa !29
  %76 = zext i32 %57 to i64
  %77 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI16aiTextureMappingSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %76) #7
  store i32 %75, ptr %77, align 4, !tbaa !29
  br label %.loopexit107

78:                                               ; preds = %62
  %79 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %63, ptr noundef nonnull dereferenceable(1) @.str.70) #8
  %.not95 = icmp eq i32 %79, 0
  br i1 %.not95, label %80, label %87

80:                                               ; preds = %78
  %81 = getelementptr inbounds i8, ptr %52, i64 1040
  %82 = load i32, ptr %81, align 8, !tbaa !19
  %.not96 = icmp eq i32 %82, 1
  br i1 %.not96, label %83, label %split.invoke.sink.split

83:                                               ; preds = %80
  %84 = getelementptr inbounds i8, ptr %52, i64 1036
  %85 = load i32, ptr %84, align 4, !tbaa !27
  %86 = icmp ult i32 %85, 20
  br i1 %86, label %split.invoke, label %.loopexit107

87:                                               ; preds = %78
  %88 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %63, ptr noundef nonnull dereferenceable(1) @.str.72) #8
  %.not97 = icmp eq i32 %88, 0
  br i1 %.not97, label %89, label %.loopexit107

89:                                               ; preds = %87
  %90 = getelementptr inbounds i8, ptr %52, i64 1040
  %91 = load i32, ptr %90, align 8, !tbaa !19
  %.not98 = icmp eq i32 %91, 4
  br i1 %.not98, label %92, label %split.invoke.sink.split

92:                                               ; preds = %89
  %93 = getelementptr inbounds i8, ptr %52, i64 1036
  %94 = load i32, ptr %93, align 4, !tbaa !27
  %95 = icmp ult i32 %94, 4
  br i1 %95, label %split.invoke, label %98

split.invoke.sink.split:                          ; preds = %89, %80, %65
  %.ph = phi ptr [ @.str.69, %65 ], [ @.str.71, %80 ], [ @.str.69, %89 ]
  %.phi.trans.insert = getelementptr inbounds i8, ptr %52, i64 1036
  %.pre172 = load i32, ptr %.phi.trans.insert, align 4, !tbaa !27
  br label %split.invoke

split.invoke:                                     ; preds = %92, %83, %68, %split.invoke.sink.split
  %96 = phi ptr [ %.ph, %split.invoke.sink.split ], [ @.str.69, %68 ], [ @.str.71, %83 ], [ @.str.69, %92 ]
  %97 = phi i32 [ %.pre172, %split.invoke.sink.split ], [ %70, %68 ], [ %85, %83 ], [ %94, %92 ]
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess11ReportErrorEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull %96, ptr noundef nonnull %63, i32 noundef %57, i32 noundef %97) #9
          to label %split.cont unwind label %60

split.cont:                                       ; preds = %split.invoke
  unreachable

98:                                               ; preds = %92
  %99 = getelementptr inbounds i8, ptr %52, i64 1048
  %100 = load ptr, ptr %99, align 8, !tbaa !28
  %101 = load i32, ptr %100, align 4, !tbaa !5
  store i32 %101, ptr %4, align 4, !tbaa !5
  %102 = load ptr, ptr %42, align 8, !tbaa !22
  %103 = getelementptr inbounds i8, ptr %102, i64 16
  %104 = load i32, ptr %103, align 8, !tbaa !25
  %.not144 = icmp eq i32 %104, 0
  br i1 %.not144, label %.loopexit107, label %.lr.ph133

.lr.ph133:                                        ; preds = %98, %122
  %indvars.iv163 = phi i64 [ %indvars.iv.next164, %122 ], [ 0, %98 ]
  %105 = phi ptr [ %123, %122 ], [ %102, %98 ]
  %106 = getelementptr inbounds i8, ptr %105, i64 24
  %107 = load ptr, ptr %106, align 8, !tbaa !31
  %108 = getelementptr inbounds ptr, ptr %107, i64 %indvars.iv163
  %109 = load ptr, ptr %108, align 8, !tbaa !13
  %110 = getelementptr inbounds i8, ptr %109, i64 232
  %111 = load i32, ptr %110, align 8, !tbaa !32
  %112 = zext i32 %111 to i64
  %113 = icmp eq i64 %indvars.iv166, %112
  br i1 %113, label %.preheader106, label %122

.preheader106:                                    ; preds = %.lr.ph133, %.preheader106
  %.074 = phi i32 [ %115, %.preheader106 ], [ 0, %.lr.ph133 ]
  %114 = call noundef zeroext i1 @_ZNK6aiMesh16HasTextureCoordsEj(ptr noundef nonnull align 8 dereferenceable(1320) %109, i32 noundef %.074)
  %115 = add nuw nsw i32 %.074, 1
  br i1 %114, label %.preheader106, label %118, !llvm.loop !38

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

118:                                              ; preds = %.preheader106
  %119 = load i32, ptr %4, align 4, !tbaa !5
  %.not99 = icmp slt i32 %119, %.074
  br i1 %.not99, label %122, label %120

120:                                              ; preds = %118
  %121 = trunc nuw i64 %indvars.iv163 to i32
  invoke void (ptr, ptr, ...) @_ZN6Assimp17ValidateDSProcess13ReportWarningEPKcz(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.73, i32 noundef %119, ptr noundef nonnull %63, i32 noundef %121, i32 noundef %.074)
          to label %122 unwind label %116

122:                                              ; preds = %118, %120, %.lr.ph133
  %indvars.iv.next164 = add nuw nsw i64 %indvars.iv163, 1
  %123 = load ptr, ptr %42, align 8, !tbaa !22
  %124 = getelementptr inbounds i8, ptr %123, i64 16
  %125 = load i32, ptr %124, align 8, !tbaa !25
  %126 = zext i32 %125 to i64
  %127 = icmp ult i64 %indvars.iv.next164, %126
  br i1 %127, label %.lr.ph133, label %.loopexit107, !llvm.loop !39

.loopexit107:                                     ; preds = %122, %98, %72, %87, %83, %49
  %.2 = phi i1 [ %.078134, %49 ], [ %.078134, %87 ], [ %.078134, %83 ], [ %.078134, %72 ], [ false, %98 ], [ false, %122 ]
  %indvars.iv.next167 = add nuw nsw i64 %indvars.iv166, 1
  %128 = load i32, ptr %9, align 8, !tbaa !9
  %129 = zext i32 %128 to i64
  %130 = icmp ult i64 %indvars.iv.next167, %129
  br i1 %130, label %49, label %._crit_edge138, !llvm.loop !40

.lr.ph141:                                        ; preds = %.preheader, %150
  %indvars.iv168 = phi i64 [ %indvars.iv.next169, %150 ], [ 0, %.preheader ]
  %131 = phi ptr [ %151, %150 ], [ %44, %.preheader ]
  %132 = getelementptr inbounds i8, ptr %131, i64 24
  %133 = load ptr, ptr %132, align 8, !tbaa !31
  %134 = getelementptr inbounds ptr, ptr %133, i64 %indvars.iv168
  %135 = load ptr, ptr %134, align 8, !tbaa !13
  %136 = getelementptr inbounds i8, ptr %135, i64 232
  %137 = load i32, ptr %136, align 8, !tbaa !32
  %138 = load i32, ptr %4, align 4, !tbaa !5
  %139 = icmp eq i32 %137, %138
  br i1 %139, label %140, label %150

140:                                              ; preds = %.lr.ph141
  %141 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorI16aiTextureMappingSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 0) #7
  %142 = load i32, ptr %141, align 4, !tbaa !29
  %143 = icmp eq i32 %142, 0
  br i1 %143, label %144, label %150

144:                                              ; preds = %140
  %145 = getelementptr inbounds i8, ptr %135, i64 112
  %146 = load ptr, ptr %145, align 8, !tbaa !13
  %.not90 = icmp eq ptr %146, null
  br i1 %.not90, label %147, label %150

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

148:                                              ; preds = %147
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %156

150:                                              ; preds = %144, %147, %140, %.lr.ph141
  %indvars.iv.next169 = add nuw nsw i64 %indvars.iv168, 1
  %151 = load ptr, ptr %43, align 8, !tbaa !22
  %152 = getelementptr inbounds i8, ptr %151, i64 16
  %153 = load i32, ptr %152, align 8, !tbaa !25
  %154 = zext i32 %153 to i64
  %155 = icmp ult i64 %indvars.iv.next169, %154
  br i1 %155, label %.lr.ph141, label %.loopexit, !llvm.loop !41

.loopexit:                                        ; preds = %150, %.preheader, %._crit_edge138
  call void @_ZNSt6vectorI16aiTextureMappingSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #7
  br label %.thread

.thread:                                          ; preds = %3, %37, %.loopexit
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #7
  ret void

156:                                              ; preds = %60, %116, %148
  %.pn.pn = phi { ptr, i32 } [ %149, %148 ], [ %61, %60 ], [ %117, %116 ]
  call void @_ZNSt6vectorI16aiTextureMappingSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #7
  br label %157

157:                                              ; preds = %156, %47
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %156 ], [ %48, %47 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #7
  resume { ptr, i32 } %.pn.pn.pn
}

declare ptr @aiTextureTypeToString(i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #4

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

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

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

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

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

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

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

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

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


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