; LLVM IR from DanEngelbrecht/longtail :: test/test.ll/ZN47Longtail_TestLongtailFSBlockStoreSync (TestCase8TestBodyEv)

; 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.FSBlockStoreSyncWriteContentWorkerContext = type { ptr, ptr, ptr, ptr, ptr, i32, i32 }
%struct.jc_test_fixture = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %struct.jc_test_stats, i32, i32, i32, i32 }
%struct.jc_test_stats = type { i32, i32, i32, i32, i64 }
%struct.Longtail_JobAPI = type { %struct.Longtail_API, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.Longtail_API = type { ptr }
%struct.Longtail_HashAPI = type { %struct.Longtail_API, ptr, ptr, ptr, ptr, ptr }
%struct.Longtail_ChunkerAPI = type { %struct.Longtail_API, ptr, ptr, ptr, ptr, ptr }
%struct.Longtail_StorageAPI = type { %struct.Longtail_API, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@.str.3 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.253 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.255 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.256 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.259 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.260 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.616 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.677 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.679 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.724 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.756 = external hidden unnamed_addr constant [184 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

declare ptr @Longtail_Alloc(ptr noundef, i64 noundef) #1

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef ptr @_ZL19jc_test_get_fixturev() #2

declare void @_Z28jc_test_increment_assertionsv() #1

declare void @_Z21jc_test_set_test_faili(i32 noundef) #1

declare void @Longtail_Free(ptr noundef) #1

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN21jc_test_cmp_eq_helperILb1EE7compareIiiEEiRKT_RKT0_PKcS9_PN23jc_test_enable_argumentIXntsr18jc_test_is_pointerIS5_EE5valueEE4typeE(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef, ptr noundef, ptr noundef) #3 align 2

declare void @Longtail_DisposeAPI(ptr noundef) #1

declare ptr @Longtail_CreateBlake3HashAPI() #1

declare ptr @Longtail_CreateHPCDCChunkerAPI() #1

declare ptr @Longtail_CreateBikeshedJobAPI(i32 noundef, i32 noundef) #1

declare i32 @Longtail_GetFilesRecursively2(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z14jc_test_cmp_NEIP18Longtail_FileInfosS1_EiT_T0_PKcS5_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z14jc_test_cmp_NEIPjS0_EiT_T0_PKcS4_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

declare i32 @Longtail_CreateVersionIndex(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z14jc_test_cmp_NEIP21Longtail_VersionIndexS1_EiT_T0_PKcS5_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

declare ptr @Longtail_CreateInMemStorageAPI() #1

declare i32 @Longtail_CreateThread(ptr noundef, ptr noundef, i64 noundef, ptr noundef, i32 noundef, ptr noundef) #1

declare i64 @Longtail_GetThreadSize() #1

declare i32 @Longtail_JoinThread(ptr noundef, i64 noundef) #1

declare void @Longtail_DeleteThread(ptr noundef) #1

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z36TestLongtailFSBlockStoreSyncWorkerCBPv(ptr noundef) #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN47Longtail_TestLongtailFSBlockStoreSync__TestCase8TestBodyEv(ptr noundef nonnull align 8 dereferenceable(8) %0) unnamed_addr #3 align 2 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca %struct.FSBlockStoreSyncWriteContentWorkerContext, align 8
  %17 = alloca [8 x ptr], align 16
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %22 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #4
  %23 = call ptr @Longtail_CreateInMemStorageAPI()
  store ptr %23, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #4
  %24 = call ptr @Longtail_CreateBlake3HashAPI()
  store ptr %24, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #4
  %25 = call ptr @Longtail_CreateHPCDCChunkerAPI()
  store ptr %25, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  %26 = call ptr @Longtail_CreateBikeshedJobAPI(i32 noundef 8, i32 noundef 0)
  store ptr %26, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %27

27:                                               ; preds = %218, %1
  %28 = load i32, ptr %7, align 4, !tbaa !9
  %29 = icmp ult i32 %28, 4
  br i1 %29, label %31, label %30

30:                                               ; preds = %27
  store i32 2, ptr %8, align 4
  br label %221

31:                                               ; preds = %27
  %32 = load ptr, ptr %3, align 8, !tbaa !5
  call void @_ZL19CreateRandomContentP19Longtail_StorageAPIPKcjjj(ptr noundef %32, ptr noundef @.str.677, i32 noundef 33, i32 noundef 0, i32 noundef 40459)
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  br label %33

33:                                               ; preds = %31
  %34 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %35 = getelementptr inbounds %struct.jc_test_fixture, ptr %34, i32 0, i32 11
  %36 = load i32, ptr %35, align 8
  %37 = and i32 %36, -16776961
  %38 = or i32 %37, 1598720
  store i32 %38, ptr %35, align 8
  %39 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %40 = getelementptr inbounds %struct.jc_test_fixture, ptr %39, i32 0, i32 4
  store ptr @.str.3, ptr %40, align 8, !tbaa !11
  call void @_Z28jc_test_increment_assertionsv()
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  store i32 0, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  %41 = load ptr, ptr %3, align 8, !tbaa !5
  %42 = load ptr, ptr %6, align 8, !tbaa !5
  %43 = call i32 @Longtail_GetFilesRecursively2(ptr noundef %41, ptr noundef %42, ptr noundef null, ptr noundef null, ptr noundef null, ptr noundef @.str.677, ptr noundef %9)
  store i32 %43, ptr %11, align 4, !tbaa !9
  %44 = call noundef i32 @_ZN21jc_test_cmp_eq_helperILb1EE7compareIiiEEiRKT_RKT0_PKcS9_PN23jc_test_enable_argumentIXntsr18jc_test_is_pointerIS5_EE5valueEE4typeE(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef @.str.46, ptr noundef @.str.724, ptr noundef null)
  %45 = icmp eq i32 %44, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  br i1 %45, label %46, label %47

46:                                               ; preds = %33
  call void @_Z21jc_test_set_test_faili(i32 noundef 1)
  store i32 1, ptr %8, align 4
  br label %215

47:                                               ; preds = %33
  br label %48

48:                                               ; preds = %47
  br label %49

49:                                               ; preds = %48
  br label %50

50:                                               ; preds = %49
  %51 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %52 = getelementptr inbounds %struct.jc_test_fixture, ptr %51, i32 0, i32 11
  %53 = load i32, ptr %52, align 8
  %54 = and i32 %53, -16776961
  %55 = or i32 %54, 1598976
  store i32 %55, ptr %52, align 8
  %56 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %57 = getelementptr inbounds %struct.jc_test_fixture, ptr %56, i32 0, i32 4
  store ptr @.str.3, ptr %57, align 8, !tbaa !11
  call void @_Z28jc_test_increment_assertionsv()
  %58 = load ptr, ptr %9, align 8, !tbaa !5
  %59 = call noundef i32 @_Z14jc_test_cmp_NEIP18Longtail_FileInfosS1_EiT_T0_PKcS5_(ptr noundef null, ptr noundef %58, ptr noundef @.str.253, ptr noundef @.str.679)
  %60 = icmp eq i32 %59, 0
  br i1 %60, label %61, label %62

61:                                               ; preds = %50
  call void @_Z21jc_test_set_test_faili(i32 noundef 1)
  store i32 1, ptr %8, align 4
  br label %215

62:                                               ; preds = %50
  br label %63

63:                                               ; preds = %62
  br label %64

64:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  %65 = load ptr, ptr %3, align 8, !tbaa !5
  %66 = load ptr, ptr %9, align 8, !tbaa !5
  %67 = call noundef ptr @_ZL12SetAssetTagsP19Longtail_StorageAPIPK18Longtail_FileInfosj(ptr noundef %65, ptr noundef %66, i32 noundef 0)
  store ptr %67, ptr %12, align 8, !tbaa !5
  br label %68

68:                                               ; preds = %64
  %69 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %70 = getelementptr inbounds %struct.jc_test_fixture, ptr %69, i32 0, i32 11
  %71 = load i32, ptr %70, align 8
  %72 = and i32 %71, -16776961
  %73 = or i32 %72, 1599744
  store i32 %73, ptr %70, align 8
  %74 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %75 = getelementptr inbounds %struct.jc_test_fixture, ptr %74, i32 0, i32 4
  store ptr @.str.3, ptr %75, align 8, !tbaa !11
  call void @_Z28jc_test_increment_assertionsv()
  %76 = load ptr, ptr %12, align 8, !tbaa !5
  %77 = call noundef i32 @_Z14jc_test_cmp_NEIPjS0_EiT_T0_PKcS4_(ptr noundef null, ptr noundef %76, ptr noundef @.str.255, ptr noundef @.str.256)
  %78 = icmp eq i32 %77, 0
  br i1 %78, label %79, label %80

79:                                               ; preds = %68
  call void @_Z21jc_test_set_test_faili(i32 noundef 1)
  store i32 1, ptr %8, align 4
  br label %214

80:                                               ; preds = %68
  br label %81

81:                                               ; preds = %80
  br label %82

82:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  br label %83

83:                                               ; preds = %82
  %84 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %85 = getelementptr inbounds %struct.jc_test_fixture, ptr %84, i32 0, i32 11
  %86 = load i32, ptr %85, align 8
  %87 = and i32 %86, -16776961
  %88 = or i32 %87, 1603584
  store i32 %88, ptr %85, align 8
  %89 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %90 = getelementptr inbounds %struct.jc_test_fixture, ptr %89, i32 0, i32 4
  store ptr @.str.3, ptr %90, align 8, !tbaa !11
  call void @_Z28jc_test_increment_assertionsv()
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  store i32 0, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  %91 = load ptr, ptr %3, align 8, !tbaa !5
  %92 = load ptr, ptr %4, align 8, !tbaa !5
  %93 = load ptr, ptr %5, align 8, !tbaa !5
  %94 = load ptr, ptr %6, align 8, !tbaa !5
  %95 = load ptr, ptr %9, align 8, !tbaa !5
  %96 = load ptr, ptr %12, align 8, !tbaa !5
  %97 = call i32 @Longtail_CreateVersionIndex(ptr noundef %91, ptr noundef %92, ptr noundef %93, ptr noundef %94, ptr noundef null, ptr noundef null, ptr noundef null, ptr noundef @.str.677, ptr noundef %95, ptr noundef %96, i32 noundef 4904, i32 noundef 0, ptr noundef %13)
  store i32 %97, ptr %15, align 4, !tbaa !9
  %98 = call noundef i32 @_ZN21jc_test_cmp_eq_helperILb1EE7compareIiiEEiRKT_RKT0_PKcS9_PN23jc_test_enable_argumentIXntsr18jc_test_is_pointerIS5_EE5valueEE4typeE(ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 4 dereferenceable(4) %15, ptr noundef @.str.46, ptr noundef @.str.756, ptr noundef null)
  %99 = icmp eq i32 %98, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  br i1 %99, label %100, label %101

100:                                              ; preds = %83
  call void @_Z21jc_test_set_test_faili(i32 noundef 1)
  store i32 1, ptr %8, align 4
  br label %213

101:                                              ; preds = %83
  br label %102

102:                                              ; preds = %101
  br label %103

103:                                              ; preds = %102
  br label %104

104:                                              ; preds = %103
  %105 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %106 = getelementptr inbounds %struct.jc_test_fixture, ptr %105, i32 0, i32 11
  %107 = load i32, ptr %106, align 8
  %108 = and i32 %107, -16776961
  %109 = or i32 %108, 1603840
  store i32 %109, ptr %106, align 8
  %110 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %111 = getelementptr inbounds %struct.jc_test_fixture, ptr %110, i32 0, i32 4
  store ptr @.str.3, ptr %111, align 8, !tbaa !11
  call void @_Z28jc_test_increment_assertionsv()
  %112 = load ptr, ptr %13, align 8, !tbaa !5
  %113 = call noundef i32 @_Z14jc_test_cmp_NEIP21Longtail_VersionIndexS1_EiT_T0_PKcS5_(ptr noundef null, ptr noundef %112, ptr noundef @.str.259, ptr noundef @.str.260)
  %114 = icmp eq i32 %113, 0
  br i1 %114, label %115, label %116

115:                                              ; preds = %104
  call void @_Z21jc_test_set_test_faili(i32 noundef 1)
  store i32 1, ptr %8, align 4
  br label %213

116:                                              ; preds = %104
  br label %117

117:                                              ; preds = %116
  br label %118

118:                                              ; preds = %117
  %119 = load ptr, ptr %12, align 8, !tbaa !5
  call void @Longtail_Free(ptr noundef %119)
  %120 = load ptr, ptr %9, align 8, !tbaa !5
  call void @Longtail_Free(ptr noundef %120)
  call void @llvm.lifetime.start.p0(i64 48, ptr %16) #4
  %121 = getelementptr inbounds %struct.FSBlockStoreSyncWriteContentWorkerContext, ptr %16, i32 0, i32 0
  %122 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %122, ptr %121, align 8, !tbaa !15
  %123 = getelementptr inbounds %struct.FSBlockStoreSyncWriteContentWorkerContext, ptr %16, i32 0, i32 1
  %124 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %124, ptr %123, align 8, !tbaa !17
  %125 = getelementptr inbounds %struct.FSBlockStoreSyncWriteContentWorkerContext, ptr %16, i32 0, i32 2
  %126 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %126, ptr %125, align 8, !tbaa !18
  %127 = getelementptr inbounds %struct.FSBlockStoreSyncWriteContentWorkerContext, ptr %16, i32 0, i32 3
  store ptr @.str.677, ptr %127, align 8, !tbaa !19
  %128 = getelementptr inbounds %struct.FSBlockStoreSyncWriteContentWorkerContext, ptr %16, i32 0, i32 4
  %129 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %129, ptr %128, align 8, !tbaa !20
  %130 = getelementptr inbounds %struct.FSBlockStoreSyncWriteContentWorkerContext, ptr %16, i32 0, i32 5
  store i32 26973, ptr %130, align 8, !tbaa !21
  %131 = getelementptr inbounds %struct.FSBlockStoreSyncWriteContentWorkerContext, ptr %16, i32 0, i32 6
  store i32 11, ptr %131, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 64, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %132

132:                                              ; preds = %183, %118
  %133 = load i32, ptr %18, align 4, !tbaa !9
  %134 = icmp ult i32 %133, 8
  br i1 %134, label %136, label %135

135:                                              ; preds = %132
  store i32 15, ptr %8, align 4
  br label %186

136:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %137 = call i64 @Longtail_GetThreadSize()
  %138 = call ptr @Longtail_Alloc(ptr noundef null, i64 noundef %137)
  %139 = load i32, ptr %18, align 4, !tbaa !9
  %140 = zext i32 %139 to i64
  %141 = getelementptr inbounds [8 x ptr], ptr %17, i64 0, i64 %140
  %142 = call i32 @Longtail_CreateThread(ptr noundef %138, ptr noundef @_Z36TestLongtailFSBlockStoreSyncWorkerCBPv, i64 noundef 0, ptr noundef %16, i32 noundef -1, ptr noundef %141)
  store i32 %142, ptr %19, align 4, !tbaa !9
  %143 = load i32, ptr %19, align 4, !tbaa !9
  %144 = icmp ne i32 %143, 0
  br i1 %144, label %145, label %179

145:                                              ; preds = %136
  br label %146

146:                                              ; preds = %150, %145
  %147 = load i32, ptr %18, align 4, !tbaa !9
  %148 = add i32 %147, -1
  store i32 %148, ptr %18, align 4, !tbaa !9
  %149 = icmp ne i32 %147, 0
  br i1 %149, label %150, label %164

150:                                              ; preds = %146
  %151 = load i32, ptr %18, align 4, !tbaa !9
  %152 = zext i32 %151 to i64
  %153 = getelementptr inbounds [8 x ptr], ptr %17, i64 0, i64 %152
  %154 = load ptr, ptr %153, align 8, !tbaa !5
  %155 = call i32 @Longtail_JoinThread(ptr noundef %154, i64 noundef -1)
  %156 = load i32, ptr %18, align 4, !tbaa !9
  %157 = zext i32 %156 to i64
  %158 = getelementptr inbounds [8 x ptr], ptr %17, i64 0, i64 %157
  %159 = load ptr, ptr %158, align 8, !tbaa !5
  call void @Longtail_DeleteThread(ptr noundef %159)
  %160 = load i32, ptr %18, align 4, !tbaa !9
  %161 = zext i32 %160 to i64
  %162 = getelementptr inbounds [8 x ptr], ptr %17, i64 0, i64 %161
  %163 = load ptr, ptr %162, align 8, !tbaa !5
  call void @Longtail_Free(ptr noundef %163)
  br label %146, !llvm.loop !23

164:                                              ; preds = %146
  br label %165

165:                                              ; preds = %164
  %166 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %167 = getelementptr inbounds %struct.jc_test_fixture, ptr %166, i32 0, i32 11
  %168 = load i32, ptr %167, align 8
  %169 = and i32 %168, -16776961
  %170 = or i32 %169, 1608448
  store i32 %170, ptr %167, align 8
  %171 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %172 = getelementptr inbounds %struct.jc_test_fixture, ptr %171, i32 0, i32 4
  store ptr @.str.3, ptr %172, align 8, !tbaa !11
  call void @_Z28jc_test_increment_assertionsv()
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  store i32 0, ptr %20, align 4, !tbaa !9
  %173 = call noundef i32 @_ZN21jc_test_cmp_eq_helperILb1EE7compareIiiEEiRKT_RKT0_PKcS9_PN23jc_test_enable_argumentIXntsr18jc_test_is_pointerIS5_EE5valueEE4typeE(ptr noundef nonnull align 4 dereferenceable(4) %20, ptr noundef nonnull align 4 dereferenceable(4) %19, ptr noundef @.str.46, ptr noundef @.str.616, ptr noundef null)
  %174 = icmp eq i32 %173, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  br i1 %174, label %175, label %176

175:                                              ; preds = %165
  call void @_Z21jc_test_set_test_faili(i32 noundef 1)
  store i32 1, ptr %8, align 4
  br label %180

176:                                              ; preds = %165
  br label %177

177:                                              ; preds = %176
  br label %178

178:                                              ; preds = %177
  br label %179

179:                                              ; preds = %178, %136
  store i32 0, ptr %8, align 4
  br label %180

180:                                              ; preds = %179, %175
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  %181 = load i32, ptr %8, align 4
  switch i32 %181, label %186 [
    i32 0, label %182
  ]

182:                                              ; preds = %180
  br label %183

183:                                              ; preds = %182
  %184 = load i32, ptr %18, align 4, !tbaa !9
  %185 = add i32 %184, 1
  store i32 %185, ptr %18, align 4, !tbaa !9
  br label %132, !llvm.loop !25

186:                                              ; preds = %180, %135
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  %187 = load i32, ptr %8, align 4
  switch i32 %187, label %212 [
    i32 15, label %188
  ]

188:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %189

189:                                              ; preds = %207, %188
  %190 = load i32, ptr %21, align 4, !tbaa !9
  %191 = icmp ult i32 %190, 8
  br i1 %191, label %193, label %192

192:                                              ; preds = %189
  store i32 22, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  br label %210

193:                                              ; preds = %189
  %194 = load i32, ptr %21, align 4, !tbaa !9
  %195 = zext i32 %194 to i64
  %196 = getelementptr inbounds [8 x ptr], ptr %17, i64 0, i64 %195
  %197 = load ptr, ptr %196, align 8, !tbaa !5
  %198 = call i32 @Longtail_JoinThread(ptr noundef %197, i64 noundef -1)
  %199 = load i32, ptr %21, align 4, !tbaa !9
  %200 = zext i32 %199 to i64
  %201 = getelementptr inbounds [8 x ptr], ptr %17, i64 0, i64 %200
  %202 = load ptr, ptr %201, align 8, !tbaa !5
  call void @Longtail_DeleteThread(ptr noundef %202)
  %203 = load i32, ptr %21, align 4, !tbaa !9
  %204 = zext i32 %203 to i64
  %205 = getelementptr inbounds [8 x ptr], ptr %17, i64 0, i64 %204
  %206 = load ptr, ptr %205, align 8, !tbaa !5
  call void @Longtail_Free(ptr noundef %206)
  br label %207

207:                                              ; preds = %193
  %208 = load i32, ptr %21, align 4, !tbaa !9
  %209 = add i32 %208, 1
  store i32 %209, ptr %21, align 4, !tbaa !9
  br label %189, !llvm.loop !26

210:                                              ; preds = %192
  %211 = load ptr, ptr %13, align 8, !tbaa !5
  call void @Longtail_Free(ptr noundef %211)
  store i32 0, ptr %8, align 4
  br label %212

212:                                              ; preds = %210, %186
  call void @llvm.lifetime.end.p0(i64 64, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 48, ptr %16) #4
  br label %213

213:                                              ; preds = %212, %115, %100
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  br label %214

214:                                              ; preds = %213, %79
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  br label %215

215:                                              ; preds = %214, %61, %46
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  %216 = load i32, ptr %8, align 4
  switch i32 %216, label %221 [
    i32 0, label %217
  ]

217:                                              ; preds = %215
  br label %218

218:                                              ; preds = %217
  %219 = load i32, ptr %7, align 4, !tbaa !9
  %220 = add i32 %219, 1
  store i32 %220, ptr %7, align 4, !tbaa !9
  br label %27, !llvm.loop !27

221:                                              ; preds = %215, %30
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  %222 = load i32, ptr %8, align 4
  switch i32 %222, label %248 [
    i32 2, label %223
  ]

223:                                              ; preds = %221
  %224 = load ptr, ptr %6, align 8, !tbaa !5
  %225 = icmp ne ptr %224, null
  br i1 %225, label %226, label %229

226:                                              ; preds = %223
  %227 = load ptr, ptr %6, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.Longtail_JobAPI, ptr %227, i32 0, i32 0
  call void @Longtail_DisposeAPI(ptr noundef %228)
  br label %229

229:                                              ; preds = %226, %223
  %230 = load ptr, ptr %4, align 8, !tbaa !5
  %231 = icmp ne ptr %230, null
  br i1 %231, label %232, label %235

232:                                              ; preds = %229
  %233 = load ptr, ptr %4, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.Longtail_HashAPI, ptr %233, i32 0, i32 0
  call void @Longtail_DisposeAPI(ptr noundef %234)
  br label %235

235:                                              ; preds = %232, %229
  %236 = load ptr, ptr %5, align 8, !tbaa !5
  %237 = icmp ne ptr %236, null
  br i1 %237, label %238, label %241

238:                                              ; preds = %235
  %239 = load ptr, ptr %5, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.Longtail_ChunkerAPI, ptr %239, i32 0, i32 0
  call void @Longtail_DisposeAPI(ptr noundef %240)
  br label %241

241:                                              ; preds = %238, %235
  %242 = load ptr, ptr %3, align 8, !tbaa !5
  %243 = icmp ne ptr %242, null
  br i1 %243, label %244, label %247

244:                                              ; preds = %241
  %245 = load ptr, ptr %3, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.Longtail_StorageAPI, ptr %245, i32 0, i32 0
  call void @Longtail_DisposeAPI(ptr noundef %246)
  br label %247

247:                                              ; preds = %244, %241
  store i32 0, ptr %8, align 4
  br label %248

248:                                              ; preds = %247, %221
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #4
  %249 = load i32, ptr %8, align 4
  switch i32 %249, label %251 [
    i32 0, label %250
    i32 1, label %250
  ]

250:                                              ; preds = %248, %248
  ret void

251:                                              ; preds = %248
  unreachable
}

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

!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 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 32}
!12 = !{!"_ZTS15jc_test_fixture", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !13, i64 64, !10, i64 88, !10, i64 91, !10, i64 91, !10, i64 91, !10, i64 91, !10, i64 92, !10, i64 96, !10, i64 97, !10, i64 99, !10, i64 100}
!13 = !{!"_ZTS13jc_test_stats", !10, i64 0, !10, i64 4, !10, i64 6, !10, i64 8, !10, i64 12, !14, i64 16}
!14 = !{!"long", !7, i64 0}
!15 = !{!16, !6, i64 0}
!16 = !{!"_ZTS41FSBlockStoreSyncWriteContentWorkerContext", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !10, i64 40, !10, i64 44}
!17 = !{!16, !6, i64 8}
!18 = !{!16, !6, i64 16}
!19 = !{!16, !6, i64 24}
!20 = !{!16, !6, i64 32}
!21 = !{!16, !10, i64 40}
!22 = !{!16, !10, i64 44}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = distinct !{!26, !24}
!27 = distinct !{!27, !24}


; 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.FSBlockStoreSyncWriteContentWorkerContext = type { ptr, ptr, ptr, ptr, ptr, i32, i32 }

@.str.3 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.253 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.255 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.256 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.259 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.260 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.616 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.677 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.679 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.724 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.756 = external hidden unnamed_addr constant [184 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

declare ptr @Longtail_Alloc(ptr noundef, i64 noundef) local_unnamed_addr #1

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

declare void @_Z28jc_test_increment_assertionsv() local_unnamed_addr #1

declare void @_Z21jc_test_set_test_faili(i32 noundef) local_unnamed_addr #1

declare void @Longtail_Free(ptr noundef) local_unnamed_addr #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 uwtable
declare dso_local noundef i32 @_ZN21jc_test_cmp_eq_helperILb1EE7compareIiiEEiRKT_RKT0_PKcS9_PN23jc_test_enable_argumentIXntsr18jc_test_is_pointerIS5_EE5valueEE4typeE(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3 align 2

declare void @Longtail_DisposeAPI(ptr noundef) local_unnamed_addr #1

declare ptr @Longtail_CreateBlake3HashAPI() local_unnamed_addr #1

declare ptr @Longtail_CreateHPCDCChunkerAPI() local_unnamed_addr #1

declare ptr @Longtail_CreateBikeshedJobAPI(i32 noundef, i32 noundef) local_unnamed_addr #1

declare i32 @Longtail_GetFilesRecursively2(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z14jc_test_cmp_NEIP18Longtail_FileInfosS1_EiT_T0_PKcS5_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z14jc_test_cmp_NEIPjS0_EiT_T0_PKcS4_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @Longtail_CreateVersionIndex(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z14jc_test_cmp_NEIP21Longtail_VersionIndexS1_EiT_T0_PKcS5_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare ptr @Longtail_CreateInMemStorageAPI() local_unnamed_addr #1

declare i32 @Longtail_CreateThread(ptr noundef, ptr noundef, i64 noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

declare i64 @Longtail_GetThreadSize() local_unnamed_addr #1

declare i32 @Longtail_JoinThread(ptr noundef, i64 noundef) local_unnamed_addr #1

declare void @Longtail_DeleteThread(ptr noundef) local_unnamed_addr #1

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z36TestLongtailFSBlockStoreSyncWorkerCBPv(ptr noundef) #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN47Longtail_TestLongtailFSBlockStoreSync__TestCase8TestBodyEv(ptr nocapture noundef nonnull readnone align 8 dereferenceable(8) %0) unnamed_addr #3 align 2 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca %struct.FSBlockStoreSyncWriteContentWorkerContext, align 8
  %9 = alloca [8 x ptr], align 16
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = tail call ptr @Longtail_CreateInMemStorageAPI()
  %13 = tail call ptr @Longtail_CreateBlake3HashAPI()
  %14 = tail call ptr @Longtail_CreateHPCDCChunkerAPI()
  %15 = tail call ptr @Longtail_CreateBikeshedJobAPI(i32 noundef 8, i32 noundef 0)
  %16 = getelementptr inbounds i8, ptr %8, i64 8
  %17 = getelementptr inbounds i8, ptr %8, i64 16
  %18 = getelementptr inbounds i8, ptr %8, i64 24
  %19 = getelementptr inbounds i8, ptr %8, i64 32
  %20 = getelementptr inbounds i8, ptr %8, i64 40
  %21 = getelementptr inbounds i8, ptr %8, i64 44
  %22 = getelementptr inbounds i8, ptr %9, i64 8
  %23 = getelementptr inbounds i8, ptr %9, i64 16
  %24 = getelementptr inbounds i8, ptr %9, i64 24
  %25 = getelementptr inbounds i8, ptr %9, i64 32
  %26 = getelementptr inbounds i8, ptr %9, i64 40
  %27 = getelementptr inbounds i8, ptr %9, i64 48
  %28 = getelementptr inbounds i8, ptr %9, i64 56
  br label %29

29:                                               ; preds = %1, %.critedge.preheader
  %.04480 = phi i32 [ 0, %1 ], [ %147, %.critedge.preheader ]
  call void @_ZL19CreateRandomContentP19Longtail_StorageAPIPKcjjj(ptr noundef %12, ptr noundef nonnull @.str.677, i32 noundef 33, i32 noundef 0, i32 noundef 40459)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #4
  %30 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %31 = getelementptr inbounds i8, ptr %30, i64 96
  %32 = load i32, ptr %31, align 8
  %33 = and i32 %32, -16776961
  %34 = or disjoint i32 %33, 1598720
  store i32 %34, ptr %31, align 8
  %35 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %36 = getelementptr inbounds i8, ptr %35, i64 32
  store ptr @.str.3, ptr %36, align 8, !tbaa !5
  call void @_Z28jc_test_increment_assertionsv()
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #4
  store i32 0, ptr %3, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #4
  %37 = call i32 @Longtail_GetFilesRecursively2(ptr noundef %12, ptr noundef %15, ptr noundef null, ptr noundef null, ptr noundef null, ptr noundef nonnull @.str.677, ptr noundef nonnull %2)
  store i32 %37, ptr %4, align 4, !tbaa !13
  %38 = call noundef i32 @_ZN21jc_test_cmp_eq_helperILb1EE7compareIiiEEiRKT_RKT0_PKcS9_PN23jc_test_enable_argumentIXntsr18jc_test_is_pointerIS5_EE5valueEE4typeE(ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 4 dereferenceable(4) %4, ptr noundef nonnull @.str.46, ptr noundef nonnull @.str.724, ptr noundef null)
  %39 = icmp eq i32 %38, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #4
  br i1 %39, label %.thread62, label %40

40:                                               ; preds = %29
  %41 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %42 = getelementptr inbounds i8, ptr %41, i64 96
  %43 = load i32, ptr %42, align 8
  %44 = and i32 %43, -16776961
  %45 = or disjoint i32 %44, 1598976
  store i32 %45, ptr %42, align 8
  %46 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %47 = getelementptr inbounds i8, ptr %46, i64 32
  store ptr @.str.3, ptr %47, align 8, !tbaa !5
  call void @_Z28jc_test_increment_assertionsv()
  %48 = load ptr, ptr %2, align 8, !tbaa !14
  %49 = call noundef i32 @_Z14jc_test_cmp_NEIP18Longtail_FileInfosS1_EiT_T0_PKcS5_(ptr noundef null, ptr noundef %48, ptr noundef nonnull @.str.253, ptr noundef nonnull @.str.679)
  %50 = icmp eq i32 %49, 0
  br i1 %50, label %.thread62, label %51

51:                                               ; preds = %40
  %52 = load ptr, ptr %2, align 8, !tbaa !14
  %53 = call noundef ptr @_ZL12SetAssetTagsP19Longtail_StorageAPIPK18Longtail_FileInfosj(ptr noundef %12, ptr noundef %52, i32 noundef 0)
  %54 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %55 = getelementptr inbounds i8, ptr %54, i64 96
  %56 = load i32, ptr %55, align 8
  %57 = and i32 %56, -16776961
  %58 = or disjoint i32 %57, 1599744
  store i32 %58, ptr %55, align 8
  %59 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %60 = getelementptr inbounds i8, ptr %59, i64 32
  store ptr @.str.3, ptr %60, align 8, !tbaa !5
  call void @_Z28jc_test_increment_assertionsv()
  %61 = call noundef i32 @_Z14jc_test_cmp_NEIPjS0_EiT_T0_PKcS4_(ptr noundef null, ptr noundef %53, ptr noundef nonnull @.str.255, ptr noundef nonnull @.str.256)
  %62 = icmp eq i32 %61, 0
  br i1 %62, label %.thread62, label %63

63:                                               ; preds = %51
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #4
  %64 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %65 = getelementptr inbounds i8, ptr %64, i64 96
  %66 = load i32, ptr %65, align 8
  %67 = and i32 %66, -16776961
  %68 = or disjoint i32 %67, 1603584
  store i32 %68, ptr %65, align 8
  %69 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %70 = getelementptr inbounds i8, ptr %69, i64 32
  store ptr @.str.3, ptr %70, align 8, !tbaa !5
  call void @_Z28jc_test_increment_assertionsv()
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #4
  store i32 0, ptr %6, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #4
  %71 = load ptr, ptr %2, align 8, !tbaa !14
  %72 = call i32 @Longtail_CreateVersionIndex(ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef null, ptr noundef null, ptr noundef null, ptr noundef nonnull @.str.677, ptr noundef %71, ptr noundef %53, i32 noundef 4904, i32 noundef 0, ptr noundef nonnull %5)
  store i32 %72, ptr %7, align 4, !tbaa !13
  %73 = call noundef i32 @_ZN21jc_test_cmp_eq_helperILb1EE7compareIiiEEiRKT_RKT0_PKcS9_PN23jc_test_enable_argumentIXntsr18jc_test_is_pointerIS5_EE5valueEE4typeE(ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull @.str.46, ptr noundef nonnull @.str.756, ptr noundef null)
  %74 = icmp eq i32 %73, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #4
  br i1 %74, label %.thread66, label %75

75:                                               ; preds = %63
  %76 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %77 = getelementptr inbounds i8, ptr %76, i64 96
  %78 = load i32, ptr %77, align 8
  %79 = and i32 %78, -16776961
  %80 = or disjoint i32 %79, 1603840
  store i32 %80, ptr %77, align 8
  %81 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %82 = getelementptr inbounds i8, ptr %81, i64 32
  store ptr @.str.3, ptr %82, align 8, !tbaa !5
  call void @_Z28jc_test_increment_assertionsv()
  %83 = load ptr, ptr %5, align 8, !tbaa !14
  %84 = call noundef i32 @_Z14jc_test_cmp_NEIP21Longtail_VersionIndexS1_EiT_T0_PKcS5_(ptr noundef null, ptr noundef %83, ptr noundef nonnull @.str.259, ptr noundef nonnull @.str.260)
  %85 = icmp eq i32 %84, 0
  br i1 %85, label %.thread66, label %86

86:                                               ; preds = %75
  call void @Longtail_Free(ptr noundef %53)
  %87 = load ptr, ptr %2, align 8, !tbaa !14
  call void @Longtail_Free(ptr noundef %87)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %8) #4
  store ptr %12, ptr %8, align 8, !tbaa !15
  store ptr %13, ptr %16, align 8, !tbaa !17
  store ptr %15, ptr %17, align 8, !tbaa !18
  store ptr @.str.677, ptr %18, align 8, !tbaa !19
  %88 = load ptr, ptr %5, align 8, !tbaa !14
  store ptr %88, ptr %19, align 8, !tbaa !20
  store i32 26973, ptr %20, align 8, !tbaa !21
  store i32 11, ptr %21, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #4
  br label %89

89:                                               ; preds = %86, %111
  %.04378 = phi i32 [ 0, %86 ], [ %112, %111 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #4
  %90 = call i64 @Longtail_GetThreadSize()
  %91 = call ptr @Longtail_Alloc(ptr noundef null, i64 noundef %90)
  %92 = zext nneg i32 %.04378 to i64
  %93 = getelementptr inbounds [8 x ptr], ptr %9, i64 0, i64 %92
  %94 = call i32 @Longtail_CreateThread(ptr noundef %91, ptr noundef nonnull @_Z36TestLongtailFSBlockStoreSyncWorkerCBPv, i64 noundef 0, ptr noundef nonnull %8, i32 noundef -1, ptr noundef nonnull %93)
  store i32 %94, ptr %10, align 4, !tbaa !13
  %.not = icmp eq i32 %94, 0
  br i1 %.not, label %111, label %.preheader

.preheader:                                       ; preds = %89
  %.not5376 = icmp eq i32 %.04378, 0
  br i1 %.not5376, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader, %.lr.ph
  %indvars.iv = phi i64 [ %95, %.lr.ph ], [ %92, %.preheader ]
  %95 = add nsw i64 %indvars.iv, -1
  %96 = getelementptr inbounds [8 x ptr], ptr %9, i64 0, i64 %95
  %97 = load ptr, ptr %96, align 8, !tbaa !14
  %98 = call i32 @Longtail_JoinThread(ptr noundef %97, i64 noundef -1)
  %99 = load ptr, ptr %96, align 8, !tbaa !14
  call void @Longtail_DeleteThread(ptr noundef %99)
  %100 = load ptr, ptr %96, align 8, !tbaa !14
  call void @Longtail_Free(ptr noundef %100)
  %.not53.wide = icmp eq i64 %95, 0
  br i1 %.not53.wide, label %._crit_edge, label %.lr.ph, !llvm.loop !23

._crit_edge:                                      ; preds = %.lr.ph, %.preheader
  %101 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %102 = getelementptr inbounds i8, ptr %101, i64 96
  %103 = load i32, ptr %102, align 8
  %104 = and i32 %103, -16776961
  %105 = or disjoint i32 %104, 1608448
  store i32 %105, ptr %102, align 8
  %106 = call noundef ptr @_ZL19jc_test_get_fixturev()
  %107 = getelementptr inbounds i8, ptr %106, i64 32
  store ptr @.str.3, ptr %107, align 8, !tbaa !5
  call void @_Z28jc_test_increment_assertionsv()
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #4
  store i32 0, ptr %11, align 4, !tbaa !13
  %108 = call noundef i32 @_ZN21jc_test_cmp_eq_helperILb1EE7compareIiiEEiRKT_RKT0_PKcS9_PN23jc_test_enable_argumentIXntsr18jc_test_is_pointerIS5_EE5valueEE4typeE(ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull @.str.46, ptr noundef nonnull @.str.616, ptr noundef null)
  %109 = icmp eq i32 %108, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #4
  br i1 %109, label %110, label %111

110:                                              ; preds = %._crit_edge
  call void @_Z21jc_test_set_test_faili(i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #4
  br label %.thread73

111:                                              ; preds = %._crit_edge, %89
  %.3.ph = phi i32 [ %.04378, %89 ], [ -1, %._crit_edge ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  %112 = add nsw i32 %.3.ph, 1
  %113 = icmp ugt i32 %112, 7
  br i1 %113, label %.critedge.preheader, label %89, !llvm.loop !25

.critedge.preheader:                              ; preds = %111
  %114 = load ptr, ptr %9, align 16, !tbaa !14
  %115 = call i32 @Longtail_JoinThread(ptr noundef %114, i64 noundef -1)
  %116 = load ptr, ptr %9, align 16, !tbaa !14
  call void @Longtail_DeleteThread(ptr noundef %116)
  %117 = load ptr, ptr %9, align 16, !tbaa !14
  call void @Longtail_Free(ptr noundef %117)
  %118 = load ptr, ptr %22, align 8, !tbaa !14
  %119 = call i32 @Longtail_JoinThread(ptr noundef %118, i64 noundef -1)
  %120 = load ptr, ptr %22, align 8, !tbaa !14
  call void @Longtail_DeleteThread(ptr noundef %120)
  %121 = load ptr, ptr %22, align 8, !tbaa !14
  call void @Longtail_Free(ptr noundef %121)
  %122 = load ptr, ptr %23, align 16, !tbaa !14
  %123 = call i32 @Longtail_JoinThread(ptr noundef %122, i64 noundef -1)
  %124 = load ptr, ptr %23, align 16, !tbaa !14
  call void @Longtail_DeleteThread(ptr noundef %124)
  %125 = load ptr, ptr %23, align 16, !tbaa !14
  call void @Longtail_Free(ptr noundef %125)
  %126 = load ptr, ptr %24, align 8, !tbaa !14
  %127 = call i32 @Longtail_JoinThread(ptr noundef %126, i64 noundef -1)
  %128 = load ptr, ptr %24, align 8, !tbaa !14
  call void @Longtail_DeleteThread(ptr noundef %128)
  %129 = load ptr, ptr %24, align 8, !tbaa !14
  call void @Longtail_Free(ptr noundef %129)
  %130 = load ptr, ptr %25, align 16, !tbaa !14
  %131 = call i32 @Longtail_JoinThread(ptr noundef %130, i64 noundef -1)
  %132 = load ptr, ptr %25, align 16, !tbaa !14
  call void @Longtail_DeleteThread(ptr noundef %132)
  %133 = load ptr, ptr %25, align 16, !tbaa !14
  call void @Longtail_Free(ptr noundef %133)
  %134 = load ptr, ptr %26, align 8, !tbaa !14
  %135 = call i32 @Longtail_JoinThread(ptr noundef %134, i64 noundef -1)
  %136 = load ptr, ptr %26, align 8, !tbaa !14
  call void @Longtail_DeleteThread(ptr noundef %136)
  %137 = load ptr, ptr %26, align 8, !tbaa !14
  call void @Longtail_Free(ptr noundef %137)
  %138 = load ptr, ptr %27, align 16, !tbaa !14
  %139 = call i32 @Longtail_JoinThread(ptr noundef %138, i64 noundef -1)
  %140 = load ptr, ptr %27, align 16, !tbaa !14
  call void @Longtail_DeleteThread(ptr noundef %140)
  %141 = load ptr, ptr %27, align 16, !tbaa !14
  call void @Longtail_Free(ptr noundef %141)
  %142 = load ptr, ptr %28, align 8, !tbaa !14
  %143 = call i32 @Longtail_JoinThread(ptr noundef %142, i64 noundef -1)
  %144 = load ptr, ptr %28, align 8, !tbaa !14
  call void @Longtail_DeleteThread(ptr noundef %144)
  %145 = load ptr, ptr %28, align 8, !tbaa !14
  call void @Longtail_Free(ptr noundef %145)
  %146 = load ptr, ptr %5, align 8, !tbaa !14
  call void @Longtail_Free(ptr noundef %146)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #4
  %147 = add nuw nsw i32 %.04480, 1
  %exitcond.not = icmp eq i32 %147, 4
  br i1 %exitcond.not, label %148, label %29, !llvm.loop !26

.thread62:                                        ; preds = %51, %40, %29
  call void @_Z21jc_test_set_test_faili(i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #4
  br label %.thread73

.thread66:                                        ; preds = %75, %63
  call void @_Z21jc_test_set_test_faili(i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #4
  br label %.thread73

148:                                              ; preds = %.critedge.preheader
  %.not54 = icmp eq ptr %15, null
  br i1 %.not54, label %150, label %149

149:                                              ; preds = %148
  call void @Longtail_DisposeAPI(ptr noundef nonnull %15)
  br label %150

150:                                              ; preds = %149, %148
  %.not55 = icmp eq ptr %13, null
  br i1 %.not55, label %152, label %151

151:                                              ; preds = %150
  call void @Longtail_DisposeAPI(ptr noundef nonnull %13)
  br label %152

152:                                              ; preds = %151, %150
  %.not56 = icmp eq ptr %14, null
  br i1 %.not56, label %154, label %153

153:                                              ; preds = %152
  call void @Longtail_DisposeAPI(ptr noundef nonnull %14)
  br label %154

154:                                              ; preds = %153, %152
  %.not57 = icmp eq ptr %12, null
  br i1 %.not57, label %.thread73, label %155

155:                                              ; preds = %154
  call void @Longtail_DisposeAPI(ptr noundef nonnull %12)
  br label %.thread73

.thread73:                                        ; preds = %.thread66, %.thread62, %110, %154, %155
  ret void
}

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

!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 32}
!6 = !{!"_ZTS15jc_test_fixture", !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !10, i64 64, !11, i64 88, !11, i64 91, !11, i64 91, !11, i64 91, !11, i64 91, !11, i64 92, !11, i64 96, !11, i64 97, !11, i64 99, !11, i64 100}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTS13jc_test_stats", !11, i64 0, !11, i64 4, !11, i64 6, !11, i64 8, !11, i64 12, !12, i64 16}
!11 = !{!"int", !8, i64 0}
!12 = !{!"long", !8, i64 0}
!13 = !{!11, !11, i64 0}
!14 = !{!7, !7, i64 0}
!15 = !{!16, !7, i64 0}
!16 = !{!"_ZTS41FSBlockStoreSyncWriteContentWorkerContext", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !11, i64 40, !11, i64 44}
!17 = !{!16, !7, i64 8}
!18 = !{!16, !7, i64 16}
!19 = !{!16, !7, i64 24}
!20 = !{!16, !7, i64 32}
!21 = !{!16, !11, i64 40}
!22 = !{!16, !11, i64 44}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = distinct !{!26, !24}


; Effective O3 passes: ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass