; LLVM IR from khushmmehta/Scorch-V :: src/ScorchVkEngine/Abstractions (VulkanMemoryAllocator)

; 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.VmaStlAllocator.7 = type { ptr }
%class.VmaVector.8 = type { %struct.VmaStlAllocator.7, ptr, i64, i64 }
%class.VmaBlockMetadata_TLSF = type { %class.VmaBlockMetadata.base, i64, i64, i64, i32, i8, [58 x i32], i32, ptr, %class.VmaPoolAllocator, ptr, %class.VmaBlockBufferImageGranularity }
%class.VmaBlockMetadata.base = type <{ ptr, i64, ptr, i64, i8 }>
%class.VmaPoolAllocator = type { ptr, i32, %class.VmaVector.4 }
%class.VmaVector.4 = type { %struct.VmaStlAllocator.5, ptr, i64, i64 }
%struct.VmaStlAllocator.5 = type { ptr }
%class.VmaBlockBufferImageGranularity = type { i64, i32, ptr }
%"class.VmaBlockMetadata_TLSF::Block" = type { i64, i64, ptr, ptr, ptr, %union.anon.6 }
%union.anon.6 = type { ptr }

@.str.2 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [48 x i8], align 1
@__PRETTY_FUNCTION__._ZN21VmaBlockMetadata_TLSF23CreateAllocationRequestEmmb20VmaSuballocationTypejP20VmaAllocationRequest = external hidden unnamed_addr constant [150 x i8], align 1
@.str.100 = external hidden unnamed_addr constant [99 x i8], align 1

; 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 nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i8 @_ZL13VmaBitScanMSBm(i64 noundef) #4

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF23CreateAllocationRequestEmmb20VmaSuballocationTypejP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, i64 noundef %1, i64 noundef %2, i1 noundef zeroext %3, i32 noundef %4, i32 noundef %5, ptr noundef %6) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %8 = alloca i1, align 1
  %9 = alloca ptr, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i8, align 1
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca %struct.VmaStlAllocator.7, align 8
  %24 = alloca %class.VmaVector.8, align 8
  %25 = alloca i64, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca ptr, align 8
  store ptr %0, ptr %9, align 8, !tbaa !5
  store i64 %1, ptr %10, align 8, !tbaa !9
  store i64 %2, ptr %11, align 8, !tbaa !9
  %30 = zext i1 %3 to i8
  store i8 %30, ptr %12, align 1, !tbaa !11
  store i32 %4, ptr %13, align 4, !tbaa !13
  store i32 %5, ptr %14, align 4, !tbaa !15
  store ptr %6, ptr %15, align 8, !tbaa !5
  %31 = load ptr, ptr %9, align 8
  %32 = load i64, ptr %10, align 8, !tbaa !9
  %33 = icmp ugt i64 %32, 0
  br i1 %33, label %34, label %35

34:                                               ; preds = %7
  br label %35

35:                                               ; preds = %34, %7
  %36 = phi i1 [ false, %7 ], [ true, %34 ]
  br i1 %36, label %37, label %38

37:                                               ; preds = %35
  br label %40

38:                                               ; preds = %35
  call void @__assert_fail(ptr noundef @.str.98, ptr noundef @.str.2, i32 noundef 10342, ptr noundef @__PRETTY_FUNCTION__._ZN21VmaBlockMetadata_TLSF23CreateAllocationRequestEmmb20VmaSuballocationTypejP20VmaAllocationRequest) #5
  unreachable

39:                                               ; No predecessors!
  br label %40

40:                                               ; preds = %39, %37
  %41 = load i8, ptr %12, align 1, !tbaa !11, !range !17, !noundef !18
  %42 = trunc i8 %41 to i1
  br i1 %42, label %44, label %43

43:                                               ; preds = %40
  br label %44

44:                                               ; preds = %43, %40
  %45 = phi i1 [ false, %40 ], [ true, %43 ]
  br i1 %45, label %46, label %47

46:                                               ; preds = %44
  br label %49

47:                                               ; preds = %44
  call void @__assert_fail(ptr noundef @.str.100, ptr noundef @.str.2, i32 noundef 10343, ptr noundef @__PRETTY_FUNCTION__._ZN21VmaBlockMetadata_TLSF23CreateAllocationRequestEmmb20VmaSuballocationTypejP20VmaAllocationRequest) #5
  unreachable

48:                                               ; No predecessors!
  br label %49

49:                                               ; preds = %48, %46
  %50 = call noundef zeroext i1 @_ZNK16VmaBlockMetadata9IsVirtualEv(ptr noundef nonnull align 8 dereferenceable(33) %31)
  br i1 %50, label %54, label %51

51:                                               ; preds = %49
  %52 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 11
  %53 = load i32, ptr %13, align 4, !tbaa !13
  call void @_ZNK30VmaBlockBufferImageGranularity19RoundupAllocRequestE20VmaSuballocationTypeRmS1_(ptr noundef nonnull align 8 dereferenceable(24) %52, i32 noundef %53, ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11)
  br label %54

54:                                               ; preds = %51, %49
  %55 = call noundef i64 @_ZNK16VmaBlockMetadata14GetDebugMarginEv(ptr noundef nonnull align 8 dereferenceable(33) %31)
  %56 = load i64, ptr %10, align 8, !tbaa !9
  %57 = add i64 %56, %55
  store i64 %57, ptr %10, align 8, !tbaa !9
  %58 = load i64, ptr %10, align 8, !tbaa !9
  %59 = load ptr, ptr %31, align 8, !tbaa !19
  %60 = getelementptr inbounds ptr, ptr %59, i64 6
  %61 = load ptr, ptr %60, align 8
  %62 = call noundef i64 %61(ptr noundef nonnull align 8 dereferenceable(400) %31)
  %63 = icmp ugt i64 %58, %62
  br i1 %63, label %64, label %65

64:                                               ; preds = %54
  store i1 false, ptr %8, align 1
  br label %414

65:                                               ; preds = %54
  %66 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 2
  %67 = load i64, ptr %66, align 8, !tbaa !21
  %68 = icmp eq i64 %67, 0
  br i1 %68, label %69, label %79

69:                                               ; preds = %65
  %70 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 10
  %71 = load ptr, ptr %70, align 8, !tbaa !28
  %72 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 7
  %73 = load i32, ptr %72, align 8, !tbaa !29
  %74 = load i64, ptr %10, align 8, !tbaa !9
  %75 = load i64, ptr %11, align 8, !tbaa !9
  %76 = load i32, ptr %13, align 4, !tbaa !13
  %77 = load ptr, ptr %15, align 8, !tbaa !5
  %78 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %31, ptr noundef nonnull align 8 dereferenceable(48) %71, i32 noundef %73, i64 noundef %74, i64 noundef %75, i32 noundef %76, ptr noundef %77)
  store i1 %78, ptr %8, align 1
  br label %414

79:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %80 = load i64, ptr %10, align 8, !tbaa !9
  store i64 %80, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %81 = call noundef zeroext i1 @_ZNK16VmaBlockMetadata9IsVirtualEv(ptr noundef nonnull align 8 dereferenceable(33) %31)
  %82 = zext i1 %81 to i64
  %83 = select i1 %81, i32 32, i32 4
  %84 = sdiv i32 256, %83
  %85 = sext i32 %84 to i64
  store i64 %85, ptr %17, align 8, !tbaa !9
  %86 = load i64, ptr %10, align 8, !tbaa !9
  %87 = icmp ugt i64 %86, 256
  br i1 %87, label %88, label %97

88:                                               ; preds = %79
  %89 = load i64, ptr %10, align 8, !tbaa !9
  %90 = call noundef zeroext i8 @_ZL13VmaBitScanMSBm(i64 noundef %89)
  %91 = zext i8 %90 to i32
  %92 = sub nsw i32 %91, 5
  %93 = zext i32 %92 to i64
  %94 = shl i64 1, %93
  %95 = load i64, ptr %16, align 8, !tbaa !9
  %96 = add i64 %95, %94
  store i64 %96, ptr %16, align 8, !tbaa !9
  br label %108

97:                                               ; preds = %79
  %98 = load i64, ptr %10, align 8, !tbaa !9
  %99 = load i64, ptr %17, align 8, !tbaa !9
  %100 = sub i64 256, %99
  %101 = icmp ugt i64 %98, %100
  br i1 %101, label %102, label %103

