; LLVM IR from zeux/meshoptimizer :: gltf (parselib)

; 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"

%struct.fastObjData = type { ptr, %struct.fastObjGroup, %struct.fastObjGroup, i32, i32, ptr }
%struct.fastObjGroup = type { ptr, i32, i32, i32 }
%struct.fastObjTexture = type { ptr, ptr }
%struct.fastObjCallbacks = type { ptr, ptr, ptr, ptr }
%struct.fastObjMesh = type { i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr, i32, ptr }

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL12object_cleanP12fastObjGroup(ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL11group_cleanP12fastObjGroup(ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL14memory_deallocPv(ptr noundef) #3

; Function Attrs: mustprogress uwtable
define dso_local ptr @fast_obj_read_with_callbacks(ptr noundef %0, ptr noundef %1, ptr noundef %2) #2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca %struct.fastObjData, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca %struct.fastObjTexture, align 8
  %19 = alloca %struct.fastObjGroup, align 8
  %20 = alloca %struct.fastObjGroup, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 72, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  %24 = load ptr, ptr %6, align 8, !tbaa !5
  %25 = icmp ne ptr %24, null
  br i1 %25, label %27, label %26

26:                                               ; preds = %3
  store ptr null, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %875

27:                                               ; preds = %3
  %28 = load ptr, ptr %6, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.fastObjCallbacks, ptr %28, i32 0, i32 0
  %30 = load ptr, ptr %29, align 8, !tbaa !9
  %31 = load ptr, ptr %5, align 8, !tbaa !5
  %32 = load ptr, ptr %7, align 8, !tbaa !5
  %33 = call noundef ptr %30(ptr noundef %31, ptr noundef %32)
  store ptr %33, ptr %10, align 8, !tbaa !5
  %34 = load ptr, ptr %10, align 8, !tbaa !5
  %35 = icmp ne ptr %34, null
  br i1 %35, label %37, label %36

36:                                               ; preds = %27
  store ptr null, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %875

37:                                               ; preds = %27
  %38 = call noundef ptr @_ZL14memory_reallocPvm(ptr noundef null, i64 noundef 168)
  store ptr %38, ptr %9, align 8, !tbaa !5
  %39 = load ptr, ptr %9, align 8, !tbaa !5
  %40 = icmp ne ptr %39, null
  br i1 %40, label %42, label %41

41:                                               ; preds = %37
  store ptr null, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %875

42:                                               ; preds = %37
  %43 = load ptr, ptr %9, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.fastObjMesh, ptr %43, i32 0, i32 1
  store ptr null, ptr %44, align 8, !tbaa !11
  %45 = load ptr, ptr %9, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.fastObjMesh, ptr %45, i32 0, i32 3
  store ptr null, ptr %46, align 8, !tbaa !14
  %47 = load ptr, ptr %9, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.fastObjMesh, ptr %47, i32 0, i32 5
  store ptr null, ptr %48, align 8, !tbaa !15
  %49 = load ptr, ptr %9, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.fastObjMesh, ptr %49, i32 0, i32 7
  store ptr null, ptr %50, align 8, !tbaa !16
  %51 = load ptr, ptr %9, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.fastObjMesh, ptr %51, i32 0, i32 9
  store ptr null, ptr %52, align 8, !tbaa !17
  %53 = load ptr, ptr %9, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.fastObjMesh, ptr %53, i32 0, i32 10
  store ptr null, ptr %54, align 8, !tbaa !18
  %55 = load ptr, ptr %9, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.fastObjMesh, ptr %55, i32 0, i32 12
  store ptr null, ptr %56, align 8, !tbaa !19
  %57 = load ptr, ptr %9, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.fastObjMesh, ptr %57, i32 0, i32 14
  store ptr null, ptr %58, align 8, !tbaa !20
  %59 = load ptr, ptr %9, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.fastObjMesh, ptr %59, i32 0, i32 16
  store ptr null, ptr %60, align 8, !tbaa !21
  %61 = load ptr, ptr %9, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.fastObjMesh, ptr %61, i32 0, i32 18
  store ptr null, ptr %62, align 8, !tbaa !22
  %63 = load ptr, ptr %9, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.fastObjMesh, ptr %63, i32 0, i32 20
  store ptr null, ptr %64, align 8, !tbaa !23
  %65 = load ptr, ptr %9, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.fastObjMesh, ptr %65, i32 0, i32 1
  %67 = load ptr, ptr %66, align 8, !tbaa !11
  %68 = icmp eq ptr %67, null
  br i1 %68, label %84, label %69

69:                                               ; preds = %42
  %70 = load ptr, ptr %9, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.fastObjMesh, ptr %70, i32 0, i32 1
  %72 = load ptr, ptr %71, align 8, !tbaa !11
  %73 = getelementptr inbounds i32, ptr %72, i64 -2
  %74 = getelementptr inbounds i32, ptr %73, i64 0
  %75 = load i32, ptr %74, align 4, !tbaa !24
  %76 = add i32 %75, 1
  %77 = load ptr, ptr %9, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.fastObjMesh, ptr %77, i32 0, i32 1
  %79 = load ptr, ptr %78, align 8, !tbaa !11
  %80 = getelementptr inbounds i32, ptr %79, i64 -2
  %81 = getelementptr inbounds i32, ptr %80, i64 1
  %82 = load i32, ptr %81, align 4, !tbaa !24
  %83 = icmp uge i32 %76, %82
  br i1 %83, label %84, label %93

84:                                               ; preds = %69, %42
  %85 = load ptr, ptr %9, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.fastObjMesh, ptr %85, i32 0, i32 1
  %87 = load ptr, ptr %86, align 8, !tbaa !11
  %88 = call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %87, i32 noundef 1, i32 noundef 4)
  %89 = load ptr, ptr %9, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.fastObjMesh, ptr %89, i32 0, i32 1
  store ptr %88, ptr %90, align 8, !tbaa !5
  %91 = icmp ne ptr %88, null
  %92 = zext i1 %91 to i32
  br label %94

93:                                               ; preds = %69
  br label %94

94:                                               ; preds = %93, %84
  %95 = phi i32 [ %92, %84 ], [ 1, %93 ]
  %96 = icmp ne i32 %95, 0
  br i1 %96, label %97, label %117

97:                                               ; preds = %94
  %98 = load ptr, ptr %9, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.fastObjMesh, ptr %98, i32 0, i32 1
  %100 = load ptr, ptr %99, align 8, !tbaa !11
  %101 = load ptr, ptr %9, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.fastObjMesh, ptr %101, i32 0, i32 1
  %103 = load ptr, ptr %102, align 8, !tbaa !11
  %104 = getelementptr inbounds i32, ptr %103, i64 -2
  %105 = getelementptr inbounds i32, ptr %104, i64 0
  %106 = load i32, ptr %105, align 4, !tbaa !24
  %107 = add i32 %106, 1
  store i32 %107, ptr %105, align 4, !tbaa !24
  %108 = zext i32 %106 to i64
  %109 = getelementptr inbounds float, ptr %100, i64 %108
  store float 0.000000e+00, ptr %109, align 4, !tbaa !25
  %110 = load ptr, ptr %9, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.fastObjMesh, ptr %110, i32 0, i32 1
  %112 = load ptr, ptr %111, align 8, !tbaa !11
  %113 = getelementptr inbounds i32, ptr %112, i64 -2
  %114 = getelementptr inbounds i32, ptr %113, i64 0
  %115 = load i32, ptr %114, align 4, !tbaa !24
  %116 = sub i32 %115, 1
  br label %118

117:                                              ; preds = %94
  br label %118

118:                                              ; preds = %117, %97
  %119 = phi i32 [ %116, %97 ], [ 0, %117 ]
  %120 = load ptr, ptr %9, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.fastObjMesh, ptr %120, i32 0, i32 1
  %122 = load ptr, ptr %121, align 8, !tbaa !11
  %123 = icmp eq ptr %122, null
  br i1 %123, label %139, label %124

124:                                              ; preds = %118
  %125 = load ptr, ptr %9, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.fastObjMesh, ptr %125, i32 0, i32 1
  %127 = load ptr, ptr %126, align 8, !tbaa !11
  %128 = getelementptr inbounds i32, ptr %127, i64 -2
  %129 = getelementptr inbounds i32, ptr %128, i64 0
  %130 = load i32, ptr %129, align 4, !tbaa !24
  %131 = add i32 %130, 1
  %132 = load ptr, ptr %9, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.fastObjMesh, ptr %132, i32 0, i32 1
  %134 = load ptr, ptr %133, align 8, !tbaa !11
  %135 = getelementptr inbounds i32, ptr %134, i64 -2
  %136 = getelementptr inbounds i32, ptr %135, i64 1
  %137 = load i32, ptr %136, align 4, !tbaa !24
  %138 = icmp uge i32 %131, %137
  br i1 %138, label %139, label %148

139:                                              ; preds = %124, %118
  %140 = load ptr, ptr %9, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.fastObjMesh, ptr %140, i32 0, i32 1
  %142 = load ptr, ptr %141, align 8, !tbaa !11
  %143 = call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %142, i32 noundef 1, i32 noundef 4)
  %144 = load ptr, ptr %9, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.fastObjMesh, ptr %144, i32 0, i32 1
  store ptr %143, ptr %145, align 8, !tbaa !5
  %146 = icmp ne ptr %143, null
  %147 = zext i1 %146 to i32
  br label %149

148:                                              ; preds = %124
  br label %149

149:                                              ; preds = %148, %139
  %150 = phi i32 [ %147, %139 ], [ 1, %148 ]
  %151 = icmp ne i32 %150, 0
  br i1 %151, label %152, label %172

152:                                              ; preds = %149
  %153 = load ptr, ptr %9, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.fastObjMesh, ptr %153, i32 0, i32 1
  %155 = load ptr, ptr %154, align 8, !tbaa !11
  %156 = load ptr, ptr %9, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.fastObjMesh, ptr %156, i32 0, i32 1
  %158 = load ptr, ptr %157, align 8, !tbaa !11
  %159 = getelementptr inbounds i32, ptr %158, i64 -2
  %160 = getelementptr inbounds i32, ptr %159, i64 0
  %161 = load i32, ptr %160, align 4, !tbaa !24
  %162 = add i32 %161, 1
  store i32 %162, ptr %160, align 4, !tbaa !24
  %163 = zext i32 %161 to i64
  %164 = getelementptr inbounds float, ptr %155, i64 %163
  store float 0.000000e+00, ptr %164, align 4, !tbaa !25
  %165 = load ptr, ptr %9, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.fastObjMesh, ptr %165, i32 0, i32 1
  %167 = load ptr, ptr %166, align 8, !tbaa !11
  %168 = getelementptr inbounds i32, ptr %167, i64 -2
  %169 = getelementptr inbounds i32, ptr %168, i64 0
  %170 = load i32, ptr %169, align 4, !tbaa !24
  %171 = sub i32 %170, 1
  br label %173

172:                                              ; preds = %149
  br label %173

173:                                              ; preds = %172, %152
  %174 = phi i32 [ %171, %152 ], [ 0, %172 ]
  %175 = load ptr, ptr %9, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.fastObjMesh, ptr %175, i32 0, i32 1
  %177 = load ptr, ptr %176, align 8, !tbaa !11
  %178 = icmp eq ptr %177, null
  br i1 %178, label %194, label %179

179:                                              ; preds = %173
  %180 = load ptr, ptr %9, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.fastObjMesh, ptr %180, i32 0, i32 1
  %182 = load ptr, ptr %181, align 8, !tbaa !11
  %183 = getelementptr inbounds i32, ptr %182, i64 -2
  %184 = getelementptr inbounds i32, ptr %183, i64 0
  %185 = load i32, ptr %184, align 4, !tbaa !24
  %186 = add i32 %185, 1
  %187 = load ptr, ptr %9, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.fastObjMesh, ptr %187, i32 0, i32 1
  %189 = load ptr, ptr %188, align 8, !tbaa !11
  %190 = getelementptr inbounds i32, ptr %189, i64 -2
  %191 = getelementptr inbounds i32, ptr %190, i64 1
  %192 = load i32, ptr %191, align 4, !tbaa !24
  %193 = icmp uge i32 %186, %192
  br i1 %193, label %194, label %203

