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

; 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::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<aiVector3t<float>, std::allocator<aiVector3t<float>>>::_Vector_impl" }
%"struct.std::_Vector_base<aiVector3t<float>, std::allocator<aiVector3t<float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<aiVector3t<float>, std::allocator<aiVector3t<float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<aiVector3t<float>, std::allocator<aiVector3t<float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator" = type { i8 }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<aiVector2t<float>, std::allocator<aiVector2t<float>>>::_Vector_impl" }
%"struct.std::_Vector_base<aiVector2t<float>, std::allocator<aiVector2t<float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<aiVector2t<float>, std::allocator<aiVector2t<float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<aiVector2t<float>, std::allocator<aiVector2t<float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.2" = type { i8 }
%"struct.(anonymous namespace)::NGONEncoder" = type { i32 }
%"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.6" }
%"struct.std::_Head_base.6" = type { ptr }
%class.aiVector3t = type { float, float, float }
%class.aiVector2t = type { float, float }
%struct.aiMesh = type { i32, i32, i32, ptr, ptr, ptr, ptr, [8 x ptr], [8 x ptr], [8 x i32], ptr, i32, ptr, i32, %struct.aiString, i32, ptr, i32, %struct.aiAABB, ptr }
%struct.aiString = type { i32, [1024 x i8] }
%struct.aiAABB = type { %class.aiVector3t, %class.aiVector3t }
%struct.aiFace = type { i32, ptr }

@.str.3 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [77 x i8], align 1

declare noundef ptr @_ZN6Assimp13DefaultLogger3getEv() #0

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN6Assimp18TriangulateProcess15TriangulateMeshEP6aiMesh(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef %1) #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i1, align 1
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i8, align 1
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca %"class.std::vector", align 8
  %19 = alloca %"class.std::allocator", align 1
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca %"class.std::vector.0", align 8
  %23 = alloca %"class.std::allocator.2", align 1
  %24 = alloca %"struct.(anonymous namespace)::NGONEncoder", align 4
  %25 = alloca ptr, align 8
  %26 = alloca %"class.std::unique_ptr", align 8
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca %class.aiVector3t, align 4
  %45 = alloca { <2 x float>, float }, align 8
  %46 = alloca %class.aiVector3t, align 4
  %47 = alloca { <2 x float>, float }, align 8
  %48 = alloca %class.aiVector3t, align 4
  %49 = alloca { <2 x float>, float }, align 8
  %50 = alloca float, align 4
  %51 = alloca [4 x i32], align 16
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca %class.aiVector3t, align 4
  %55 = alloca float, align 4
  %56 = alloca float, align 4
  %57 = alloca float, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca float, align 4
  %61 = alloca i32, align 4
  %62 = alloca ptr, align 8
  %63 = alloca ptr, align 8
  %64 = alloca ptr, align 8
  %65 = alloca %class.aiVector2t, align 4
  %66 = alloca %class.aiVector2t, align 4
  %67 = alloca float, align 4
  %68 = alloca ptr, align 8
  %69 = alloca ptr, align 8
  %70 = alloca ptr, align 8
  %71 = alloca ptr, align 8
  %72 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %73 = load ptr, ptr %4, align 8
  %74 = load ptr, ptr %5, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.aiMesh, ptr %74, i32 0, i32 0
  %76 = load i32, ptr %75, align 8, !tbaa !9
  %77 = icmp ne i32 %76, 0
  br i1 %77, label %110, label %78

78:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #12
  store i8 0, ptr %6, align 1, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #12
  store i32 0, ptr %7, align 4, !tbaa !19
  br label %79

79:                                               ; preds = %99, %78
  %80 = load i32, ptr %7, align 4, !tbaa !19
  %81 = load ptr, ptr %5, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.aiMesh, ptr %81, i32 0, i32 2
  %83 = load i32, ptr %82, align 8, !tbaa !20
  %84 = icmp ult i32 %80, %83
  br i1 %84, label %86, label %85

85:                                               ; preds = %79
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #12
  br label %102

86:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #12
  %87 = load ptr, ptr %5, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.aiMesh, ptr %87, i32 0, i32 10
  %89 = load ptr, ptr %88, align 8, !tbaa !21
  %90 = load i32, ptr %7, align 4, !tbaa !19
  %91 = zext i32 %90 to i64
  %92 = getelementptr inbounds %struct.aiFace, ptr %89, i64 %91
  store ptr %92, ptr %8, align 8, !tbaa !5
  %93 = load ptr, ptr %8, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.aiFace, ptr %93, i32 0, i32 0
  %95 = load i32, ptr %94, align 8, !tbaa !22
  %96 = icmp ne i32 %95, 3
  br i1 %96, label %97, label %98

97:                                               ; preds = %86
  store i8 1, ptr %6, align 1, !tbaa !17
  br label %98

98:                                               ; preds = %97, %86
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #12
  br label %99

99:                                               ; preds = %98
  %100 = load i32, ptr %7, align 4, !tbaa !19
  %101 = add i32 %100, 1
  store i32 %101, ptr %7, align 4, !tbaa !19
  br label %79, !llvm.loop !24

102:                                              ; preds = %85
  %103 = load i8, ptr %6, align 1, !tbaa !17, !range !26, !noundef !27
  %104 = trunc i8 %103 to i1
  br i1 %104, label %106, label %105

105:                                              ; preds = %102
  store i1 false, ptr %3, align 1
  store i32 1, ptr %9, align 4
  br label %107

106:                                              ; preds = %102
  store i32 0, ptr %9, align 4
  br label %107

107:                                              ; preds = %106, %105
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #12
  %108 = load i32, ptr %9, align 4
  switch i32 %108, label %1081 [
    i32 0, label %109
    i32 1, label %1074
  ]

109:                                              ; preds = %107
  br label %118

110:                                              ; preds = %2
  %111 = load ptr, ptr %5, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.aiMesh, ptr %111, i32 0, i32 0
  %113 = load i32, ptr %112, align 8, !tbaa !9
  %114 = and i32 %113, 8
  %115 = icmp ne i32 %114, 0
  br i1 %115, label %117, label %116

116:                                              ; preds = %110
  store i1 false, ptr %3, align 1
  br label %1074

117:                                              ; preds = %110
  br label %118

118:                                              ; preds = %117, %109
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #12
  store i32 0, ptr %10, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #12
  store i32 0, ptr %11, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #12
  store i8 1, ptr %12, align 1, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #12
  store i32 0, ptr %13, align 4, !tbaa !19
  br label %119

119:                                              ; preds = %158, %118
  %120 = load i32, ptr %13, align 4, !tbaa !19
  %121 = load ptr, ptr %5, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.aiMesh, ptr %121, i32 0, i32 2
  %123 = load i32, ptr %122, align 8, !tbaa !20
  %124 = icmp ult i32 %120, %123
  br i1 %124, label %126, label %125

125:                                              ; preds = %119
  store i32 5, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #12
  br label %161

126:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #12
  %127 = load ptr, ptr %5, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.aiMesh, ptr %127, i32 0, i32 10
  %129 = load ptr, ptr %128, align 8, !tbaa !21
  %130 = load i32, ptr %13, align 4, !tbaa !19
  %131 = zext i32 %130 to i64
  %132 = getelementptr inbounds %struct.aiFace, ptr %129, i64 %131
  store ptr %132, ptr %14, align 8, !tbaa !5
  %133 = load ptr, ptr %14, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.aiFace, ptr %133, i32 0, i32 0
  %135 = load i32, ptr %134, align 8, !tbaa !22
  %136 = icmp ule i32 %135, 4
  br i1 %136, label %137, label %138

137:                                              ; preds = %126
  store i8 0, ptr %12, align 1, !tbaa !17
  br label %138

138:                                              ; preds = %137, %126
  %139 = load ptr, ptr %14, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.aiFace, ptr %139, i32 0, i32 0
  %141 = load i32, ptr %140, align 8, !tbaa !22
  %142 = icmp ule i32 %141, 3
  br i1 %142, label %143, label %146

143:                                              ; preds = %138
  %144 = load i32, ptr %10, align 4, !tbaa !19
  %145 = add i32 %144, 1
  store i32 %145, ptr %10, align 4, !tbaa !19
  br label %157

146:                                              ; preds = %138
  %147 = load ptr, ptr %14, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.aiFace, ptr %147, i32 0, i32 0
  %149 = load i32, ptr %148, align 8, !tbaa !22
  %150 = sub i32 %149, 2
  %151 = load i32, ptr %10, align 4, !tbaa !19
  %152 = add i32 %151, %150
  store i32 %152, ptr %10, align 4, !tbaa !19
  %153 = load ptr, ptr %14, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.aiFace, ptr %153, i32 0, i32 0
  %155 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIjERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %154)
  %156 = load i32, ptr %155, align 4, !tbaa !19
  store i32 %156, ptr %11, align 4, !tbaa !19
  br label %157

157:                                              ; preds = %146, %143
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #12
  br label %158

158:                                              ; preds = %157
  %159 = load i32, ptr %13, align 4, !tbaa !19
  %160 = add i32 %159, 1
  store i32 %160, ptr %13, align 4, !tbaa !19
  br label %119, !llvm.loop !28

161:                                              ; preds = %125
  %162 = load i32, ptr %10, align 4, !tbaa !19
  %163 = load ptr, ptr %5, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.aiMesh, ptr %163, i32 0, i32 2
  %165 = load i32, ptr %164, align 8, !tbaa !20
  %166 = icmp eq i32 %162, %165
  br i1 %166, label %167, label %169

167:                                              ; preds = %161
  %168 = call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  call void @_ZN6Assimp6Logger5errorEPKc(ptr noundef nonnull align 8 dereferenceable(12) %168, ptr noundef @.str.3)
  store i1 false, ptr %3, align 1
  store i32 1, ptr %9, align 4
  br label %1073

169:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #12
  store ptr null, ptr %15, align 8, !tbaa !5
  %170 = load ptr, ptr %5, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.aiMesh, ptr %170, i32 0, i32 4
  %172 = load ptr, ptr %171, align 8, !tbaa !29
  %173 = icmp ne ptr %172, null
  br i1 %173, label %178, label %174

174:                                              ; preds = %169
  %175 = load i8, ptr %12, align 1, !tbaa !17, !range !26, !noundef !27
  %176 = trunc i8 %175 to i1
  br i1 %176, label %177, label %178

177:                                              ; preds = %174
  br label %178

178:                                              ; preds = %177, %174, %169
  %179 = load ptr, ptr %5, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.aiMesh, ptr %179, i32 0, i32 0
  %181 = load i32, ptr %180, align 8, !tbaa !9
  %182 = or i32 %181, 4
  store i32 %182, ptr %180, align 8, !tbaa !9
  %183 = load ptr, ptr %5, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.aiMesh, ptr %183, i32 0, i32 0
  %185 = load i32, ptr %184, align 8, !tbaa !9
  %186 = and i32 %185, -9
  store i32 %186, ptr %184, align 8, !tbaa !9
  %187 = load ptr, ptr %5, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.aiMesh, ptr %187, i32 0, i32 0
  %189 = load i32, ptr %188, align 8, !tbaa !9
  %190 = or i32 %189, 16
  store i32 %190, ptr %188, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #12
  %191 = load i32, ptr %10, align 4, !tbaa !19
  %192 = zext i32 %191 to i64
  %193 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %192, i64 16)
  %194 = extractvalue { i64, i1 } %193, 1
  %195 = extractvalue { i64, i1 } %193, 0
  %196 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %195, i64 8)
  %197 = extractvalue { i64, i1 } %196, 1
  %198 = or i1 %194, %197
  %199 = extractvalue { i64, i1 } %196, 0
  %200 = select i1 %198, i64 -1, i64 %199
  %201 = call noalias noundef nonnull ptr @_Znam(i64 noundef %200) #13
  store i64 %192, ptr %201, align 16
  %202 = getelementptr inbounds i8, ptr %201, i64 8
  %203 = icmp eq i64 %192, 0
  br i1 %203, label %210, label %204

204:                                              ; preds = %178
  %205 = getelementptr inbounds %struct.aiFace, ptr %202, i64 %192
  br label %206

206:                                              ; preds = %206, %204
  %207 = phi ptr [ %202, %204 ], [ %208, %206 ]
  call void @_ZN6aiFaceC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %207) #12
  %208 = getelementptr inbounds %struct.aiFace, ptr %207, i64 1
  %209 = icmp eq ptr %208, %205
  br i1 %209, label %210, label %206

210:                                              ; preds = %206, %178
  store ptr %202, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #12
  %211 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %211, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #12
  %212 = load i32, ptr %11, align 4, !tbaa !19
  %213 = add i32 %212, 2
  %214 = zext i32 %213 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #12
  call void @_ZNSaI10aiVector3tIfEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #12
  invoke void @_ZNSt6vectorI10aiVector3tIfESaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %214, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %215 unwind label %235

215:                                              ; preds = %210
  call void @_ZNSt15__new_allocatorI10aiVector3tIfEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #12
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #12
  %216 = load i32, ptr %11, align 4, !tbaa !19
  %217 = add i32 %216, 2
  %218 = zext i32 %217 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #12
  call void @_ZNSaI10aiVector2tIfEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #12
  invoke void @_ZNSt6vectorI10aiVector2tIfESaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %218, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %219 unwind label %239

219:                                              ; preds = %215
  call void @_ZNSt15__new_allocatorI10aiVector2tIfEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #12
  invoke void @_ZN12_GLOBAL__N_111NGONEncoderC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %220 unwind label %243

220:                                              ; preds = %219
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #12
  %221 = load ptr, ptr %5, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.aiMesh, ptr %221, i32 0, i32 3
  %223 = load ptr, ptr %222, align 8, !tbaa !30
  store ptr %223, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #12
  %224 = load i32, ptr %11, align 4, !tbaa !19
  %225 = zext i32 %224 to i64
  %226 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %225) #13
          to label %227 unwind label %247

227:                                              ; preds = %220
  call void @_ZNSt10unique_ptrIA_bSt14default_deleteIS0_EEC2IPbS2_vbEET_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef %226) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #12
  store i32 0, ptr %27, align 4, !tbaa !19
  br label %228

228:                                              ; preds = %1035, %227
  %229 = load i32, ptr %27, align 4, !tbaa !19
  %230 = load ptr, ptr %5, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.aiMesh, ptr %230, i32 0, i32 2
  %232 = load i32, ptr %231, align 8, !tbaa !20
  %233 = icmp ult i32 %229, %232
  br i1 %233, label %251, label %234

234:                                              ; preds = %228
  store i32 8, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #12
  br label %1039

235:                                              ; preds = %210
  %236 = landingpad { ptr, i32 }
          cleanup
  %237 = extractvalue { ptr, i32 } %236, 0
  store ptr %237, ptr %20, align 8
  %238 = extractvalue { ptr, i32 } %236, 1
  store i32 %238, ptr %21, align 4
  call void @_ZNSt15__new_allocatorI10aiVector3tIfEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #12
  br label %1072

239:                                              ; preds = %215
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %20, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %21, align 4
  call void @_ZNSt15__new_allocatorI10aiVector2tIfEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #12
  br label %1071

243:                                              ; preds = %219
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %20, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %21, align 4
  br label %1070

247:                                              ; preds = %220
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %20, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %21, align 4
  br label %1069

251:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #12
  %252 = load ptr, ptr %5, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.aiMesh, ptr %252, i32 0, i32 10
  %254 = load ptr, ptr %253, align 8, !tbaa !21
  %255 = load i32, ptr %27, align 4, !tbaa !19
  %256 = zext i32 %255 to i64
  %257 = getelementptr inbounds %struct.aiFace, ptr %254, i64 %256
  store ptr %257, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #12
  %258 = load ptr, ptr %28, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.aiFace, ptr %258, i32 0, i32 1
  %260 = load ptr, ptr %259, align 8, !tbaa !31
  store ptr %260, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #12
  %261 = load ptr, ptr %28, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.aiFace, ptr %261, i32 0, i32 0
  %263 = load i32, ptr %262, align 8, !tbaa !22
  store i32 %263, ptr %30, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #12
  store i32 0, ptr %31, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #12
  %264 = load i32, ptr %30, align 4, !tbaa !19
  %265 = sub nsw i32 %264, 1
  store i32 %265, ptr %33, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #12
  store i32 0, ptr %34, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #12
  %266 = load i32, ptr %30, align 4, !tbaa !19
  store i32 %266, ptr %35, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #12
  %267 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %267, ptr %36, align 8, !tbaa !5
  %268 = load ptr, ptr %28, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.aiFace, ptr %268, i32 0, i32 0
  %270 = load i32, ptr %269, align 8, !tbaa !22
  %271 = icmp ule i32 %270, 3
  br i1 %271, label %272, label %299

272:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #12
  %273 = load ptr, ptr %17, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.aiFace, ptr %273, i32 1
  store ptr %274, ptr %17, align 8, !tbaa !5
  store ptr %273, ptr %37, align 8, !tbaa !5
  %275 = load ptr, ptr %28, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.aiFace, ptr %275, i32 0, i32 0
  %277 = load i32, ptr %276, align 8, !tbaa !22
  %278 = load ptr, ptr %37, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.aiFace, ptr %278, i32 0, i32 0
  store i32 %277, ptr %279, align 8, !tbaa !22
  %280 = load ptr, ptr %28, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.aiFace, ptr %280, i32 0, i32 1
  %282 = load ptr, ptr %281, align 8, !tbaa !31
  %283 = load ptr, ptr %37, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.aiFace, ptr %283, i32 0, i32 1
  store ptr %282, ptr %284, align 8, !tbaa !31
  %285 = load ptr, ptr %28, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.aiFace, ptr %285, i32 0, i32 1
  store ptr null, ptr %286, align 8, !tbaa !31
  %287 = load ptr, ptr %37, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.aiFace, ptr %287, i32 0, i32 0
  %289 = load i32, ptr %288, align 8, !tbaa !22
  %290 = icmp eq i32 %289, 3
  br i1 %290, label %291, label %298