102:                                              ; preds = %97
  store i64 257, ptr %16, align 8, !tbaa !9
  br label %107

103:                                              ; preds = %97
  %104 = load i64, ptr %17, align 8, !tbaa !9
  %105 = load i64, ptr %16, align 8, !tbaa !9
  %106 = add i64 %105, %104
  store i64 %106, ptr %16, align 8, !tbaa !9
  br label %107

107:                                              ; preds = %103, %102
  br label %108

108:                                              ; preds = %107, %88
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  %109 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 7
  %110 = load i32, ptr %109, align 8, !tbaa !29
  store i32 %110, ptr %18, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  %111 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 7
  %112 = load i32, ptr %111, align 8, !tbaa !29
  store i32 %112, ptr %19, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  store ptr null, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  store ptr null, ptr %21, align 8, !tbaa !5
  %113 = load i32, ptr %14, align 4, !tbaa !15
  %114 = and i32 %113, 131072
  %115 = icmp ne i32 %114, 0
  br i1 %115, label %116, label %178

116:                                              ; preds = %108
  %117 = load i64, ptr %16, align 8, !tbaa !9
  %118 = call noundef ptr @_ZNK21VmaBlockMetadata_TLSF13FindFreeBlockEmRj(ptr noundef nonnull align 8 dereferenceable(400) %31, i64 noundef %117, ptr noundef nonnull align 4 dereferenceable(4) %18)
  store ptr %118, ptr %20, align 8, !tbaa !5
  %119 = load ptr, ptr %20, align 8, !tbaa !5
  %120 = icmp ne ptr %119, null
  br i1 %120, label %121, label %130

121:                                              ; preds = %116
  %122 = load ptr, ptr %20, align 8, !tbaa !5
  %123 = load i32, ptr %18, align 4, !tbaa !15
  %124 = load i64, ptr %10, align 8, !tbaa !9
  %125 = load i64, ptr %11, align 8, !tbaa !9
  %126 = load i32, ptr %13, align 4, !tbaa !13
  %127 = load ptr, ptr %15, align 8, !tbaa !5
  %128 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %31, ptr noundef nonnull align 8 dereferenceable(48) %122, i32 noundef %123, i64 noundef %124, i64 noundef %125, i32 noundef %126, ptr noundef %127)
  br i1 %128, label %129, label %130

129:                                              ; preds = %121
  store i1 true, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %413

130:                                              ; preds = %121, %116
  %131 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 10
  %132 = load ptr, ptr %131, align 8, !tbaa !28
  %133 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 7
  %134 = load i32, ptr %133, align 8, !tbaa !29
  %135 = load i64, ptr %10, align 8, !tbaa !9
  %136 = load i64, ptr %11, align 8, !tbaa !9
  %137 = load i32, ptr %13, align 4, !tbaa !13
  %138 = load ptr, ptr %15, align 8, !tbaa !5
  %139 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %31, ptr noundef nonnull align 8 dereferenceable(48) %132, i32 noundef %134, i64 noundef %135, i64 noundef %136, i32 noundef %137, ptr noundef %138)
  br i1 %139, label %140, label %141

140:                                              ; preds = %130
  store i1 true, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %413

141:                                              ; preds = %130
  br label %142

142:                                              ; preds = %154, %141
  %143 = load ptr, ptr %20, align 8, !tbaa !5
  %144 = icmp ne ptr %143, null
  br i1 %144, label %145, label %158

145:                                              ; preds = %142
  %146 = load ptr, ptr %20, align 8, !tbaa !5
  %147 = load i32, ptr %18, align 4, !tbaa !15
  %148 = load i64, ptr %10, align 8, !tbaa !9
  %149 = load i64, ptr %11, align 8, !tbaa !9
  %150 = load i32, ptr %13, align 4, !tbaa !13
  %151 = load ptr, ptr %15, align 8, !tbaa !5
  %152 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %31, ptr noundef nonnull align 8 dereferenceable(48) %146, i32 noundef %147, i64 noundef %148, i64 noundef %149, i32 noundef %150, ptr noundef %151)
  br i1 %152, label %153, label %154

153:                                              ; preds = %145
  store i1 true, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %413

154:                                              ; preds = %145
  %155 = load ptr, ptr %20, align 8, !tbaa !5
  %156 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN21VmaBlockMetadata_TLSF5Block8NextFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %155)
  %157 = load ptr, ptr %156, align 8, !tbaa !5
  store ptr %157, ptr %20, align 8, !tbaa !5
  br label %142, !llvm.loop !30

158:                                              ; preds = %142
  %159 = load i64, ptr %10, align 8, !tbaa !9
  %160 = call noundef ptr @_ZNK21VmaBlockMetadata_TLSF13FindFreeBlockEmRj(ptr noundef nonnull align 8 dereferenceable(400) %31, i64 noundef %159, ptr noundef nonnull align 4 dereferenceable(4) %19)
  store ptr %160, ptr %21, align 8, !tbaa !5
  br label %161

161:                                              ; preds = %173, %158
  %162 = load ptr, ptr %21, align 8, !tbaa !5
  %163 = icmp ne ptr %162, null
  br i1 %163, label %164, label %177

164:                                              ; preds = %161
  %165 = load ptr, ptr %21, align 8, !tbaa !5
  %166 = load i32, ptr %19, align 4, !tbaa !15
  %167 = load i64, ptr %10, align 8, !tbaa !9
  %168 = load i64, ptr %11, align 8, !tbaa !9
  %169 = load i32, ptr %13, align 4, !tbaa !13
  %170 = load ptr, ptr %15, align 8, !tbaa !5
  %171 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %31, ptr noundef nonnull align 8 dereferenceable(48) %165, i32 noundef %166, i64 noundef %167, i64 noundef %168, i32 noundef %169, ptr noundef %170)
  br i1 %171, label %172, label %173

172:                                              ; preds = %164
  store i1 true, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %413

173:                                              ; preds = %164
  %174 = load ptr, ptr %21, align 8, !tbaa !5
  %175 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN21VmaBlockMetadata_TLSF5Block8NextFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %174)
  %176 = load ptr, ptr %175, align 8, !tbaa !5
  store ptr %176, ptr %21, align 8, !tbaa !5
  br label %161, !llvm.loop !32

177:                                              ; preds = %161
  br label %381

178:                                              ; preds = %108
  %179 = load i32, ptr %14, align 4, !tbaa !15
  %180 = and i32 %179, 65536
  %181 = icmp ne i32 %180, 0
  br i1 %181, label %182, label %232

182:                                              ; preds = %178
  %183 = load i64, ptr %10, align 8, !tbaa !9
  %184 = call noundef ptr @_ZNK21VmaBlockMetadata_TLSF13FindFreeBlockEmRj(ptr noundef nonnull align 8 dereferenceable(400) %31, i64 noundef %183, ptr noundef nonnull align 4 dereferenceable(4) %19)
  store ptr %184, ptr %21, align 8, !tbaa !5
  br label %185

185:                                              ; preds = %197, %182
  %186 = load ptr, ptr %21, align 8, !tbaa !5
  %187 = icmp ne ptr %186, null
  br i1 %187, label %188, label %201

188:                                              ; preds = %185
  %189 = load ptr, ptr %21, align 8, !tbaa !5
  %190 = load i32, ptr %19, align 4, !tbaa !15
  %191 = load i64, ptr %10, align 8, !tbaa !9
  %192 = load i64, ptr %11, align 8, !tbaa !9
  %193 = load i32, ptr %13, align 4, !tbaa !13
  %194 = load ptr, ptr %15, align 8, !tbaa !5
  %195 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %31, ptr noundef nonnull align 8 dereferenceable(48) %189, i32 noundef %190, i64 noundef %191, i64 noundef %192, i32 noundef %193, ptr noundef %194)
  br i1 %195, label %196, label %197

196:                                              ; preds = %188
  store i1 true, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %413

197:                                              ; preds = %188
  %198 = load ptr, ptr %21, align 8, !tbaa !5
  %199 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN21VmaBlockMetadata_TLSF5Block8NextFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %198)
  %200 = load ptr, ptr %199, align 8, !tbaa !5
  store ptr %200, ptr %21, align 8, !tbaa !5
  br label %185, !llvm.loop !33