194:                                              ; preds = %179, %173
  %195 = load ptr, ptr %9, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.fastObjMesh, ptr %195, i32 0, i32 1
  %197 = load ptr, ptr %196, align 8, !tbaa !11
  %198 = call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %197, i32 noundef 1, i32 noundef 4)
  %199 = load ptr, ptr %9, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.fastObjMesh, ptr %199, i32 0, i32 1
  store ptr %198, ptr %200, align 8, !tbaa !5
  %201 = icmp ne ptr %198, null
  %202 = zext i1 %201 to i32
  br label %204

203:                                              ; preds = %179
  br label %204

204:                                              ; preds = %203, %194
  %205 = phi i32 [ %202, %194 ], [ 1, %203 ]
  %206 = icmp ne i32 %205, 0
  br i1 %206, label %207, label %227

207:                                              ; preds = %204
  %208 = load ptr, ptr %9, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.fastObjMesh, ptr %208, i32 0, i32 1
  %210 = load ptr, ptr %209, align 8, !tbaa !11
  %211 = load ptr, ptr %9, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.fastObjMesh, ptr %211, i32 0, i32 1
  %213 = load ptr, ptr %212, align 8, !tbaa !11
  %214 = getelementptr inbounds i32, ptr %213, i64 -2
  %215 = getelementptr inbounds i32, ptr %214, i64 0
  %216 = load i32, ptr %215, align 4, !tbaa !24
  %217 = add i32 %216, 1
  store i32 %217, ptr %215, align 4, !tbaa !24
  %218 = zext i32 %216 to i64
  %219 = getelementptr inbounds float, ptr %210, i64 %218
  store float 0.000000e+00, ptr %219, align 4, !tbaa !25
  %220 = load ptr, ptr %9, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.fastObjMesh, ptr %220, i32 0, i32 1
  %222 = load ptr, ptr %221, align 8, !tbaa !11
  %223 = getelementptr inbounds i32, ptr %222, i64 -2
  %224 = getelementptr inbounds i32, ptr %223, i64 0
  %225 = load i32, ptr %224, align 4, !tbaa !24
  %226 = sub i32 %225, 1
  br label %228

227:                                              ; preds = %204
  br label %228

228:                                              ; preds = %227, %207
  %229 = phi i32 [ %226, %207 ], [ 0, %227 ]
  %230 = load ptr, ptr %9, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.fastObjMesh, ptr %230, i32 0, i32 3
  %232 = load ptr, ptr %231, align 8, !tbaa !14
  %233 = icmp eq ptr %232, null
  br i1 %233, label %249, label %234

234:                                              ; preds = %228
  %235 = load ptr, ptr %9, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.fastObjMesh, ptr %235, i32 0, i32 3
  %237 = load ptr, ptr %236, align 8, !tbaa !14
  %238 = getelementptr inbounds i32, ptr %237, i64 -2
  %239 = getelementptr inbounds i32, ptr %238, i64 0
  %240 = load i32, ptr %239, align 4, !tbaa !24
  %241 = add i32 %240, 1
  %242 = load ptr, ptr %9, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.fastObjMesh, ptr %242, i32 0, i32 3
  %244 = load ptr, ptr %243, align 8, !tbaa !14
  %245 = getelementptr inbounds i32, ptr %244, i64 -2
  %246 = getelementptr inbounds i32, ptr %245, i64 1
  %247 = load i32, ptr %246, align 4, !tbaa !24
  %248 = icmp uge i32 %241, %247
  br i1 %248, label %249, label %258

249:                                              ; preds = %234, %228
  %250 = load ptr, ptr %9, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.fastObjMesh, ptr %250, i32 0, i32 3
  %252 = load ptr, ptr %251, align 8, !tbaa !14
  %253 = call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %252, i32 noundef 1, i32 noundef 4)
  %254 = load ptr, ptr %9, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.fastObjMesh, ptr %254, i32 0, i32 3
  store ptr %253, ptr %255, align 8, !tbaa !5
  %256 = icmp ne ptr %253, null
  %257 = zext i1 %256 to i32
  br label %259

258:                                              ; preds = %234
  br label %259

259:                                              ; preds = %258, %249
  %260 = phi i32 [ %257, %249 ], [ 1, %258 ]
  %261 = icmp ne i32 %260, 0
  br i1 %261, label %262, label %282

262:                                              ; preds = %259
  %263 = load ptr, ptr %9, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.fastObjMesh, ptr %263, i32 0, i32 3
  %265 = load ptr, ptr %264, align 8, !tbaa !14
  %266 = load ptr, ptr %9, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.fastObjMesh, ptr %266, i32 0, i32 3
  %268 = load ptr, ptr %267, align 8, !tbaa !14
  %269 = getelementptr inbounds i32, ptr %268, i64 -2
  %270 = getelementptr inbounds i32, ptr %269, i64 0
  %271 = load i32, ptr %270, align 4, !tbaa !24
  %272 = add i32 %271, 1
  store i32 %272, ptr %270, align 4, !tbaa !24
  %273 = zext i32 %271 to i64
  %274 = getelementptr inbounds float, ptr %265, i64 %273
  store float 0.000000e+00, ptr %274, align 4, !tbaa !25
  %275 = load ptr, ptr %9, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.fastObjMesh, ptr %275, i32 0, i32 3
  %277 = load ptr, ptr %276, align 8, !tbaa !14
  %278 = getelementptr inbounds i32, ptr %277, i64 -2
  %279 = getelementptr inbounds i32, ptr %278, i64 0
  %280 = load i32, ptr %279, align 4, !tbaa !24
  %281 = sub i32 %280, 1
  br label %283

282:                                              ; preds = %259
  br label %283

283:                                              ; preds = %282, %262
  %284 = phi i32 [ %281, %262 ], [ 0, %282 ]
  %285 = load ptr, ptr %9, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.fastObjMesh, ptr %285, i32 0, i32 3
  %287 = load ptr, ptr %286, align 8, !tbaa !14
  %288 = icmp eq ptr %287, null
  br i1 %288, label %304, label %289

289:                                              ; preds = %283
  %290 = load ptr, ptr %9, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.fastObjMesh, ptr %290, i32 0, i32 3
  %292 = load ptr, ptr %291, align 8, !tbaa !14
  %293 = getelementptr inbounds i32, ptr %292, i64 -2
  %294 = getelementptr inbounds i32, ptr %293, i64 0
  %295 = load i32, ptr %294, align 4, !tbaa !24
  %296 = add i32 %295, 1
  %297 = load ptr, ptr %9, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.fastObjMesh, ptr %297, i32 0, i32 3
  %299 = load ptr, ptr %298, align 8, !tbaa !14
  %300 = getelementptr inbounds i32, ptr %299, i64 -2
  %301 = getelementptr inbounds i32, ptr %300, i64 1
  %302 = load i32, ptr %301, align 4, !tbaa !24
  %303 = icmp uge i32 %296, %302
  br i1 %303, label %304, label %313

304:                                              ; preds = %289, %283
  %305 = load ptr, ptr %9, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.fastObjMesh, ptr %305, i32 0, i32 3
  %307 = load ptr, ptr %306, align 8, !tbaa !14
  %308 = call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %307, i32 noundef 1, i32 noundef 4)
  %309 = load ptr, ptr %9, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.fastObjMesh, ptr %309, i32 0, i32 3
  store ptr %308, ptr %310, align 8, !tbaa !5
  %311 = icmp ne ptr %308, null
  %312 = zext i1 %311 to i32
  br label %314

313:                                              ; preds = %289
  br label %314

314:                                              ; preds = %313, %304
  %315 = phi i32 [ %312, %304 ], [ 1, %313 ]
  %316 = icmp ne i32 %315, 0
  br i1 %316, label %317, label %337

317:                                              ; preds = %314
  %318 = load ptr, ptr %9, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.fastObjMesh, ptr %318, i32 0, i32 3
  %320 = load ptr, ptr %319, align 8, !tbaa !14
  %321 = load ptr, ptr %9, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.fastObjMesh, ptr %321, i32 0, i32 3
  %323 = load ptr, ptr %322, align 8, !tbaa !14
  %324 = getelementptr inbounds i32, ptr %323, i64 -2
  %325 = getelementptr inbounds i32, ptr %324, i64 0
  %326 = load i32, ptr %325, align 4, !tbaa !24
  %327 = add i32 %326, 1
  store i32 %327, ptr %325, align 4, !tbaa !24
  %328 = zext i32 %326 to i64
  %329 = getelementptr inbounds float, ptr %320, i64 %328
  store float 0.000000e+00, ptr %329, align 4, !tbaa !25
  %330 = load ptr, ptr %9, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.fastObjMesh, ptr %330, i32 0, i32 3
  %332 = load ptr, ptr %331, align 8, !tbaa !14
  %333 = getelementptr inbounds i32, ptr %332, i64 -2
  %334 = getelementptr inbounds i32, ptr %333, i64 0
  %335 = load i32, ptr %334, align 4, !tbaa !24
  %336 = sub i32 %335, 1
  br label %338

337:                                              ; preds = %314
  br label %338

338:                                              ; preds = %337, %317
  %339 = phi i32 [ %336, %317 ], [ 0, %337 ]
  %340 = load ptr, ptr %9, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.fastObjMesh, ptr %340, i32 0, i32 5
  %342 = load ptr, ptr %341, align 8, !tbaa !15
  %343 = icmp eq ptr %342, null
  br i1 %343, label %359, label %344

344:                                              ; preds = %338
  %345 = load ptr, ptr %9, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.fastObjMesh, ptr %345, i32 0, i32 5
  %347 = load ptr, ptr %346, align 8, !tbaa !15
  %348 = getelementptr inbounds i32, ptr %347, i64 -2
  %349 = getelementptr inbounds i32, ptr %348, i64 0
  %350 = load i32, ptr %349, align 4, !tbaa !24
  %351 = add i32 %350, 1
  %352 = load ptr, ptr %9, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.fastObjMesh, ptr %352, i32 0, i32 5
  %354 = load ptr, ptr %353, align 8, !tbaa !15
  %355 = getelementptr inbounds i32, ptr %354, i64 -2
  %356 = getelementptr inbounds i32, ptr %355, i64 1
  %357 = load i32, ptr %356, align 4, !tbaa !24
  %358 = icmp uge i32 %351, %357
  br i1 %358, label %359, label %368

359:                                              ; preds = %344, %338
  %360 = load ptr, ptr %9, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.fastObjMesh, ptr %360, i32 0, i32 5
  %362 = load ptr, ptr %361, align 8, !tbaa !15
  %363 = call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %362, i32 noundef 1, i32 noundef 4)
  %364 = load ptr, ptr %9, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.fastObjMesh, ptr %364, i32 0, i32 5
  store ptr %363, ptr %365, align 8, !tbaa !5
  %366 = icmp ne ptr %363, null
  %367 = zext i1 %366 to i32
  br label %369

368:                                              ; preds = %344
  br label %369

369:                                              ; preds = %368, %359
  %370 = phi i32 [ %367, %359 ], [ 1, %368 ]
  %371 = icmp ne i32 %370, 0
  br i1 %371, label %372, label %392

372:                                              ; preds = %369
  %373 = load ptr, ptr %9, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.fastObjMesh, ptr %373, i32 0, i32 5
  %375 = load ptr, ptr %374, align 8, !tbaa !15
  %376 = load ptr, ptr %9, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.fastObjMesh, ptr %376, i32 0, i32 5
  %378 = load ptr, ptr %377, align 8, !tbaa !15
  %379 = getelementptr inbounds i32, ptr %378, i64 -2
  %380 = getelementptr inbounds i32, ptr %379, i64 0
  %381 = load i32, ptr %380, align 4, !tbaa !24
  %382 = add i32 %381, 1
  store i32 %382, ptr %380, align 4, !tbaa !24
  %383 = zext i32 %381 to i64
  %384 = getelementptr inbounds float, ptr %375, i64 %383
  store float 0.000000e+00, ptr %384, align 4, !tbaa !25
  %385 = load ptr, ptr %9, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.fastObjMesh, ptr %385, i32 0, i32 5
  %387 = load ptr, ptr %386, align 8, !tbaa !15
  %388 = getelementptr inbounds i32, ptr %387, i64 -2
  %389 = getelementptr inbounds i32, ptr %388, i64 0
  %390 = load i32, ptr %389, align 4, !tbaa !24
  %391 = sub i32 %390, 1
  br label %393