291:                                              ; preds = %272
  %292 = load ptr, ptr %37, align 8, !tbaa !5
  invoke void @_ZN12_GLOBAL__N_111NGONEncoder18ngonEncodeTriangleEP6aiFace(ptr noundef nonnull align 4 dereferenceable(4) %24, ptr noundef %292)
          to label %293 unwind label %294

293:                                              ; preds = %291
  br label %298

294:                                              ; preds = %291
  %295 = landingpad { ptr, i32 }
          cleanup
  %296 = extractvalue { ptr, i32 } %295, 0
  store ptr %296, ptr %20, align 8
  %297 = extractvalue { ptr, i32 } %295, 1
  store i32 %297, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #12
  br label %1038

298:                                              ; preds = %293, %272
  store i32 10, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #12
  br label %1032

299:                                              ; preds = %251
  %300 = load ptr, ptr %28, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.aiFace, ptr %300, i32 0, i32 0
  %302 = load i32, ptr %301, align 8, !tbaa !22
  %303 = icmp eq i32 %302, 4
  br i1 %303, label %304, label %521

304:                                              ; preds = %299
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #12
  store i32 0, ptr %38, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #12
  store i32 0, ptr %39, align 4, !tbaa !19
  br label %305

305:                                              ; preds = %407, %304
  %306 = load i32, ptr %39, align 4, !tbaa !19
  %307 = icmp ult i32 %306, 4
  br i1 %307, label %309, label %308

308:                                              ; preds = %305
  store i32 11, ptr %9, align 4
  br label %413

309:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #12
  %310 = load ptr, ptr %25, align 8, !tbaa !5
  %311 = load ptr, ptr %28, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.aiFace, ptr %311, i32 0, i32 1
  %313 = load ptr, ptr %312, align 8, !tbaa !31
  %314 = load i32, ptr %39, align 4, !tbaa !19
  %315 = add i32 %314, 3
  %316 = urem i32 %315, 4
  %317 = zext i32 %316 to i64
  %318 = getelementptr inbounds i32, ptr %313, i64 %317
  %319 = load i32, ptr %318, align 4, !tbaa !19
  %320 = zext i32 %319 to i64
  %321 = getelementptr inbounds %class.aiVector3t, ptr %310, i64 %320
  store ptr %321, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #12
  %322 = load ptr, ptr %25, align 8, !tbaa !5
  %323 = load ptr, ptr %28, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.aiFace, ptr %323, i32 0, i32 1
  %325 = load ptr, ptr %324, align 8, !tbaa !31
  %326 = load i32, ptr %39, align 4, !tbaa !19
  %327 = add i32 %326, 2
  %328 = urem i32 %327, 4
  %329 = zext i32 %328 to i64
  %330 = getelementptr inbounds i32, ptr %325, i64 %329
  %331 = load i32, ptr %330, align 4, !tbaa !19
  %332 = zext i32 %331 to i64
  %333 = getelementptr inbounds %class.aiVector3t, ptr %322, i64 %332
  store ptr %333, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #12
  %334 = load ptr, ptr %25, align 8, !tbaa !5
  %335 = load ptr, ptr %28, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.aiFace, ptr %335, i32 0, i32 1
  %337 = load ptr, ptr %336, align 8, !tbaa !31
  %338 = load i32, ptr %39, align 4, !tbaa !19
  %339 = add i32 %338, 1
  %340 = urem i32 %339, 4
  %341 = zext i32 %340 to i64
  %342 = getelementptr inbounds i32, ptr %337, i64 %341
  %343 = load i32, ptr %342, align 4, !tbaa !19
  %344 = zext i32 %343 to i64
  %345 = getelementptr inbounds %class.aiVector3t, ptr %334, i64 %344
  store ptr %345, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #12
  %346 = load ptr, ptr %25, align 8, !tbaa !5
  %347 = load ptr, ptr %28, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.aiFace, ptr %347, i32 0, i32 1
  %349 = load ptr, ptr %348, align 8, !tbaa !31
  %350 = load i32, ptr %39, align 4, !tbaa !19
  %351 = zext i32 %350 to i64
  %352 = getelementptr inbounds i32, ptr %349, i64 %351
  %353 = load i32, ptr %352, align 4, !tbaa !19
  %354 = zext i32 %353 to i64
  %355 = getelementptr inbounds %class.aiVector3t, ptr %346, i64 %354
  store ptr %355, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 12, ptr %44) #12
  %356 = load ptr, ptr %40, align 8, !tbaa !5
  %357 = load ptr, ptr %43, align 8, !tbaa !5
  %358 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %356, ptr noundef nonnull align 4 dereferenceable(12) %357)
          to label %359 unwind label %387

359:                                              ; preds = %309
  store { <2 x float>, float } %358, ptr %45, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %44, ptr align 8 %45, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %46) #12
  %360 = load ptr, ptr %41, align 8, !tbaa !5
  %361 = load ptr, ptr %43, align 8, !tbaa !5
  %362 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %360, ptr noundef nonnull align 4 dereferenceable(12) %361)
          to label %363 unwind label %391

363:                                              ; preds = %359
  store { <2 x float>, float } %362, ptr %47, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %46, ptr align 8 %47, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 12, ptr %48) #12
  %364 = load ptr, ptr %42, align 8, !tbaa !5
  %365 = load ptr, ptr %43, align 8, !tbaa !5
  %366 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %364, ptr noundef nonnull align 4 dereferenceable(12) %365)
          to label %367 unwind label %395

367:                                              ; preds = %363
  store { <2 x float>, float } %366, ptr %49, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %48, ptr align 8 %49, i64 12, i1 false)
  %368 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %44)
          to label %369 unwind label %395

369:                                              ; preds = %367
  %370 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %46)
          to label %371 unwind label %395

371:                                              ; preds = %369
  %372 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %48)
          to label %373 unwind label %395

373:                                              ; preds = %371
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #12
  %374 = invoke noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %44, ptr noundef nonnull align 4 dereferenceable(12) %46)
          to label %375 unwind label %399

375:                                              ; preds = %373
  %376 = invoke noundef float @_ZSt4acosf(float noundef %374)
          to label %377 unwind label %399

377:                                              ; preds = %375
  %378 = invoke noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %48, ptr noundef nonnull align 4 dereferenceable(12) %46)
          to label %379 unwind label %399

379:                                              ; preds = %377
  %380 = invoke noundef float @_ZSt4acosf(float noundef %378)
          to label %381 unwind label %399

381:                                              ; preds = %379
  %382 = fadd float %376, %380
  store float %382, ptr %50, align 4, !tbaa !32
  %383 = load float, ptr %50, align 4, !tbaa !32
  %384 = fcmp ogt float %383, 0x400921FB60000000
  br i1 %384, label %385, label %403

385:                                              ; preds = %381
  %386 = load i32, ptr %39, align 4, !tbaa !19
  store i32 %386, ptr %38, align 4, !tbaa !19
  store i32 11, ptr %9, align 4
  br label %404

387:                                              ; preds = %309
  %388 = landingpad { ptr, i32 }
          cleanup
  %389 = extractvalue { ptr, i32 } %388, 0
  store ptr %389, ptr %20, align 8
  %390 = extractvalue { ptr, i32 } %388, 1
  store i32 %390, ptr %21, align 4
  br label %412

391:                                              ; preds = %359
  %392 = landingpad { ptr, i32 }
          cleanup
  %393 = extractvalue { ptr, i32 } %392, 0
  store ptr %393, ptr %20, align 8
  %394 = extractvalue { ptr, i32 } %392, 1
  store i32 %394, ptr %21, align 4
  br label %411

395:                                              ; preds = %371, %369, %367, %363
  %396 = landingpad { ptr, i32 }
          cleanup
  %397 = extractvalue { ptr, i32 } %396, 0
  store ptr %397, ptr %20, align 8
  %398 = extractvalue { ptr, i32 } %396, 1
  store i32 %398, ptr %21, align 4
  br label %410

399:                                              ; preds = %379, %377, %375, %373
  %400 = landingpad { ptr, i32 }
          cleanup
  %401 = extractvalue { ptr, i32 } %400, 0
  store ptr %401, ptr %20, align 8
  %402 = extractvalue { ptr, i32 } %400, 1
  store i32 %402, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #12
  br label %410

403:                                              ; preds = %381
  store i32 0, ptr %9, align 4
  br label %404

404:                                              ; preds = %403, %385
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %48) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %46) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #12
  %405 = load i32, ptr %9, align 4
  switch i32 %405, label %413 [
    i32 0, label %406
  ]

406:                                              ; preds = %404
  br label %407

407:                                              ; preds = %406
  %408 = load i32, ptr %39, align 4, !tbaa !19
  %409 = add i32 %408, 1
  store i32 %409, ptr %39, align 4, !tbaa !19
  br label %305, !llvm.loop !33

410:                                              ; preds = %399, %395
  call void @llvm.lifetime.end.p0(i64 12, ptr %48) #12
  br label %411

411:                                              ; preds = %410, %391
  call void @llvm.lifetime.end.p0(i64 12, ptr %46) #12
  br label %412

412:                                              ; preds = %411, %387
  call void @llvm.lifetime.end.p0(i64 12, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #12
  br label %520

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

414:                                              ; preds = %413
  call void @llvm.lifetime.start.p0(i64 16, ptr %51) #12
  %415 = load ptr, ptr %28, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.aiFace, ptr %415, i32 0, i32 1
  %417 = load ptr, ptr %416, align 8, !tbaa !31
  %418 = getelementptr inbounds i32, ptr %417, i64 0
  %419 = load i32, ptr %418, align 4, !tbaa !19
  store i32 %419, ptr %51, align 4, !tbaa !19
  %420 = getelementptr inbounds i32, ptr %51, i64 1
  %421 = load ptr, ptr %28, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.aiFace, ptr %421, i32 0, i32 1
  %423 = load ptr, ptr %422, align 8, !tbaa !31
  %424 = getelementptr inbounds i32, ptr %423, i64 1
  %425 = load i32, ptr %424, align 4, !tbaa !19
  store i32 %425, ptr %420, align 4, !tbaa !19
  %426 = getelementptr inbounds i32, ptr %51, i64 2
  %427 = load ptr, ptr %28, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.aiFace, ptr %427, i32 0, i32 1
  %429 = load ptr, ptr %428, align 8, !tbaa !31
  %430 = getelementptr inbounds i32, ptr %429, i64 2
  %431 = load i32, ptr %430, align 4, !tbaa !19
  store i32 %431, ptr %426, align 4, !tbaa !19
  %432 = getelementptr inbounds i32, ptr %51, i64 3
  %433 = load ptr, ptr %28, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.aiFace, ptr %433, i32 0, i32 1
  %435 = load ptr, ptr %434, align 8, !tbaa !31
  %436 = getelementptr inbounds i32, ptr %435, i64 3
  %437 = load i32, ptr %436, align 4, !tbaa !19
  store i32 %437, ptr %432, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #12
  %438 = load ptr, ptr %17, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.aiFace, ptr %438, i32 1
  store ptr %439, ptr %17, align 8, !tbaa !5
  store ptr %438, ptr %52, align 8, !tbaa !5
  %440 = load ptr, ptr %52, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.aiFace, ptr %440, i32 0, i32 0
  store i32 3, ptr %441, align 8, !tbaa !22
  %442 = load ptr, ptr %28, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.aiFace, ptr %442, i32 0, i32 1
  %444 = load ptr, ptr %443, align 8, !tbaa !31
  %445 = load ptr, ptr %52, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.aiFace, ptr %445, i32 0, i32 1
  store ptr %444, ptr %446, align 8, !tbaa !31
  %447 = load i32, ptr %38, align 4, !tbaa !19
  %448 = zext i32 %447 to i64
  %449 = getelementptr inbounds [4 x i32], ptr %51, i64 0, i64 %448
  %450 = load i32, ptr %449, align 4, !tbaa !19
  %451 = load ptr, ptr %52, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.aiFace, ptr %451, i32 0, i32 1
  %453 = load ptr, ptr %452, align 8, !tbaa !31
  %454 = getelementptr inbounds i32, ptr %453, i64 0
  store i32 %450, ptr %454, align 4, !tbaa !19
  %455 = load i32, ptr %38, align 4, !tbaa !19
  %456 = add i32 %455, 1
  %457 = urem i32 %456, 4
  %458 = zext i32 %457 to i64
  %459 = getelementptr inbounds [4 x i32], ptr %51, i64 0, i64 %458
  %460 = load i32, ptr %459, align 4, !tbaa !19
  %461 = load ptr, ptr %52, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.aiFace, ptr %461, i32 0, i32 1
  %463 = load ptr, ptr %462, align 8, !tbaa !31
  %464 = getelementptr inbounds i32, ptr %463, i64 1
  store i32 %460, ptr %464, align 4, !tbaa !19
  %465 = load i32, ptr %38, align 4, !tbaa !19
  %466 = add i32 %465, 2
  %467 = urem i32 %466, 4
  %468 = zext i32 %467 to i64
  %469 = getelementptr inbounds [4 x i32], ptr %51, i64 0, i64 %468
  %470 = load i32, ptr %469, align 4, !tbaa !19
  %471 = load ptr, ptr %52, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.aiFace, ptr %471, i32 0, i32 1
  %473 = load ptr, ptr %472, align 8, !tbaa !31
  %474 = getelementptr inbounds i32, ptr %473, i64 2
  store i32 %470, ptr %474, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #12
  %475 = load ptr, ptr %17, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.aiFace, ptr %475, i32 1
  store ptr %476, ptr %17, align 8, !tbaa !5
  store ptr %475, ptr %53, align 8, !tbaa !5
  %477 = load ptr, ptr %53, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.aiFace, ptr %477, i32 0, i32 0
  store i32 3, ptr %478, align 8, !tbaa !22
  %479 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef 12) #13
          to label %480 unwind label %516

480:                                              ; preds = %414
  %481 = load ptr, ptr %53, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.aiFace, ptr %481, i32 0, i32 1
  store ptr %479, ptr %482, align 8, !tbaa !31
  %483 = load i32, ptr %38, align 4, !tbaa !19
  %484 = zext i32 %483 to i64
  %485 = getelementptr inbounds [4 x i32], ptr %51, i64 0, i64 %484
  %486 = load i32, ptr %485, align 4, !tbaa !19
  %487 = load ptr, ptr %53, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.aiFace, ptr %487, i32 0, i32 1
  %489 = load ptr, ptr %488, align 8, !tbaa !31
  %490 = getelementptr inbounds i32, ptr %489, i64 0
  store i32 %486, ptr %490, align 4, !tbaa !19
  %491 = load i32, ptr %38, align 4, !tbaa !19
  %492 = add i32 %491, 2
  %493 = urem i32 %492, 4
  %494 = zext i32 %493 to i64
  %495 = getelementptr inbounds [4 x i32], ptr %51, i64 0, i64 %494
  %496 = load i32, ptr %495, align 4, !tbaa !19
  %497 = load ptr, ptr %53, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.aiFace, ptr %497, i32 0, i32 1
  %499 = load ptr, ptr %498, align 8, !tbaa !31
  %500 = getelementptr inbounds i32, ptr %499, i64 1
  store i32 %496, ptr %500, align 4, !tbaa !19
  %501 = load i32, ptr %38, align 4, !tbaa !19
  %502 = add i32 %501, 3
  %503 = urem i32 %502, 4
  %504 = zext i32 %503 to i64
  %505 = getelementptr inbounds [4 x i32], ptr %51, i64 0, i64 %504
  %506 = load i32, ptr %505, align 4, !tbaa !19
  %507 = load ptr, ptr %53, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.aiFace, ptr %507, i32 0, i32 1
  %509 = load ptr, ptr %508, align 8, !tbaa !31
  %510 = getelementptr inbounds i32, ptr %509, i64 2
  store i32 %506, ptr %510, align 4, !tbaa !19
  %511 = load ptr, ptr %28, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.aiFace, ptr %511, i32 0, i32 1
  store ptr null, ptr %512, align 8, !tbaa !31
  %513 = load ptr, ptr %52, align 8, !tbaa !5
  %514 = load ptr, ptr %53, align 8, !tbaa !5
  invoke void @_ZN12_GLOBAL__N_111NGONEncoder14ngonEncodeQuadEP6aiFaceS2_(ptr noundef nonnull align 4 dereferenceable(4) %24, ptr noundef %513, ptr noundef %514)
          to label %515 unwind label %516

515:                                              ; preds = %480
  store i32 10, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #12
  br label %1032

516:                                              ; preds = %480, %414
  %517 = landingpad { ptr, i32 }
          cleanup
  %518 = extractvalue { ptr, i32 } %517, 0
  store ptr %518, ptr %20, align 8
  %519 = extractvalue { ptr, i32 } %517, 1
  store i32 %519, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #12
  br label %520

520:                                              ; preds = %516, %412
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #12
  br label %1038

521:                                              ; preds = %299
  store i32 0, ptr %32, align 4, !tbaa !19
  br label %522

522:                                              ; preds = %538, %521
  %523 = load i32, ptr %32, align 4, !tbaa !19
  %524 = load i32, ptr %35, align 4, !tbaa !19
  %525 = icmp slt i32 %523, %524
  br i1 %525, label %526, label %541

526:                                              ; preds = %522
  %527 = load ptr, ptr %25, align 8, !tbaa !5
  %528 = load ptr, ptr %29, align 8, !tbaa !5
  %529 = load i32, ptr %32, align 4, !tbaa !19
  %530 = sext i32 %529 to i64
  %531 = getelementptr inbounds i32, ptr %528, i64 %530
  %532 = load i32, ptr %531, align 4, !tbaa !19
  %533 = zext i32 %532 to i64
  %534 = getelementptr inbounds %class.aiVector3t, ptr %527, i64 %533
  %535 = load i32, ptr %32, align 4, !tbaa !19
  %536 = sext i32 %535 to i64
  %537 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI10aiVector3tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %18, i64 noundef %536) #12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %537, ptr align 4 %534, i64 12, i1 false), !tbaa.struct !34
  br label %538