201:                                              ; preds = %185
  %202 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 10
  %203 = load ptr, ptr %202, align 8, !tbaa !28
  %204 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 7
  %205 = load i32, ptr %204, align 8, !tbaa !29
  %206 = load i64, ptr %10, align 8, !tbaa !9
  %207 = load i64, ptr %11, align 8, !tbaa !9
  %208 = load i32, ptr %13, align 4, !tbaa !13
  %209 = load ptr, ptr %15, align 8, !tbaa !5
  %210 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %31, ptr noundef nonnull align 8 dereferenceable(48) %203, i32 noundef %205, i64 noundef %206, i64 noundef %207, i32 noundef %208, ptr noundef %209)
  br i1 %210, label %211, label %212

211:                                              ; preds = %201
  store i1 true, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %413

212:                                              ; preds = %201
  %213 = load i64, ptr %16, align 8, !tbaa !9
  %214 = call noundef ptr @_ZNK21VmaBlockMetadata_TLSF13FindFreeBlockEmRj(ptr noundef nonnull align 8 dereferenceable(400) %31, i64 noundef %213, ptr noundef nonnull align 4 dereferenceable(4) %18)
  store ptr %214, ptr %20, align 8, !tbaa !5
  br label %215

215:                                              ; preds = %227, %212
  %216 = load ptr, ptr %20, align 8, !tbaa !5
  %217 = icmp ne ptr %216, null
  br i1 %217, label %218, label %231

218:                                              ; preds = %215
  %219 = load ptr, ptr %20, align 8, !tbaa !5
  %220 = load i32, ptr %18, align 4, !tbaa !15
  %221 = load i64, ptr %10, align 8, !tbaa !9
  %222 = load i64, ptr %11, align 8, !tbaa !9
  %223 = load i32, ptr %13, align 4, !tbaa !13
  %224 = load ptr, ptr %15, align 8, !tbaa !5
  %225 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %31, ptr noundef nonnull align 8 dereferenceable(48) %219, i32 noundef %220, i64 noundef %221, i64 noundef %222, i32 noundef %223, ptr noundef %224)
  br i1 %225, label %226, label %227

226:                                              ; preds = %218
  store i1 true, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %413

227:                                              ; preds = %218
  %228 = load ptr, ptr %20, align 8, !tbaa !5
  %229 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN21VmaBlockMetadata_TLSF5Block8NextFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %228)
  %230 = load ptr, ptr %229, align 8, !tbaa !5
  store ptr %230, ptr %20, align 8, !tbaa !5
  br label %215, !llvm.loop !34

231:                                              ; preds = %215
  br label %380

232:                                              ; preds = %178
  %233 = load i32, ptr %14, align 4, !tbaa !15
  %234 = and i32 %233, 262144
  %235 = icmp ne i32 %234, 0
  br i1 %235, label %236, label %329

236:                                              ; preds = %232
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %237 = call noundef ptr @_ZNK16VmaBlockMetadata22GetAllocationCallbacksEv(ptr noundef nonnull align 8 dereferenceable(33) %31)
  call void @_ZN15VmaStlAllocatorIPN21VmaBlockMetadata_TLSF5BlockEEC2EPK21VkAllocationCallbacks(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef %237)
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #6
  %238 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 2
  %239 = load i64, ptr %238, align 8, !tbaa !21
  call void @_ZN9VmaVectorIPN21VmaBlockMetadata_TLSF5BlockE15VmaStlAllocatorIS2_EEC2EmRKS4_(ptr noundef nonnull align 8 dereferenceable(32) %24, i64 noundef %239, ptr noundef nonnull align 8 dereferenceable(8) %23)
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  %240 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 2
  %241 = load i64, ptr %240, align 8, !tbaa !21
  store i64 %241, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %242 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 10
  %243 = load ptr, ptr %242, align 8, !tbaa !28
  %244 = getelementptr inbounds %"class.VmaBlockMetadata_TLSF::Block", ptr %243, i32 0, i32 2
  %245 = load ptr, ptr %244, align 8, !tbaa !35
  store ptr %245, ptr %26, align 8, !tbaa !5
  br label %246

246:                                              ; preds = %271, %236
  %247 = load ptr, ptr %26, align 8, !tbaa !5
  %248 = icmp ne ptr %247, null
  br i1 %248, label %250, label %249

249:                                              ; preds = %246
  store i32 10, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  br label %275

250:                                              ; preds = %246
  %251 = load ptr, ptr %26, align 8, !tbaa !5
  %252 = invoke noundef zeroext i1 @_ZNK21VmaBlockMetadata_TLSF5Block6IsFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %251)
          to label %253 unwind label %266

253:                                              ; preds = %250
  br i1 %252, label %254, label %270

254:                                              ; preds = %253
  %255 = load ptr, ptr %26, align 8, !tbaa !5
  %256 = getelementptr inbounds %"class.VmaBlockMetadata_TLSF::Block", ptr %255, i32 0, i32 1
  %257 = load i64, ptr %256, align 8, !tbaa !37
  %258 = load i64, ptr %10, align 8, !tbaa !9
  %259 = icmp uge i64 %257, %258
  br i1 %259, label %260, label %270

260:                                              ; preds = %254
  %261 = load ptr, ptr %26, align 8, !tbaa !5
  %262 = load i64, ptr %25, align 8, !tbaa !9
  %263 = add i64 %262, -1
  store i64 %263, ptr %25, align 8, !tbaa !9
  %264 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN9VmaVectorIPN21VmaBlockMetadata_TLSF5BlockE15VmaStlAllocatorIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(32) %24, i64 noundef %263)
          to label %265 unwind label %266

265:                                              ; preds = %260
  store ptr %261, ptr %264, align 8, !tbaa !5
  br label %270

266:                                              ; preds = %260, %250
  %267 = landingpad { ptr, i32 }
          cleanup
  %268 = extractvalue { ptr, i32 } %267, 0
  store ptr %268, ptr %27, align 8
  %269 = extractvalue { ptr, i32 } %267, 1
  store i32 %269, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  br label %328

270:                                              ; preds = %265, %254, %253
  br label %271

271:                                              ; preds = %270
  %272 = load ptr, ptr %26, align 8, !tbaa !5
  %273 = getelementptr inbounds %"class.VmaBlockMetadata_TLSF::Block", ptr %272, i32 0, i32 2
  %274 = load ptr, ptr %273, align 8, !tbaa !35
  store ptr %274, ptr %26, align 8, !tbaa !5
  br label %246, !llvm.loop !38

275:                                              ; preds = %249
  br label %276

276:                                              ; preds = %307, %275
  %277 = load i64, ptr %25, align 8, !tbaa !9
  %278 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 2
  %279 = load i64, ptr %278, align 8, !tbaa !21
  %280 = icmp ult i64 %277, %279
  br i1 %280, label %281, label %310

281:                                              ; preds = %276
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %282 = load i64, ptr %25, align 8, !tbaa !9
  %283 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN9VmaVectorIPN21VmaBlockMetadata_TLSF5BlockE15VmaStlAllocatorIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(32) %24, i64 noundef %282)
          to label %284 unwind label %299

284:                                              ; preds = %281
  %285 = load ptr, ptr %283, align 8, !tbaa !5
  store ptr %285, ptr %29, align 8, !tbaa !5
  %286 = load ptr, ptr %29, align 8, !tbaa !5
  %287 = load ptr, ptr %29, align 8, !tbaa !5
  %288 = getelementptr inbounds %"class.VmaBlockMetadata_TLSF::Block", ptr %287, i32 0, i32 1
  %289 = load i64, ptr %288, align 8, !tbaa !37
  %290 = invoke noundef i32 @_ZNK21VmaBlockMetadata_TLSF12GetListIndexEm(ptr noundef nonnull align 8 dereferenceable(400) %31, i64 noundef %289)
          to label %291 unwind label %299

291:                                              ; preds = %284
  %292 = load i64, ptr %10, align 8, !tbaa !9
  %293 = load i64, ptr %11, align 8, !tbaa !9
  %294 = load i32, ptr %13, align 4, !tbaa !13
  %295 = load ptr, ptr %15, align 8, !tbaa !5
  %296 = invoke noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %31, ptr noundef nonnull align 8 dereferenceable(48) %286, i32 noundef %290, i64 noundef %292, i64 noundef %293, i32 noundef %294, ptr noundef %295)
          to label %297 unwind label %299

297:                                              ; preds = %291
  br i1 %296, label %298, label %303

298:                                              ; preds = %297
  store i1 true, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %304