392:                                              ; preds = %369
  br label %393

393:                                              ; preds = %392, %372
  %394 = phi i32 [ %391, %372 ], [ 0, %392 ]
  %395 = load ptr, ptr %9, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.fastObjMesh, ptr %395, i32 0, i32 5
  %397 = load ptr, ptr %396, align 8, !tbaa !15
  %398 = icmp eq ptr %397, null
  br i1 %398, label %414, label %399

399:                                              ; preds = %393
  %400 = load ptr, ptr %9, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.fastObjMesh, ptr %400, i32 0, i32 5
  %402 = load ptr, ptr %401, align 8, !tbaa !15
  %403 = getelementptr inbounds i32, ptr %402, i64 -2
  %404 = getelementptr inbounds i32, ptr %403, i64 0
  %405 = load i32, ptr %404, align 4, !tbaa !24
  %406 = add i32 %405, 1
  %407 = load ptr, ptr %9, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.fastObjMesh, ptr %407, i32 0, i32 5
  %409 = load ptr, ptr %408, align 8, !tbaa !15
  %410 = getelementptr inbounds i32, ptr %409, i64 -2
  %411 = getelementptr inbounds i32, ptr %410, i64 1
  %412 = load i32, ptr %411, align 4, !tbaa !24
  %413 = icmp uge i32 %406, %412
  br i1 %413, label %414, label %423

414:                                              ; preds = %399, %393
  %415 = load ptr, ptr %9, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.fastObjMesh, ptr %415, i32 0, i32 5
  %417 = load ptr, ptr %416, align 8, !tbaa !15
  %418 = call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %417, i32 noundef 1, i32 noundef 4)
  %419 = load ptr, ptr %9, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.fastObjMesh, ptr %419, i32 0, i32 5
  store ptr %418, ptr %420, align 8, !tbaa !5
  %421 = icmp ne ptr %418, null
  %422 = zext i1 %421 to i32
  br label %424

423:                                              ; preds = %399
  br label %424

424:                                              ; preds = %423, %414
  %425 = phi i32 [ %422, %414 ], [ 1, %423 ]
  %426 = icmp ne i32 %425, 0
  br i1 %426, label %427, label %447

427:                                              ; preds = %424
  %428 = load ptr, ptr %9, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.fastObjMesh, ptr %428, i32 0, i32 5
  %430 = load ptr, ptr %429, align 8, !tbaa !15
  %431 = load ptr, ptr %9, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.fastObjMesh, ptr %431, i32 0, i32 5
  %433 = load ptr, ptr %432, align 8, !tbaa !15
  %434 = getelementptr inbounds i32, ptr %433, i64 -2
  %435 = getelementptr inbounds i32, ptr %434, i64 0
  %436 = load i32, ptr %435, align 4, !tbaa !24
  %437 = add i32 %436, 1
  store i32 %437, ptr %435, align 4, !tbaa !24
  %438 = zext i32 %436 to i64
  %439 = getelementptr inbounds float, ptr %430, i64 %438
  store float 0.000000e+00, ptr %439, align 4, !tbaa !25
  %440 = load ptr, ptr %9, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.fastObjMesh, ptr %440, i32 0, i32 5
  %442 = load ptr, ptr %441, align 8, !tbaa !15
  %443 = getelementptr inbounds i32, ptr %442, i64 -2
  %444 = getelementptr inbounds i32, ptr %443, i64 0
  %445 = load i32, ptr %444, align 4, !tbaa !24
  %446 = sub i32 %445, 1
  br label %448

447:                                              ; preds = %424
  br label %448

448:                                              ; preds = %447, %427
  %449 = phi i32 [ %446, %427 ], [ 0, %447 ]
  %450 = load ptr, ptr %9, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.fastObjMesh, ptr %450, i32 0, i32 5
  %452 = load ptr, ptr %451, align 8, !tbaa !15
  %453 = icmp eq ptr %452, null
  br i1 %453, label %469, label %454

454:                                              ; preds = %448
  %455 = load ptr, ptr %9, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.fastObjMesh, ptr %455, i32 0, i32 5
  %457 = load ptr, ptr %456, align 8, !tbaa !15
  %458 = getelementptr inbounds i32, ptr %457, i64 -2
  %459 = getelementptr inbounds i32, ptr %458, i64 0
  %460 = load i32, ptr %459, align 4, !tbaa !24
  %461 = add i32 %460, 1
  %462 = load ptr, ptr %9, align 8, !tbaa !5
  %463 = getelementptr inbounds %struct.fastObjMesh, ptr %462, i32 0, i32 5
  %464 = load ptr, ptr %463, align 8, !tbaa !15
  %465 = getelementptr inbounds i32, ptr %464, i64 -2
  %466 = getelementptr inbounds i32, ptr %465, i64 1
  %467 = load i32, ptr %466, align 4, !tbaa !24
  %468 = icmp uge i32 %461, %467
  br i1 %468, label %469, label %478

469:                                              ; preds = %454, %448
  %470 = load ptr, ptr %9, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.fastObjMesh, ptr %470, i32 0, i32 5
  %472 = load ptr, ptr %471, align 8, !tbaa !15
  %473 = call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %472, i32 noundef 1, i32 noundef 4)
  %474 = load ptr, ptr %9, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.fastObjMesh, ptr %474, i32 0, i32 5
  store ptr %473, ptr %475, align 8, !tbaa !5
  %476 = icmp ne ptr %473, null
  %477 = zext i1 %476 to i32
  br label %479

478:                                              ; preds = %454
  br label %479

479:                                              ; preds = %478, %469
  %480 = phi i32 [ %477, %469 ], [ 1, %478 ]
  %481 = icmp ne i32 %480, 0
  br i1 %481, label %482, label %502

482:                                              ; preds = %479
  %483 = load ptr, ptr %9, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.fastObjMesh, ptr %483, i32 0, i32 5
  %485 = load ptr, ptr %484, align 8, !tbaa !15
  %486 = load ptr, ptr %9, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.fastObjMesh, ptr %486, i32 0, i32 5
  %488 = load ptr, ptr %487, align 8, !tbaa !15
  %489 = getelementptr inbounds i32, ptr %488, i64 -2
  %490 = getelementptr inbounds i32, ptr %489, i64 0
  %491 = load i32, ptr %490, align 4, !tbaa !24
  %492 = add i32 %491, 1
  store i32 %492, ptr %490, align 4, !tbaa !24
  %493 = zext i32 %491 to i64
  %494 = getelementptr inbounds float, ptr %485, i64 %493
  store float 1.000000e+00, ptr %494, align 4, !tbaa !25
  %495 = load ptr, ptr %9, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.fastObjMesh, ptr %495, i32 0, i32 5
  %497 = load ptr, ptr %496, align 8, !tbaa !15
  %498 = getelementptr inbounds i32, ptr %497, i64 -2
  %499 = getelementptr inbounds i32, ptr %498, i64 0
  %500 = load i32, ptr %499, align 4, !tbaa !24
  %501 = sub i32 %500, 1
  br label %503

502:                                              ; preds = %479
  br label %503

503:                                              ; preds = %502, %482
  %504 = phi i32 [ %501, %482 ], [ 0, %502 ]
  %505 = load ptr, ptr %9, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.fastObjMesh, ptr %505, i32 0, i32 16
  %507 = load ptr, ptr %506, align 8, !tbaa !21
  %508 = icmp eq ptr %507, null
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #5
  br i1 %508, label %524, label %509

509:                                              ; preds = %503
  %510 = load ptr, ptr %9, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.fastObjMesh, ptr %510, i32 0, i32 16
  %512 = load ptr, ptr %511, align 8, !tbaa !21
  %513 = getelementptr inbounds i32, ptr %512, i64 -2
  %514 = getelementptr inbounds i32, ptr %513, i64 0
  %515 = load i32, ptr %514, align 4, !tbaa !24
  %516 = add i32 %515, 1
  %517 = load ptr, ptr %9, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.fastObjMesh, ptr %517, i32 0, i32 16
  %519 = load ptr, ptr %518, align 8, !tbaa !21
  %520 = getelementptr inbounds i32, ptr %519, i64 -2
  %521 = getelementptr inbounds i32, ptr %520, i64 1
  %522 = load i32, ptr %521, align 4, !tbaa !24
  %523 = icmp uge i32 %516, %522
  br i1 %523, label %524, label %533

524:                                              ; preds = %509, %503
  %525 = load ptr, ptr %9, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct.fastObjMesh, ptr %525, i32 0, i32 16
  %527 = load ptr, ptr %526, align 8, !tbaa !21
  %528 = call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %527, i32 noundef 1, i32 noundef 16)
  %529 = load ptr, ptr %9, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.fastObjMesh, ptr %529, i32 0, i32 16
  store ptr %528, ptr %530, align 8, !tbaa !5
  %531 = icmp ne ptr %528, null
  %532 = zext i1 %531 to i32
  br label %534

533:                                              ; preds = %509
  br label %534

534:                                              ; preds = %533, %524
  %535 = phi i32 [ %532, %524 ], [ 1, %533 ]
  %536 = icmp ne i32 %535, 0
  br i1 %536, label %537, label %562

537:                                              ; preds = %534
  %538 = call { ptr, ptr } @_ZL11map_defaultv()
  %539 = getelementptr inbounds { ptr, ptr }, ptr %18, i32 0, i32 0
  %540 = extractvalue { ptr, ptr } %538, 0
  store ptr %540, ptr %539, align 8
  %541 = getelementptr inbounds { ptr, ptr }, ptr %18, i32 0, i32 1
  %542 = extractvalue { ptr, ptr } %538, 1
  store ptr %542, ptr %541, align 8
  %543 = load ptr, ptr %9, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.fastObjMesh, ptr %543, i32 0, i32 16
  %545 = load ptr, ptr %544, align 8, !tbaa !21
  %546 = load ptr, ptr %9, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.fastObjMesh, ptr %546, i32 0, i32 16
  %548 = load ptr, ptr %547, align 8, !tbaa !21
  %549 = getelementptr inbounds i32, ptr %548, i64 -2
  %550 = getelementptr inbounds i32, ptr %549, i64 0
  %551 = load i32, ptr %550, align 4, !tbaa !24
  %552 = add i32 %551, 1
  store i32 %552, ptr %550, align 4, !tbaa !24
  %553 = zext i32 %551 to i64
  %554 = getelementptr inbounds %struct.fastObjTexture, ptr %545, i64 %553
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %554, ptr align 8 %18, i64 16, i1 false), !tbaa.struct !27
  %555 = load ptr, ptr %9, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.fastObjMesh, ptr %555, i32 0, i32 16
  %557 = load ptr, ptr %556, align 8, !tbaa !21
  %558 = getelementptr inbounds i32, ptr %557, i64 -2
  %559 = getelementptr inbounds i32, ptr %558, i64 0
  %560 = load i32, ptr %559, align 4, !tbaa !24
  %561 = sub i32 %560, 1
  br label %563

562:                                              ; preds = %534
  br label %563