538:                                              ; preds = %526
  %539 = load i32, ptr %32, align 4, !tbaa !19
  %540 = add nsw i32 %539, 1
  store i32 %540, ptr %32, align 4, !tbaa !19
  br label %522, !llvm.loop !35

541:                                              ; preds = %522
  call void @llvm.lifetime.start.p0(i64 12, ptr %54) #12
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %54) #12
  %542 = load i32, ptr %35, align 4, !tbaa !19
  %543 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI10aiVector3tIfESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #12
  %544 = getelementptr inbounds %class.aiVector3t, ptr %543, i32 0, i32 0
  %545 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI10aiVector3tIfESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #12
  %546 = getelementptr inbounds %class.aiVector3t, ptr %545, i32 0, i32 1
  %547 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI10aiVector3tIfESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #12
  %548 = getelementptr inbounds %class.aiVector3t, ptr %547, i32 0, i32 2
  invoke void @_ZN6Assimp12NewellNormalILi3ELi3ELi3EfEEvR10aiVector3tIT2_EiPS2_S5_S5_(ptr noundef nonnull align 4 dereferenceable(12) %54, i32 noundef %542, ptr noundef %544, ptr noundef %546, ptr noundef %548)
          to label %549 unwind label %569

549:                                              ; preds = %541
  %550 = load ptr, ptr %15, align 8, !tbaa !5
  %551 = icmp ne ptr %550, null
  br i1 %551, label %552, label %574

552:                                              ; preds = %549
  store i32 0, ptr %32, align 4, !tbaa !19
  br label %553

553:                                              ; preds = %566, %552
  %554 = load i32, ptr %32, align 4, !tbaa !19
  %555 = load i32, ptr %35, align 4, !tbaa !19
  %556 = icmp slt i32 %554, %555
  br i1 %556, label %557, label %573

557:                                              ; preds = %553
  %558 = load ptr, ptr %15, align 8, !tbaa !5
  %559 = load ptr, ptr %29, align 8, !tbaa !5
  %560 = load i32, ptr %32, align 4, !tbaa !19
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds i32, ptr %559, i64 %561
  %563 = load i32, ptr %562, align 4, !tbaa !19
  %564 = zext i32 %563 to i64
  %565 = getelementptr inbounds %class.aiVector3t, ptr %558, i64 %564
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %565, ptr align 4 %54, i64 12, i1 false), !tbaa.struct !34
  br label %566

566:                                              ; preds = %557
  %567 = load i32, ptr %32, align 4, !tbaa !19
  %568 = add nsw i32 %567, 1
  store i32 %568, ptr %32, align 4, !tbaa !19
  br label %553, !llvm.loop !36

569:                                              ; preds = %541
  %570 = landingpad { ptr, i32 }
          cleanup
  %571 = extractvalue { ptr, i32 } %570, 0
  store ptr %571, ptr %20, align 8
  %572 = extractvalue { ptr, i32 } %570, 1
  store i32 %572, ptr %21, align 4
  br label %975

573:                                              ; preds = %553
  br label %574

574:                                              ; preds = %573, %549
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #12
  %575 = getelementptr inbounds %class.aiVector3t, ptr %54, i32 0, i32 0
  %576 = load float, ptr %575, align 4, !tbaa !37
  %577 = fcmp ogt float %576, 0.000000e+00
  br i1 %577, label %578, label %581

578:                                              ; preds = %574
  %579 = getelementptr inbounds %class.aiVector3t, ptr %54, i32 0, i32 0
  %580 = load float, ptr %579, align 4, !tbaa !37
  br label %585

581:                                              ; preds = %574
  %582 = getelementptr inbounds %class.aiVector3t, ptr %54, i32 0, i32 0
  %583 = load float, ptr %582, align 4, !tbaa !37
  %584 = fneg float %583
  br label %585

585:                                              ; preds = %581, %578
  %586 = phi float [ %580, %578 ], [ %584, %581 ]
  store float %586, ptr %55, align 4, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #12
  %587 = getelementptr inbounds %class.aiVector3t, ptr %54, i32 0, i32 1
  %588 = load float, ptr %587, align 4, !tbaa !38
  %589 = fcmp ogt float %588, 0.000000e+00
  br i1 %589, label %590, label %593

590:                                              ; preds = %585
  %591 = getelementptr inbounds %class.aiVector3t, ptr %54, i32 0, i32 1
  %592 = load float, ptr %591, align 4, !tbaa !38
  br label %597

593:                                              ; preds = %585
  %594 = getelementptr inbounds %class.aiVector3t, ptr %54, i32 0, i32 1
  %595 = load float, ptr %594, align 4, !tbaa !38
  %596 = fneg float %595
  br label %597

597:                                              ; preds = %593, %590
  %598 = phi float [ %592, %590 ], [ %596, %593 ]
  store float %598, ptr %56, align 4, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #12
  %599 = getelementptr inbounds %class.aiVector3t, ptr %54, i32 0, i32 2
  %600 = load float, ptr %599, align 4, !tbaa !39
  %601 = fcmp ogt float %600, 0.000000e+00
  br i1 %601, label %602, label %605

602:                                              ; preds = %597
  %603 = getelementptr inbounds %class.aiVector3t, ptr %54, i32 0, i32 2
  %604 = load float, ptr %603, align 4, !tbaa !39
  br label %609

605:                                              ; preds = %597
  %606 = getelementptr inbounds %class.aiVector3t, ptr %54, i32 0, i32 2
  %607 = load float, ptr %606, align 4, !tbaa !39
  %608 = fneg float %607
  br label %609

609:                                              ; preds = %605, %602
  %610 = phi float [ %604, %602 ], [ %608, %605 ]
  store float %610, ptr %57, align 4, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #12
  store i32 0, ptr %58, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #12
  store i32 1, ptr %59, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #12
  %611 = getelementptr inbounds %class.aiVector3t, ptr %54, i32 0, i32 2
  %612 = load float, ptr %611, align 4, !tbaa !39
  store float %612, ptr %60, align 4, !tbaa !32
  %613 = load float, ptr %55, align 4, !tbaa !32
  %614 = load float, ptr %56, align 4, !tbaa !32
  %615 = fcmp ogt float %613, %614
  br i1 %615, label %616, label %624

616:                                              ; preds = %609
  %617 = load float, ptr %55, align 4, !tbaa !32
  %618 = load float, ptr %57, align 4, !tbaa !32
  %619 = fcmp ogt float %617, %618
  br i1 %619, label %620, label %623

620:                                              ; preds = %616
  store i32 1, ptr %58, align 4, !tbaa !19
  store i32 2, ptr %59, align 4, !tbaa !19
  %621 = getelementptr inbounds %class.aiVector3t, ptr %54, i32 0, i32 0
  %622 = load float, ptr %621, align 4, !tbaa !37
  store float %622, ptr %60, align 4, !tbaa !32
  br label %623

623:                                              ; preds = %620, %616
  br label %632

624:                                              ; preds = %609
  %625 = load float, ptr %56, align 4, !tbaa !32
  %626 = load float, ptr %57, align 4, !tbaa !32
  %627 = fcmp ogt float %625, %626
  br i1 %627, label %628, label %631

628:                                              ; preds = %624
  store i32 2, ptr %58, align 4, !tbaa !19
  store i32 0, ptr %59, align 4, !tbaa !19
  %629 = getelementptr inbounds %class.aiVector3t, ptr %54, i32 0, i32 1
  %630 = load float, ptr %629, align 4, !tbaa !38
  store float %630, ptr %60, align 4, !tbaa !32
  br label %631

631:                                              ; preds = %628, %624
  br label %632

632:                                              ; preds = %631, %623
  %633 = load float, ptr %60, align 4, !tbaa !32
  %634 = fcmp olt float %633, 0.000000e+00
  br i1 %634, label %635, label %636

635:                                              ; preds = %632
  call void @_ZSt4swapIjENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 4 dereferenceable(4) %58, ptr noundef nonnull align 4 dereferenceable(4) %59) #12
  br label %636

636:                                              ; preds = %635, %632
  store i32 0, ptr %32, align 4, !tbaa !19
  br label %637

637:                                              ; preds = %676, %636
  %638 = load i32, ptr %32, align 4, !tbaa !19
  %639 = load i32, ptr %35, align 4, !tbaa !19
  %640 = icmp slt i32 %638, %639
  br i1 %640, label %641, label %683

641:                                              ; preds = %637
  %642 = load ptr, ptr %25, align 8, !tbaa !5
  %643 = load ptr, ptr %29, align 8, !tbaa !5
  %644 = load i32, ptr %32, align 4, !tbaa !19
  %645 = sext i32 %644 to i64
  %646 = getelementptr inbounds i32, ptr %643, i64 %645
  %647 = load i32, ptr %646, align 4, !tbaa !19
  %648 = zext i32 %647 to i64
  %649 = getelementptr inbounds %class.aiVector3t, ptr %642, i64 %648
  %650 = load i32, ptr %58, align 4, !tbaa !19
  %651 = invoke noundef float @_ZNK10aiVector3tIfEixEj(ptr noundef nonnull align 4 dereferenceable(12) %649, i32 noundef %650)
          to label %652 unwind label %679

652:                                              ; preds = %641
  %653 = load i32, ptr %32, align 4, !tbaa !19
  %654 = sext i32 %653 to i64
  %655 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI10aiVector2tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %654) #12
  %656 = getelementptr inbounds %class.aiVector2t, ptr %655, i32 0, i32 0
  store float %651, ptr %656, align 4, !tbaa !40
  %657 = load ptr, ptr %25, align 8, !tbaa !5
  %658 = load ptr, ptr %29, align 8, !tbaa !5
  %659 = load i32, ptr %32, align 4, !tbaa !19
  %660 = sext i32 %659 to i64
  %661 = getelementptr inbounds i32, ptr %658, i64 %660
  %662 = load i32, ptr %661, align 4, !tbaa !19
  %663 = zext i32 %662 to i64
  %664 = getelementptr inbounds %class.aiVector3t, ptr %657, i64 %663
  %665 = load i32, ptr %59, align 4, !tbaa !19
  %666 = invoke noundef float @_ZNK10aiVector3tIfEixEj(ptr noundef nonnull align 4 dereferenceable(12) %664, i32 noundef %665)
          to label %667 unwind label %679

667:                                              ; preds = %652
  %668 = load i32, ptr %32, align 4, !tbaa !19
  %669 = sext i32 %668 to i64
  %670 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI10aiVector2tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %669) #12
  %671 = getelementptr inbounds %class.aiVector2t, ptr %670, i32 0, i32 1
  store float %666, ptr %671, align 4, !tbaa !42
  %672 = load i32, ptr %32, align 4, !tbaa !19
  %673 = sext i32 %672 to i64
  %674 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_bSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %26, i64 noundef %673)
          to label %675 unwind label %679

675:                                              ; preds = %667
  store i8 0, ptr %674, align 1, !tbaa !17
  br label %676

676:                                              ; preds = %675
  %677 = load i32, ptr %32, align 4, !tbaa !19
  %678 = add nsw i32 %677, 1
  store i32 %678, ptr %32, align 4, !tbaa !19
  br label %637, !llvm.loop !43

679:                                              ; preds = %667, %652, %641
  %680 = landingpad { ptr, i32 }
          cleanup
  %681 = extractvalue { ptr, i32 } %680, 0
  store ptr %681, ptr %20, align 8
  %682 = extractvalue { ptr, i32 } %680, 1
  store i32 %682, ptr %21, align 4
  br label %974

683:                                              ; preds = %637
  br label %684

684:                                              ; preds = %894, %683
  %685 = load i32, ptr %30, align 4, !tbaa !19
  %686 = icmp sgt i32 %685, 3
  br i1 %686, label %687, label %896

687:                                              ; preds = %684
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #12
  store i32 0, ptr %61, align 4, !tbaa !19
  %688 = load i32, ptr %34, align 4, !tbaa !19
  store i32 %688, ptr %31, align 4, !tbaa !19
  br label %689

689:                                              ; preds = %842, %687
  %690 = load i32, ptr %31, align 4, !tbaa !19
  %691 = add nsw i32 %690, 1
  store i32 %691, ptr %34, align 4, !tbaa !19
  br label %692

692:                                              ; preds = %707, %689
  %693 = load i32, ptr %34, align 4, !tbaa !19
  %694 = load i32, ptr %35, align 4, !tbaa !19
  %695 = icmp sge i32 %693, %694
  br i1 %695, label %696, label %697

696:                                              ; preds = %692
  store i32 0, ptr %34, align 4, !tbaa !19
  br label %699

697:                                              ; preds = %692
  %698 = load i32, ptr %34, align 4, !tbaa !19
  br label %699

699:                                              ; preds = %697, %696
  %700 = phi i32 [ 0, %696 ], [ %698, %697 ]
  %701 = sext i32 %700 to i64
  %702 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_bSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %26, i64 noundef %701)
          to label %703 unwind label %710

703:                                              ; preds = %699
  %704 = load i8, ptr %702, align 1, !tbaa !17, !range !26, !noundef !27
  %705 = trunc i8 %704 to i1
  br i1 %705, label %706, label %714

706:                                              ; preds = %703
  br label %707

707:                                              ; preds = %706
  %708 = load i32, ptr %34, align 4, !tbaa !19
  %709 = add nsw i32 %708, 1
  store i32 %709, ptr %34, align 4, !tbaa !19
  br label %692, !llvm.loop !44

710:                                              ; preds = %850, %848, %699
  %711 = landingpad { ptr, i32 }
          cleanup
  %712 = extractvalue { ptr, i32 } %711, 0
  store ptr %712, ptr %20, align 8
  %713 = extractvalue { ptr, i32 } %711, 1
  store i32 %713, ptr %21, align 4
  br label %895

714:                                              ; preds = %703
  %715 = load i32, ptr %34, align 4, !tbaa !19
  %716 = load i32, ptr %31, align 4, !tbaa !19
  %717 = icmp slt i32 %715, %716
  br i1 %717, label %718, label %724

718:                                              ; preds = %714
  %719 = load i32, ptr %61, align 4, !tbaa !19
  %720 = add nsw i32 %719, 1
  store i32 %720, ptr %61, align 4, !tbaa !19
  %721 = icmp eq i32 %720, 2
  br i1 %721, label %722, label %723

722:                                              ; preds = %718
  br label %845

723:                                              ; preds = %718
  br label %724

724:                                              ; preds = %723, %714
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #12
  %725 = load i32, ptr %31, align 4, !tbaa !19
  %726 = sext i32 %725 to i64
  %727 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI10aiVector2tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %726) #12
  store ptr %727, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #12
  %728 = load i32, ptr %33, align 4, !tbaa !19
  %729 = sext i32 %728 to i64
  %730 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI10aiVector2tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %729) #12
  store ptr %730, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #12
  %731 = load i32, ptr %34, align 4, !tbaa !19
  %732 = sext i32 %731 to i64
  %733 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI10aiVector2tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %732) #12
  store ptr %733, ptr %64, align 8, !tbaa !5
  %734 = load ptr, ptr %63, align 8, !tbaa !5
  %735 = load ptr, ptr %64, align 8, !tbaa !5
  %736 = load ptr, ptr %62, align 8, !tbaa !5
  %737 = invoke noundef i32 @_ZN6Assimp18OnLeftSideOfLine2DI10aiVector2tIfEEEiRKT_S5_S5_(ptr noundef nonnull align 4 dereferenceable(8) %734, ptr noundef nonnull align 4 dereferenceable(8) %735, ptr noundef nonnull align 4 dereferenceable(8) %736)
          to label %738 unwind label %741

738:                                              ; preds = %724
  %739 = icmp eq i32 %737, 1
  br i1 %739, label %740, label %745

740:                                              ; preds = %738
  store i32 27, ptr %9, align 4
  br label %839

741:                                              ; preds = %724
  %742 = landingpad { ptr, i32 }
          cleanup
  %743 = extractvalue { ptr, i32 } %742, 0
  store ptr %743, ptr %20, align 8
  %744 = extractvalue { ptr, i32 } %742, 1
  store i32 %744, ptr %21, align 4
  br label %841

745:                                              ; preds = %738
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #12
  %746 = load ptr, ptr %63, align 8, !tbaa !5
  %747 = load ptr, ptr %62, align 8, !tbaa !5
  %748 = invoke <2 x float> @_ZmiIfE10aiVector2tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(8) %746, ptr noundef nonnull align 4 dereferenceable(8) %747)
          to label %749 unwind label %775

749:                                              ; preds = %745
  store <2 x float> %748, ptr %65, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #12
  %750 = load ptr, ptr %64, align 8, !tbaa !5
  %751 = load ptr, ptr %62, align 8, !tbaa !5
  %752 = invoke <2 x float> @_ZmiIfE10aiVector2tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(8) %750, ptr noundef nonnull align 4 dereferenceable(8) %751)
          to label %753 unwind label %779

753:                                              ; preds = %749
  store <2 x float> %752, ptr %66, align 4
  %754 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN10aiVector2tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(8) %65)
          to label %755 unwind label %779

755:                                              ; preds = %753
  %756 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN10aiVector2tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(8) %66)
          to label %757 unwind label %779

757:                                              ; preds = %755
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #12
  %758 = invoke noundef float @_ZmlIfET_RK10aiVector2tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(8) %65, ptr noundef nonnull align 4 dereferenceable(8) %66)
          to label %759 unwind label %783

759:                                              ; preds = %757
  store float %758, ptr %67, align 4, !tbaa !32
  %760 = load float, ptr %67, align 4, !tbaa !32
  %761 = fsub float %760, 1.000000e+00
  %762 = invoke noundef float @_ZSt3absf(float noundef %761)
          to label %763 unwind label %783

763:                                              ; preds = %759
  %764 = fcmp olt float %762, 0x3EB0C6F7A0000000
  br i1 %764, label %771, label %765