299:                                              ; preds = %291, %284, %281
  %300 = landingpad { ptr, i32 }
          cleanup
  %301 = extractvalue { ptr, i32 } %300, 0
  store ptr %301, ptr %27, align 8
  %302 = extractvalue { ptr, i32 } %300, 1
  store i32 %302, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  br label %328

303:                                              ; preds = %297
  store i32 0, ptr %22, align 4
  br label %304

304:                                              ; preds = %303, %298
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  %305 = load i32, ptr %22, align 4
  switch i32 %305, label %327 [
    i32 0, label %306
  ]

306:                                              ; preds = %304
  br label %307

307:                                              ; preds = %306
  %308 = load i64, ptr %25, align 8, !tbaa !9
  %309 = add i64 %308, 1
  store i64 %309, ptr %25, align 8, !tbaa !9
  br label %276, !llvm.loop !39

310:                                              ; preds = %276
  %311 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 10
  %312 = load ptr, ptr %311, align 8, !tbaa !28
  %313 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 7
  %314 = load i32, ptr %313, align 8, !tbaa !29
  %315 = load i64, ptr %10, align 8, !tbaa !9
  %316 = load i64, ptr %11, align 8, !tbaa !9
  %317 = load i32, ptr %13, align 4, !tbaa !13
  %318 = load ptr, ptr %15, align 8, !tbaa !5
  %319 = invoke noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %31, ptr noundef nonnull align 8 dereferenceable(48) %312, i32 noundef %314, i64 noundef %315, i64 noundef %316, i32 noundef %317, ptr noundef %318)
          to label %320 unwind label %322

320:                                              ; preds = %310
  br i1 %319, label %321, label %326

321:                                              ; preds = %320
  store i1 true, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %327

322:                                              ; preds = %310
  %323 = landingpad { ptr, i32 }
          cleanup
  %324 = extractvalue { ptr, i32 } %323, 0
  store ptr %324, ptr %27, align 8
  %325 = extractvalue { ptr, i32 } %323, 1
  store i32 %325, ptr %28, align 4
  br label %328

326:                                              ; preds = %320
  store i1 false, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %327

327:                                              ; preds = %326, %321, %304
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  call void @_ZN9VmaVectorIPN21VmaBlockMetadata_TLSF5BlockE15VmaStlAllocatorIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  br label %413

328:                                              ; preds = %322, %299, %266
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  call void @_ZN9VmaVectorIPN21VmaBlockMetadata_TLSF5BlockE15VmaStlAllocatorIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  br label %416

329:                                              ; preds = %232
  %330 = load i64, ptr %16, align 8, !tbaa !9
  %331 = call noundef ptr @_ZNK21VmaBlockMetadata_TLSF13FindFreeBlockEmRj(ptr noundef nonnull align 8 dereferenceable(400) %31, i64 noundef %330, ptr noundef nonnull align 4 dereferenceable(4) %18)
  store ptr %331, ptr %20, align 8, !tbaa !5
  br label %332

332:                                              ; preds = %344, %329
  %333 = load ptr, ptr %20, align 8, !tbaa !5
  %334 = icmp ne ptr %333, null
  br i1 %334, label %335, label %348

335:                                              ; preds = %332
  %336 = load ptr, ptr %20, align 8, !tbaa !5
  %337 = load i32, ptr %18, align 4, !tbaa !15
  %338 = load i64, ptr %10, align 8, !tbaa !9
  %339 = load i64, ptr %11, align 8, !tbaa !9
  %340 = load i32, ptr %13, align 4, !tbaa !13
  %341 = load ptr, ptr %15, align 8, !tbaa !5
  %342 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %31, ptr noundef nonnull align 8 dereferenceable(48) %336, i32 noundef %337, i64 noundef %338, i64 noundef %339, i32 noundef %340, ptr noundef %341)
  br i1 %342, label %343, label %344

343:                                              ; preds = %335
  store i1 true, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %413

344:                                              ; preds = %335
  %345 = load ptr, ptr %20, align 8, !tbaa !5
  %346 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN21VmaBlockMetadata_TLSF5Block8NextFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %345)
  %347 = load ptr, ptr %346, align 8, !tbaa !5
  store ptr %347, ptr %20, align 8, !tbaa !5
  br label %332, !llvm.loop !40

348:                                              ; preds = %332
  %349 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 10
  %350 = load ptr, ptr %349, align 8, !tbaa !28
  %351 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 7
  %352 = load i32, ptr %351, align 8, !tbaa !29
  %353 = load i64, ptr %10, align 8, !tbaa !9
  %354 = load i64, ptr %11, align 8, !tbaa !9
  %355 = load i32, ptr %13, align 4, !tbaa !13
  %356 = load ptr, ptr %15, align 8, !tbaa !5
  %357 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %31, ptr noundef nonnull align 8 dereferenceable(48) %350, i32 noundef %352, i64 noundef %353, i64 noundef %354, i32 noundef %355, ptr noundef %356)
  br i1 %357, label %358, label %359

358:                                              ; preds = %348
  store i1 true, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %413

359:                                              ; preds = %348
  %360 = load i64, ptr %10, align 8, !tbaa !9
  %361 = call noundef ptr @_ZNK21VmaBlockMetadata_TLSF13FindFreeBlockEmRj(ptr noundef nonnull align 8 dereferenceable(400) %31, i64 noundef %360, ptr noundef nonnull align 4 dereferenceable(4) %19)
  store ptr %361, ptr %21, align 8, !tbaa !5
  br label %362

362:                                              ; preds = %374, %359
  %363 = load ptr, ptr %21, align 8, !tbaa !5
  %364 = icmp ne ptr %363, null
  br i1 %364, label %365, label %378

365:                                              ; preds = %362
  %366 = load ptr, ptr %21, align 8, !tbaa !5
  %367 = load i32, ptr %19, align 4, !tbaa !15
  %368 = load i64, ptr %10, align 8, !tbaa !9
  %369 = load i64, ptr %11, align 8, !tbaa !9
  %370 = load i32, ptr %13, align 4, !tbaa !13
  %371 = load ptr, ptr %15, align 8, !tbaa !5
  %372 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %31, ptr noundef nonnull align 8 dereferenceable(48) %366, i32 noundef %367, i64 noundef %368, i64 noundef %369, i32 noundef %370, ptr noundef %371)
  br i1 %372, label %373, label %374

373:                                              ; preds = %365
  store i1 true, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %413

374:                                              ; preds = %365
  %375 = load ptr, ptr %21, align 8, !tbaa !5
  %376 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN21VmaBlockMetadata_TLSF5Block8NextFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %375)
  %377 = load ptr, ptr %376, align 8, !tbaa !5
  store ptr %377, ptr %21, align 8, !tbaa !5
  br label %362, !llvm.loop !41

378:                                              ; preds = %362
  br label %379

379:                                              ; preds = %378
  br label %380

380:                                              ; preds = %379, %231
  br label %381

381:                                              ; preds = %380, %177
  br label %382

382:                                              ; preds = %411, %381
  %383 = load i32, ptr %18, align 4, !tbaa !15
  %384 = add i32 %383, 1
  store i32 %384, ptr %18, align 4, !tbaa !15
  %385 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 7
  %386 = load i32, ptr %385, align 8, !tbaa !29
  %387 = icmp ult i32 %384, %386
  br i1 %387, label %388, label %412

388:                                              ; preds = %382
  %389 = getelementptr inbounds %class.VmaBlockMetadata_TLSF, ptr %31, i32 0, i32 8
  %390 = load ptr, ptr %389, align 8, !tbaa !42
  %391 = load i32, ptr %18, align 4, !tbaa !15
  %392 = zext i32 %391 to i64
  %393 = getelementptr inbounds ptr, ptr %390, i64 %392
  %394 = load ptr, ptr %393, align 8, !tbaa !5
  store ptr %394, ptr %20, align 8, !tbaa !5
  br label %395

395:                                              ; preds = %407, %388
  %396 = load ptr, ptr %20, align 8, !tbaa !5
  %397 = icmp ne ptr %396, null
  br i1 %397, label %398, label %411

398:                                              ; preds = %395
  %399 = load ptr, ptr %20, align 8, !tbaa !5
  %400 = load i32, ptr %18, align 4, !tbaa !15
  %401 = load i64, ptr %10, align 8, !tbaa !9
  %402 = load i64, ptr %11, align 8, !tbaa !9
  %403 = load i32, ptr %13, align 4, !tbaa !13
  %404 = load ptr, ptr %15, align 8, !tbaa !5
  %405 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %31, ptr noundef nonnull align 8 dereferenceable(48) %399, i32 noundef %400, i64 noundef %401, i64 noundef %402, i32 noundef %403, ptr noundef %404)
  br i1 %405, label %406, label %407