563:                                              ; preds = %562, %537
  %564 = phi i32 [ %561, %537 ], [ 0, %562 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #5
  %565 = load ptr, ptr %9, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.fastObjData, ptr %8, i32 0, i32 0
  store ptr %565, ptr %566, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #5
  call void @_ZL14object_defaultv(ptr dead_on_unwind writable sret(%struct.fastObjGroup) align 8 %19)
  %567 = getelementptr inbounds %struct.fastObjData, ptr %8, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %567, ptr align 8 %19, i64 24, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %20) #5
  call void @_ZL13group_defaultv(ptr dead_on_unwind writable sret(%struct.fastObjGroup) align 8 %20)
  %568 = getelementptr inbounds %struct.fastObjData, ptr %8, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %568, ptr align 8 %20, i64 24, i1 false), !tbaa.struct !31
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #5
  %569 = getelementptr inbounds %struct.fastObjData, ptr %8, i32 0, i32 3
  store i32 0, ptr %569, align 8, !tbaa !32
  %570 = getelementptr inbounds %struct.fastObjData, ptr %8, i32 0, i32 4
  store i32 1, ptr %570, align 4, !tbaa !33
  %571 = getelementptr inbounds %struct.fastObjData, ptr %8, i32 0, i32 5
  store ptr null, ptr %571, align 8, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %572 = load ptr, ptr %5, align 8, !tbaa !5
  %573 = call noundef ptr @strrchr(ptr noundef %572, i32 noundef 47) #6
  store ptr %573, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %574 = load ptr, ptr %5, align 8, !tbaa !5
  %575 = call noundef ptr @strrchr(ptr noundef %574, i32 noundef 92) #6
  store ptr %575, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %576 = load ptr, ptr %22, align 8, !tbaa !5
  %577 = icmp ne ptr %576, null
  br i1 %577, label %578, label %587

578:                                              ; preds = %563
  %579 = load ptr, ptr %21, align 8, !tbaa !5
  %580 = icmp ne ptr %579, null
  br i1 %580, label %581, label %585

581:                                              ; preds = %578
  %582 = load ptr, ptr %21, align 8, !tbaa !5
  %583 = load ptr, ptr %22, align 8, !tbaa !5
  %584 = icmp ult ptr %582, %583
  br i1 %584, label %585, label %587

585:                                              ; preds = %581, %578
  %586 = load ptr, ptr %22, align 8, !tbaa !5
  br label %589

587:                                              ; preds = %581, %563
  %588 = load ptr, ptr %21, align 8, !tbaa !5
  br label %589

589:                                              ; preds = %587, %585
  %590 = phi ptr [ %586, %585 ], [ %588, %587 ]
  store ptr %590, ptr %23, align 8, !tbaa !5
  %591 = load ptr, ptr %23, align 8, !tbaa !5
  %592 = icmp ne ptr %591, null
  br i1 %592, label %593, label %603

593:                                              ; preds = %589
  %594 = load ptr, ptr %5, align 8, !tbaa !5
  %595 = load ptr, ptr %23, align 8, !tbaa !5
  %596 = load ptr, ptr %5, align 8, !tbaa !5
  %597 = ptrtoint ptr %595 to i64
  %598 = ptrtoint ptr %596 to i64
  %599 = sub i64 %597, %598
  %600 = add nsw i64 %599, 1
  %601 = call noundef ptr @_ZL13string_substrPKcmm(ptr noundef %594, i64 noundef 0, i64 noundef %600)
  %602 = getelementptr inbounds %struct.fastObjData, ptr %8, i32 0, i32 5
  store ptr %601, ptr %602, align 8, !tbaa !34
  br label %603

603:                                              ; preds = %593, %589
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  %604 = call noundef ptr @_ZL14memory_reallocPvm(ptr noundef null, i64 noundef 131072)
  store ptr %604, ptr %11, align 8, !tbaa !5
  %605 = load ptr, ptr %11, align 8, !tbaa !5
  %606 = icmp ne ptr %605, null
  br i1 %606, label %608, label %607

607:                                              ; preds = %603
  store ptr null, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %875

608:                                              ; preds = %603
  %609 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %609, ptr %12, align 8, !tbaa !5
  br label %610

610:                                              ; preds = %678, %608
  %611 = load ptr, ptr %6, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.fastObjCallbacks, ptr %611, i32 0, i32 2
  %613 = load ptr, ptr %612, align 8, !tbaa !35
  %614 = load ptr, ptr %10, align 8, !tbaa !5
  %615 = load ptr, ptr %12, align 8, !tbaa !5
  %616 = load ptr, ptr %7, align 8, !tbaa !5
  %617 = call noundef i64 %613(ptr noundef %614, ptr noundef %615, i64 noundef 65536, ptr noundef %616)
  %618 = trunc i64 %617 to i32
  store i32 %618, ptr %15, align 4, !tbaa !24
  %619 = load i32, ptr %15, align 4, !tbaa !24
  %620 = icmp eq i32 %619, 0
  br i1 %620, label %621, label %626

621:                                              ; preds = %610
  %622 = load ptr, ptr %12, align 8, !tbaa !5
  %623 = load ptr, ptr %11, align 8, !tbaa !5
  %624 = icmp eq ptr %622, %623
  br i1 %624, label %625, label %626

625:                                              ; preds = %621
  br label %699

626:                                              ; preds = %621, %610
  %627 = load i32, ptr %15, align 4, !tbaa !24
  %628 = icmp ult i32 %627, 65536
  br i1 %628, label %629, label %648

629:                                              ; preds = %626
  %630 = load i32, ptr %15, align 4, !tbaa !24
  %631 = icmp eq i32 %630, 0
  br i1 %631, label %641, label %632

632:                                              ; preds = %629
  %633 = load ptr, ptr %12, align 8, !tbaa !5
  %634 = load i32, ptr %15, align 4, !tbaa !24
  %635 = sub i32 %634, 1
  %636 = zext i32 %635 to i64
  %637 = getelementptr inbounds i8, ptr %633, i64 %636
  %638 = load i8, ptr %637, align 1, !tbaa !36
  %639 = sext i8 %638 to i32
  %640 = icmp ne i32 %639, 10
  br i1 %640, label %641, label %647

641:                                              ; preds = %632, %629
  %642 = load ptr, ptr %12, align 8, !tbaa !5
  %643 = load i32, ptr %15, align 4, !tbaa !24
  %644 = add i32 %643, 1
  store i32 %644, ptr %15, align 4, !tbaa !24
  %645 = zext i32 %643 to i64
  %646 = getelementptr inbounds i8, ptr %642, i64 %645
  store i8 10, ptr %646, align 1, !tbaa !36
  br label %647

647:                                              ; preds = %641, %632
  br label %648

648:                                              ; preds = %647, %626
  %649 = load ptr, ptr %12, align 8, !tbaa !5
  %650 = load i32, ptr %15, align 4, !tbaa !24
  %651 = zext i32 %650 to i64
  %652 = getelementptr inbounds i8, ptr %649, i64 %651
  store ptr %652, ptr %13, align 8, !tbaa !5
  %653 = load ptr, ptr %13, align 8, !tbaa !5
  %654 = load ptr, ptr %11, align 8, !tbaa !5
  %655 = icmp eq ptr %653, %654
  br i1 %655, label %656, label %657

656:                                              ; preds = %648
  br label %699

657:                                              ; preds = %648
  %658 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %658, ptr %14, align 8, !tbaa !5
  br label %659

659:                                              ; preds = %671, %657
  %660 = load ptr, ptr %14, align 8, !tbaa !5
  %661 = load ptr, ptr %11, align 8, !tbaa !5
  %662 = icmp ugt ptr %660, %661
  br i1 %662, label %663, label %672

663:                                              ; preds = %659
  %664 = load ptr, ptr %14, align 8, !tbaa !5
  %665 = getelementptr inbounds i8, ptr %664, i32 -1
  store ptr %665, ptr %14, align 8, !tbaa !5
  %666 = load ptr, ptr %14, align 8, !tbaa !5
  %667 = load i8, ptr %666, align 1, !tbaa !36
  %668 = sext i8 %667 to i32
  %669 = icmp eq i32 %668, 10
  br i1 %669, label %670, label %671

670:                                              ; preds = %663
  br label %672

671:                                              ; preds = %663
  br label %659, !llvm.loop !37

672:                                              ; preds = %670, %659
  %673 = load ptr, ptr %14, align 8, !tbaa !5
  %674 = load i8, ptr %673, align 1, !tbaa !36
  %675 = sext i8 %674 to i32
  %676 = icmp ne i32 %675, 10
  br i1 %676, label %677, label %678

677:                                              ; preds = %672
  br label %699

678:                                              ; preds = %672
  %679 = load ptr, ptr %14, align 8, !tbaa !5
  %680 = getelementptr inbounds i8, ptr %679, i32 1
  store ptr %680, ptr %14, align 8, !tbaa !5
  %681 = load ptr, ptr %11, align 8, !tbaa !5
  %682 = load ptr, ptr %14, align 8, !tbaa !5
  %683 = load ptr, ptr %6, align 8, !tbaa !5
  %684 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZL12parse_bufferP11fastObjDataPKcS2_PK16fastObjCallbacksPv(ptr noundef %8, ptr noundef %681, ptr noundef %682, ptr noundef %683, ptr noundef %684)
  %685 = load ptr, ptr %13, align 8, !tbaa !5
  %686 = load ptr, ptr %14, align 8, !tbaa !5
  %687 = ptrtoint ptr %685 to i64
  %688 = ptrtoint ptr %686 to i64
  %689 = sub i64 %687, %688
  %690 = trunc i64 %689 to i32
  store i32 %690, ptr %16, align 4, !tbaa !24
  %691 = load ptr, ptr %11, align 8, !tbaa !5
  %692 = load ptr, ptr %14, align 8, !tbaa !5
  %693 = load i32, ptr %16, align 4, !tbaa !24
  %694 = zext i32 %693 to i64
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %691, ptr align 1 %692, i64 %694, i1 false)
  %695 = load ptr, ptr %11, align 8, !tbaa !5
  %696 = load i32, ptr %16, align 4, !tbaa !24
  %697 = zext i32 %696 to i64
  %698 = getelementptr inbounds i8, ptr %695, i64 %697
  store ptr %698, ptr %12, align 8, !tbaa !5
  br label %610, !llvm.loop !39

699:                                              ; preds = %677, %656, %625
  call void @_ZL12flush_objectP11fastObjData(ptr noundef %8)
  %700 = getelementptr inbounds %struct.fastObjData, ptr %8, i32 0, i32 1
  call void @_ZL12object_cleanP12fastObjGroup(ptr noundef %700)
  call void @_ZL11flush_groupP11fastObjData(ptr noundef %8)
  %701 = getelementptr inbounds %struct.fastObjData, ptr %8, i32 0, i32 2
  call void @_ZL11group_cleanP12fastObjGroup(ptr noundef %701)
  %702 = load ptr, ptr %9, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.fastObjMesh, ptr %702, i32 0, i32 1
  %704 = load ptr, ptr %703, align 8, !tbaa !11
  %705 = icmp ne ptr %704, null
  br i1 %705, label %706, label %713

706:                                              ; preds = %699
  %707 = load ptr, ptr %9, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.fastObjMesh, ptr %707, i32 0, i32 1
  %709 = load ptr, ptr %708, align 8, !tbaa !11
  %710 = getelementptr inbounds i32, ptr %709, i64 -2
  %711 = getelementptr inbounds i32, ptr %710, i64 0
  %712 = load i32, ptr %711, align 4, !tbaa !24
  br label %714

713:                                              ; preds = %699
  br label %714

714:                                              ; preds = %713, %706
  %715 = phi i32 [ %712, %706 ], [ 0, %713 ]
  %716 = udiv i32 %715, 3
  %717 = load ptr, ptr %9, align 8, !tbaa !5
  %718 = getelementptr inbounds %struct.fastObjMesh, ptr %717, i32 0, i32 0
  store i32 %716, ptr %718, align 8, !tbaa !40
  %719 = load ptr, ptr %9, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.fastObjMesh, ptr %719, i32 0, i32 3
  %721 = load ptr, ptr %720, align 8, !tbaa !14
  %722 = icmp ne ptr %721, null
  br i1 %722, label %723, label %730

723:                                              ; preds = %714
  %724 = load ptr, ptr %9, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.fastObjMesh, ptr %724, i32 0, i32 3
  %726 = load ptr, ptr %725, align 8, !tbaa !14
  %727 = getelementptr inbounds i32, ptr %726, i64 -2
  %728 = getelementptr inbounds i32, ptr %727, i64 0
  %729 = load i32, ptr %728, align 4, !tbaa !24
  br label %731