765:                                              ; preds = %763
  %766 = load float, ptr %67, align 4, !tbaa !32
  %767 = fadd float %766, 1.000000e+00
  %768 = invoke noundef float @_ZSt3absf(float noundef %767)
          to label %769 unwind label %783

769:                                              ; preds = %765
  %770 = fcmp olt float %768, 0x3EB0C6F7A0000000
  br i1 %770, label %771, label %787

771:                                              ; preds = %769, %763
  %772 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %773 unwind label %783

773:                                              ; preds = %771
  invoke void @_ZN6Assimp6Logger4warnEPKc(ptr noundef nonnull align 8 dereferenceable(12) %772, ptr noundef @.str.4)
          to label %774 unwind label %783

774:                                              ; preds = %773
  store i32 27, ptr %9, align 4
  br label %835

775:                                              ; preds = %745
  %776 = landingpad { ptr, i32 }
          cleanup
  %777 = extractvalue { ptr, i32 } %776, 0
  store ptr %777, ptr %20, align 8
  %778 = extractvalue { ptr, i32 } %776, 1
  store i32 %778, ptr %21, align 4
  br label %838

779:                                              ; preds = %755, %753, %749
  %780 = landingpad { ptr, i32 }
          cleanup
  %781 = extractvalue { ptr, i32 } %780, 0
  store ptr %781, ptr %20, align 8
  %782 = extractvalue { ptr, i32 } %780, 1
  store i32 %782, ptr %21, align 4
  br label %837

783:                                              ; preds = %773, %771, %765, %759, %757
  %784 = landingpad { ptr, i32 }
          cleanup
  %785 = extractvalue { ptr, i32 } %784, 0
  store ptr %785, ptr %20, align 8
  %786 = extractvalue { ptr, i32 } %784, 1
  store i32 %786, ptr %21, align 4
  br label %836

787:                                              ; preds = %769
  store i32 0, ptr %32, align 4, !tbaa !19
  br label %788

788:                                              ; preds = %826, %787
  %789 = load i32, ptr %32, align 4, !tbaa !19
  %790 = load i32, ptr %35, align 4, !tbaa !19
  %791 = icmp slt i32 %789, %790
  br i1 %791, label %792, label %829

792:                                              ; preds = %788
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #12
  %793 = load i32, ptr %32, align 4, !tbaa !19
  %794 = sext i32 %793 to i64
  %795 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI10aiVector2tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %794) #12
  store ptr %795, ptr %68, align 8, !tbaa !5
  %796 = load ptr, ptr %68, align 8, !tbaa !5
  %797 = load ptr, ptr %62, align 8, !tbaa !5
  %798 = invoke noundef zeroext i1 @_ZNK10aiVector2tIfEneERKS0_(ptr noundef nonnull align 4 dereferenceable(8) %796, ptr noundef nonnull align 4 dereferenceable(8) %797)
          to label %799 unwind label %818

799:                                              ; preds = %792
  br i1 %798, label %800, label %822

800:                                              ; preds = %799
  %801 = load ptr, ptr %68, align 8, !tbaa !5
  %802 = load ptr, ptr %64, align 8, !tbaa !5
  %803 = invoke noundef zeroext i1 @_ZNK10aiVector2tIfEneERKS0_(ptr noundef nonnull align 4 dereferenceable(8) %801, ptr noundef nonnull align 4 dereferenceable(8) %802)
          to label %804 unwind label %818

804:                                              ; preds = %800
  br i1 %803, label %805, label %822

805:                                              ; preds = %804
  %806 = load ptr, ptr %68, align 8, !tbaa !5
  %807 = load ptr, ptr %63, align 8, !tbaa !5
  %808 = invoke noundef zeroext i1 @_ZNK10aiVector2tIfEneERKS0_(ptr noundef nonnull align 4 dereferenceable(8) %806, ptr noundef nonnull align 4 dereferenceable(8) %807)
          to label %809 unwind label %818

809:                                              ; preds = %805
  br i1 %808, label %810, label %822

810:                                              ; preds = %809
  %811 = load ptr, ptr %63, align 8, !tbaa !5
  %812 = load ptr, ptr %62, align 8, !tbaa !5
  %813 = load ptr, ptr %64, align 8, !tbaa !5
  %814 = load ptr, ptr %68, align 8, !tbaa !5
  %815 = invoke noundef zeroext i1 @_ZN6Assimp17PointInTriangle2DI10aiVector2tIfEEEbRKT_S5_S5_S5_(ptr noundef nonnull align 4 dereferenceable(8) %811, ptr noundef nonnull align 4 dereferenceable(8) %812, ptr noundef nonnull align 4 dereferenceable(8) %813, ptr noundef nonnull align 4 dereferenceable(8) %814)
          to label %816 unwind label %818

816:                                              ; preds = %810
  br i1 %815, label %817, label %822

817:                                              ; preds = %816
  store i32 31, ptr %9, align 4
  br label %823

818:                                              ; preds = %810, %805, %800, %792
  %819 = landingpad { ptr, i32 }
          cleanup
  %820 = extractvalue { ptr, i32 } %819, 0
  store ptr %820, ptr %20, align 8
  %821 = extractvalue { ptr, i32 } %819, 1
  store i32 %821, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #12
  br label %836

822:                                              ; preds = %816, %809, %804, %799
  store i32 0, ptr %9, align 4
  br label %823

823:                                              ; preds = %822, %817
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #12
  %824 = load i32, ptr %9, align 4
  switch i32 %824, label %1081 [
    i32 0, label %825
    i32 31, label %829
  ]

825:                                              ; preds = %823
  br label %826

826:                                              ; preds = %825
  %827 = load i32, ptr %32, align 4, !tbaa !19
  %828 = add nsw i32 %827, 1
  store i32 %828, ptr %32, align 4, !tbaa !19
  br label %788, !llvm.loop !45

829:                                              ; preds = %823, %788
  %830 = load i32, ptr %32, align 4, !tbaa !19
  %831 = load i32, ptr %35, align 4, !tbaa !19
  %832 = icmp ne i32 %830, %831
  br i1 %832, label %833, label %834

833:                                              ; preds = %829
  store i32 27, ptr %9, align 4
  br label %835

834:                                              ; preds = %829
  store i32 25, ptr %9, align 4
  br label %835

835:                                              ; preds = %834, %833, %774
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #12
  br label %839

836:                                              ; preds = %818, %783
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #12
  br label %837

837:                                              ; preds = %836, %779
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #12
  br label %838

838:                                              ; preds = %837, %775
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #12
  br label %841

839:                                              ; preds = %835, %740
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #12
  %840 = load i32, ptr %9, align 4
  switch i32 %840, label %1081 [
    i32 27, label %842
    i32 25, label %845
  ]

841:                                              ; preds = %838, %741
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #12
  br label %895

842:                                              ; preds = %839
  %843 = load i32, ptr %31, align 4, !tbaa !19
  store i32 %843, ptr %33, align 4, !tbaa !19
  %844 = load i32, ptr %34, align 4, !tbaa !19
  store i32 %844, ptr %31, align 4, !tbaa !19
  br label %689, !llvm.loop !46

845:                                              ; preds = %839, %722
  %846 = load i32, ptr %61, align 4, !tbaa !19
  %847 = icmp eq i32 %846, 2
  br i1 %847, label %848, label %852

848:                                              ; preds = %845
  %849 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %850 unwind label %710

850:                                              ; preds = %848
  invoke void @_ZN6Assimp6Logger5errorEPKc(ptr noundef nonnull align 8 dereferenceable(12) %849, ptr noundef @.str.5)
          to label %851 unwind label %710

851:                                              ; preds = %850
  store i32 0, ptr %30, align 4, !tbaa !19
  store i32 24, ptr %9, align 4
  br label %892

852:                                              ; preds = %845
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #12
  %853 = load ptr, ptr %17, align 8, !tbaa !5
  %854 = getelementptr inbounds %struct.aiFace, ptr %853, i32 1
  store ptr %854, ptr %17, align 8, !tbaa !5
  store ptr %853, ptr %69, align 8, !tbaa !5
  %855 = load ptr, ptr %69, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.aiFace, ptr %855, i32 0, i32 0
  store i32 3, ptr %856, align 8, !tbaa !22
  %857 = load ptr, ptr %69, align 8, !tbaa !5
  %858 = getelementptr inbounds %struct.aiFace, ptr %857, i32 0, i32 1
  %859 = load ptr, ptr %858, align 8, !tbaa !31
  %860 = icmp ne ptr %859, null
  br i1 %860, label %870, label %861

861:                                              ; preds = %852
  %862 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef 12) #13
          to label %863 unwind label %866

863:                                              ; preds = %861
  %864 = load ptr, ptr %69, align 8, !tbaa !5
  %865 = getelementptr inbounds %struct.aiFace, ptr %864, i32 0, i32 1
  store ptr %862, ptr %865, align 8, !tbaa !31
  br label %870

866:                                              ; preds = %870, %861
  %867 = landingpad { ptr, i32 }
          cleanup
  %868 = extractvalue { ptr, i32 } %867, 0
  store ptr %868, ptr %20, align 8
  %869 = extractvalue { ptr, i32 } %867, 1
  store i32 %869, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #12
  br label %895

870:                                              ; preds = %863, %852
  %871 = load i32, ptr %33, align 4, !tbaa !19
  %872 = load ptr, ptr %69, align 8, !tbaa !5
  %873 = getelementptr inbounds %struct.aiFace, ptr %872, i32 0, i32 1
  %874 = load ptr, ptr %873, align 8, !tbaa !31
  %875 = getelementptr inbounds i32, ptr %874, i64 0
  store i32 %871, ptr %875, align 4, !tbaa !19
  %876 = load i32, ptr %31, align 4, !tbaa !19
  %877 = load ptr, ptr %69, align 8, !tbaa !5
  %878 = getelementptr inbounds %struct.aiFace, ptr %877, i32 0, i32 1
  %879 = load ptr, ptr %878, align 8, !tbaa !31
  %880 = getelementptr inbounds i32, ptr %879, i64 1
  store i32 %876, ptr %880, align 4, !tbaa !19
  %881 = load i32, ptr %34, align 4, !tbaa !19
  %882 = load ptr, ptr %69, align 8, !tbaa !5
  %883 = getelementptr inbounds %struct.aiFace, ptr %882, i32 0, i32 1
  %884 = load ptr, ptr %883, align 8, !tbaa !31
  %885 = getelementptr inbounds i32, ptr %884, i64 2
  store i32 %881, ptr %885, align 4, !tbaa !19
  %886 = load i32, ptr %31, align 4, !tbaa !19
  %887 = sext i32 %886 to i64
  %888 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_bSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %26, i64 noundef %887)
          to label %889 unwind label %866

889:                                              ; preds = %870
  store i8 1, ptr %888, align 1, !tbaa !17
  %890 = load i32, ptr %30, align 4, !tbaa !19
  %891 = add nsw i32 %890, -1
  store i32 %891, ptr %30, align 4, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #12
  store i32 0, ptr %9, align 4
  br label %892

892:                                              ; preds = %889, %851
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #12
  %893 = load i32, ptr %9, align 4
  switch i32 %893, label %1081 [
    i32 0, label %894
    i32 24, label %896
  ]

894:                                              ; preds = %892
  br label %684, !llvm.loop !47

895:                                              ; preds = %866, %841, %710
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #12
  br label %974

896:                                              ; preds = %892, %684
  %897 = load i32, ptr %30, align 4, !tbaa !19
  %898 = icmp sgt i32 %897, 0
  br i1 %898, label %899, label %973

899:                                              ; preds = %896
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #12
  %900 = load ptr, ptr %17, align 8, !tbaa !5
  %901 = getelementptr inbounds %struct.aiFace, ptr %900, i32 1
  store ptr %901, ptr %17, align 8, !tbaa !5
  store ptr %900, ptr %70, align 8, !tbaa !5
  %902 = load ptr, ptr %70, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.aiFace, ptr %902, i32 0, i32 0
  store i32 3, ptr %903, align 8, !tbaa !22
  %904 = load ptr, ptr %70, align 8, !tbaa !5
  %905 = getelementptr inbounds %struct.aiFace, ptr %904, i32 0, i32 1
  %906 = load ptr, ptr %905, align 8, !tbaa !31
  %907 = icmp ne ptr %906, null
  br i1 %907, label %917, label %908

908:                                              ; preds = %899
  %909 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef 12) #13
          to label %910 unwind label %913

910:                                              ; preds = %908
  %911 = load ptr, ptr %70, align 8, !tbaa !5
  %912 = getelementptr inbounds %struct.aiFace, ptr %911, i32 0, i32 1
  store ptr %909, ptr %912, align 8, !tbaa !31
  br label %917

913:                                              ; preds = %956, %937, %918, %908
  %914 = landingpad { ptr, i32 }
          cleanup
  %915 = extractvalue { ptr, i32 } %914, 0
  store ptr %915, ptr %20, align 8
  %916 = extractvalue { ptr, i32 } %914, 1
  store i32 %916, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #12
  br label %974

917:                                              ; preds = %910, %899
  store i32 0, ptr %32, align 4, !tbaa !19
  br label %918

918:                                              ; preds = %926, %917
  %919 = load i32, ptr %32, align 4, !tbaa !19
  %920 = sext i32 %919 to i64
  %921 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_bSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %26, i64 noundef %920)
          to label %922 unwind label %913

922:                                              ; preds = %918
  %923 = load i8, ptr %921, align 1, !tbaa !17, !range !26, !noundef !27
  %924 = trunc i8 %923 to i1
  br i1 %924, label %925, label %929

925:                                              ; preds = %922
  br label %926

926:                                              ; preds = %925
  %927 = load i32, ptr %32, align 4, !tbaa !19
  %928 = add nsw i32 %927, 1
  store i32 %928, ptr %32, align 4, !tbaa !19
  br label %918, !llvm.loop !48

929:                                              ; preds = %922
  %930 = load i32, ptr %32, align 4, !tbaa !19
  %931 = load ptr, ptr %70, align 8, !tbaa !5
  %932 = getelementptr inbounds %struct.aiFace, ptr %931, i32 0, i32 1
  %933 = load ptr, ptr %932, align 8, !tbaa !31
  %934 = getelementptr inbounds i32, ptr %933, i64 0
  store i32 %930, ptr %934, align 4, !tbaa !19
  %935 = load i32, ptr %32, align 4, !tbaa !19
  %936 = add nsw i32 %935, 1
  store i32 %936, ptr %32, align 4, !tbaa !19
  br label %937

937:                                              ; preds = %945, %929
  %938 = load i32, ptr %32, align 4, !tbaa !19
  %939 = sext i32 %938 to i64
  %940 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_bSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %26, i64 noundef %939)
          to label %941 unwind label %913

941:                                              ; preds = %937
  %942 = load i8, ptr %940, align 1, !tbaa !17, !range !26, !noundef !27
  %943 = trunc i8 %942 to i1
  br i1 %943, label %944, label %948

944:                                              ; preds = %941
  br label %945

945:                                              ; preds = %944
  %946 = load i32, ptr %32, align 4, !tbaa !19
  %947 = add nsw i32 %946, 1
  store i32 %947, ptr %32, align 4, !tbaa !19
  br label %937, !llvm.loop !49

948:                                              ; preds = %941
  %949 = load i32, ptr %32, align 4, !tbaa !19
  %950 = load ptr, ptr %70, align 8, !tbaa !5
  %951 = getelementptr inbounds %struct.aiFace, ptr %950, i32 0, i32 1
  %952 = load ptr, ptr %951, align 8, !tbaa !31
  %953 = getelementptr inbounds i32, ptr %952, i64 1
  store i32 %949, ptr %953, align 4, !tbaa !19
  %954 = load i32, ptr %32, align 4, !tbaa !19
  %955 = add nsw i32 %954, 1
  store i32 %955, ptr %32, align 4, !tbaa !19
  br label %956

956:                                              ; preds = %964, %948
  %957 = load i32, ptr %32, align 4, !tbaa !19
  %958 = sext i32 %957 to i64
  %959 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_bSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %26, i64 noundef %958)
          to label %960 unwind label %913

960:                                              ; preds = %956
  %961 = load i8, ptr %959, align 1, !tbaa !17, !range !26, !noundef !27
  %962 = trunc i8 %961 to i1
  br i1 %962, label %963, label %967

963:                                              ; preds = %960
  br label %964

964:                                              ; preds = %963
  %965 = load i32, ptr %32, align 4, !tbaa !19
  %966 = add nsw i32 %965, 1
  store i32 %966, ptr %32, align 4, !tbaa !19
  br label %956, !llvm.loop !50

967:                                              ; preds = %960
  %968 = load i32, ptr %32, align 4, !tbaa !19
  %969 = load ptr, ptr %70, align 8, !tbaa !5
  %970 = getelementptr inbounds %struct.aiFace, ptr %969, i32 0, i32 1
  %971 = load ptr, ptr %970, align 8, !tbaa !31
  %972 = getelementptr inbounds i32, ptr %971, i64 2
  store i32 %968, ptr %972, align 4, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #12
  br label %973

973:                                              ; preds = %967, %896
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #12
  call void @llvm.lifetime.end.p0(i64 12, ptr %54) #12
  br label %976

974:                                              ; preds = %913, %895, %679
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #12
  br label %975

975:                                              ; preds = %974, %569
  call void @llvm.lifetime.end.p0(i64 12, ptr %54) #12
  br label %1038

976:                                              ; preds = %973
  br label %977

977:                                              ; preds = %976
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #12
  %978 = load ptr, ptr %36, align 8, !tbaa !5
  store ptr %978, ptr %71, align 8, !tbaa !5
  br label %979

979:                                              ; preds = %1016, %977
  %980 = load ptr, ptr %71, align 8, !tbaa !5
  %981 = load ptr, ptr %17, align 8, !tbaa !5
  %982 = icmp ne ptr %980, %981
  br i1 %982, label %984, label %983