406:                                              ; preds = %398
  store i1 true, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %413

407:                                              ; preds = %398
  %408 = load ptr, ptr %20, align 8, !tbaa !5
  %409 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN21VmaBlockMetadata_TLSF5Block8NextFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %408)
  %410 = load ptr, ptr %409, align 8, !tbaa !5
  store ptr %410, ptr %20, align 8, !tbaa !5
  br label %395, !llvm.loop !43

411:                                              ; preds = %395
  br label %382, !llvm.loop !44

412:                                              ; preds = %382
  store i1 false, ptr %8, align 1
  store i32 1, ptr %22, align 4
  br label %413

413:                                              ; preds = %412, %406, %373, %358, %343, %327, %226, %211, %196, %172, %153, %140, %129
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  br label %414

414:                                              ; preds = %413, %69, %64
  %415 = load i1, ptr %8, align 1
  ret i1 %415

416:                                              ; preds = %328
  %417 = load ptr, ptr %27, align 8
  %418 = load i32, ptr %28, align 4
  %419 = insertvalue { ptr, i32 } poison, ptr %417, 0
  %420 = insertvalue { ptr, i32 } %419, i32 %418, 1
  resume { ptr, i32 } %420
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400), ptr noundef nonnull align 8 dereferenceable(48), i32 noundef, i64 noundef, i64 noundef, i32 noundef, ptr noundef) #3 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"_ZTS20VmaSuballocationType", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = !{!20, !20, i64 0}
!20 = !{!"vtable pointer", !8, i64 0}
!21 = !{!22, !10, i64 48}
!22 = !{!"_ZTS21VmaBlockMetadata_TLSF", !23, i64 0, !10, i64 40, !10, i64 48, !10, i64 56, !16, i64 64, !7, i64 68, !7, i64 72, !16, i64 304, !6, i64 312, !24, i64 320, !6, i64 368, !27, i64 376}
!23 = !{!"_ZTS16VmaBlockMetadata", !10, i64 8, !6, i64 16, !10, i64 24, !12, i64 32}
!24 = !{!"_ZTS16VmaPoolAllocatorIN21VmaBlockMetadata_TLSF5BlockEE", !6, i64 0, !16, i64 8, !25, i64 16}
!25 = !{!"_ZTS9VmaVectorIN16VmaPoolAllocatorIN21VmaBlockMetadata_TLSF5BlockEE9ItemBlockE15VmaStlAllocatorIS4_EE", !26, i64 0, !6, i64 8, !10, i64 16, !10, i64 24}
!26 = !{!"_ZTS15VmaStlAllocatorIN16VmaPoolAllocatorIN21VmaBlockMetadata_TLSF5BlockEE9ItemBlockEE", !6, i64 0}
!27 = !{!"_ZTS30VmaBlockBufferImageGranularity", !10, i64 0, !16, i64 8, !6, i64 16}
!28 = !{!22, !6, i64 368}
!29 = !{!22, !16, i64 304}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = distinct !{!33, !31}
!34 = distinct !{!34, !31}
!35 = !{!36, !6, i64 16}
!36 = !{!"_ZTSN21VmaBlockMetadata_TLSF5BlockE", !10, i64 0, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !7, i64 40}
!37 = !{!36, !10, i64 8}
!38 = distinct !{!38, !31}
!39 = distinct !{!39, !31}
!40 = distinct !{!40, !31}
!41 = distinct !{!41, !31}
!42 = !{!22, !6, i64 312}
!43 = distinct !{!43, !31}
!44 = distinct !{!44, !31}


; 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.VmaStlAllocator.7 = type { ptr }
%class.VmaVector.8 = type { %struct.VmaStlAllocator.7, ptr, i64, i64 }

@.str.2 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [48 x i8], align 1
@__PRETTY_FUNCTION__._ZN21VmaBlockMetadata_TLSF23CreateAllocationRequestEmmb20VmaSuballocationTypejP20VmaAllocationRequest = external hidden unnamed_addr constant [150 x i8], align 1
@.str.100 = external hidden unnamed_addr constant [99 x i8], align 1

; 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 nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i8 @_ZL13VmaBitScanMSBm(i64 noundef) local_unnamed_addr #4

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF23CreateAllocationRequestEmmb20VmaSuballocationTypejP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, i64 noundef %1, i64 noundef %2, i1 noundef zeroext %3, i32 noundef %4, i32 noundef %5, ptr noundef %6) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %struct.VmaStlAllocator.7, align 8
  %13 = alloca %class.VmaVector.8, align 8
  store i64 %1, ptr %8, align 8, !tbaa !5
  store i64 %2, ptr %9, align 8, !tbaa !5
  %.not = icmp eq i64 %1, 0
  br i1 %.not, label %14, label %15

14:                                               ; preds = %7
  tail call void @__assert_fail(ptr noundef nonnull @.str.98, ptr noundef nonnull @.str.2, i32 noundef 10342, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN21VmaBlockMetadata_TLSF23CreateAllocationRequestEmmb20VmaSuballocationTypejP20VmaAllocationRequest) #5
  unreachable

15:                                               ; preds = %7
  br i1 %3, label %16, label %17

16:                                               ; preds = %15
  tail call void @__assert_fail(ptr noundef nonnull @.str.100, ptr noundef nonnull @.str.2, i32 noundef 10343, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN21VmaBlockMetadata_TLSF23CreateAllocationRequestEmmb20VmaSuballocationTypejP20VmaAllocationRequest) #5
  unreachable

17:                                               ; preds = %15
  %18 = tail call noundef zeroext i1 @_ZNK16VmaBlockMetadata9IsVirtualEv(ptr noundef nonnull align 8 dereferenceable(33) %0)
  br i1 %18, label %21, label %19

19:                                               ; preds = %17
  %20 = getelementptr inbounds i8, ptr %0, i64 376
  call void @_ZNK30VmaBlockBufferImageGranularity19RoundupAllocRequestE20VmaSuballocationTypeRmS1_(ptr noundef nonnull align 8 dereferenceable(24) %20, i32 noundef %4, ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9)
  br label %21

21:                                               ; preds = %19, %17
  %22 = call noundef i64 @_ZNK16VmaBlockMetadata14GetDebugMarginEv(ptr noundef nonnull align 8 dereferenceable(33) %0)
  %23 = load i64, ptr %8, align 8, !tbaa !5
  %24 = add i64 %23, %22
  store i64 %24, ptr %8, align 8, !tbaa !5
  %25 = load ptr, ptr %0, align 8, !tbaa !9
  %26 = getelementptr inbounds i8, ptr %25, i64 48
  %27 = load ptr, ptr %26, align 8
  %28 = call noundef i64 %27(ptr noundef nonnull align 8 dereferenceable(400) %0)
  %29 = icmp ugt i64 %24, %28
  br i1 %29, label %208, label %30

30:                                               ; preds = %21
  %31 = getelementptr inbounds i8, ptr %0, i64 48
  %32 = load i64, ptr %31, align 8, !tbaa !11
  %33 = icmp eq i64 %32, 0
  br i1 %33, label %34, label %42

34:                                               ; preds = %30
  %35 = getelementptr inbounds i8, ptr %0, i64 368
  %36 = load ptr, ptr %35, align 8, !tbaa !21
  %37 = getelementptr inbounds i8, ptr %0, i64 304
  %38 = load i32, ptr %37, align 8, !tbaa !22
  %39 = load i64, ptr %8, align 8, !tbaa !5
  %40 = load i64, ptr %9, align 8, !tbaa !5
  %41 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, ptr noundef nonnull align 8 dereferenceable(48) %36, i32 noundef %38, i64 noundef %39, i64 noundef %40, i32 noundef %4, ptr noundef %6)
  br label %208

42:                                               ; preds = %30
  %43 = load i64, ptr %8, align 8, !tbaa !5
  %44 = call noundef zeroext i1 @_ZNK16VmaBlockMetadata9IsVirtualEv(ptr noundef nonnull align 8 dereferenceable(33) %0)
  %45 = load i64, ptr %8, align 8, !tbaa !5
  %46 = icmp ugt i64 %45, 256
  br i1 %46, label %47, label %54