730:                                              ; preds = %714
  br label %731

731:                                              ; preds = %730, %723
  %732 = phi i32 [ %729, %723 ], [ 0, %730 ]
  %733 = udiv i32 %732, 2
  %734 = load ptr, ptr %9, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.fastObjMesh, ptr %734, i32 0, i32 2
  store i32 %733, ptr %735, align 8, !tbaa !41
  %736 = load ptr, ptr %9, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct.fastObjMesh, ptr %736, i32 0, i32 5
  %738 = load ptr, ptr %737, align 8, !tbaa !15
  %739 = icmp ne ptr %738, null
  br i1 %739, label %740, label %747

740:                                              ; preds = %731
  %741 = load ptr, ptr %9, align 8, !tbaa !5
  %742 = getelementptr inbounds %struct.fastObjMesh, ptr %741, i32 0, i32 5
  %743 = load ptr, ptr %742, align 8, !tbaa !15
  %744 = getelementptr inbounds i32, ptr %743, i64 -2
  %745 = getelementptr inbounds i32, ptr %744, i64 0
  %746 = load i32, ptr %745, align 4, !tbaa !24
  br label %748

747:                                              ; preds = %731
  br label %748

748:                                              ; preds = %747, %740
  %749 = phi i32 [ %746, %740 ], [ 0, %747 ]
  %750 = udiv i32 %749, 3
  %751 = load ptr, ptr %9, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.fastObjMesh, ptr %751, i32 0, i32 4
  store i32 %750, ptr %752, align 8, !tbaa !42
  %753 = load ptr, ptr %9, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.fastObjMesh, ptr %753, i32 0, i32 7
  %755 = load ptr, ptr %754, align 8, !tbaa !16
  %756 = icmp ne ptr %755, null
  br i1 %756, label %757, label %764

757:                                              ; preds = %748
  %758 = load ptr, ptr %9, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.fastObjMesh, ptr %758, i32 0, i32 7
  %760 = load ptr, ptr %759, align 8, !tbaa !16
  %761 = getelementptr inbounds i32, ptr %760, i64 -2
  %762 = getelementptr inbounds i32, ptr %761, i64 0
  %763 = load i32, ptr %762, align 4, !tbaa !24
  br label %765

764:                                              ; preds = %748
  br label %765

765:                                              ; preds = %764, %757
  %766 = phi i32 [ %763, %757 ], [ 0, %764 ]
  %767 = udiv i32 %766, 3
  %768 = load ptr, ptr %9, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.fastObjMesh, ptr %768, i32 0, i32 6
  store i32 %767, ptr %769, align 8, !tbaa !43
  %770 = load ptr, ptr %9, align 8, !tbaa !5
  %771 = getelementptr inbounds %struct.fastObjMesh, ptr %770, i32 0, i32 9
  %772 = load ptr, ptr %771, align 8, !tbaa !17
  %773 = icmp ne ptr %772, null
  br i1 %773, label %774, label %781

774:                                              ; preds = %765
  %775 = load ptr, ptr %9, align 8, !tbaa !5
  %776 = getelementptr inbounds %struct.fastObjMesh, ptr %775, i32 0, i32 9
  %777 = load ptr, ptr %776, align 8, !tbaa !17
  %778 = getelementptr inbounds i32, ptr %777, i64 -2
  %779 = getelementptr inbounds i32, ptr %778, i64 0
  %780 = load i32, ptr %779, align 4, !tbaa !24
  br label %782

781:                                              ; preds = %765
  br label %782

782:                                              ; preds = %781, %774
  %783 = phi i32 [ %780, %774 ], [ 0, %781 ]
  %784 = load ptr, ptr %9, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.fastObjMesh, ptr %784, i32 0, i32 8
  store i32 %783, ptr %785, align 8, !tbaa !44
  %786 = load ptr, ptr %9, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.fastObjMesh, ptr %786, i32 0, i32 12
  %788 = load ptr, ptr %787, align 8, !tbaa !19
  %789 = icmp ne ptr %788, null
  br i1 %789, label %790, label %797

790:                                              ; preds = %782
  %791 = load ptr, ptr %9, align 8, !tbaa !5
  %792 = getelementptr inbounds %struct.fastObjMesh, ptr %791, i32 0, i32 12
  %793 = load ptr, ptr %792, align 8, !tbaa !19
  %794 = getelementptr inbounds i32, ptr %793, i64 -2
  %795 = getelementptr inbounds i32, ptr %794, i64 0
  %796 = load i32, ptr %795, align 4, !tbaa !24
  br label %798

797:                                              ; preds = %782
  br label %798

798:                                              ; preds = %797, %790
  %799 = phi i32 [ %796, %790 ], [ 0, %797 ]
  %800 = load ptr, ptr %9, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.fastObjMesh, ptr %800, i32 0, i32 11
  store i32 %799, ptr %801, align 8, !tbaa !45
  %802 = load ptr, ptr %9, align 8, !tbaa !5
  %803 = getelementptr inbounds %struct.fastObjMesh, ptr %802, i32 0, i32 14
  %804 = load ptr, ptr %803, align 8, !tbaa !20
  %805 = icmp ne ptr %804, null
  br i1 %805, label %806, label %813

806:                                              ; preds = %798
  %807 = load ptr, ptr %9, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.fastObjMesh, ptr %807, i32 0, i32 14
  %809 = load ptr, ptr %808, align 8, !tbaa !20
  %810 = getelementptr inbounds i32, ptr %809, i64 -2
  %811 = getelementptr inbounds i32, ptr %810, i64 0
  %812 = load i32, ptr %811, align 4, !tbaa !24
  br label %814

813:                                              ; preds = %798
  br label %814

814:                                              ; preds = %813, %806
  %815 = phi i32 [ %812, %806 ], [ 0, %813 ]
  %816 = load ptr, ptr %9, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.fastObjMesh, ptr %816, i32 0, i32 13
  store i32 %815, ptr %817, align 8, !tbaa !46
  %818 = load ptr, ptr %9, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.fastObjMesh, ptr %818, i32 0, i32 16
  %820 = load ptr, ptr %819, align 8, !tbaa !21
  %821 = icmp ne ptr %820, null
  br i1 %821, label %822, label %829

822:                                              ; preds = %814
  %823 = load ptr, ptr %9, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.fastObjMesh, ptr %823, i32 0, i32 16
  %825 = load ptr, ptr %824, align 8, !tbaa !21
  %826 = getelementptr inbounds i32, ptr %825, i64 -2
  %827 = getelementptr inbounds i32, ptr %826, i64 0
  %828 = load i32, ptr %827, align 4, !tbaa !24
  br label %830

829:                                              ; preds = %814
  br label %830

830:                                              ; preds = %829, %822
  %831 = phi i32 [ %828, %822 ], [ 0, %829 ]
  %832 = load ptr, ptr %9, align 8, !tbaa !5
  %833 = getelementptr inbounds %struct.fastObjMesh, ptr %832, i32 0, i32 15
  store i32 %831, ptr %833, align 8, !tbaa !47
  %834 = load ptr, ptr %9, align 8, !tbaa !5
  %835 = getelementptr inbounds %struct.fastObjMesh, ptr %834, i32 0, i32 18
  %836 = load ptr, ptr %835, align 8, !tbaa !22
  %837 = icmp ne ptr %836, null
  br i1 %837, label %838, label %845

838:                                              ; preds = %830
  %839 = load ptr, ptr %9, align 8, !tbaa !5
  %840 = getelementptr inbounds %struct.fastObjMesh, ptr %839, i32 0, i32 18
  %841 = load ptr, ptr %840, align 8, !tbaa !22
  %842 = getelementptr inbounds i32, ptr %841, i64 -2
  %843 = getelementptr inbounds i32, ptr %842, i64 0
  %844 = load i32, ptr %843, align 4, !tbaa !24
  br label %846

845:                                              ; preds = %830
  br label %846

846:                                              ; preds = %845, %838
  %847 = phi i32 [ %844, %838 ], [ 0, %845 ]
  %848 = load ptr, ptr %9, align 8, !tbaa !5
  %849 = getelementptr inbounds %struct.fastObjMesh, ptr %848, i32 0, i32 17
  store i32 %847, ptr %849, align 8, !tbaa !48
  %850 = load ptr, ptr %9, align 8, !tbaa !5
  %851 = getelementptr inbounds %struct.fastObjMesh, ptr %850, i32 0, i32 20
  %852 = load ptr, ptr %851, align 8, !tbaa !23
  %853 = icmp ne ptr %852, null
  br i1 %853, label %854, label %861

854:                                              ; preds = %846
  %855 = load ptr, ptr %9, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.fastObjMesh, ptr %855, i32 0, i32 20
  %857 = load ptr, ptr %856, align 8, !tbaa !23
  %858 = getelementptr inbounds i32, ptr %857, i64 -2
  %859 = getelementptr inbounds i32, ptr %858, i64 0
  %860 = load i32, ptr %859, align 4, !tbaa !24
  br label %862

861:                                              ; preds = %846
  br label %862

862:                                              ; preds = %861, %854
  %863 = phi i32 [ %860, %854 ], [ 0, %861 ]
  %864 = load ptr, ptr %9, align 8, !tbaa !5
  %865 = getelementptr inbounds %struct.fastObjMesh, ptr %864, i32 0, i32 19
  store i32 %863, ptr %865, align 8, !tbaa !49
  %866 = load ptr, ptr %11, align 8, !tbaa !5
  call void @_ZL14memory_deallocPv(ptr noundef %866)
  %867 = getelementptr inbounds %struct.fastObjData, ptr %8, i32 0, i32 5
  %868 = load ptr, ptr %867, align 8, !tbaa !34
  call void @_ZL14memory_deallocPv(ptr noundef %868)
  %869 = load ptr, ptr %6, align 8, !tbaa !5
  %870 = getelementptr inbounds %struct.fastObjCallbacks, ptr %869, i32 0, i32 1
  %871 = load ptr, ptr %870, align 8, !tbaa !50
  %872 = load ptr, ptr %10, align 8, !tbaa !5
  %873 = load ptr, ptr %7, align 8, !tbaa !5
  call void %871(ptr noundef %872, ptr noundef %873)
  %874 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %874, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %875