983:                                              ; preds = %979
  store i32 43, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #12
  br label %1023

984:                                              ; preds = %979
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #12
  %985 = load ptr, ptr %71, align 8, !tbaa !5
  %986 = getelementptr inbounds %struct.aiFace, ptr %985, i32 0, i32 1
  %987 = load ptr, ptr %986, align 8, !tbaa !31
  store ptr %987, ptr %72, align 8, !tbaa !5
  %988 = load ptr, ptr %29, align 8, !tbaa !5
  %989 = load ptr, ptr %72, align 8, !tbaa !5
  %990 = getelementptr inbounds i32, ptr %989, i64 0
  %991 = load i32, ptr %990, align 4, !tbaa !19
  %992 = zext i32 %991 to i64
  %993 = getelementptr inbounds i32, ptr %988, i64 %992
  %994 = load i32, ptr %993, align 4, !tbaa !19
  %995 = load ptr, ptr %72, align 8, !tbaa !5
  %996 = getelementptr inbounds i32, ptr %995, i64 0
  store i32 %994, ptr %996, align 4, !tbaa !19
  %997 = load ptr, ptr %29, align 8, !tbaa !5
  %998 = load ptr, ptr %72, align 8, !tbaa !5
  %999 = getelementptr inbounds i32, ptr %998, i64 1
  %1000 = load i32, ptr %999, align 4, !tbaa !19
  %1001 = zext i32 %1000 to i64
  %1002 = getelementptr inbounds i32, ptr %997, i64 %1001
  %1003 = load i32, ptr %1002, align 4, !tbaa !19
  %1004 = load ptr, ptr %72, align 8, !tbaa !5
  %1005 = getelementptr inbounds i32, ptr %1004, i64 1
  store i32 %1003, ptr %1005, align 4, !tbaa !19
  %1006 = load ptr, ptr %29, align 8, !tbaa !5
  %1007 = load ptr, ptr %72, align 8, !tbaa !5
  %1008 = getelementptr inbounds i32, ptr %1007, i64 2
  %1009 = load i32, ptr %1008, align 4, !tbaa !19
  %1010 = zext i32 %1009 to i64
  %1011 = getelementptr inbounds i32, ptr %1006, i64 %1010
  %1012 = load i32, ptr %1011, align 4, !tbaa !19
  %1013 = load ptr, ptr %72, align 8, !tbaa !5
  %1014 = getelementptr inbounds i32, ptr %1013, i64 2
  store i32 %1012, ptr %1014, align 4, !tbaa !19
  %1015 = load ptr, ptr %71, align 8, !tbaa !5
  invoke void @_ZN12_GLOBAL__N_111NGONEncoder18ngonEncodeTriangleEP6aiFace(ptr noundef nonnull align 4 dereferenceable(4) %24, ptr noundef %1015)
          to label %1016 unwind label %1019

1016:                                             ; preds = %984
  %1017 = load ptr, ptr %71, align 8, !tbaa !5
  %1018 = getelementptr inbounds %struct.aiFace, ptr %1017, i32 1
  store ptr %1018, ptr %71, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #12
  br label %979, !llvm.loop !51

1019:                                             ; preds = %984
  %1020 = landingpad { ptr, i32 }
          cleanup
  %1021 = extractvalue { ptr, i32 } %1020, 0
  store ptr %1021, ptr %20, align 8
  %1022 = extractvalue { ptr, i32 } %1020, 1
  store i32 %1022, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #12
  br label %1038

1023:                                             ; preds = %983
  %1024 = load ptr, ptr %28, align 8, !tbaa !5
  %1025 = getelementptr inbounds %struct.aiFace, ptr %1024, i32 0, i32 1
  %1026 = load ptr, ptr %1025, align 8, !tbaa !31
  %1027 = icmp eq ptr %1026, null
  br i1 %1027, label %1029, label %1028

1028:                                             ; preds = %1023
  call void @_ZdaPv(ptr noundef %1026) #14
  br label %1029

1029:                                             ; preds = %1028, %1023
  %1030 = load ptr, ptr %28, align 8, !tbaa !5
  %1031 = getelementptr inbounds %struct.aiFace, ptr %1030, i32 0, i32 1
  store ptr null, ptr %1031, align 8, !tbaa !31
  store i32 0, ptr %9, align 4
  br label %1032

1032:                                             ; preds = %1029, %515, %298
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #12
  %1033 = load i32, ptr %9, align 4
  switch i32 %1033, label %1081 [
    i32 0, label %1034
    i32 10, label %1035
  ]

1034:                                             ; preds = %1032
  br label %1035

1035:                                             ; preds = %1034, %1032
  %1036 = load i32, ptr %27, align 4, !tbaa !19
  %1037 = add i32 %1036, 1
  store i32 %1037, ptr %27, align 4, !tbaa !19
  br label %228, !llvm.loop !52

1038:                                             ; preds = %1019, %975, %520, %294
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #12
  call void @_ZNSt10unique_ptrIA_bSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #12
  br label %1069

1039:                                             ; preds = %234
  %1040 = load ptr, ptr %5, align 8, !tbaa !5
  %1041 = getelementptr inbounds %struct.aiMesh, ptr %1040, i32 0, i32 10
  %1042 = load ptr, ptr %1041, align 8, !tbaa !21
  %1043 = icmp eq ptr %1042, null
  br i1 %1043, label %1056, label %1044

1044:                                             ; preds = %1039
  %1045 = getelementptr inbounds i8, ptr %1042, i64 -8
  %1046 = load i64, ptr %1045, align 8
  %1047 = getelementptr inbounds %struct.aiFace, ptr %1042, i64 %1046
  %1048 = icmp eq ptr %1042, %1047
  br i1 %1048, label %1053, label %1049

1049:                                             ; preds = %1049, %1044
  %1050 = phi ptr [ %1047, %1044 ], [ %1051, %1049 ]
  %1051 = getelementptr inbounds %struct.aiFace, ptr %1050, i64 -1
  call void @_ZN6aiFaceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %1051) #12
  %1052 = icmp eq ptr %1051, %1042
  br i1 %1052, label %1053, label %1049

1053:                                             ; preds = %1049, %1044
  %1054 = mul i64 16, %1046
  %1055 = add i64 %1054, 8
  call void @_ZdaPvm(ptr noundef %1045, i64 noundef %1055) #14
  br label %1056

1056:                                             ; preds = %1053, %1039
  %1057 = load ptr, ptr %16, align 8, !tbaa !5
  %1058 = load ptr, ptr %5, align 8, !tbaa !5
  %1059 = getelementptr inbounds %struct.aiMesh, ptr %1058, i32 0, i32 10
  store ptr %1057, ptr %1059, align 8, !tbaa !21
  %1060 = load ptr, ptr %17, align 8, !tbaa !5
  %1061 = load ptr, ptr %16, align 8, !tbaa !5
  %1062 = ptrtoint ptr %1060 to i64
  %1063 = ptrtoint ptr %1061 to i64
  %1064 = sub i64 %1062, %1063
  %1065 = sdiv exact i64 %1064, 16
  %1066 = trunc i64 %1065 to i32
  %1067 = load ptr, ptr %5, align 8, !tbaa !5
  %1068 = getelementptr inbounds %struct.aiMesh, ptr %1067, i32 0, i32 2
  store i32 %1066, ptr %1068, align 8, !tbaa !20
  store i1 true, ptr %3, align 1
  store i32 1, ptr %9, align 4
  call void @_ZNSt10unique_ptrIA_bSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #12
  call void @_ZNSt6vectorI10aiVector2tIfESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #12
  call void @_ZNSt6vectorI10aiVector3tIfESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #12
  br label %1073

1069:                                             ; preds = %1038, %247
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #12
  br label %1070

1070:                                             ; preds = %1069, %243
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #12
  call void @_ZNSt6vectorI10aiVector2tIfESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #12
  br label %1071

1071:                                             ; preds = %1070, %239
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #12
  call void @_ZNSt6vectorI10aiVector3tIfESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #12
  br label %1072

1072:                                             ; preds = %1071, %235
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #12
  br label %1076

1073:                                             ; preds = %1056, %167
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #12
  br label %1074

1074:                                             ; preds = %1073, %116, %107
  %1075 = load i1, ptr %3, align 1
  ret i1 %1075

1076:                                             ; preds = %1072
  %1077 = load ptr, ptr %20, align 8
  %1078 = load i32, ptr %21, align 4
  %1079 = insertvalue { ptr, i32 } poison, ptr %1077, 0
  %1080 = insertvalue { ptr, i32 } %1079, i32 %1078, 1
  resume { ptr, i32 } %1080

1081:                                             ; preds = %1032, %892, %839, %823, %107
  unreachable
}

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.uadd.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 void @_ZN6aiFaceC2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6 align 2

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

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN12_GLOBAL__N_111NGONEncoderC2Ev(ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #6 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_111NGONEncoder18ngonEncodeTriangleEP6aiFace(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef) #7 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_111NGONEncoder14ngonEncodeQuadEP6aiFaceS2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef, ptr noundef) #7 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6Assimp12NewellNormalILi3ELi3ELi3EfEEvR10aiVector3tIT2_EiPS2_S5_S5_(ptr noundef nonnull align 4 dereferenceable(12), i32 noundef, ptr noundef, ptr noundef, ptr noundef) #8

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK10aiVector3tIfEixEj(ptr noundef nonnull align 4 dereferenceable(12), i32 noundef) #3 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZN6Assimp18OnLeftSideOfLine2DI10aiVector2tIfEEEiRKT_S5_S5_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) #8

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZmiIfE10aiVector2tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) #10

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

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

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

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

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

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

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

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPvm(ptr noundef, i64 noundef) #11

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

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

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

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

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

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

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

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


; 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::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<aiVector3t<float>, std::allocator<aiVector3t<float>>>::_Vector_impl" }
%"struct.std::_Vector_base<aiVector3t<float>, std::allocator<aiVector3t<float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<aiVector3t<float>, std::allocator<aiVector3t<float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<aiVector3t<float>, std::allocator<aiVector3t<float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator" = type { i8 }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<aiVector2t<float>, std::allocator<aiVector2t<float>>>::_Vector_impl" }
%"struct.std::_Vector_base<aiVector2t<float>, std::allocator<aiVector2t<float>>>::_Vector_impl" = type { %"struct.std::_Vector_base<aiVector2t<float>, std::allocator<aiVector2t<float>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<aiVector2t<float>, std::allocator<aiVector2t<float>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.2" = type { i8 }
%"struct.(anonymous namespace)::NGONEncoder" = type { i32 }
%"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.6" }
%"struct.std::_Head_base.6" = type { ptr }
%class.aiVector3t = type { float, float, float }
%class.aiVector2t = type { float, float }
%struct.aiFace = type { i32, ptr }

@.str.3 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [77 x i8], align 1

declare noundef ptr @_ZN6Assimp13DefaultLogger3getEv() local_unnamed_addr #0

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN6Assimp18TriangulateProcess15TriangulateMeshEP6aiMesh(ptr nocapture noundef nonnull readnone align 8 dereferenceable(24) %0, ptr nocapture noundef %1) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca %"class.std::vector", align 8
  %5 = alloca %"class.std::allocator", align 1
  %6 = alloca %"class.std::vector.0", align 8
  %7 = alloca %"class.std::allocator.2", align 1
  %8 = alloca %"struct.(anonymous namespace)::NGONEncoder", align 4
  %9 = alloca %"class.std::unique_ptr", align 8
  %10 = alloca %class.aiVector3t, align 8
  %11 = alloca %class.aiVector3t, align 8
  %12 = alloca %class.aiVector3t, align 8
  %13 = alloca [4 x i32], align 16
  %14 = alloca %class.aiVector3t, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca %class.aiVector2t, align 8
  %18 = alloca %class.aiVector2t, align 8
  %19 = load i32, ptr %1, align 8, !tbaa !5
  %.not = icmp eq i32 %19, 0
  br i1 %.not, label %.preheader364, label %66

.preheader364:                                    ; preds = %2
  %20 = getelementptr inbounds i8, ptr %1, i64 8
  %21 = load i32, ptr %20, align 8, !tbaa !16
  %.not461 = icmp eq i32 %21, 0
  br i1 %.not461, label %.critedge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader364
  %22 = getelementptr inbounds i8, ptr %1, i64 208
  %23 = load ptr, ptr %22, align 8, !tbaa !17
  %wide.trip.count = zext i32 %21 to i64
  %min.iters.check = icmp ult i32 %21, 9
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph ], [ %n.vec, %middle.block ]
  %.0243424.ph = phi i1 [ false, %.lr.ph ], [ %63, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph
  %n.mod.vf = and i64 %wide.trip.count, 7
  %24 = icmp eq i64 %n.mod.vf, 0
  %25 = select i1 %24, i64 8, i64 %n.mod.vf
  %n.vec = sub nsw i64 %wide.trip.count, %25
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i1> [ zeroinitializer, %vector.ph ], [ %59, %vector.body ]
  %vec.phi631 = phi <4 x i1> [ zeroinitializer, %vector.ph ], [ %60, %vector.body ]
  %26 = or disjoint i64 %index, 1
  %27 = or disjoint i64 %index, 2
  %28 = or disjoint i64 %index, 3
  %29 = or disjoint i64 %index, 4
  %30 = or disjoint i64 %index, 5
  %31 = or disjoint i64 %index, 6
  %32 = or disjoint i64 %index, 7
  %33 = getelementptr inbounds %struct.aiFace, ptr %23, i64 %index
  %34 = getelementptr inbounds %struct.aiFace, ptr %23, i64 %26
  %35 = getelementptr inbounds %struct.aiFace, ptr %23, i64 %27
  %36 = getelementptr inbounds %struct.aiFace, ptr %23, i64 %28
  %37 = getelementptr inbounds %struct.aiFace, ptr %23, i64 %29
  %38 = getelementptr inbounds %struct.aiFace, ptr %23, i64 %30
  %39 = getelementptr inbounds %struct.aiFace, ptr %23, i64 %31
  %40 = getelementptr inbounds %struct.aiFace, ptr %23, i64 %32
  %41 = load i32, ptr %33, align 8, !tbaa !18
  %42 = load i32, ptr %34, align 8, !tbaa !18
  %43 = load i32, ptr %35, align 8, !tbaa !18
  %44 = load i32, ptr %36, align 8, !tbaa !18
  %45 = insertelement <4 x i32> poison, i32 %41, i64 0
  %46 = insertelement <4 x i32> %45, i32 %42, i64 1
  %47 = insertelement <4 x i32> %46, i32 %43, i64 2
  %48 = insertelement <4 x i32> %47, i32 %44, i64 3
  %49 = load i32, ptr %37, align 8, !tbaa !18
  %50 = load i32, ptr %38, align 8, !tbaa !18
  %51 = load i32, ptr %39, align 8, !tbaa !18
  %52 = load i32, ptr %40, align 8, !tbaa !18
  %53 = insertelement <4 x i32> poison, i32 %49, i64 0
  %54 = insertelement <4 x i32> %53, i32 %50, i64 1
  %55 = insertelement <4 x i32> %54, i32 %51, i64 2
  %56 = insertelement <4 x i32> %55, i32 %52, i64 3
  %57 = icmp ne <4 x i32> %48, <i32 3, i32 3, i32 3, i32 3>
  %58 = icmp ne <4 x i32> %56, <i32 3, i32 3, i32 3, i32 3>
  %59 = or <4 x i1> %vec.phi, %57
  %60 = or <4 x i1> %vec.phi631, %58
  %index.next = add nuw i64 %index, 8
  %61 = icmp eq i64 %index.next, %n.vec
  br i1 %61, label %middle.block, label %vector.body, !llvm.loop !20

middle.block:                                     ; preds = %vector.body
  %bin.rdx = or <4 x i1> %60, %59
  %bin.rdx.fr = freeze <4 x i1> %bin.rdx
  %62 = bitcast <4 x i1> %bin.rdx.fr to i4
  %63 = icmp ne i4 %62, 0
  br label %scalar.ph.preheader

._crit_edge:                                      ; preds = %scalar.ph
  br i1 %spec.select, label %68, label %.critedge

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %.0243424 = phi i1 [ %spec.select, %scalar.ph ], [ %.0243424.ph, %scalar.ph.preheader ]
  %64 = getelementptr inbounds %struct.aiFace, ptr %23, i64 %indvars.iv
  %65 = load i32, ptr %64, align 8, !tbaa !18
  %.not315 = icmp ne i32 %65, 3
  %spec.select = select i1 %.not315, i1 true, i1 %.0243424
  %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 %scalar.ph, !llvm.loop !24

66:                                               ; preds = %2
  %67 = and i32 %19, 8
  %.not316 = icmp eq i32 %67, 0
  br i1 %.not316, label %.critedge, label %._crit_edge539

._crit_edge539:                                   ; preds = %66
  %.phi.trans.insert = getelementptr inbounds i8, ptr %1, i64 8
  %.pre = load i32, ptr %.phi.trans.insert, align 8, !tbaa !16
  br label %68

68:                                               ; preds = %._crit_edge539, %._crit_edge
  %69 = phi i32 [ %.pre, %._crit_edge539 ], [ %21, %._crit_edge ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #11
  store i32 0, ptr %3, align 4, !tbaa !25
  %70 = getelementptr inbounds i8, ptr %1, i64 8
  %.not462 = icmp eq i32 %69, 0
  br i1 %.not462, label %._crit_edge429.thread, label %.lr.ph428

.lr.ph428:                                        ; preds = %68
  %71 = getelementptr inbounds i8, ptr %1, i64 208
  br label %73

._crit_edge429:                                   ; preds = %87
  %72 = icmp ne i32 %.1250, %89
  br i1 %72, label %93, label %._crit_edge429.thread

73:                                               ; preds = %.lr.ph428, %87
  %74 = phi i32 [ 0, %.lr.ph428 ], [ %88, %87 ]
  %75 = phi i32 [ %69, %.lr.ph428 ], [ %89, %87 ]
  %indvars.iv501 = phi i64 [ 0, %.lr.ph428 ], [ %indvars.iv.next502, %87 ]
  %.0249426 = phi i32 [ 0, %.lr.ph428 ], [ %.1250, %87 ]
  %76 = load ptr, ptr %71, align 8, !tbaa !17
  %77 = getelementptr inbounds %struct.aiFace, ptr %76, i64 %indvars.iv501
  %78 = load i32, ptr %77, align 8, !tbaa !18
  %79 = icmp ult i32 %78, 4
  br i1 %79, label %80, label %82

80:                                               ; preds = %73
  %81 = add i32 %.0249426, 1
  br label %87

82:                                               ; preds = %73
  %83 = add i32 %.0249426, -2
  %84 = add i32 %83, %78
  %85 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIjERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 4 dereferenceable(4) %77)
  %86 = load i32, ptr %85, align 4, !tbaa !25
  store i32 %86, ptr %3, align 4, !tbaa !25
  %.pre540 = load i32, ptr %70, align 8, !tbaa !16
  br label %87

87:                                               ; preds = %82, %80
  %88 = phi i32 [ %74, %80 ], [ %86, %82 ]
  %89 = phi i32 [ %75, %80 ], [ %.pre540, %82 ]
  %.1250 = phi i32 [ %81, %80 ], [ %84, %82 ]
  %indvars.iv.next502 = add nuw nsw i64 %indvars.iv501, 1
  %90 = zext i32 %89 to i64
  %91 = icmp ult i64 %indvars.iv.next502, %90
  br i1 %91, label %73, label %._crit_edge429, !llvm.loop !26

._crit_edge429.thread:                            ; preds = %68, %._crit_edge429
  %92 = call noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
  call void @_ZN6Assimp6Logger5errorEPKc(ptr noundef nonnull align 8 dereferenceable(12) %92, ptr noundef nonnull @.str.3)
  br label %545

93:                                               ; preds = %._crit_edge429
  %94 = load i32, ptr %1, align 8, !tbaa !5
  %95 = and i32 %94, -29
  %96 = or disjoint i32 %95, 20
  store i32 %96, ptr %1, align 8, !tbaa !5
  %97 = zext i32 %.1250 to i64
  %98 = shl nuw nsw i64 %97, 4
  %99 = or disjoint i64 %98, 8
  %100 = call noalias noundef nonnull ptr @_Znam(i64 noundef %99) #12
  store i64 %97, ptr %100, align 16
  %101 = getelementptr inbounds i8, ptr %100, i64 8
  %102 = icmp eq i32 %.1250, 0
  br i1 %102, label %.loopexit363, label %103

103:                                              ; preds = %93
  %104 = getelementptr inbounds %struct.aiFace, ptr %101, i64 %97
  br label %105

105:                                              ; preds = %105, %103
  %106 = phi ptr [ %101, %103 ], [ %107, %105 ]
  call void @_ZN6aiFaceC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %106) #11
  %107 = getelementptr inbounds i8, ptr %106, i64 16
  %108 = icmp eq ptr %107, %104
  br i1 %108, label %.loopexit363.loopexit, label %105