47:                                               ; preds = %42
  %48 = call noundef zeroext i8 @_ZL13VmaBitScanMSBm(i64 noundef %45)
  %49 = zext i8 %48 to i64
  %50 = add nuw nsw i64 %49, 4294967291
  %51 = and i64 %50, 4294967295
  %52 = shl nuw i64 1, %51
  %53 = add i64 %52, %43
  br label %59

54:                                               ; preds = %42
  %55 = select i1 %44, i64 8, i64 64
  %56 = sub nuw nsw i64 256, %55
  %57 = icmp ugt i64 %45, %56
  %58 = add i64 %55, %43
  %spec.select = select i1 %57, i64 257, i64 %58
  br label %59

59:                                               ; preds = %54, %47
  %.093 = phi i64 [ %53, %47 ], [ %spec.select, %54 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #6
  %60 = getelementptr inbounds i8, ptr %0, i64 304
  %61 = load i32, ptr %60, align 8, !tbaa !22
  store i32 %61, ptr %10, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #6
  store i32 %61, ptr %11, align 4, !tbaa !23
  %62 = and i32 %5, 131072
  %.not98 = icmp eq i32 %62, 0
  br i1 %.not98, label %93, label %63

63:                                               ; preds = %59
  %64 = call noundef ptr @_ZNK21VmaBlockMetadata_TLSF13FindFreeBlockEmRj(ptr noundef nonnull align 8 dereferenceable(400) %0, i64 noundef %.093, ptr noundef nonnull align 4 dereferenceable(4) %10)
  %.not109 = icmp eq ptr %64, null
  br i1 %.not109, label %70, label %65

65:                                               ; preds = %63
  %66 = load i32, ptr %10, align 4, !tbaa !23
  %67 = load i64, ptr %8, align 8, !tbaa !5
  %68 = load i64, ptr %9, align 8, !tbaa !5
  %69 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, ptr noundef nonnull align 8 dereferenceable(48) %64, i32 noundef %66, i64 noundef %67, i64 noundef %68, i32 noundef %4, ptr noundef %6)
  br i1 %69, label %.loopexit113, label %70

70:                                               ; preds = %65, %63
  %71 = getelementptr inbounds i8, ptr %0, i64 368
  %72 = load ptr, ptr %71, align 8, !tbaa !21
  %73 = load i32, ptr %60, align 8, !tbaa !22
  %74 = load i64, ptr %8, align 8, !tbaa !5
  %75 = load i64, ptr %9, align 8, !tbaa !5
  %76 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, ptr noundef nonnull align 8 dereferenceable(48) %72, i32 noundef %73, i64 noundef %74, i64 noundef %75, i32 noundef %4, ptr noundef %6)
  br i1 %76, label %.loopexit113, label %.preheader124

.preheader124:                                    ; preds = %70
  br i1 %.not109, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader124, %81
  %.089127 = phi ptr [ %83, %81 ], [ %64, %.preheader124 ]
  %77 = load i32, ptr %10, align 4, !tbaa !23
  %78 = load i64, ptr %8, align 8, !tbaa !5
  %79 = load i64, ptr %9, align 8, !tbaa !5
  %80 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, ptr noundef nonnull align 8 dereferenceable(48) %.089127, i32 noundef %77, i64 noundef %78, i64 noundef %79, i32 noundef %4, ptr noundef %6)
  br i1 %80, label %.loopexit113, label %81

81:                                               ; preds = %.lr.ph
  %82 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN21VmaBlockMetadata_TLSF5Block8NextFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %.089127)
  %83 = load ptr, ptr %82, align 8, !tbaa !24
  %.not110 = icmp eq ptr %83, null
  br i1 %.not110, label %._crit_edge, label %.lr.ph, !llvm.loop !25

._crit_edge:                                      ; preds = %81, %.preheader124
  %84 = load i64, ptr %8, align 8, !tbaa !5
  %85 = call noundef ptr @_ZNK21VmaBlockMetadata_TLSF13FindFreeBlockEmRj(ptr noundef nonnull align 8 dereferenceable(400) %0, i64 noundef %84, ptr noundef nonnull align 4 dereferenceable(4) %11)
  %.not111128 = icmp eq ptr %85, null
  br i1 %.not111128, label %.loopexit115, label %.lr.ph131

.lr.ph131:                                        ; preds = %._crit_edge, %90
  %.086129 = phi ptr [ %92, %90 ], [ %85, %._crit_edge ]
  %86 = load i32, ptr %11, align 4, !tbaa !23
  %87 = load i64, ptr %8, align 8, !tbaa !5
  %88 = load i64, ptr %9, align 8, !tbaa !5
  %89 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, ptr noundef nonnull align 8 dereferenceable(48) %.086129, i32 noundef %86, i64 noundef %87, i64 noundef %88, i32 noundef %4, ptr noundef %6)
  br i1 %89, label %.loopexit113, label %90

90:                                               ; preds = %.lr.ph131
  %91 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN21VmaBlockMetadata_TLSF5Block8NextFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %.086129)
  %92 = load ptr, ptr %91, align 8, !tbaa !24
  %.not111 = icmp eq ptr %92, null
  br i1 %.not111, label %.loopexit115, label %.lr.ph131, !llvm.loop !27

93:                                               ; preds = %59
  %94 = and i32 %5, 65536
  %.not99 = icmp eq i32 %94, 0
  br i1 %.not99, label %120, label %95

95:                                               ; preds = %93
  %96 = load i64, ptr %8, align 8, !tbaa !5
  %97 = call noundef ptr @_ZNK21VmaBlockMetadata_TLSF13FindFreeBlockEmRj(ptr noundef nonnull align 8 dereferenceable(400) %0, i64 noundef %96, ptr noundef nonnull align 4 dereferenceable(4) %11)
  %.not107132 = icmp eq ptr %97, null
  br i1 %.not107132, label %._crit_edge136, label %.lr.ph135

.lr.ph135:                                        ; preds = %95, %102
  %.187133 = phi ptr [ %104, %102 ], [ %97, %95 ]
  %98 = load i32, ptr %11, align 4, !tbaa !23
  %99 = load i64, ptr %8, align 8, !tbaa !5
  %100 = load i64, ptr %9, align 8, !tbaa !5
  %101 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, ptr noundef nonnull align 8 dereferenceable(48) %.187133, i32 noundef %98, i64 noundef %99, i64 noundef %100, i32 noundef %4, ptr noundef %6)
  br i1 %101, label %.loopexit113, label %102

102:                                              ; preds = %.lr.ph135
  %103 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN21VmaBlockMetadata_TLSF5Block8NextFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %.187133)
  %104 = load ptr, ptr %103, align 8, !tbaa !24
  %.not107 = icmp eq ptr %104, null
  br i1 %.not107, label %._crit_edge136, label %.lr.ph135, !llvm.loop !28

._crit_edge136:                                   ; preds = %102, %95
  %105 = getelementptr inbounds i8, ptr %0, i64 368
  %106 = load ptr, ptr %105, align 8, !tbaa !21
  %107 = load i32, ptr %60, align 8, !tbaa !22
  %108 = load i64, ptr %8, align 8, !tbaa !5
  %109 = load i64, ptr %9, align 8, !tbaa !5
  %110 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, ptr noundef nonnull align 8 dereferenceable(48) %106, i32 noundef %107, i64 noundef %108, i64 noundef %109, i32 noundef %4, ptr noundef %6)
  br i1 %110, label %.loopexit113, label %111

111:                                              ; preds = %._crit_edge136
  %112 = call noundef ptr @_ZNK21VmaBlockMetadata_TLSF13FindFreeBlockEmRj(ptr noundef nonnull align 8 dereferenceable(400) %0, i64 noundef %.093, ptr noundef nonnull align 4 dereferenceable(4) %10)
  %.not108137 = icmp eq ptr %112, null
  br i1 %.not108137, label %.loopexit115, label %.lr.ph140

.lr.ph140:                                        ; preds = %111, %117
  %.190138 = phi ptr [ %119, %117 ], [ %112, %111 ]
  %113 = load i32, ptr %10, align 4, !tbaa !23
  %114 = load i64, ptr %8, align 8, !tbaa !5
  %115 = load i64, ptr %9, align 8, !tbaa !5
  %116 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, ptr noundef nonnull align 8 dereferenceable(48) %.190138, i32 noundef %113, i64 noundef %114, i64 noundef %115, i32 noundef %4, ptr noundef %6)
  br i1 %116, label %.loopexit113, label %117