875:                                              ; preds = %862, %607, %41, %36, %26
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 72, ptr %8) #5
  %876 = load ptr, ptr %4, align 8
  ret ptr %876
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef ptr @_ZL14memory_reallocPvm(ptr noundef, i64 noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef ptr @_ZL13array_reallocPvjj(ptr noundef, i32 noundef, i32 noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare hidden { ptr, ptr } @_ZL11map_defaultv() #3

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL14object_defaultv(ptr dead_on_unwind noalias writable sret(%struct.fastObjGroup) align 8) #3

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL13group_defaultv(ptr dead_on_unwind noalias writable sret(%struct.fastObjGroup) align 8) #3

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

; Function Attrs: mustprogress uwtable
declare hidden noundef ptr @_ZL13string_substrPKcmm(ptr noundef, i64 noundef, i64 noundef) #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL12parse_bufferP11fastObjDataPKcS2_PK16fastObjCallbacksPv(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL12flush_objectP11fastObjData(ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL11flush_groupP11fastObjData(ptr noundef) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"_ZTS16fastObjCallbacks", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!11 = !{!12, !6, i64 8}
!12 = !{!"_ZTS11fastObjMesh", !13, i64 0, !6, i64 8, !13, i64 16, !6, i64 24, !13, i64 32, !6, i64 40, !13, i64 48, !6, i64 56, !13, i64 64, !6, i64 72, !6, i64 80, !13, i64 88, !6, i64 96, !13, i64 104, !6, i64 112, !13, i64 120, !6, i64 128, !13, i64 136, !6, i64 144, !13, i64 152, !6, i64 160}
!13 = !{!"int", !7, i64 0}
!14 = !{!12, !6, i64 24}
!15 = !{!12, !6, i64 40}
!16 = !{!12, !6, i64 56}
!17 = !{!12, !6, i64 72}
!18 = !{!12, !6, i64 80}
!19 = !{!12, !6, i64 96}
!20 = !{!12, !6, i64 112}
!21 = !{!12, !6, i64 128}
!22 = !{!12, !6, i64 144}
!23 = !{!12, !6, i64 160}
!24 = !{!13, !13, i64 0}
!25 = !{!26, !26, i64 0}
!26 = !{!"float", !7, i64 0}
!27 = !{i64 0, i64 8, !5, i64 8, i64 8, !5}
!28 = !{!29, !6, i64 0}
!29 = !{!"_ZTS11fastObjData", !6, i64 0, !30, i64 8, !30, i64 32, !13, i64 56, !13, i64 60, !6, i64 64}
!30 = !{!"_ZTS12fastObjGroup", !6, i64 0, !13, i64 8, !13, i64 12, !13, i64 16}
!31 = !{i64 0, i64 8, !5, i64 8, i64 4, !24, i64 12, i64 4, !24, i64 16, i64 4, !24}
!32 = !{!29, !13, i64 56}
!33 = !{!29, !13, i64 60}
!34 = !{!29, !6, i64 64}
!35 = !{!10, !6, i64 16}
!36 = !{!7, !7, i64 0}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.mustprogress"}
!39 = distinct !{!39, !38}
!40 = !{!12, !13, i64 0}
!41 = !{!12, !13, i64 16}
!42 = !{!12, !13, i64 32}
!43 = !{!12, !13, i64 48}
!44 = !{!12, !13, i64 64}
!45 = !{!12, !13, i64 88}
!46 = !{!12, !13, i64 104}
!47 = !{!12, !13, i64 120}
!48 = !{!12, !13, i64 136}
!49 = !{!12, !13, i64 152}
!50 = !{!10, !6, i64 8}


; 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"

%struct.fastObjData = type { ptr, %struct.fastObjGroup, %struct.fastObjGroup, i32, i32, ptr }
%struct.fastObjGroup = type { ptr, i32, i32, i32 }
%struct.fastObjTexture = type { ptr, ptr }

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL12object_cleanP12fastObjGroup(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL11group_cleanP12fastObjGroup(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL14memory_deallocPv(ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @fast_obj_read_with_callbacks(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #2 {
  %4 = alloca %struct.fastObjData, align 8
  %5 = alloca %struct.fastObjGroup, align 8
  %6 = alloca %struct.fastObjGroup, align 8
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %4) #6
  %.not = icmp eq ptr %1, null
  br i1 %.not, label %265, label %7

7:                                                ; preds = %3
  %8 = load ptr, ptr %1, align 8, !tbaa !5
  %9 = tail call noundef ptr %8(ptr noundef %0, ptr noundef %2)
  %.not206 = icmp eq ptr %9, null
  br i1 %.not206, label %265, label %10

10:                                               ; preds = %7
  %11 = tail call noundef ptr @_ZL14memory_reallocPvm(ptr noundef null, i64 noundef 168)
  %.not207 = icmp eq ptr %11, null
  br i1 %.not207, label %265, label %12

12:                                               ; preds = %10
  %13 = getelementptr inbounds i8, ptr %11, i64 8
  store ptr null, ptr %13, align 8, !tbaa !10
  %14 = getelementptr inbounds i8, ptr %11, i64 24
  store ptr null, ptr %14, align 8, !tbaa !13
  %15 = getelementptr inbounds i8, ptr %11, i64 40
  store ptr null, ptr %15, align 8, !tbaa !14
  %16 = getelementptr inbounds i8, ptr %11, i64 56
  store ptr null, ptr %16, align 8, !tbaa !15
  %17 = getelementptr inbounds i8, ptr %11, i64 72
  %18 = getelementptr inbounds i8, ptr %11, i64 96
  store ptr null, ptr %18, align 8, !tbaa !16
  %19 = getelementptr inbounds i8, ptr %11, i64 112
  store ptr null, ptr %19, align 8, !tbaa !17
  %20 = getelementptr inbounds i8, ptr %11, i64 128
  store ptr null, ptr %20, align 8, !tbaa !18
  %21 = getelementptr inbounds i8, ptr %11, i64 144
  store ptr null, ptr %21, align 8, !tbaa !19
  %22 = getelementptr inbounds i8, ptr %11, i64 160
  store ptr null, ptr %22, align 8, !tbaa !20
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %17, i8 0, i64 16, i1 false)
  %23 = tail call noundef ptr @_ZL13array_reallocPvjj(ptr noundef null, i32 noundef 1, i32 noundef 4)
  store ptr %23, ptr %13, align 8, !tbaa !21
  %.not269 = icmp eq ptr %23, null
  br i1 %.not269, label %.thread305, label %24

24:                                               ; preds = %12
  %25 = getelementptr inbounds i8, ptr %23, i64 -8
  %26 = load i32, ptr %25, align 4, !tbaa !22
  %27 = add i32 %26, 1
  store i32 %27, ptr %25, align 4, !tbaa !22
  %28 = zext i32 %26 to i64
  %29 = getelementptr inbounds float, ptr %23, i64 %28
  store float 0.000000e+00, ptr %29, align 4, !tbaa !23
  %30 = add i32 %26, 2
  %31 = getelementptr inbounds i8, ptr %23, i64 -4
  %32 = load i32, ptr %31, align 4, !tbaa !22
  %.not210 = icmp ult i32 %30, %32
  br i1 %.not210, label %34, label %.thread305

.thread305:                                       ; preds = %12, %24
  %33 = tail call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %23, i32 noundef 1, i32 noundef 4)
  store ptr %33, ptr %13, align 8, !tbaa !21
  %.not270 = icmp eq ptr %33, null
  br i1 %.not270, label %.thread306, label %34

34:                                               ; preds = %24, %.thread305
  %.pr244 = phi ptr [ %23, %24 ], [ %33, %.thread305 ]
  %35 = getelementptr inbounds i8, ptr %.pr244, i64 -8
  %36 = load i32, ptr %35, align 4, !tbaa !22
  %37 = add i32 %36, 1
  store i32 %37, ptr %35, align 4, !tbaa !22
  %38 = zext i32 %36 to i64
  %39 = getelementptr inbounds float, ptr %.pr244, i64 %38
  store float 0.000000e+00, ptr %39, align 4, !tbaa !23
  %40 = add i32 %36, 2
  %41 = getelementptr inbounds i8, ptr %.pr244, i64 -4
  %42 = load i32, ptr %41, align 4, !tbaa !22
  %.not212 = icmp ult i32 %40, %42
  br i1 %.not212, label %.thread245, label %.thread306

.thread306:                                       ; preds = %.thread305, %34
  %43 = phi ptr [ %.pr244, %34 ], [ null, %.thread305 ]
  %44 = tail call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %43, i32 noundef 1, i32 noundef 4)
  store ptr %44, ptr %13, align 8, !tbaa !21
  %.not271 = icmp eq ptr %44, null
  br i1 %.not271, label %50, label %..thread245_crit_edge

..thread245_crit_edge:                            ; preds = %.thread306
  %.phi.trans.insert286 = getelementptr inbounds i8, ptr %44, i64 -8
  %.pre287 = load i32, ptr %.phi.trans.insert286, align 4, !tbaa !22
  %.pre303 = add i32 %.pre287, 1
  br label %.thread245

.thread245:                                       ; preds = %..thread245_crit_edge, %34
  %.pre-phi304 = phi i32 [ %.pre303, %..thread245_crit_edge ], [ %40, %34 ]
  %45 = phi i32 [ %.pre287, %..thread245_crit_edge ], [ %37, %34 ]
  %46 = phi ptr [ %44, %..thread245_crit_edge ], [ %.pr244, %34 ]
  %47 = getelementptr inbounds i8, ptr %46, i64 -8
  store i32 %.pre-phi304, ptr %47, align 4, !tbaa !22
  %48 = zext i32 %45 to i64
  %49 = getelementptr inbounds float, ptr %46, i64 %48
  store float 0.000000e+00, ptr %49, align 4, !tbaa !23
  br label %50

50:                                               ; preds = %.thread306, %.thread245
  %51 = load ptr, ptr %14, align 8, !tbaa !13
  %52 = icmp eq ptr %51, null
  br i1 %52, label %59, label %53

53:                                               ; preds = %50
  %54 = getelementptr inbounds i8, ptr %51, i64 -8
  %55 = load i32, ptr %54, align 4, !tbaa !22
  %56 = add i32 %55, 1
  %57 = getelementptr inbounds i8, ptr %51, i64 -4
  %58 = load i32, ptr %57, align 4, !tbaa !22
  %.not214 = icmp ult i32 %56, %58
  br i1 %.not214, label %61, label %59

59:                                               ; preds = %50, %53
  %60 = tail call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %51, i32 noundef 1, i32 noundef 4)
  store ptr %60, ptr %14, align 8, !tbaa !21
  %.not272 = icmp eq ptr %60, null
  br i1 %.not272, label %.thread307, label %..thread247_crit_edge

..thread247_crit_edge:                            ; preds = %59
  %.phi.trans.insert = getelementptr inbounds i8, ptr %60, i64 -8
  %.pre = load i32, ptr %.phi.trans.insert, align 4, !tbaa !22
  %.pre301 = add i32 %.pre, 1
  br label %61

61:                                               ; preds = %..thread247_crit_edge, %53
  %.pre-phi302 = phi i32 [ %.pre301, %..thread247_crit_edge ], [ %56, %53 ]
  %62 = phi i32 [ %.pre, %..thread247_crit_edge ], [ %55, %53 ]
  %.pr249 = phi ptr [ %60, %..thread247_crit_edge ], [ %51, %53 ]
  %63 = getelementptr inbounds i8, ptr %.pr249, i64 -8
  store i32 %.pre-phi302, ptr %63, align 4, !tbaa !22
  %64 = zext i32 %62 to i64
  %65 = getelementptr inbounds float, ptr %.pr249, i64 %64
  store float 0.000000e+00, ptr %65, align 4, !tbaa !23
  %66 = add i32 %.pre-phi302, 1
  %67 = getelementptr inbounds i8, ptr %.pr249, i64 -4
  %68 = load i32, ptr %67, align 4, !tbaa !22
  %.not216 = icmp ult i32 %66, %68
  br i1 %.not216, label %.thread250, label %.thread307

.thread307:                                       ; preds = %59, %61
  %69 = phi ptr [ %.pr249, %61 ], [ null, %59 ]
  %70 = tail call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %69, i32 noundef 1, i32 noundef 4)
  store ptr %70, ptr %14, align 8, !tbaa !21
  %.not273 = icmp eq ptr %70, null
  br i1 %.not273, label %76, label %..thread250_crit_edge

..thread250_crit_edge:                            ; preds = %.thread307
  %.phi.trans.insert288 = getelementptr inbounds i8, ptr %70, i64 -8
  %.pre289 = load i32, ptr %.phi.trans.insert288, align 4, !tbaa !22
  %.pre299 = add i32 %.pre289, 1
  br label %.thread250

.thread250:                                       ; preds = %..thread250_crit_edge, %61
  %.pre-phi300 = phi i32 [ %.pre299, %..thread250_crit_edge ], [ %66, %61 ]
  %71 = phi i32 [ %.pre289, %..thread250_crit_edge ], [ %.pre-phi302, %61 ]
  %72 = phi ptr [ %70, %..thread250_crit_edge ], [ %.pr249, %61 ]
  %73 = getelementptr inbounds i8, ptr %72, i64 -8
  store i32 %.pre-phi300, ptr %73, align 4, !tbaa !22
  %74 = zext i32 %71 to i64
  %75 = getelementptr inbounds float, ptr %72, i64 %74
  store float 0.000000e+00, ptr %75, align 4, !tbaa !23
  br label %76

76:                                               ; preds = %.thread307, %.thread250
  %77 = load ptr, ptr %15, align 8, !tbaa !14
  %78 = icmp eq ptr %77, null
  br i1 %78, label %85, label %79