.loopexit363.loopexit:                            ; preds = %105
  %.pre541 = load i32, ptr %3, align 4, !tbaa !25
  br label %.loopexit363

.loopexit363:                                     ; preds = %.loopexit363.loopexit, %93
  %109 = phi i32 [ %.pre541, %.loopexit363.loopexit ], [ %88, %93 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #11
  %110 = add i32 %109, 2
  %111 = zext i32 %110 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #11
  call void @_ZNSaI10aiVector3tIfEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #11
  invoke void @_ZNSt6vectorI10aiVector3tIfESaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %111, ptr noundef nonnull align 1 dereferenceable(1) %5)
          to label %112 unwind label %129

112:                                              ; preds = %.loopexit363
  call void @_ZNSt15__new_allocatorI10aiVector3tIfEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #11
  %113 = load i32, ptr %3, align 4, !tbaa !25
  %114 = add i32 %113, 2
  %115 = zext i32 %114 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #11
  call void @_ZNSaI10aiVector2tIfEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #11
  invoke void @_ZNSt6vectorI10aiVector2tIfESaIS1_EEC2EmRKS2_(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %115, ptr noundef nonnull align 1 dereferenceable(1) %7)
          to label %116 unwind label %131

116:                                              ; preds = %112
  call void @_ZNSt15__new_allocatorI10aiVector2tIfEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #11
  call void @_ZN12_GLOBAL__N_111NGONEncoderC2Ev(ptr noundef nonnull align 4 dereferenceable(4) %8)
  %117 = getelementptr inbounds i8, ptr %1, i64 16
  %118 = load ptr, ptr %117, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #11
  %119 = load i32, ptr %3, align 4, !tbaa !25
  %120 = zext i32 %119 to i64
  %121 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %120) #12
          to label %122 unwind label %133

122:                                              ; preds = %116
  call void @_ZNSt10unique_ptrIA_bSt14default_deleteIS0_EEC2IPbS2_vbEET_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull %121) #11
  %123 = load i32, ptr %70, align 8, !tbaa !16
  %.not463 = icmp eq i32 %123, 0
  br i1 %.not463, label %._crit_edge459, label %.lr.ph458

.lr.ph458:                                        ; preds = %122
  %124 = getelementptr inbounds i8, ptr %1, i64 208
  %125 = getelementptr inbounds i8, ptr %14, i64 8
  %.sroa.269.0..sroa_idx = getelementptr inbounds i8, ptr %10, i64 8
  %.sroa.265.0..sroa_idx = getelementptr inbounds i8, ptr %11, i64 8
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %12, i64 8
  br label %135

._crit_edge459:                                   ; preds = %521, %122
  %.0252.lcssa = phi ptr [ %101, %122 ], [ %.5257, %521 ]
  %126 = getelementptr inbounds i8, ptr %1, i64 208
  %127 = load ptr, ptr %126, align 8, !tbaa !17
  %128 = icmp eq ptr %127, null
  br i1 %128, label %536, label %526

129:                                              ; preds = %.loopexit363
  %130 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorI10aiVector3tIfEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #11
  br label %544

131:                                              ; preds = %112
  %132 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorI10aiVector2tIfEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #11
  br label %543

133:                                              ; preds = %116
  %134 = landingpad { ptr, i32 }
          cleanup
  br label %542

135:                                              ; preds = %.lr.ph458, %521
  %indvars.iv536 = phi i64 [ 0, %.lr.ph458 ], [ %indvars.iv.next537, %521 ]
  %.0252456 = phi ptr [ %101, %.lr.ph458 ], [ %.5257, %521 ]
  %136 = load ptr, ptr %124, align 8, !tbaa !17
  %137 = getelementptr inbounds %struct.aiFace, ptr %136, i64 %indvars.iv536
  %138 = getelementptr inbounds i8, ptr %137, i64 8
  %139 = load ptr, ptr %138, align 8, !tbaa !28
  %140 = load i32, ptr %137, align 8, !tbaa !18
  %141 = add nsw i32 %140, -1
  %142 = icmp ult i32 %140, 4
  br i1 %142, label %143, label %150

143:                                              ; preds = %135
  %144 = getelementptr inbounds i8, ptr %.0252456, i64 16
  store i32 %140, ptr %.0252456, align 8, !tbaa !18
  %145 = getelementptr inbounds i8, ptr %.0252456, i64 8
  store ptr %139, ptr %145, align 8, !tbaa !28
  store ptr null, ptr %138, align 8, !tbaa !28
  %146 = icmp eq i32 %140, 3
  br i1 %146, label %147, label %521

147:                                              ; preds = %143
  invoke void @_ZN12_GLOBAL__N_111NGONEncoder18ngonEncodeTriangleEP6aiFace(ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull %.0252456)
          to label %521 unwind label %148

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

150:                                              ; preds = %135
  %151 = icmp eq i32 %140, 4
  br i1 %151, label %.preheader359.preheader, label %.preheader362

.preheader359.preheader:                          ; preds = %150
  %152 = getelementptr inbounds i8, ptr %139, i64 12
  %153 = load i32, ptr %152, align 4, !tbaa !25
  %154 = zext i32 %153 to i64
  %155 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %154
  %156 = getelementptr inbounds i8, ptr %139, i64 8
  %157 = load i32, ptr %156, align 4, !tbaa !25
  %158 = getelementptr inbounds i8, ptr %139, i64 4
  %159 = load i32, ptr %158, align 4, !tbaa !25
  %160 = zext i32 %159 to i64
  %161 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %160
  %162 = load i32, ptr %139, align 4, !tbaa !25
  %163 = zext i32 %162 to i64
  %164 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %163
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %10) #11
  %165 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %155, ptr noundef nonnull align 4 dereferenceable(12) %164)
          to label %167 unwind label %285

.preheader362:                                    ; preds = %150
  %166 = icmp sgt i32 %140, 0
  br i1 %166, label %.lr.ph433.preheader, label %._crit_edge434

.lr.ph433.preheader:                              ; preds = %.preheader362
  %wide.trip.count507 = zext nneg i32 %140 to i64
  br label %.lr.ph433

167:                                              ; preds = %.preheader359.preheader
  %168 = zext i32 %157 to i64
  %169 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %168
  %.fca.0.extract66 = extractvalue { <2 x float>, float } %165, 0
  %.fca.1.extract67 = extractvalue { <2 x float>, float } %165, 1
  store <2 x float> %.fca.0.extract66, ptr %10, align 8
  store float %.fca.1.extract67, ptr %.sroa.269.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %11) #11
  %170 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %169, ptr noundef nonnull align 4 dereferenceable(12) %164)
          to label %171 unwind label %287

171:                                              ; preds = %167
  %.fca.0.extract62 = extractvalue { <2 x float>, float } %170, 0
  %.fca.1.extract63 = extractvalue { <2 x float>, float } %170, 1
  store <2 x float> %.fca.0.extract62, ptr %11, align 8
  store float %.fca.1.extract63, ptr %.sroa.265.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %12) #11
  %172 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %161, ptr noundef nonnull align 4 dereferenceable(12) %164)
          to label %173 unwind label %289

173:                                              ; preds = %171
  %.fca.0.extract = extractvalue { <2 x float>, float } %172, 0
  %.fca.1.extract = extractvalue { <2 x float>, float } %172, 1
  store <2 x float> %.fca.0.extract, ptr %12, align 8
  store float %.fca.1.extract, ptr %.sroa.2.0..sroa_idx, align 8
  %174 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %10)
          to label %175 unwind label %289

175:                                              ; preds = %173
  %176 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %11)
          to label %177 unwind label %289

177:                                              ; preds = %175
  %178 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %12)
          to label %179 unwind label %289

179:                                              ; preds = %177
  %180 = call noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %10, ptr noundef nonnull align 4 dereferenceable(12) %11)
  %181 = call noundef float @_ZSt4acosf(float noundef %180)
  %182 = call noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %12, ptr noundef nonnull align 4 dereferenceable(12) %11)
  %183 = call noundef float @_ZSt4acosf(float noundef %182)
  %184 = fadd float %181, %183
  %185 = fcmp ule float %184, 0x400921FB60000000
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #11
  %.pre547 = load ptr, ptr %138, align 8, !tbaa !28
  br i1 %185, label %.preheader359.1, label %293, !llvm.loop !29

.preheader359.1:                                  ; preds = %179
  %186 = load i32, ptr %.pre547, align 4, !tbaa !25
  %187 = zext i32 %186 to i64
  %188 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %187
  %189 = getelementptr inbounds i8, ptr %.pre547, i64 12
  %190 = load i32, ptr %189, align 4, !tbaa !25
  %191 = getelementptr inbounds i8, ptr %.pre547, i64 8
  %192 = load i32, ptr %191, align 4, !tbaa !25
  %193 = zext i32 %192 to i64
  %194 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %193
  %195 = getelementptr inbounds i8, ptr %.pre547, i64 4
  %196 = load i32, ptr %195, align 4, !tbaa !25
  %197 = zext i32 %196 to i64
  %198 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %197
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %10) #11
  %199 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %188, ptr noundef nonnull align 4 dereferenceable(12) %198)
          to label %200 unwind label %285

200:                                              ; preds = %.preheader359.1
  %201 = zext i32 %190 to i64
  %202 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %201
  %.fca.0.extract66.1 = extractvalue { <2 x float>, float } %199, 0
  %.fca.1.extract67.1 = extractvalue { <2 x float>, float } %199, 1
  store <2 x float> %.fca.0.extract66.1, ptr %10, align 8
  store float %.fca.1.extract67.1, ptr %.sroa.269.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %11) #11
  %203 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %202, ptr noundef nonnull align 4 dereferenceable(12) %198)
          to label %204 unwind label %287

204:                                              ; preds = %200
  %.fca.0.extract62.1 = extractvalue { <2 x float>, float } %203, 0
  %.fca.1.extract63.1 = extractvalue { <2 x float>, float } %203, 1
  store <2 x float> %.fca.0.extract62.1, ptr %11, align 8
  store float %.fca.1.extract63.1, ptr %.sroa.265.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %12) #11
  %205 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %194, ptr noundef nonnull align 4 dereferenceable(12) %198)
          to label %206 unwind label %289

206:                                              ; preds = %204
  %.fca.0.extract.1 = extractvalue { <2 x float>, float } %205, 0
  %.fca.1.extract.1 = extractvalue { <2 x float>, float } %205, 1
  store <2 x float> %.fca.0.extract.1, ptr %12, align 8
  store float %.fca.1.extract.1, ptr %.sroa.2.0..sroa_idx, align 8
  %207 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %10)
          to label %208 unwind label %289

208:                                              ; preds = %206
  %209 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %11)
          to label %210 unwind label %289

210:                                              ; preds = %208
  %211 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %12)
          to label %212 unwind label %289

212:                                              ; preds = %210
  %213 = call noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %10, ptr noundef nonnull align 4 dereferenceable(12) %11)
  %214 = call noundef float @_ZSt4acosf(float noundef %213)
  %215 = call noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %12, ptr noundef nonnull align 4 dereferenceable(12) %11)
  %216 = call noundef float @_ZSt4acosf(float noundef %215)
  %217 = fadd float %214, %216
  %218 = fcmp ule float %217, 0x400921FB60000000
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #11
  %.pre546 = load ptr, ptr %138, align 8, !tbaa !28
  br i1 %218, label %.preheader359.2, label %293, !llvm.loop !29

.preheader359.2:                                  ; preds = %212
  %219 = getelementptr inbounds i8, ptr %.pre546, i64 4
  %220 = load i32, ptr %219, align 4, !tbaa !25
  %221 = zext i32 %220 to i64
  %222 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %221
  %223 = load i32, ptr %.pre546, align 4, !tbaa !25
  %224 = getelementptr inbounds i8, ptr %.pre546, i64 12
  %225 = load i32, ptr %224, align 4, !tbaa !25
  %226 = zext i32 %225 to i64
  %227 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %226
  %228 = getelementptr inbounds i8, ptr %.pre546, i64 8
  %229 = load i32, ptr %228, align 4, !tbaa !25
  %230 = zext i32 %229 to i64
  %231 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %230
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %10) #11
  %232 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %222, ptr noundef nonnull align 4 dereferenceable(12) %231)
          to label %233 unwind label %285

233:                                              ; preds = %.preheader359.2
  %234 = zext i32 %223 to i64
  %235 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %234
  %.fca.0.extract66.2 = extractvalue { <2 x float>, float } %232, 0
  %.fca.1.extract67.2 = extractvalue { <2 x float>, float } %232, 1
  store <2 x float> %.fca.0.extract66.2, ptr %10, align 8
  store float %.fca.1.extract67.2, ptr %.sroa.269.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %11) #11
  %236 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %235, ptr noundef nonnull align 4 dereferenceable(12) %231)
          to label %237 unwind label %287

237:                                              ; preds = %233
  %.fca.0.extract62.2 = extractvalue { <2 x float>, float } %236, 0
  %.fca.1.extract63.2 = extractvalue { <2 x float>, float } %236, 1
  store <2 x float> %.fca.0.extract62.2, ptr %11, align 8
  store float %.fca.1.extract63.2, ptr %.sroa.265.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %12) #11
  %238 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %227, ptr noundef nonnull align 4 dereferenceable(12) %231)
          to label %239 unwind label %289

239:                                              ; preds = %237
  %.fca.0.extract.2 = extractvalue { <2 x float>, float } %238, 0
  %.fca.1.extract.2 = extractvalue { <2 x float>, float } %238, 1
  store <2 x float> %.fca.0.extract.2, ptr %12, align 8
  store float %.fca.1.extract.2, ptr %.sroa.2.0..sroa_idx, align 8
  %240 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %10)
          to label %241 unwind label %289

241:                                              ; preds = %239
  %242 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %11)
          to label %243 unwind label %289

243:                                              ; preds = %241
  %244 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %12)
          to label %245 unwind label %289

245:                                              ; preds = %243
  %246 = call noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %10, ptr noundef nonnull align 4 dereferenceable(12) %11)
  %247 = call noundef float @_ZSt4acosf(float noundef %246)
  %248 = call noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %12, ptr noundef nonnull align 4 dereferenceable(12) %11)
  %249 = call noundef float @_ZSt4acosf(float noundef %248)
  %250 = fadd float %247, %249
  %251 = fcmp ule float %250, 0x400921FB60000000
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #11
  %.pre545 = load ptr, ptr %138, align 8, !tbaa !28
  br i1 %251, label %.preheader359.3, label %293, !llvm.loop !29