117:                                              ; preds = %.lr.ph140
  %118 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN21VmaBlockMetadata_TLSF5Block8NextFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %.190138)
  %119 = load ptr, ptr %118, align 8, !tbaa !24
  %.not108 = icmp eq ptr %119, null
  br i1 %.not108, label %.loopexit115, label %.lr.ph140, !llvm.loop !29

120:                                              ; preds = %93
  %121 = and i32 %5, 262144
  %.not100 = icmp eq i32 %121, 0
  br i1 %.not100, label %162, label %122

122:                                              ; preds = %120
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  %123 = call noundef ptr @_ZNK16VmaBlockMetadata22GetAllocationCallbacksEv(ptr noundef nonnull align 8 dereferenceable(33) %0)
  call void @_ZN15VmaStlAllocatorIPN21VmaBlockMetadata_TLSF5BlockEEC2EPK21VkAllocationCallbacks(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef %123)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #6
  %124 = load i64, ptr %31, align 8, !tbaa !11
  call void @_ZN9VmaVectorIPN21VmaBlockMetadata_TLSF5BlockE15VmaStlAllocatorIS2_EEC2EmRKS4_(ptr noundef nonnull align 8 dereferenceable(32) %13, i64 noundef %124, ptr noundef nonnull align 8 dereferenceable(8) %12)
  %125 = getelementptr inbounds i8, ptr %0, i64 368
  %126 = load ptr, ptr %125, align 8, !tbaa !21
  %.081.in141 = getelementptr inbounds i8, ptr %126, i64 16
  %.081142 = load ptr, ptr %.081.in141, align 8, !tbaa !30
  %.not103143 = icmp eq ptr %.081142, null
  br i1 %.not103143, label %._crit_edge150, label %.lr.ph147.preheader

.lr.ph147.preheader:                              ; preds = %122
  %127 = load i64, ptr %31, align 8, !tbaa !11
  br label %.lr.ph147

.preheader:                                       ; preds = %137
  %.pre = load i64, ptr %31, align 8, !tbaa !11
  %128 = icmp ult i64 %.183, %.pre
  br i1 %128, label %.lr.ph149, label %._crit_edge150

.lr.ph147:                                        ; preds = %.lr.ph147.preheader, %137
  %.081145 = phi ptr [ %.081, %137 ], [ %.081142, %.lr.ph147.preheader ]
  %.082144 = phi i64 [ %.183, %137 ], [ %127, %.lr.ph147.preheader ]
  %129 = call noundef zeroext i1 @_ZNK21VmaBlockMetadata_TLSF5Block6IsFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %.081145)
  br i1 %129, label %130, label %137

130:                                              ; preds = %.lr.ph147
  %131 = getelementptr inbounds i8, ptr %.081145, i64 8
  %132 = load i64, ptr %131, align 8, !tbaa !32
  %133 = load i64, ptr %8, align 8, !tbaa !5
  %.not105 = icmp ult i64 %132, %133
  br i1 %.not105, label %137, label %134

134:                                              ; preds = %130
  %135 = add i64 %.082144, -1
  %136 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9VmaVectorIPN21VmaBlockMetadata_TLSF5BlockE15VmaStlAllocatorIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(32) %13, i64 noundef %135)
  store ptr %.081145, ptr %136, align 8, !tbaa !24
  br label %137

137:                                              ; preds = %.lr.ph147, %130, %134
  %.183 = phi i64 [ %135, %134 ], [ %.082144, %130 ], [ %.082144, %.lr.ph147 ]
  %.081.in = getelementptr inbounds i8, ptr %.081145, i64 16
  %.081 = load ptr, ptr %.081.in, align 8, !tbaa !30
  %.not103 = icmp eq ptr %.081, null
  br i1 %.not103, label %.preheader, label %.lr.ph147, !llvm.loop !33

138:                                              ; preds = %153
  %139 = add nuw i64 %.284148, 1
  %140 = load i64, ptr %31, align 8, !tbaa !11
  %141 = icmp ult i64 %139, %140
  br i1 %141, label %.lr.ph149, label %._crit_edge150, !llvm.loop !34

.lr.ph149:                                        ; preds = %.preheader, %138
  %.284148 = phi i64 [ %139, %138 ], [ %.183, %.preheader ]
  %142 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9VmaVectorIPN21VmaBlockMetadata_TLSF5BlockE15VmaStlAllocatorIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(32) %13, i64 noundef %.284148)
  %143 = load ptr, ptr %142, align 8, !tbaa !24
  %144 = getelementptr inbounds i8, ptr %143, i64 8
  %145 = load i64, ptr %144, align 8, !tbaa !32
  %146 = invoke noundef i32 @_ZNK21VmaBlockMetadata_TLSF12GetListIndexEm(ptr noundef nonnull align 8 dereferenceable(400) %0, i64 noundef %145)
          to label %147 unwind label %151

147:                                              ; preds = %.lr.ph149
  %148 = load i64, ptr %8, align 8, !tbaa !5
  %149 = load i64, ptr %9, align 8, !tbaa !5
  %150 = invoke noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, ptr noundef nonnull align 8 dereferenceable(48) %143, i32 noundef %146, i64 noundef %148, i64 noundef %149, i32 noundef %4, ptr noundef %6)
          to label %153 unwind label %151

151:                                              ; preds = %147, %.lr.ph149
  %152 = landingpad { ptr, i32 }
          cleanup
  br label %161

153:                                              ; preds = %147
  br i1 %150, label %.loopexit118, label %138

._crit_edge150:                                   ; preds = %138, %122, %.preheader
  %154 = load ptr, ptr %125, align 8, !tbaa !21
  %155 = load i32, ptr %60, align 8, !tbaa !22
  %156 = load i64, ptr %8, align 8, !tbaa !5
  %157 = load i64, ptr %9, align 8, !tbaa !5
  %158 = invoke noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, ptr noundef nonnull align 8 dereferenceable(48) %154, i32 noundef %155, i64 noundef %156, i64 noundef %157, i32 noundef %4, ptr noundef %6)
          to label %.loopexit118 unwind label %159

159:                                              ; preds = %._crit_edge150
  %160 = landingpad { ptr, i32 }
          cleanup
  br label %161

.loopexit118:                                     ; preds = %153, %._crit_edge150
  %.2 = phi i1 [ %158, %._crit_edge150 ], [ true, %153 ]
  call void @_ZN9VmaVectorIPN21VmaBlockMetadata_TLSF5BlockE15VmaStlAllocatorIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  br label %.loopexit113

161:                                              ; preds = %159, %151
  %.pn = phi { ptr, i32 } [ %152, %151 ], [ %160, %159 ]
  call void @_ZN9VmaVectorIPN21VmaBlockMetadata_TLSF5BlockE15VmaStlAllocatorIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #6
  resume { ptr, i32 } %.pn

162:                                              ; preds = %120
  %163 = call noundef ptr @_ZNK21VmaBlockMetadata_TLSF13FindFreeBlockEmRj(ptr noundef nonnull align 8 dereferenceable(400) %0, i64 noundef %.093, ptr noundef nonnull align 4 dereferenceable(4) %10)
  %.not101151 = icmp eq ptr %163, null
  br i1 %.not101151, label %._crit_edge155, label %.lr.ph154

.lr.ph154:                                        ; preds = %162, %168
  %.291152 = phi ptr [ %170, %168 ], [ %163, %162 ]
  %164 = load i32, ptr %10, align 4, !tbaa !23
  %165 = load i64, ptr %8, align 8, !tbaa !5
  %166 = load i64, ptr %9, align 8, !tbaa !5
  %167 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, ptr noundef nonnull align 8 dereferenceable(48) %.291152, i32 noundef %164, i64 noundef %165, i64 noundef %166, i32 noundef %4, ptr noundef %6)
  br i1 %167, label %.loopexit113, label %168

168:                                              ; preds = %.lr.ph154
  %169 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN21VmaBlockMetadata_TLSF5Block8NextFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %.291152)
  %170 = load ptr, ptr %169, align 8, !tbaa !24
  %.not101 = icmp eq ptr %170, null
  br i1 %.not101, label %._crit_edge155, label %.lr.ph154, !llvm.loop !35