79:                                               ; preds = %76
  %80 = getelementptr inbounds i8, ptr %77, i64 -8
  %81 = load i32, ptr %80, align 4, !tbaa !22
  %82 = add i32 %81, 1
  %83 = getelementptr inbounds i8, ptr %77, i64 -4
  %84 = load i32, ptr %83, align 4, !tbaa !22
  %.not218 = icmp ult i32 %82, %84
  br i1 %.not218, label %87, label %85

85:                                               ; preds = %76, %79
  %86 = tail call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %77, i32 noundef 1, i32 noundef 4)
  store ptr %86, ptr %15, align 8, !tbaa !21
  %.not274 = icmp eq ptr %86, null
  br i1 %.not274, label %.thread308, label %..thread252_crit_edge

..thread252_crit_edge:                            ; preds = %85
  %.phi.trans.insert284 = getelementptr inbounds i8, ptr %86, i64 -8
  %.pre285 = load i32, ptr %.phi.trans.insert284, align 4, !tbaa !22
  %.pre297 = add i32 %.pre285, 1
  br label %87

87:                                               ; preds = %..thread252_crit_edge, %79
  %.pre-phi298 = phi i32 [ %.pre297, %..thread252_crit_edge ], [ %82, %79 ]
  %88 = phi i32 [ %.pre285, %..thread252_crit_edge ], [ %81, %79 ]
  %.pr254 = phi ptr [ %86, %..thread252_crit_edge ], [ %77, %79 ]
  %89 = getelementptr inbounds i8, ptr %.pr254, i64 -8
  store i32 %.pre-phi298, ptr %89, align 4, !tbaa !22
  %90 = zext i32 %88 to i64
  %91 = getelementptr inbounds float, ptr %.pr254, i64 %90
  store float 0.000000e+00, ptr %91, align 4, !tbaa !23
  %92 = add i32 %.pre-phi298, 1
  %93 = getelementptr inbounds i8, ptr %.pr254, i64 -4
  %94 = load i32, ptr %93, align 4, !tbaa !22
  %.not220 = icmp ult i32 %92, %94
  br i1 %.not220, label %97, label %.thread308

.thread308:                                       ; preds = %85, %87
  %95 = phi ptr [ %.pr254, %87 ], [ null, %85 ]
  %96 = tail call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %95, i32 noundef 1, i32 noundef 4)
  store ptr %96, ptr %15, align 8, !tbaa !21
  %.not275 = icmp eq ptr %96, null
  br i1 %.not275, label %.thread309, label %..thread255_crit_edge

..thread255_crit_edge:                            ; preds = %.thread308
  %.phi.trans.insert290 = getelementptr inbounds i8, ptr %96, i64 -8
  %.pre291 = load i32, ptr %.phi.trans.insert290, align 4, !tbaa !22
  %.pre295 = add i32 %.pre291, 1
  br label %97

97:                                               ; preds = %..thread255_crit_edge, %87
  %.pre-phi296 = phi i32 [ %.pre295, %..thread255_crit_edge ], [ %92, %87 ]
  %98 = phi i32 [ %.pre291, %..thread255_crit_edge ], [ %.pre-phi298, %87 ]
  %.pr257 = phi ptr [ %96, %..thread255_crit_edge ], [ %.pr254, %87 ]
  %99 = getelementptr inbounds i8, ptr %.pr257, i64 -8
  store i32 %.pre-phi296, ptr %99, align 4, !tbaa !22
  %100 = zext i32 %98 to i64
  %101 = getelementptr inbounds float, ptr %.pr257, i64 %100
  store float 0.000000e+00, ptr %101, align 4, !tbaa !23
  %102 = add i32 %.pre-phi296, 1
  %103 = getelementptr inbounds i8, ptr %.pr257, i64 -4
  %104 = load i32, ptr %103, align 4, !tbaa !22
  %.not222 = icmp ult i32 %102, %104
  br i1 %.not222, label %.thread258, label %.thread309

.thread309:                                       ; preds = %.thread308, %97
  %105 = phi ptr [ %.pr257, %97 ], [ null, %.thread308 ]
  %106 = tail call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %105, i32 noundef 1, i32 noundef 4)
  store ptr %106, ptr %15, align 8, !tbaa !21
  %.not276 = icmp eq ptr %106, null
  br i1 %.not276, label %112, label %..thread258_crit_edge

..thread258_crit_edge:                            ; preds = %.thread309
  %.phi.trans.insert292 = getelementptr inbounds i8, ptr %106, i64 -8
  %.pre293 = load i32, ptr %.phi.trans.insert292, align 4, !tbaa !22
  %.pre294 = add i32 %.pre293, 1
  br label %.thread258

.thread258:                                       ; preds = %..thread258_crit_edge, %97
  %.pre-phi = phi i32 [ %.pre294, %..thread258_crit_edge ], [ %102, %97 ]
  %107 = phi i32 [ %.pre293, %..thread258_crit_edge ], [ %.pre-phi296, %97 ]
  %108 = phi ptr [ %106, %..thread258_crit_edge ], [ %.pr257, %97 ]
  %109 = getelementptr inbounds i8, ptr %108, i64 -8
  store i32 %.pre-phi, ptr %109, align 4, !tbaa !22
  %110 = zext i32 %107 to i64
  %111 = getelementptr inbounds float, ptr %108, i64 %110
  store float 1.000000e+00, ptr %111, align 4, !tbaa !23
  br label %112

112:                                              ; preds = %.thread309, %.thread258
  %113 = load ptr, ptr %20, align 8, !tbaa !18
  %114 = icmp eq ptr %113, null
  br i1 %114, label %121, label %115

115:                                              ; preds = %112
  %116 = getelementptr inbounds i8, ptr %113, i64 -8
  %117 = load i32, ptr %116, align 4, !tbaa !22
  %118 = add i32 %117, 1
  %119 = getelementptr inbounds i8, ptr %113, i64 -4
  %120 = load i32, ptr %119, align 4, !tbaa !22
  %.not224 = icmp ult i32 %118, %120
  br i1 %.not224, label %.thread260, label %121

121:                                              ; preds = %112, %115
  %122 = tail call noundef ptr @_ZL13array_reallocPvjj(ptr noundef %113, i32 noundef 1, i32 noundef 16)
  store ptr %122, ptr %20, align 8, !tbaa !21
  %.not277 = icmp eq ptr %122, null
  br i1 %.not277, label %132, label %.thread260

.thread260:                                       ; preds = %115, %121
  %123 = tail call { ptr, ptr } @_ZL11map_defaultv()
  %124 = extractvalue { ptr, ptr } %123, 0
  %125 = extractvalue { ptr, ptr } %123, 1
  %126 = load ptr, ptr %20, align 8, !tbaa !18
  %127 = getelementptr inbounds i8, ptr %126, i64 -8
  %128 = load i32, ptr %127, align 4, !tbaa !22
  %129 = add i32 %128, 1
  store i32 %129, ptr %127, align 4, !tbaa !22
  %130 = zext i32 %128 to i64
  %131 = getelementptr inbounds %struct.fastObjTexture, ptr %126, i64 %130
  store ptr %124, ptr %131, align 8, !tbaa !21
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %131, i64 8
  store ptr %125, ptr %.sroa.4.0..sroa_idx, align 8, !tbaa !21
  br label %132

132:                                              ; preds = %121, %.thread260
  store ptr %11, ptr %4, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #6
  call void @_ZL14object_defaultv(ptr dead_on_unwind nonnull writable sret(%struct.fastObjGroup) align 8 %5)
  %133 = getelementptr inbounds i8, ptr %4, i64 8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %133, ptr noundef nonnull align 8 dereferenceable(24) %5, i64 24, i1 false), !tbaa.struct !28
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #6
  call void @_ZL13group_defaultv(ptr dead_on_unwind nonnull writable sret(%struct.fastObjGroup) align 8 %6)
  %134 = getelementptr inbounds i8, ptr %4, i64 32
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %134, ptr noundef nonnull align 8 dereferenceable(24) %6, i64 24, i1 false), !tbaa.struct !28
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #6
  %135 = getelementptr inbounds i8, ptr %4, i64 56
  store i32 0, ptr %135, align 8, !tbaa !29
  %136 = getelementptr inbounds i8, ptr %4, i64 60
  store i32 1, ptr %136, align 4, !tbaa !30
  %137 = getelementptr inbounds i8, ptr %4, i64 64
  store ptr null, ptr %137, align 8, !tbaa !31
  %138 = call noundef ptr @strrchr(ptr noundef nonnull dereferenceable(1) %0, i32 noundef 47) #7
  %139 = call noundef ptr @strrchr(ptr noundef nonnull dereferenceable(1) %0, i32 noundef 92) #7
  %140 = icmp ult ptr %138, %139
  br i1 %140, label %.thread262, label %141

141:                                              ; preds = %132
  %.not228 = icmp eq ptr %138, null
  br i1 %.not228, label %147, label %.thread262

.thread262:                                       ; preds = %132, %141
  %142 = phi ptr [ %138, %141 ], [ %139, %132 ]
  %143 = ptrtoint ptr %142 to i64
  %144 = ptrtoint ptr %0 to i64
  %reass.sub = sub i64 %143, %144
  %145 = add i64 %reass.sub, 1
  %146 = call noundef ptr @_ZL13string_substrPKcmm(ptr noundef %0, i64 noundef 0, i64 noundef %145)
  store ptr %146, ptr %137, align 8, !tbaa !31
  br label %147

147:                                              ; preds = %.thread262, %141
  %148 = call noundef ptr @_ZL14memory_reallocPvm(ptr noundef null, i64 noundef 131072)
  %.not229 = icmp eq ptr %148, null
  br i1 %.not229, label %265, label %.preheader278

.preheader278:                                    ; preds = %147
  %149 = getelementptr inbounds i8, ptr %1, i64 16
  %150 = load ptr, ptr %149, align 8, !tbaa !32
  %151 = call noundef i64 %150(ptr noundef nonnull %9, ptr noundef nonnull %148, i64 noundef 65536, ptr noundef %2)
  %152 = trunc i64 %151 to i32
  %153 = icmp eq i32 %152, 0
  br i1 %153, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader278, %.thread265
  %154 = phi i1 [ %187, %.thread265 ], [ false, %.preheader278 ]
  %155 = phi i32 [ %186, %.thread265 ], [ %152, %.preheader278 ]
  %156 = phi i64 [ %185, %.thread265 ], [ %151, %.preheader278 ]
  %.0174280 = phi ptr [ %183, %.thread265 ], [ %148, %.preheader278 ]
  %157 = icmp ult i32 %155, 65536
  br i1 %157, label %158, label %168

158:                                              ; preds = %.lr.ph
  br i1 %154, label %164, label %159

159:                                              ; preds = %158
  %160 = add i64 %156, 4294967295
  %161 = and i64 %160, 4294967295
  %162 = getelementptr inbounds i8, ptr %.0174280, i64 %161
  %163 = load i8, ptr %162, align 1, !tbaa !33
  %.not230 = icmp eq i8 %163, 10
  br i1 %.not230, label %168, label %164

164:                                              ; preds = %159, %158
  %165 = add nuw nsw i64 %156, 1
  %166 = and i64 %156, 65535
  %167 = getelementptr inbounds i8, ptr %.0174280, i64 %166
  store i8 10, ptr %167, align 1, !tbaa !33
  br label %168

168:                                              ; preds = %159, %164, %.lr.ph
  %.0176 = phi i64 [ %165, %164 ], [ %156, %159 ], [ %156, %.lr.ph ]
  %169 = and i64 %.0176, 4294967295
  %170 = getelementptr inbounds i8, ptr %.0174280, i64 %169
  %171 = icmp eq ptr %170, %148
  br i1 %171, label %._crit_edge, label %.preheader

.preheader:                                       ; preds = %168, %173
  %.0175 = phi ptr [ %174, %173 ], [ %170, %168 ]
  %172 = icmp ugt ptr %.0175, %148
  br i1 %172, label %173, label %177

173:                                              ; preds = %.preheader
  %174 = getelementptr inbounds i8, ptr %.0175, i64 -1
  %175 = load i8, ptr %174, align 1, !tbaa !33
  %176 = icmp eq i8 %175, 10
  br i1 %176, label %.thread265, label %.preheader, !llvm.loop !34