.preheader359.3:                                  ; preds = %245
  %252 = getelementptr inbounds i8, ptr %.pre545, i64 8
  %253 = load i32, ptr %252, align 4, !tbaa !25
  %254 = zext i32 %253 to i64
  %255 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %254
  %256 = getelementptr inbounds i8, ptr %.pre545, i64 4
  %257 = load i32, ptr %256, align 4, !tbaa !25
  %258 = load i32, ptr %.pre545, align 4, !tbaa !25
  %259 = zext i32 %258 to i64
  %260 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %259
  %261 = getelementptr inbounds i8, ptr %.pre545, i64 12
  %262 = load i32, ptr %261, align 4, !tbaa !25
  %263 = zext i32 %262 to i64
  %264 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %263
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %10) #11
  %265 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %255, ptr noundef nonnull align 4 dereferenceable(12) %264)
          to label %266 unwind label %285

266:                                              ; preds = %.preheader359.3
  %267 = zext i32 %257 to i64
  %268 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %267
  %.fca.0.extract66.3 = extractvalue { <2 x float>, float } %265, 0
  %.fca.1.extract67.3 = extractvalue { <2 x float>, float } %265, 1
  store <2 x float> %.fca.0.extract66.3, ptr %10, align 8
  store float %.fca.1.extract67.3, ptr %.sroa.269.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %11) #11
  %269 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %268, ptr noundef nonnull align 4 dereferenceable(12) %264)
          to label %270 unwind label %287

270:                                              ; preds = %266
  %.fca.0.extract62.3 = extractvalue { <2 x float>, float } %269, 0
  %.fca.1.extract63.3 = extractvalue { <2 x float>, float } %269, 1
  store <2 x float> %.fca.0.extract62.3, ptr %11, align 8
  store float %.fca.1.extract63.3, ptr %.sroa.265.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %12) #11
  %271 = invoke { <2 x float>, float } @_ZmiIfE10aiVector3tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(12) %260, ptr noundef nonnull align 4 dereferenceable(12) %264)
          to label %272 unwind label %289

272:                                              ; preds = %270
  %.fca.0.extract.3 = extractvalue { <2 x float>, float } %271, 0
  %.fca.1.extract.3 = extractvalue { <2 x float>, float } %271, 1
  store <2 x float> %.fca.0.extract.3, ptr %12, align 8
  store float %.fca.1.extract.3, ptr %.sroa.2.0..sroa_idx, align 8
  %273 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %10)
          to label %274 unwind label %289

274:                                              ; preds = %272
  %275 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %11)
          to label %276 unwind label %289

276:                                              ; preds = %274
  %277 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN10aiVector3tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(12) %12)
          to label %278 unwind label %289

278:                                              ; preds = %276
  %279 = call noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %10, ptr noundef nonnull align 4 dereferenceable(12) %11)
  %280 = call noundef float @_ZSt4acosf(float noundef %279)
  %281 = call noundef float @_ZmlIfET_RK10aiVector3tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(12) %12, ptr noundef nonnull align 4 dereferenceable(12) %11)
  %282 = call noundef float @_ZSt4acosf(float noundef %281)
  %283 = fadd float %280, %282
  %284 = fcmp ule float %283, 0x400921FB60000000
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #11
  %.pre544 = load ptr, ptr %138, align 8, !tbaa !28
  %.593 = select i1 %284, i32 0, i32 3
  br label %293

285:                                              ; preds = %.preheader359.3, %.preheader359.2, %.preheader359.1, %.preheader359.preheader
  %286 = landingpad { ptr, i32 }
          cleanup
  br label %292

287:                                              ; preds = %266, %233, %200, %167
  %288 = landingpad { ptr, i32 }
          cleanup
  br label %291

289:                                              ; preds = %276, %274, %272, %270, %243, %241, %239, %237, %210, %208, %206, %204, %177, %175, %173, %171
  %290 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %12) #11
  br label %291

291:                                              ; preds = %289, %287
  %.pn331 = phi { ptr, i32 } [ %290, %289 ], [ %288, %287 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #11
  br label %292

292:                                              ; preds = %291, %285
  %.pn331.pn = phi { ptr, i32 } [ %.pn331, %291 ], [ %286, %285 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %10) #11
  br label %525

293:                                              ; preds = %278, %245, %212, %179
  %294 = phi ptr [ %.pre547, %179 ], [ %.pre546, %212 ], [ %.pre545, %245 ], [ %.pre544, %278 ]
  %.2301 = phi i32 [ 0, %179 ], [ 1, %212 ], [ 2, %245 ], [ %.593, %278 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #11
  %295 = getelementptr inbounds i8, ptr %294, i64 4
  %296 = getelementptr inbounds i8, ptr %294, i64 8
  %297 = load <4 x i32>, ptr %294, align 4, !tbaa !25
  store <4 x i32> %297, ptr %13, align 16, !tbaa !25
  %298 = getelementptr inbounds i8, ptr %.0252456, i64 16
  store i32 3, ptr %.0252456, align 8, !tbaa !18
  %299 = getelementptr inbounds i8, ptr %.0252456, i64 8
  store ptr %294, ptr %299, align 8, !tbaa !28
  %300 = zext nneg i32 %.2301 to i64
  %301 = getelementptr inbounds [4 x i32], ptr %13, i64 0, i64 %300
  %302 = load i32, ptr %301, align 4, !tbaa !25
  store i32 %302, ptr %294, align 4, !tbaa !25
  %303 = add nuw nsw i32 %.2301, 1
  %304 = and i32 %303, 3
  %305 = zext nneg i32 %304 to i64
  %306 = getelementptr inbounds [4 x i32], ptr %13, i64 0, i64 %305
  %307 = load i32, ptr %306, align 4, !tbaa !25
  store i32 %307, ptr %295, align 4, !tbaa !25
  %308 = xor i32 %.2301, 2
  %309 = zext nneg i32 %308 to i64
  %310 = getelementptr inbounds [4 x i32], ptr %13, i64 0, i64 %309
  %311 = load i32, ptr %310, align 4, !tbaa !25
  store i32 %311, ptr %296, align 4, !tbaa !25
  %312 = getelementptr inbounds i8, ptr %.0252456, i64 32
  store i32 3, ptr %298, align 8, !tbaa !18
  %313 = invoke noalias noundef nonnull dereferenceable(12) ptr @_Znam(i64 noundef 12) #12
          to label %314 unwind label %326

314:                                              ; preds = %293
  %315 = getelementptr inbounds i8, ptr %.0252456, i64 24
  store ptr %313, ptr %315, align 8, !tbaa !28
  %316 = load i32, ptr %301, align 4, !tbaa !25
  store i32 %316, ptr %313, align 4, !tbaa !25
  %317 = load i32, ptr %310, align 4, !tbaa !25
  %318 = getelementptr inbounds i8, ptr %313, i64 4
  store i32 %317, ptr %318, align 4, !tbaa !25
  %319 = add nuw nsw i32 %.2301, 3
  %320 = and i32 %319, 3
  %321 = zext nneg i32 %320 to i64
  %322 = getelementptr inbounds [4 x i32], ptr %13, i64 0, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !25
  %324 = getelementptr inbounds i8, ptr %313, i64 8
  store i32 %323, ptr %324, align 4, !tbaa !25
  store ptr null, ptr %138, align 8, !tbaa !28
  invoke void @_ZN12_GLOBAL__N_111NGONEncoder14ngonEncodeQuadEP6aiFaceS2_(ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull %.0252456, ptr noundef nonnull %298)
          to label %325 unwind label %326

325:                                              ; preds = %314
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #11
  br label %521

326:                                              ; preds = %314, %293
  %327 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #11
  br label %525

.lr.ph433:                                        ; preds = %.lr.ph433.preheader, %.lr.ph433
  %indvars.iv504 = phi i64 [ 0, %.lr.ph433.preheader ], [ %indvars.iv.next505, %.lr.ph433 ]
  %328 = getelementptr inbounds i32, ptr %139, i64 %indvars.iv504
  %329 = load i32, ptr %328, align 4, !tbaa !25
  %330 = zext i32 %329 to i64
  %331 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %330
  %332 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI10aiVector3tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %indvars.iv504) #11
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %332, ptr noundef nonnull align 4 dereferenceable(12) %331, i64 12, i1 false), !tbaa.struct !30
  %indvars.iv.next505 = add nuw nsw i64 %indvars.iv504, 1
  %exitcond508.not = icmp eq i64 %indvars.iv.next505, %wide.trip.count507
  br i1 %exitcond508.not, label %._crit_edge434, label %.lr.ph433, !llvm.loop !32

._crit_edge434:                                   ; preds = %.lr.ph433, %.preheader362
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %14) #11
  call void @_ZN10aiVector3tIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %14) #11
  %333 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI10aiVector3tIfESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  %334 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI10aiVector3tIfESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  %335 = getelementptr inbounds i8, ptr %334, i64 4
  %336 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI10aiVector3tIfESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  %337 = getelementptr inbounds i8, ptr %336, i64 8
  invoke void @_ZN6Assimp12NewellNormalILi3ELi3ELi3EfEEvR10aiVector3tIT2_EiPS2_S5_S5_(ptr noundef nonnull align 4 dereferenceable(12) %14, i32 noundef %140, ptr noundef nonnull %333, ptr noundef nonnull %335, ptr noundef nonnull %337)
          to label %340 unwind label %338

338:                                              ; preds = %._crit_edge434
  %339 = landingpad { ptr, i32 }
          cleanup
  br label %496

340:                                              ; preds = %._crit_edge434
  %341 = load <2 x float>, ptr %14, align 8
  %342 = fcmp ogt <2 x float> %341, zeroinitializer
  %343 = fneg <2 x float> %341
  %344 = select <2 x i1> %342, <2 x float> %341, <2 x float> %343
  %345 = load float, ptr %125, align 8
  %346 = fcmp ogt float %345, 0.000000e+00
  %347 = fneg float %345
  %348 = select i1 %346, float %345, float %347
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #11
  store i32 0, ptr %15, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #11
  store i32 1, ptr %16, align 4, !tbaa !25
  %349 = extractelement <2 x float> %344, i64 0
  %350 = extractelement <2 x float> %344, i64 1
  %351 = fcmp ogt float %349, %350
  br i1 %351, label %352, label %356

352:                                              ; preds = %340
  %353 = fcmp ogt float %349, %348
  br i1 %353, label %354, label %360

354:                                              ; preds = %352
  store i32 1, ptr %15, align 4, !tbaa !25
  store i32 2, ptr %16, align 4, !tbaa !25
  %355 = extractelement <2 x float> %341, i64 0
  br label %360

356:                                              ; preds = %340
  %357 = fcmp ogt float %350, %348
  br i1 %357, label %358, label %360

358:                                              ; preds = %356
  store i32 2, ptr %15, align 4, !tbaa !25
  store i32 0, ptr %16, align 4, !tbaa !25
  %359 = extractelement <2 x float> %341, i64 1
  br label %360

360:                                              ; preds = %356, %358, %352, %354
  %.0261 = phi float [ %355, %354 ], [ %345, %352 ], [ %359, %358 ], [ %345, %356 ]
  %361 = fcmp olt float %.0261, 0.000000e+00
  br i1 %361, label %362, label %363

362:                                              ; preds = %360
  call void @_ZSt4swapIjENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 4 dereferenceable(4) %15, ptr noundef nonnull align 4 dereferenceable(4) %16) #11
  br label %363

363:                                              ; preds = %362, %360
  br i1 %166, label %.lr.ph437.preheader, label %.thread355

.lr.ph437.preheader:                              ; preds = %363
  %wide.trip.count512 = zext nneg i32 %140 to i64
  br label %.lr.ph437

.preheader360:                                    ; preds = %.lr.ph437
  %364 = icmp sgt i32 %140, 3
  br i1 %364, label %.preheader358.preheader, label %._crit_edge448.thread

.preheader358.preheader:                          ; preds = %.preheader360
  %wide.trip.count517 = zext nneg i32 %140 to i64
  br label %.preheader358

.lr.ph437:                                        ; preds = %.lr.ph437.preheader, %.lr.ph437
  %indvars.iv509 = phi i64 [ 0, %.lr.ph437.preheader ], [ %indvars.iv.next510, %.lr.ph437 ]
  %365 = getelementptr inbounds i32, ptr %139, i64 %indvars.iv509
  %366 = load i32, ptr %365, align 4, !tbaa !25
  %367 = zext i32 %366 to i64
  %368 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %367
  %369 = load i32, ptr %15, align 4, !tbaa !25
  %370 = call noundef float @_ZNK10aiVector3tIfEixEj(ptr noundef nonnull align 4 dereferenceable(12) %368, i32 noundef %369)
  %371 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI10aiVector2tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv509) #11
  store float %370, ptr %371, align 4, !tbaa !33
  %372 = load i32, ptr %365, align 4, !tbaa !25
  %373 = zext i32 %372 to i64
  %374 = getelementptr inbounds %class.aiVector3t, ptr %118, i64 %373
  %375 = load i32, ptr %16, align 4, !tbaa !25
  %376 = call noundef float @_ZNK10aiVector3tIfEixEj(ptr noundef nonnull align 4 dereferenceable(12) %374, i32 noundef %375)
  %377 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI10aiVector2tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv509) #11
  %378 = getelementptr inbounds i8, ptr %377, i64 4
  store float %376, ptr %378, align 4, !tbaa !35
  %379 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_bSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %9, i64 noundef %indvars.iv509)
  store i8 0, ptr %379, align 1, !tbaa !36
  %indvars.iv.next510 = add nuw nsw i64 %indvars.iv509, 1
  %exitcond513.not = icmp eq i64 %indvars.iv.next510, %wide.trip.count512
  br i1 %exitcond513.not, label %.preheader360, label %.lr.ph437, !llvm.loop !38

.preheader358:                                    ; preds = %.preheader358.preheader, %457
  %.1253447 = phi ptr [ %449, %457 ], [ %.0252456, %.preheader358.preheader ]
  %.0283446 = phi i32 [ %462, %457 ], [ %140, %.preheader358.preheader ]
  %.0294445 = phi i32 [ %.1295, %457 ], [ %141, %.preheader358.preheader ]
  %.0296444 = phi i32 [ %.1297., %457 ], [ 0, %.preheader358.preheader ]
  br label %380

380:                                              ; preds = %.preheader358, %445
  %.1295 = phi i32 [ %.0286, %445 ], [ %.0294445, %.preheader358 ]
  %.0286 = phi i32 [ %.1297., %445 ], [ %.0296444, %.preheader358 ]
  %.0258 = phi i32 [ %.1259, %445 ], [ 0, %.preheader358 ]
  br label %381

381:                                              ; preds = %381, %380
  %.1297.in = phi i32 [ %.0286, %380 ], [ %.1297., %381 ]
  %.1297 = add nsw i32 %.1297.in, 1
  %.not317 = icmp slt i32 %.1297, %140
  %.1297. = select i1 %.not317, i32 %.1297, i32 0
  %382 = sext i32 %.1297. to i64
  %383 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_bSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %9, i64 noundef %382)
  %384 = load i8, ptr %383, align 1, !tbaa !36, !range !39, !noundef !40
  %385 = trunc nuw i8 %384 to i1
  br i1 %385, label %381, label %388, !llvm.loop !41

386:                                              ; preds = %447, %.thread348
  %387 = landingpad { ptr, i32 }
          cleanup
  br label %495

388:                                              ; preds = %381
  %389 = icmp slt i32 %.1297., %.0286
  br i1 %389, label %390, label %392

390:                                              ; preds = %388
  %391 = icmp eq i32 %.0258, 1
  br i1 %391, label %.thread348, label %392

392:                                              ; preds = %390, %388
  %.1259 = phi i32 [ 1, %390 ], [ %.0258, %388 ]
  %393 = sext i32 %.0286 to i64
  %394 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI10aiVector2tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %393) #11
  %395 = sext i32 %.1295 to i64
  %396 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI10aiVector2tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %395) #11
  %397 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI10aiVector2tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %382) #11
  %398 = invoke noundef i32 @_ZN6Assimp18OnLeftSideOfLine2DI10aiVector2tIfEEEiRKT_S5_S5_(ptr noundef nonnull align 4 dereferenceable(8) %396, ptr noundef nonnull align 4 dereferenceable(8) %397, ptr noundef nonnull align 4 dereferenceable(8) %394)
          to label %399 unwind label %401

399:                                              ; preds = %392
  %400 = icmp eq i32 %398, 1
  br i1 %400, label %445, label %403

401:                                              ; preds = %392
  %402 = landingpad { ptr, i32 }
          cleanup
  br label %495

403:                                              ; preds = %399
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #11
  %404 = invoke <2 x float> @_ZmiIfE10aiVector2tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(8) %396, ptr noundef nonnull align 4 dereferenceable(8) %394)
          to label %405 unwind label %423

405:                                              ; preds = %403
  store <2 x float> %404, ptr %17, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #11
  %406 = invoke <2 x float> @_ZmiIfE10aiVector2tIT_ERKS2_S4_(ptr noundef nonnull align 4 dereferenceable(8) %397, ptr noundef nonnull align 4 dereferenceable(8) %394)
          to label %407 unwind label %425

407:                                              ; preds = %405
  store <2 x float> %406, ptr %18, align 8
  %408 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN10aiVector2tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(8) %17)
          to label %409 unwind label %425

409:                                              ; preds = %407
  %410 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN10aiVector2tIfE9NormalizeEv(ptr noundef nonnull align 4 dereferenceable(8) %18)
          to label %411 unwind label %425

411:                                              ; preds = %409
  %412 = call noundef float @_ZmlIfET_RK10aiVector2tIS0_ES4_(ptr noundef nonnull align 4 dereferenceable(8) %17, ptr noundef nonnull align 4 dereferenceable(8) %18)
  %413 = fadd float %412, -1.000000e+00
  %414 = call noundef float @_ZSt3absf(float noundef %413)
  %415 = fcmp olt float %414, 0x3EB0C6F7A0000000
  br i1 %415, label %420, label %416

416:                                              ; preds = %411
  %417 = fadd float %412, 1.000000e+00
  %418 = call noundef float @_ZSt3absf(float noundef %417)
  %419 = fcmp olt float %418, 0x3EB0C6F7A0000000
  br i1 %419, label %420, label %.lr.ph439