._crit_edge155:                                   ; preds = %168, %162
  %171 = getelementptr inbounds i8, ptr %0, i64 368
  %172 = load ptr, ptr %171, align 8, !tbaa !21
  %173 = load i32, ptr %60, align 8, !tbaa !22
  %174 = load i64, ptr %8, align 8, !tbaa !5
  %175 = load i64, ptr %9, align 8, !tbaa !5
  %176 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, ptr noundef nonnull align 8 dereferenceable(48) %172, i32 noundef %173, i64 noundef %174, i64 noundef %175, i32 noundef %4, ptr noundef %6)
  br i1 %176, label %.loopexit113, label %177

177:                                              ; preds = %._crit_edge155
  %178 = load i64, ptr %8, align 8, !tbaa !5
  %179 = call noundef ptr @_ZNK21VmaBlockMetadata_TLSF13FindFreeBlockEmRj(ptr noundef nonnull align 8 dereferenceable(400) %0, i64 noundef %178, ptr noundef nonnull align 4 dereferenceable(4) %11)
  %.not102156 = icmp eq ptr %179, null
  br i1 %.not102156, label %.loopexit115, label %.lr.ph159

.lr.ph159:                                        ; preds = %177, %184
  %.288157 = phi ptr [ %186, %184 ], [ %179, %177 ]
  %180 = load i32, ptr %11, align 4, !tbaa !23
  %181 = load i64, ptr %8, align 8, !tbaa !5
  %182 = load i64, ptr %9, align 8, !tbaa !5
  %183 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, ptr noundef nonnull align 8 dereferenceable(48) %.288157, i32 noundef %180, i64 noundef %181, i64 noundef %182, i32 noundef %4, ptr noundef %6)
  br i1 %183, label %.loopexit113, label %184

184:                                              ; preds = %.lr.ph159
  %185 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN21VmaBlockMetadata_TLSF5Block8NextFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %.288157)
  %186 = load ptr, ptr %185, align 8, !tbaa !24
  %.not102 = icmp eq ptr %186, null
  br i1 %.not102, label %.loopexit115, label %.lr.ph159, !llvm.loop !36

.loopexit115:                                     ; preds = %90, %117, %184, %._crit_edge, %111, %177
  %187 = load i32, ptr %10, align 4, !tbaa !23
  %188 = add i32 %187, 1
  store i32 %188, ptr %10, align 4, !tbaa !23
  %189 = load i32, ptr %60, align 8, !tbaa !22
  %190 = icmp ult i32 %188, %189
  br i1 %190, label %.lr.ph166, label %.loopexit113

.lr.ph166:                                        ; preds = %.loopexit115
  %191 = getelementptr inbounds i8, ptr %0, i64 312
  br label %196

.loopexit.loopexit:                               ; preds = %206
  %.pre176 = load i32, ptr %10, align 4, !tbaa !23
  %.pre177 = load i32, ptr %60, align 8, !tbaa !22
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %196
  %192 = phi i32 [ %.pre177, %.loopexit.loopexit ], [ %197, %196 ]
  %193 = phi i32 [ %.pre176, %.loopexit.loopexit ], [ %198, %196 ]
  %194 = add i32 %193, 1
  store i32 %194, ptr %10, align 4, !tbaa !23
  %195 = icmp ult i32 %194, %192
  br i1 %195, label %196, label %.loopexit113, !llvm.loop !37

196:                                              ; preds = %.lr.ph166, %.loopexit
  %197 = phi i32 [ %189, %.lr.ph166 ], [ %192, %.loopexit ]
  %198 = phi i32 [ %188, %.lr.ph166 ], [ %194, %.loopexit ]
  %199 = load ptr, ptr %191, align 8, !tbaa !38
  %200 = zext i32 %198 to i64
  %201 = getelementptr inbounds ptr, ptr %199, i64 %200
  %.392160 = load ptr, ptr %201, align 8, !tbaa !24
  %.not112161 = icmp eq ptr %.392160, null
  br i1 %.not112161, label %.loopexit, label %.lr.ph164

.lr.ph164:                                        ; preds = %196, %206
  %.392162 = phi ptr [ %.392, %206 ], [ %.392160, %196 ]
  %202 = load i32, ptr %10, align 4, !tbaa !23
  %203 = load i64, ptr %8, align 8, !tbaa !5
  %204 = load i64, ptr %9, align 8, !tbaa !5
  %205 = call noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400) %0, ptr noundef nonnull align 8 dereferenceable(48) %.392162, i32 noundef %202, i64 noundef %203, i64 noundef %204, i32 noundef %4, ptr noundef %6)
  br i1 %205, label %.loopexit113, label %206

206:                                              ; preds = %.lr.ph164
  %207 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN21VmaBlockMetadata_TLSF5Block8NextFreeEv(ptr noundef nonnull align 8 dereferenceable(48) %.392162)
  %.392 = load ptr, ptr %207, align 8, !tbaa !24
  %.not112 = icmp eq ptr %.392, null
  br i1 %.not112, label %.loopexit.loopexit, label %.lr.ph164, !llvm.loop !39

.loopexit113:                                     ; preds = %.lr.ph, %.lr.ph131, %.lr.ph135, %.lr.ph140, %.lr.ph154, %.lr.ph159, %.loopexit, %.lr.ph164, %.loopexit115, %._crit_edge155, %._crit_edge136, %70, %65, %.loopexit118
  %.3 = phi i1 [ %.2, %.loopexit118 ], [ true, %65 ], [ true, %70 ], [ true, %._crit_edge136 ], [ true, %._crit_edge155 ], [ false, %.loopexit115 ], [ true, %.lr.ph164 ], [ false, %.loopexit ], [ true, %.lr.ph159 ], [ true, %.lr.ph154 ], [ true, %.lr.ph140 ], [ true, %.lr.ph135 ], [ true, %.lr.ph131 ], [ true, %.lr.ph ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #6
  br label %208

208:                                              ; preds = %21, %.loopexit113, %34
  %.4 = phi i1 [ %41, %34 ], [ %.3, %.loopexit113 ], [ false, %21 ]
  ret i1 %.4
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN21VmaBlockMetadata_TLSF10CheckBlockERNS_5BlockEjmm20VmaSuballocationTypeP20VmaAllocationRequest(ptr noundef nonnull align 8 dereferenceable(400), ptr noundef nonnull align 8 dereferenceable(48), i32 noundef, i64 noundef, i64 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"vtable pointer", !8, i64 0}
!11 = !{!12, !6, i64 48}
!12 = !{!"_ZTS21VmaBlockMetadata_TLSF", !13, i64 0, !6, i64 40, !6, i64 48, !6, i64 56, !16, i64 64, !7, i64 68, !7, i64 72, !16, i64 304, !14, i64 312, !17, i64 320, !14, i64 368, !20, i64 376}
!13 = !{!"_ZTS16VmaBlockMetadata", !6, i64 8, !14, i64 16, !6, i64 24, !15, i64 32}
!14 = !{!"any pointer", !7, i64 0}
!15 = !{!"bool", !7, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = !{!"_ZTS16VmaPoolAllocatorIN21VmaBlockMetadata_TLSF5BlockEE", !14, i64 0, !16, i64 8, !18, i64 16}
!18 = !{!"_ZTS9VmaVectorIN16VmaPoolAllocatorIN21VmaBlockMetadata_TLSF5BlockEE9ItemBlockE15VmaStlAllocatorIS4_EE", !19, i64 0, !14, i64 8, !6, i64 16, !6, i64 24}
!19 = !{!"_ZTS15VmaStlAllocatorIN16VmaPoolAllocatorIN21VmaBlockMetadata_TLSF5BlockEE9ItemBlockEE", !14, i64 0}
!20 = !{!"_ZTS30VmaBlockBufferImageGranularity", !6, i64 0, !16, i64 8, !14, i64 16}
!21 = !{!12, !14, i64 368}
!22 = !{!12, !16, i64 304}
!23 = !{!16, !16, i64 0}
!24 = !{!14, !14, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = distinct !{!28, !26}
!29 = distinct !{!29, !26}
!30 = !{!31, !14, i64 16}
!31 = !{!"_ZTSN21VmaBlockMetadata_TLSF5BlockE", !6, i64 0, !6, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !7, i64 40}
!32 = !{!31, !6, i64 8}
!33 = distinct !{!33, !26}
!34 = distinct !{!34, !26}
!35 = distinct !{!35, !26}
!36 = distinct !{!36, !26}
!37 = distinct !{!37, !26}
!38 = !{!12, !14, i64 312}
!39 = distinct !{!39, !26}


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