177:                                              ; preds = %.preheader
  %.pr264 = load i8, ptr %.0175, align 1, !tbaa !33
  %.not231 = icmp eq i8 %.pr264, 10
  br i1 %.not231, label %.thread265, label %._crit_edge

.thread265:                                       ; preds = %173, %177
  %.1268 = phi ptr [ %.0175, %177 ], [ %174, %173 ]
  %178 = getelementptr inbounds i8, ptr %.1268, i64 1
  call void @_ZL12parse_bufferP11fastObjDataPKcS2_PK16fastObjCallbacksPv(ptr noundef nonnull %4, ptr noundef nonnull %148, ptr noundef nonnull %178, ptr noundef nonnull %1, ptr noundef %2)
  %179 = ptrtoint ptr %170 to i64
  %180 = ptrtoint ptr %178 to i64
  %181 = sub i64 %179, %180
  %182 = and i64 %181, 4294967295
  call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %148, ptr nonnull align 1 %178, i64 %182, i1 false)
  %183 = getelementptr inbounds i8, ptr %148, i64 %182
  %184 = load ptr, ptr %149, align 8, !tbaa !32
  %185 = call noundef i64 %184(ptr noundef nonnull %9, ptr noundef nonnull %183, i64 noundef 65536, ptr noundef %2)
  %186 = trunc i64 %185 to i32
  %187 = icmp eq i32 %186, 0
  %188 = icmp eq i64 %182, 0
  %or.cond242 = and i1 %188, %187
  br i1 %or.cond242, label %._crit_edge, label %.lr.ph, !llvm.loop !36

._crit_edge:                                      ; preds = %168, %177, %.thread265, %.preheader278
  call void @_ZL12flush_objectP11fastObjData(ptr noundef nonnull %4)
  call void @_ZL12object_cleanP12fastObjGroup(ptr noundef nonnull %133)
  call void @_ZL11flush_groupP11fastObjData(ptr noundef nonnull %4)
  call void @_ZL11group_cleanP12fastObjGroup(ptr noundef nonnull %134)
  %189 = load ptr, ptr %13, align 8, !tbaa !10
  %.not232 = icmp eq ptr %189, null
  br i1 %.not232, label %194, label %190

190:                                              ; preds = %._crit_edge
  %191 = getelementptr inbounds i8, ptr %189, i64 -8
  %192 = load i32, ptr %191, align 4, !tbaa !22
  %193 = udiv i32 %192, 3
  br label %194

194:                                              ; preds = %._crit_edge, %190
  %195 = phi i32 [ %193, %190 ], [ 0, %._crit_edge ]
  store i32 %195, ptr %11, align 8, !tbaa !37
  %196 = load ptr, ptr %14, align 8, !tbaa !13
  %.not233 = icmp eq ptr %196, null
  br i1 %.not233, label %201, label %197

197:                                              ; preds = %194
  %198 = getelementptr inbounds i8, ptr %196, i64 -8
  %199 = load i32, ptr %198, align 4, !tbaa !22
  %200 = lshr i32 %199, 1
  br label %201

201:                                              ; preds = %194, %197
  %202 = phi i32 [ %200, %197 ], [ 0, %194 ]
  %203 = getelementptr inbounds i8, ptr %11, i64 16
  store i32 %202, ptr %203, align 8, !tbaa !38
  %204 = load ptr, ptr %15, align 8, !tbaa !14
  %.not234 = icmp eq ptr %204, null
  br i1 %.not234, label %209, label %205

205:                                              ; preds = %201
  %206 = getelementptr inbounds i8, ptr %204, i64 -8
  %207 = load i32, ptr %206, align 4, !tbaa !22
  %208 = udiv i32 %207, 3
  br label %209

209:                                              ; preds = %201, %205
  %210 = phi i32 [ %208, %205 ], [ 0, %201 ]
  %211 = getelementptr inbounds i8, ptr %11, i64 32
  store i32 %210, ptr %211, align 8, !tbaa !39
  %212 = load ptr, ptr %16, align 8, !tbaa !15
  %.not235 = icmp eq ptr %212, null
  br i1 %.not235, label %217, label %213

213:                                              ; preds = %209
  %214 = getelementptr inbounds i8, ptr %212, i64 -8
  %215 = load i32, ptr %214, align 4, !tbaa !22
  %216 = udiv i32 %215, 3
  br label %217

217:                                              ; preds = %209, %213
  %218 = phi i32 [ %216, %213 ], [ 0, %209 ]
  %219 = getelementptr inbounds i8, ptr %11, i64 48
  store i32 %218, ptr %219, align 8, !tbaa !40
  %220 = load ptr, ptr %17, align 8, !tbaa !41
  %.not236 = icmp eq ptr %220, null
  br i1 %.not236, label %224, label %221

221:                                              ; preds = %217
  %222 = getelementptr inbounds i8, ptr %220, i64 -8
  %223 = load i32, ptr %222, align 4, !tbaa !22
  br label %224

224:                                              ; preds = %217, %221
  %225 = phi i32 [ %223, %221 ], [ 0, %217 ]
  %226 = getelementptr inbounds i8, ptr %11, i64 64
  store i32 %225, ptr %226, align 8, !tbaa !42
  %227 = load ptr, ptr %18, align 8, !tbaa !16
  %.not237 = icmp eq ptr %227, null
  br i1 %.not237, label %231, label %228

228:                                              ; preds = %224
  %229 = getelementptr inbounds i8, ptr %227, i64 -8
  %230 = load i32, ptr %229, align 4, !tbaa !22
  br label %231

231:                                              ; preds = %224, %228
  %232 = phi i32 [ %230, %228 ], [ 0, %224 ]
  %233 = getelementptr inbounds i8, ptr %11, i64 88
  store i32 %232, ptr %233, align 8, !tbaa !43
  %234 = load ptr, ptr %19, align 8, !tbaa !17
  %.not238 = icmp eq ptr %234, null
  br i1 %.not238, label %238, label %235

235:                                              ; preds = %231
  %236 = getelementptr inbounds i8, ptr %234, i64 -8
  %237 = load i32, ptr %236, align 4, !tbaa !22
  br label %238

238:                                              ; preds = %231, %235
  %239 = phi i32 [ %237, %235 ], [ 0, %231 ]
  %240 = getelementptr inbounds i8, ptr %11, i64 104
  store i32 %239, ptr %240, align 8, !tbaa !44
  %241 = load ptr, ptr %20, align 8, !tbaa !18
  %.not239 = icmp eq ptr %241, null
  br i1 %.not239, label %245, label %242

242:                                              ; preds = %238
  %243 = getelementptr inbounds i8, ptr %241, i64 -8
  %244 = load i32, ptr %243, align 4, !tbaa !22
  br label %245

245:                                              ; preds = %238, %242
  %246 = phi i32 [ %244, %242 ], [ 0, %238 ]
  %247 = getelementptr inbounds i8, ptr %11, i64 120
  store i32 %246, ptr %247, align 8, !tbaa !45
  %248 = load ptr, ptr %21, align 8, !tbaa !19
  %.not240 = icmp eq ptr %248, null
  br i1 %.not240, label %252, label %249

249:                                              ; preds = %245
  %250 = getelementptr inbounds i8, ptr %248, i64 -8
  %251 = load i32, ptr %250, align 4, !tbaa !22
  br label %252

252:                                              ; preds = %245, %249
  %253 = phi i32 [ %251, %249 ], [ 0, %245 ]
  %254 = getelementptr inbounds i8, ptr %11, i64 136
  store i32 %253, ptr %254, align 8, !tbaa !46
  %255 = load ptr, ptr %22, align 8, !tbaa !20
  %.not241 = icmp eq ptr %255, null
  br i1 %.not241, label %259, label %256

256:                                              ; preds = %252
  %257 = getelementptr inbounds i8, ptr %255, i64 -8
  %258 = load i32, ptr %257, align 4, !tbaa !22
  br label %259

259:                                              ; preds = %252, %256
  %260 = phi i32 [ %258, %256 ], [ 0, %252 ]
  %261 = getelementptr inbounds i8, ptr %11, i64 152
  store i32 %260, ptr %261, align 8, !tbaa !47
  call void @_ZL14memory_deallocPv(ptr noundef nonnull %148)
  %262 = load ptr, ptr %137, align 8, !tbaa !31
  call void @_ZL14memory_deallocPv(ptr noundef %262)
  %263 = getelementptr inbounds i8, ptr %1, i64 8
  %264 = load ptr, ptr %263, align 8, !tbaa !48
  call void %264(ptr noundef nonnull %9, ptr noundef %2)
  br label %265

265:                                              ; preds = %147, %10, %7, %3, %259
  %.0 = phi ptr [ %11, %259 ], [ null, %3 ], [ null, %7 ], [ null, %10 ], [ null, %147 ]
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %4) #6
  ret ptr %.0
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef ptr @_ZL14memory_reallocPvm(ptr noundef, i64 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef ptr @_ZL13array_reallocPvjj(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare hidden { ptr, ptr } @_ZL11map_defaultv() local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL14object_defaultv(ptr dead_on_unwind noalias writable sret(%struct.fastObjGroup) align 8) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL13group_defaultv(ptr dead_on_unwind noalias writable sret(%struct.fastObjGroup) align 8) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare hidden noundef ptr @_ZL13string_substrPKcmm(ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL12parse_bufferP11fastObjDataPKcS2_PK16fastObjCallbacksPv(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL12flush_objectP11fastObjData(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZL11flush_groupP11fastObjData(ptr noundef) local_unnamed_addr #2

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

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

!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 = !{!"_ZTS16fastObjCallbacks", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!11, !7, i64 8}
!11 = !{!"_ZTS11fastObjMesh", !12, i64 0, !7, i64 8, !12, i64 16, !7, i64 24, !12, i64 32, !7, i64 40, !12, i64 48, !7, i64 56, !12, i64 64, !7, i64 72, !7, i64 80, !12, i64 88, !7, i64 96, !12, i64 104, !7, i64 112, !12, i64 120, !7, i64 128, !12, i64 136, !7, i64 144, !12, i64 152, !7, i64 160}
!12 = !{!"int", !8, i64 0}
!13 = !{!11, !7, i64 24}
!14 = !{!11, !7, i64 40}
!15 = !{!11, !7, i64 56}
!16 = !{!11, !7, i64 96}
!17 = !{!11, !7, i64 112}
!18 = !{!11, !7, i64 128}
!19 = !{!11, !7, i64 144}
!20 = !{!11, !7, i64 160}
!21 = !{!7, !7, i64 0}
!22 = !{!12, !12, i64 0}
!23 = !{!24, !24, i64 0}
!24 = !{!"float", !8, i64 0}
!25 = !{!26, !7, i64 0}
!26 = !{!"_ZTS11fastObjData", !7, i64 0, !27, i64 8, !27, i64 32, !12, i64 56, !12, i64 60, !7, i64 64}
!27 = !{!"_ZTS12fastObjGroup", !7, i64 0, !12, i64 8, !12, i64 12, !12, i64 16}
!28 = !{i64 0, i64 8, !21, i64 8, i64 4, !22, i64 12, i64 4, !22, i64 16, i64 4, !22}
!29 = !{!26, !12, i64 56}
!30 = !{!26, !12, i64 60}
!31 = !{!26, !7, i64 64}
!32 = !{!6, !7, i64 16}
!33 = !{!8, !8, i64 0}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = distinct !{!36, !35}
!37 = !{!11, !12, i64 0}
!38 = !{!11, !12, i64 16}
!39 = !{!11, !12, i64 32}
!40 = !{!11, !12, i64 48}
!41 = !{!11, !7, i64 72}
!42 = !{!11, !12, i64 64}
!43 = !{!11, !12, i64 88}
!44 = !{!11, !12, i64 104}
!45 = !{!11, !12, i64 120}
!46 = !{!11, !12, i64 136}
!47 = !{!11, !12, i64 152}
!48 = !{!6, !7, i64 8}


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