420:                                              ; preds = %416, %411
  %421 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %422 unwind label %427

422:                                              ; preds = %420
  invoke void @_ZN6Assimp6Logger4warnEPKc(ptr noundef nonnull align 8 dereferenceable(12) %421, ptr noundef nonnull @.str.4)
          to label %442 unwind label %427

423:                                              ; preds = %403
  %424 = landingpad { ptr, i32 }
          cleanup
  br label %444

425:                                              ; preds = %409, %407, %405
  %426 = landingpad { ptr, i32 }
          cleanup
  br label %443

427:                                              ; preds = %422, %420
  %428 = landingpad { ptr, i32 }
          cleanup
  br label %443

.lr.ph439:                                        ; preds = %416, %440
  %indvars.iv514 = phi i64 [ %indvars.iv.next515, %440 ], [ 0, %416 ]
  %429 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNSt6vectorI10aiVector2tIfESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv514) #11
  %430 = call noundef zeroext i1 @_ZNK10aiVector2tIfEneERKS0_(ptr noundef nonnull align 4 dereferenceable(8) %429, ptr noundef nonnull align 4 dereferenceable(8) %394)
  br i1 %430, label %431, label %440

431:                                              ; preds = %.lr.ph439
  %432 = call noundef zeroext i1 @_ZNK10aiVector2tIfEneERKS0_(ptr noundef nonnull align 4 dereferenceable(8) %429, ptr noundef nonnull align 4 dereferenceable(8) %397)
  br i1 %432, label %433, label %440

433:                                              ; preds = %431
  %434 = call noundef zeroext i1 @_ZNK10aiVector2tIfEneERKS0_(ptr noundef nonnull align 4 dereferenceable(8) %429, ptr noundef nonnull align 4 dereferenceable(8) %396)
  br i1 %434, label %435, label %440

435:                                              ; preds = %433
  %436 = invoke noundef zeroext i1 @_ZN6Assimp17PointInTriangle2DI10aiVector2tIfEEEbRKT_S5_S5_S5_(ptr noundef nonnull align 4 dereferenceable(8) %396, ptr noundef nonnull align 4 dereferenceable(8) %394, ptr noundef nonnull align 4 dereferenceable(8) %397, ptr noundef nonnull align 4 dereferenceable(8) %429)
          to label %437 unwind label %438

437:                                              ; preds = %435
  br i1 %436, label %._crit_edge440.split.loop.exit591, label %440

438:                                              ; preds = %435
  %439 = landingpad { ptr, i32 }
          cleanup
  br label %443

440:                                              ; preds = %.lr.ph439, %431, %433, %437
  %indvars.iv.next515 = add nuw nsw i64 %indvars.iv514, 1
  %exitcond518.not = icmp eq i64 %indvars.iv.next515, %wide.trip.count517
  br i1 %exitcond518.not, label %._crit_edge440, label %.lr.ph439, !llvm.loop !42

._crit_edge440.split.loop.exit591:                ; preds = %437
  %441 = trunc nuw nsw i64 %indvars.iv514 to i32
  br label %._crit_edge440

._crit_edge440:                                   ; preds = %440, %._crit_edge440.split.loop.exit591
  %.3290.lcssa = phi i32 [ %441, %._crit_edge440.split.loop.exit591 ], [ %140, %440 ]
  %.not318 = icmp eq i32 %.3290.lcssa, %140
  %. = select i1 %.not318, i32 25, i32 27
  br label %442

442:                                              ; preds = %._crit_edge440, %422
  %.3 = phi i32 [ 27, %422 ], [ %., %._crit_edge440 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #11
  br label %445

443:                                              ; preds = %427, %438, %425
  %.pn.pn = phi { ptr, i32 } [ %426, %425 ], [ %428, %427 ], [ %439, %438 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #11
  br label %444

444:                                              ; preds = %443, %423
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %443 ], [ %424, %423 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #11
  br label %495

445:                                              ; preds = %399, %442
  %.4 = phi i32 [ %.3, %442 ], [ 27, %399 ]
  %switch341 = icmp eq i32 %.4, 27
  br i1 %switch341, label %380, label %448, !llvm.loop !43

.thread348:                                       ; preds = %390
  %446 = invoke noundef ptr @_ZN6Assimp13DefaultLogger3getEv()
          to label %447 unwind label %386

447:                                              ; preds = %.thread348
  invoke void @_ZN6Assimp6Logger5errorEPKc(ptr noundef nonnull align 8 dereferenceable(12) %446, ptr noundef nonnull @.str.5)
          to label %.thread355 unwind label %386

448:                                              ; preds = %445
  %449 = getelementptr inbounds i8, ptr %.1253447, i64 16
  store i32 3, ptr %.1253447, align 8, !tbaa !18
  %450 = getelementptr inbounds i8, ptr %.1253447, i64 8
  %451 = load ptr, ptr %450, align 8, !tbaa !28
  %.not323 = icmp eq ptr %451, null
  br i1 %.not323, label %452, label %457

452:                                              ; preds = %448
  %453 = invoke noalias noundef nonnull dereferenceable(12) ptr @_Znam(i64 noundef 12) #12
          to label %454 unwind label %455

454:                                              ; preds = %452
  store ptr %453, ptr %450, align 8, !tbaa !28
  br label %457

455:                                              ; preds = %452
  %456 = landingpad { ptr, i32 }
          cleanup
  br label %495

457:                                              ; preds = %448, %454
  %458 = phi ptr [ %451, %448 ], [ %453, %454 ]
  store i32 %.1295, ptr %458, align 4, !tbaa !25
  %459 = getelementptr inbounds i8, ptr %458, i64 4
  store i32 %.0286, ptr %459, align 4, !tbaa !25
  %460 = getelementptr inbounds i8, ptr %458, i64 8
  store i32 %.1297., ptr %460, align 4, !tbaa !25
  %461 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_bSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %9, i64 noundef %393)
  store i8 1, ptr %461, align 1, !tbaa !36
  %462 = add nsw i32 %.0283446, -1
  %463 = icmp sgt i32 %.0283446, 4
  br i1 %463, label %.preheader358, label %._crit_edge448.thread

._crit_edge448.thread:                            ; preds = %457, %.preheader360
  %.1253.lcssa552 = phi ptr [ %.0252456, %.preheader360 ], [ %449, %457 ]
  %464 = getelementptr inbounds i8, ptr %.1253.lcssa552, i64 16
  store i32 3, ptr %.1253.lcssa552, align 8, !tbaa !18
  %465 = getelementptr inbounds i8, ptr %.1253.lcssa552, i64 8
  %466 = load ptr, ptr %465, align 8, !tbaa !28
  %.not326 = icmp eq ptr %466, null
  br i1 %.not326, label %467, label %.preheader632

.preheader632:                                    ; preds = %469, %._crit_edge448.thread
  br label %472

467:                                              ; preds = %._crit_edge448.thread
  %468 = invoke noalias noundef nonnull dereferenceable(12) ptr @_Znam(i64 noundef 12) #12
          to label %469 unwind label %470

469:                                              ; preds = %467
  store ptr %468, ptr %465, align 8, !tbaa !28
  br label %.preheader632

470:                                              ; preds = %467
  %471 = landingpad { ptr, i32 }
          cleanup
  br label %495

472:                                              ; preds = %.preheader632, %472
  %indvars.iv525 = phi i64 [ %indvars.iv.next526, %472 ], [ 2, %.preheader632 ]
  %indvars.iv519 = phi i64 [ %indvars.iv.next520, %472 ], [ 0, %.preheader632 ]
  %473 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_bSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %9, i64 noundef %indvars.iv519)
  %474 = load i8, ptr %473, align 1, !tbaa !36, !range !39, !noundef !40
  %475 = trunc nuw i8 %474 to i1
  %indvars.iv.next520 = add nuw nsw i64 %indvars.iv519, 1
  %indvars.iv.next526 = add i64 %indvars.iv525, 1
  br i1 %475, label %472, label %476, !llvm.loop !44

476:                                              ; preds = %472
  %477 = trunc nuw nsw i64 %indvars.iv519 to i32
  %478 = load ptr, ptr %465, align 8, !tbaa !28
  store i32 %477, ptr %478, align 4, !tbaa !25
  br label %479

479:                                              ; preds = %479, %476
  %indvars.iv527 = phi i64 [ %indvars.iv.next528, %479 ], [ %indvars.iv525, %476 ]
  %indvars.iv522 = phi i64 [ %indvars.iv.next523, %479 ], [ %indvars.iv519, %476 ]
  %indvars.iv.next523 = add nuw nsw i64 %indvars.iv522, 1
  %480 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_bSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %9, i64 noundef %indvars.iv.next523)
  %481 = load i8, ptr %480, align 1, !tbaa !36, !range !39, !noundef !40
  %482 = trunc nuw i8 %481 to i1
  %indvars.iv.next528 = add i64 %indvars.iv527, 1
  br i1 %482, label %479, label %483, !llvm.loop !45

483:                                              ; preds = %479
  %484 = trunc nuw i64 %indvars.iv.next523 to i32
  %485 = load ptr, ptr %465, align 8, !tbaa !28
  %486 = getelementptr inbounds i8, ptr %485, i64 4
  store i32 %484, ptr %486, align 4, !tbaa !25
  br label %487

487:                                              ; preds = %487, %483
  %indvars.iv529 = phi i64 [ %indvars.iv.next530, %487 ], [ %indvars.iv527, %483 ]
  %488 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_bSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8) %9, i64 noundef %indvars.iv529)
  %489 = load i8, ptr %488, align 1, !tbaa !36, !range !39, !noundef !40
  %490 = trunc nuw i8 %489 to i1
  %indvars.iv.next530 = add nuw nsw i64 %indvars.iv529, 1
  br i1 %490, label %487, label %491, !llvm.loop !46

491:                                              ; preds = %487
  %492 = trunc nuw i64 %indvars.iv529 to i32
  %493 = load ptr, ptr %465, align 8, !tbaa !28
  %494 = getelementptr inbounds i8, ptr %493, i64 8
  store i32 %492, ptr %494, align 4, !tbaa !25
  br label %.thread355

.thread355:                                       ; preds = %363, %447, %491
  %.4256 = phi ptr [ %464, %491 ], [ %.1253447, %447 ], [ %.0252456, %363 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #11
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %14) #11
  %.not330451 = icmp eq ptr %.0252456, %.4256
  br i1 %.not330451, label %._crit_edge454, label %.lr.ph453

495:                                              ; preds = %386, %455, %444, %401, %470
  %.pn327 = phi { ptr, i32 } [ %471, %470 ], [ %387, %386 ], [ %456, %455 ], [ %.pn.pn.pn, %444 ], [ %402, %401 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #11
  br label %496

496:                                              ; preds = %495, %338
  %.pn327.pn = phi { ptr, i32 } [ %.pn327, %495 ], [ %339, %338 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %14) #11
  br label %525

._crit_edge454:                                   ; preds = %515, %.thread355
  %497 = load ptr, ptr %138, align 8, !tbaa !28
  %498 = icmp eq ptr %497, null
  br i1 %498, label %520, label %519

.lr.ph453:                                        ; preds = %.thread355, %515
  %.0242452 = phi ptr [ %516, %515 ], [ %.0252456, %.thread355 ]
  %499 = getelementptr inbounds i8, ptr %.0242452, i64 8
  %500 = load ptr, ptr %499, align 8, !tbaa !28
  %501 = load i32, ptr %500, align 4, !tbaa !25
  %502 = zext i32 %501 to i64
  %503 = getelementptr inbounds i32, ptr %139, i64 %502
  %504 = load i32, ptr %503, align 4, !tbaa !25
  store i32 %504, ptr %500, align 4, !tbaa !25
  %505 = getelementptr inbounds i8, ptr %500, i64 4
  %506 = load i32, ptr %505, align 4, !tbaa !25
  %507 = zext i32 %506 to i64
  %508 = getelementptr inbounds i32, ptr %139, i64 %507
  %509 = load i32, ptr %508, align 4, !tbaa !25
  store i32 %509, ptr %505, align 4, !tbaa !25
  %510 = getelementptr inbounds i8, ptr %500, i64 8
  %511 = load i32, ptr %510, align 4, !tbaa !25
  %512 = zext i32 %511 to i64
  %513 = getelementptr inbounds i32, ptr %139, i64 %512
  %514 = load i32, ptr %513, align 4, !tbaa !25
  store i32 %514, ptr %510, align 4, !tbaa !25
  invoke void @_ZN12_GLOBAL__N_111NGONEncoder18ngonEncodeTriangleEP6aiFace(ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull %.0242452)
          to label %515 unwind label %517

515:                                              ; preds = %.lr.ph453
  %516 = getelementptr inbounds i8, ptr %.0242452, i64 16
  %.not330 = icmp eq ptr %516, %.4256
  br i1 %.not330, label %._crit_edge454, label %.lr.ph453, !llvm.loop !47

517:                                              ; preds = %.lr.ph453
  %518 = landingpad { ptr, i32 }
          cleanup
  br label %525

519:                                              ; preds = %._crit_edge454
  call void @_ZdaPv(ptr noundef nonnull %497) #13
  br label %520

520:                                              ; preds = %519, %._crit_edge454
  store ptr null, ptr %138, align 8, !tbaa !28
  br label %521

521:                                              ; preds = %143, %147, %520, %325
  %.5257 = phi ptr [ %312, %325 ], [ %.4256, %520 ], [ %144, %147 ], [ %144, %143 ]
  %indvars.iv.next537 = add nuw nsw i64 %indvars.iv536, 1
  %522 = load i32, ptr %70, align 8, !tbaa !16
  %523 = zext i32 %522 to i64
  %524 = icmp ult i64 %indvars.iv.next537, %523
  br i1 %524, label %135, label %._crit_edge459, !llvm.loop !48

525:                                              ; preds = %292, %326, %517, %496, %148
  %.pn336 = phi { ptr, i32 } [ %149, %148 ], [ %518, %517 ], [ %.pn327.pn, %496 ], [ %327, %326 ], [ %.pn331.pn, %292 ]
  call void @_ZNSt10unique_ptrIA_bSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9) #11
  br label %542

526:                                              ; preds = %._crit_edge459
  %527 = getelementptr inbounds i8, ptr %127, i64 -8
  %528 = load i64, ptr %527, align 8
  %529 = icmp eq i64 %528, 0
  br i1 %529, label %.loopexit, label %.preheader.preheader

.preheader.preheader:                             ; preds = %526
  %530 = getelementptr inbounds %struct.aiFace, ptr %127, i64 %528
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %.preheader
  %531 = phi ptr [ %532, %.preheader ], [ %530, %.preheader.preheader ]
  %532 = getelementptr inbounds i8, ptr %531, i64 -16
  call void @_ZN6aiFaceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %532) #11
  %533 = icmp eq ptr %532, %127
  br i1 %533, label %.loopexit, label %.preheader

.loopexit:                                        ; preds = %.preheader, %526
  %534 = shl i64 %528, 4
  %535 = or disjoint i64 %534, 8
  call void @_ZdaPvm(ptr noundef nonnull %527, i64 noundef %535) #13
  br label %536

536:                                              ; preds = %.loopexit, %._crit_edge459
  store ptr %101, ptr %126, align 8, !tbaa !17
  %537 = ptrtoint ptr %.0252.lcssa to i64
  %538 = ptrtoint ptr %101 to i64
  %539 = sub i64 %537, %538
  %540 = lshr exact i64 %539, 4
  %541 = trunc i64 %540 to i32
  store i32 %541, ptr %70, align 8, !tbaa !16
  call void @_ZNSt10unique_ptrIA_bSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %9) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #11
  call void @_ZNSt6vectorI10aiVector2tIfESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #11
  call void @_ZNSt6vectorI10aiVector3tIfESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #11
  br label %545

542:                                              ; preds = %525, %133
  %.pn336.pn = phi { ptr, i32 } [ %.pn336, %525 ], [ %134, %133 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #11
  call void @_ZNSt6vectorI10aiVector2tIfESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #11
  br label %543

543:                                              ; preds = %542, %131
  %.pn336.pn.pn = phi { ptr, i32 } [ %.pn336.pn, %542 ], [ %132, %131 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #11
  call void @_ZNSt6vectorI10aiVector3tIfESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  br label %544

544:                                              ; preds = %543, %129
  %.pn336.pn.pn.pn = phi { ptr, i32 } [ %.pn336.pn.pn, %543 ], [ %130, %129 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #11
  resume { ptr, i32 } %.pn336.pn.pn.pn

545:                                              ; preds = %536, %._crit_edge429.thread
  %546 = phi i1 [ %72, %536 ], [ false, %._crit_edge429.thread ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #11
  br label %.critedge

.critedge:                                        ; preds = %.preheader364, %._crit_edge, %66, %545
  %.2 = phi i1 [ %546, %545 ], [ false, %._crit_edge ], [ false, %66 ], [ false, %.preheader364 ]
  ret i1 %.2
}

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

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

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

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN12_GLOBAL__N_111NGONEncoderC2Ev(ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #5 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_111NGONEncoder18ngonEncodeTriangleEP6aiFace(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef) local_unnamed_addr #6 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_111NGONEncoder14ngonEncodeQuadEP6aiFaceS2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef, ptr noundef) local_unnamed_addr #6 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6Assimp12NewellNormalILi3ELi3ELi3EfEEvR10aiVector3tIT2_EiPS2_S5_S5_(ptr noundef nonnull align 4 dereferenceable(12), i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #7

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt10unique_ptrIA_bSt14default_deleteIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZN6Assimp18OnLeftSideOfLine2DI10aiVector2tIfEEEiRKT_S5_S5_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #7

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN6Assimp17PointInTriangle2DI10aiVector2tIfEEEbRKT_S5_S5_S5_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #7

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

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPvm(ptr noundef, i64 noundef) local_unnamed_addr #10

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

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

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

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

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

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

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

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


; Effective O3 passes: AggressiveInstCombinePass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass