; LLVM IR from sylefeb/Silixel :: src/fstapi (fstapi)

; 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.fstWriterContext = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64, ptr, ptr, ptr, i32, ptr, i32, i32, i32, i8, i64, i64, i32, i32, i64, i64, i32, i32, i32, i64, i32, double, ptr, ptr, i32, i64, i8, i8, i8, i8, i8, i64, i64, i64, i64, i64, i32, ptr, i32, i8, ptr, ptr, ptr, ptr, i32 }
%struct.fstBlackoutChain = type { ptr, i64, i8 }

@.str.3 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [3 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: nounwind allocsize(0,1)
declare noalias ptr @calloc(i64 noundef, i64 noundef) #1

; Function Attrs: nounwind
declare void @free(ptr noundef) #2

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #3

; Function Attrs: nounwind
declare ptr @strcpy(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #4

declare i32 @fclose(ptr noundef) #5

; Function Attrs: nounwind
declare i32 @unlink(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @tmpfile_close(ptr noundef, ptr noundef) #6

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

; Function Attrs: nounwind uwtable
define dso_local void @fstWriterClose(ptr noundef %0) #6 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca i64, align 8
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca i32, align 4
  %8 = alloca i64, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i32, align 4
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i32, align 4
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca i32, align 4
  %38 = alloca [32768 x i8], align 16
  %39 = alloca i64, align 8
  %40 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %41 = load ptr, ptr %2, align 8, !tbaa !5
  %42 = icmp ne ptr %41, null
  br i1 %42, label %43, label %956

43:                                               ; preds = %1
  %44 = load ptr, ptr %2, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.fstWriterContext, ptr %44, i32 0, i32 36
  %46 = load i8, ptr %45, align 1, !tbaa !9
  %47 = icmp ne i8 %46, 0
  br i1 %47, label %956, label %48

48:                                               ; preds = %43
  %49 = load ptr, ptr %2, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.fstWriterContext, ptr %49, i32 0, i32 35
  %51 = load i8, ptr %50, align 2, !tbaa !14
  %52 = icmp ne i8 %51, 0
  br i1 %52, label %956, label %53

53:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #9
  store ptr null, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #9
  %54 = load ptr, ptr %2, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.fstWriterContext, ptr %54, i32 0, i32 36
  store i8 1, ptr %55, align 1, !tbaa !9
  %56 = load ptr, ptr %2, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.fstWriterContext, ptr %56, i32 0, i32 34
  %58 = load i8, ptr %57, align 1
  %59 = lshr i8 %58, 4
  %60 = and i8 %59, 1
  %61 = zext i8 %60 to i32
  %62 = icmp ne i32 %61, 0
  br i1 %62, label %63, label %103

63:                                               ; preds = %53
  %64 = load ptr, ptr %2, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.fstWriterContext, ptr %64, i32 0, i32 18
  %66 = load i64, ptr %65, align 8, !tbaa !15
  %67 = icmp ne i64 %66, 0
  br i1 %67, label %68, label %103

68:                                               ; preds = %63
  %69 = load ptr, ptr %2, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.fstWriterContext, ptr %69, i32 0, i32 23
  %71 = load i32, ptr %70, align 8, !tbaa !16
  %72 = icmp ule i32 %71, 1
  br i1 %72, label %73, label %103

73:                                               ; preds = %68
  %74 = load ptr, ptr %2, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.fstWriterContext, ptr %74, i32 0, i32 16
  %76 = load i8, ptr %75, align 4
  %77 = lshr i8 %76, 1
  %78 = and i8 %77, 1
  %79 = zext i8 %78 to i32
  %80 = icmp ne i32 %79, 0
  br i1 %80, label %103, label %81

81:                                               ; preds = %73
  %82 = load ptr, ptr %2, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.fstWriterContext, ptr %82, i32 0, i32 0
  %84 = load ptr, ptr %83, align 8, !tbaa !17
  %85 = call i32 @fileno(ptr noundef %84) #9
  %86 = load ptr, ptr %2, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.fstWriterContext, ptr %86, i32 0, i32 18
  %88 = load i64, ptr %87, align 8, !tbaa !15
  %89 = call i32 @fstFtruncate(i32 noundef %85, i64 noundef %88)
  %90 = load ptr, ptr %2, align 8, !tbaa !5
  %91 = load ptr, ptr %2, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.fstWriterContext, ptr %91, i32 0, i32 0
  %93 = load ptr, ptr %92, align 8, !tbaa !17
  %94 = load ptr, ptr %2, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.fstWriterContext, ptr %94, i32 0, i32 18
  %96 = load i64, ptr %95, align 8, !tbaa !15
  %97 = call i32 @fstWriterFseeko(ptr noundef %90, ptr noundef %93, i64 noundef %96, i32 noundef 0)
  %98 = load ptr, ptr %2, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.fstWriterContext, ptr %98, i32 0, i32 34
  %100 = load i8, ptr %99, align 1
  %101 = and i8 %100, -17
  %102 = or i8 %101, 0
  store i8 %102, ptr %99, align 1
  br label %162

103:                                              ; preds = %73, %68, %63, %53
  %104 = load ptr, ptr %2, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.fstWriterContext, ptr %104, i32 0, i32 34
  %106 = load i8, ptr %105, align 1
  %107 = and i8 %106, -5
  %108 = or i8 %107, 4
  store i8 %108, ptr %105, align 1
  %109 = load ptr, ptr %2, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.fstWriterContext, ptr %109, i32 0, i32 34
  %111 = load i8, ptr %110, align 1
  %112 = lshr i8 %111, 3
  %113 = and i8 %112, 1
  %114 = zext i8 %113 to i32
  %115 = icmp ne i32 %114, 0
  br i1 %115, label %161, label %116

116:                                              ; preds = %103
  %117 = load ptr, ptr %2, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.fstWriterContext, ptr %117, i32 0, i32 16
  %119 = load i8, ptr %118, align 4
  %120 = lshr i8 %119, 1
  %121 = and i8 %120, 1
  %122 = zext i8 %121 to i32
  %123 = icmp ne i32 %122, 0
  %124 = xor i1 %123, true
  %125 = xor i1 %124, true
  %126 = zext i1 %125 to i32
  %127 = sext i32 %126 to i64
  %128 = call i64 @llvm.expect.i64(i64 %127, i64 0)
  %129 = icmp ne i64 %128, 0
  br i1 %129, label %130, label %159

130:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #9
  %131 = load ptr, ptr %2, align 8, !tbaa !5
  call void @fstWriterEmitTimeChange(ptr noundef %131, i64 noundef 0)
  store i32 0, ptr %7, align 4, !tbaa !18
  br label %132

132:                                              ; preds = %155, %130
  %133 = load i32, ptr %7, align 4, !tbaa !18
  %134 = load ptr, ptr %2, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.fstWriterContext, ptr %134, i32 0, i32 13
  %136 = load i32, ptr %135, align 8, !tbaa !19
  %137 = icmp ult i32 %133, %136
  br i1 %137, label %138, label %158

138:                                              ; preds = %132
  %139 = load ptr, ptr %2, align 8, !tbaa !5
  %140 = load i32, ptr %7, align 4, !tbaa !18
  %141 = add i32 %140, 1
  %142 = load ptr, ptr %2, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.fstWriterContext, ptr %142, i32 0, i32 9
  %144 = load ptr, ptr %143, align 8, !tbaa !20
  %145 = load ptr, ptr %2, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.fstWriterContext, ptr %145, i32 0, i32 8
  %147 = load ptr, ptr %146, align 8, !tbaa !21
  %148 = load i32, ptr %7, align 4, !tbaa !18
  %149 = mul i32 4, %148
  %150 = zext i32 %149 to i64
  %151 = getelementptr inbounds i32, ptr %147, i64 %150
  %152 = load i32, ptr %151, align 4, !tbaa !18
  %153 = zext i32 %152 to i64
  %154 = getelementptr inbounds i8, ptr %144, i64 %153
  call void @fstWriterEmitValueChange(ptr noundef %139, i32 noundef %141, ptr noundef %154)
  br label %155

155:                                              ; preds = %138
  %156 = load i32, ptr %7, align 4, !tbaa !18
  %157 = add i32 %156, 1
  store i32 %157, ptr %7, align 4, !tbaa !18
  br label %132, !llvm.loop !22

158:                                              ; preds = %132
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  br label %159

159:                                              ; preds = %158, %116
  %160 = load ptr, ptr %2, align 8, !tbaa !5
  call void @fstWriterFlushContextPrivate(ptr noundef %160)
  br label %161

161:                                              ; preds = %159, %103
  br label %162

162:                                              ; preds = %161, %81
  %163 = load ptr, ptr %2, align 8, !tbaa !5
  call void @fstDestroyMmaps(ptr noundef %163, i32 noundef 1)
  %164 = load ptr, ptr %2, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.fstWriterContext, ptr %164, i32 0, i32 10
  %166 = load ptr, ptr %165, align 8, !tbaa !24
  %167 = icmp ne ptr %166, null
  br i1 %167, label %168, label %176

168:                                              ; preds = %162
  %169 = load ptr, ptr %2, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.fstWriterContext, ptr %169, i32 0, i32 10
  %171 = load ptr, ptr %170, align 8, !tbaa !24
  call void @free(ptr noundef %171) #9
  %172 = load ptr, ptr %2, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.fstWriterContext, ptr %172, i32 0, i32 10
  store ptr null, ptr %173, align 8, !tbaa !24
  %174 = load ptr, ptr %2, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.fstWriterContext, ptr %174, i32 0, i32 11
  store i32 0, ptr %175, align 8, !tbaa !25
  br label %176

176:                                              ; preds = %168, %162
  %177 = load ptr, ptr %2, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.fstWriterContext, ptr %177, i32 0, i32 2
  %179 = load ptr, ptr %178, align 8, !tbaa !26
  %180 = call i32 @fflush(ptr noundef %179)
  %181 = load ptr, ptr %2, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.fstWriterContext, ptr %181, i32 0, i32 2
  %183 = load ptr, ptr %182, align 8, !tbaa !26
  %184 = call i64 @ftello(ptr noundef %183)
  store i64 %184, ptr %5, align 8, !tbaa !27
  %185 = call ptr @__errno_location() #10
  store i32 0, ptr %185, align 4, !tbaa !18
  %186 = load i64, ptr %5, align 8, !tbaa !27
  %187 = icmp ne i64 %186, 0
  br i1 %187, label %188, label %195

188:                                              ; preds = %176
  %189 = load i64, ptr %5, align 8, !tbaa !27
  %190 = load ptr, ptr %2, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.fstWriterContext, ptr %190, i32 0, i32 2
  %192 = load ptr, ptr %191, align 8, !tbaa !26
  %193 = call i32 @fileno(ptr noundef %192) #9
  %194 = call ptr @mmap(ptr noundef null, i64 noundef %189, i32 noundef 3, i32 noundef 1, i32 noundef %193, i64 noundef 0) #9
  store ptr %194, ptr %3, align 8, !tbaa !5
  call void @fstWriterMmapSanity(ptr noundef %194, ptr noundef @.str.3, i32 noundef 1940, ptr noundef @.str.4)
  br label %195

195:                                              ; preds = %188, %176
  %196 = load ptr, ptr %3, align 8, !tbaa !5
  %197 = icmp ne ptr %196, null
  br i1 %197, label %198, label %288

198:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  %199 = load i64, ptr %5, align 8, !tbaa !27
  store i64 %199, ptr %8, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  %200 = load i64, ptr %8, align 8, !tbaa !27
  %201 = call i64 @compressBound(i64 noundef %200)
  %202 = call noalias ptr @malloc(i64 noundef %201) #11
  store ptr %202, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #9
  %203 = load ptr, ptr %9, align 8, !tbaa !5
  %204 = load ptr, ptr %3, align 8, !tbaa !5
  %205 = load i64, ptr %5, align 8, !tbaa !27
  %206 = call i32 @compress2(ptr noundef %203, ptr noundef %8, ptr noundef %204, i64 noundef %205, i32 noundef 9)
  store i32 %206, ptr %10, align 4, !tbaa !18
  %207 = load i32, ptr %10, align 4, !tbaa !18
  %208 = icmp ne i32 %207, 0
  br i1 %208, label %213, label %209

209:                                              ; preds = %198
  %210 = load i64, ptr %8, align 8, !tbaa !27
  %211 = load i64, ptr %5, align 8, !tbaa !27
  %212 = icmp sgt i64 %210, %211
  br i1 %212, label %213, label %215

213:                                              ; preds = %209, %198
  %214 = load i64, ptr %5, align 8, !tbaa !27
  store i64 %214, ptr %8, align 8, !tbaa !27
  br label %215

215:                                              ; preds = %213, %209
  %216 = load ptr, ptr %2, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.fstWriterContext, ptr %216, i32 0, i32 0
  %218 = load ptr, ptr %217, align 8, !tbaa !17
  %219 = call i64 @ftello(ptr noundef %218)
  store i64 %219, ptr %4, align 8, !tbaa !27
  %220 = load ptr, ptr %2, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.fstWriterContext, ptr %220, i32 0, i32 0
  %222 = load ptr, ptr %221, align 8, !tbaa !17
  %223 = call i32 @fputc(i32 noundef 255, ptr noundef %222)
  %224 = load ptr, ptr %2, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.fstWriterContext, ptr %224, i32 0, i32 0
  %226 = load ptr, ptr %225, align 8, !tbaa !17
  %227 = load i64, ptr %8, align 8, !tbaa !27
  %228 = add i64 %227, 24
  %229 = call i32 @fstWriterUint64(ptr noundef %226, i64 noundef %228)
  %230 = load ptr, ptr %2, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.fstWriterContext, ptr %230, i32 0, i32 0
  %232 = load ptr, ptr %231, align 8, !tbaa !17
  %233 = load i64, ptr %5, align 8, !tbaa !27
  %234 = call i32 @fstWriterUint64(ptr noundef %232, i64 noundef %233)
  %235 = load ptr, ptr %2, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.fstWriterContext, ptr %235, i32 0, i32 0
  %237 = load ptr, ptr %236, align 8, !tbaa !17
  %238 = load ptr, ptr %2, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.fstWriterContext, ptr %238, i32 0, i32 13
  %240 = load i32, ptr %239, align 8, !tbaa !19
  %241 = zext i32 %240 to i64
  %242 = call i32 @fstWriterUint64(ptr noundef %237, i64 noundef %241)
  %243 = load i64, ptr %8, align 8, !tbaa !27
  %244 = load i64, ptr %5, align 8, !tbaa !27
  %245 = icmp ne i64 %243, %244
  br i1 %245, label %246, label %248

246:                                              ; preds = %215
  %247 = load ptr, ptr %9, align 8, !tbaa !5
  br label %250

248:                                              ; preds = %215
  %249 = load ptr, ptr %3, align 8, !tbaa !5
  br label %250

250:                                              ; preds = %248, %246
  %251 = phi ptr [ %247, %246 ], [ %249, %248 ]
  %252 = load i64, ptr %8, align 8, !tbaa !27
  %253 = load ptr, ptr %2, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.fstWriterContext, ptr %253, i32 0, i32 0
  %255 = load ptr, ptr %254, align 8, !tbaa !17
  %256 = call i64 @fstFwrite(ptr noundef %251, i64 noundef %252, i64 noundef 1, ptr noundef %255)
  %257 = load ptr, ptr %2, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.fstWriterContext, ptr %257, i32 0, i32 0
  %259 = load ptr, ptr %258, align 8, !tbaa !17
  %260 = call i32 @fflush(ptr noundef %259)
  %261 = load ptr, ptr %2, align 8, !tbaa !5
  %262 = load ptr, ptr %2, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.fstWriterContext, ptr %262, i32 0, i32 0
  %264 = load ptr, ptr %263, align 8, !tbaa !17
  %265 = load i64, ptr %4, align 8, !tbaa !27
  %266 = call i32 @fstWriterFseeko(ptr noundef %261, ptr noundef %264, i64 noundef %265, i32 noundef 0)
  %267 = load ptr, ptr %2, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.fstWriterContext, ptr %267, i32 0, i32 0
  %269 = load ptr, ptr %268, align 8, !tbaa !17
  %270 = call i32 @fputc(i32 noundef 3, ptr noundef %269)
  %271 = load ptr, ptr %2, align 8, !tbaa !5
  %272 = load ptr, ptr %2, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.fstWriterContext, ptr %272, i32 0, i32 0
  %274 = load ptr, ptr %273, align 8, !tbaa !17
  %275 = call i32 @fstWriterFseeko(ptr noundef %271, ptr noundef %274, i64 noundef 0, i32 noundef 2)
  %276 = load ptr, ptr %2, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.fstWriterContext, ptr %276, i32 0, i32 0
  %278 = load ptr, ptr %277, align 8, !tbaa !17
  %279 = call i32 @fflush(ptr noundef %278)
  %280 = load ptr, ptr %9, align 8, !tbaa !5
  call void @free(ptr noundef %280) #9
  %281 = load ptr, ptr %3, align 8, !tbaa !5
  %282 = icmp ne ptr %281, null
  br i1 %282, label %283, label %287

283:                                              ; preds = %250
  %284 = load ptr, ptr %3, align 8, !tbaa !5
  %285 = load i64, ptr %5, align 8, !tbaa !27
  %286 = call i32 @munmap(ptr noundef %284, i64 noundef %285) #9
  br label %287

287:                                              ; preds = %283, %250
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  br label %288

288:                                              ; preds = %287, %195
  %289 = load ptr, ptr %2, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.fstWriterContext, ptr %289, i32 0, i32 31
  %291 = load i32, ptr %290, align 8, !tbaa !28
  %292 = icmp ne i32 %291, 0
  br i1 %292, label %293, label %409

293:                                              ; preds = %288
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #9
  store i64 0, ptr %11, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  %294 = load ptr, ptr %2, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.fstWriterContext, ptr %294, i32 0, i32 0
  %296 = load ptr, ptr %295, align 8, !tbaa !17
  %297 = call i64 @ftello(ptr noundef %296)
  store i64 %297, ptr %4, align 8, !tbaa !27
  %298 = load ptr, ptr %2, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.fstWriterContext, ptr %298, i32 0, i32 0
  %300 = load ptr, ptr %299, align 8, !tbaa !17
  %301 = call i32 @fputc(i32 noundef 255, ptr noundef %300)
  %302 = load i64, ptr %4, align 8, !tbaa !27
  %303 = add nsw i64 %302, 1
  store i64 %303, ptr %12, align 8, !tbaa !27
  %304 = load ptr, ptr %2, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.fstWriterContext, ptr %304, i32 0, i32 0
  %306 = load ptr, ptr %305, align 8, !tbaa !17
  %307 = call i32 @fstWriterUint64(ptr noundef %306, i64 noundef 0)
  %308 = load ptr, ptr %2, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.fstWriterContext, ptr %308, i32 0, i32 0
  %310 = load ptr, ptr %309, align 8, !tbaa !17
  %311 = load ptr, ptr %2, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.fstWriterContext, ptr %311, i32 0, i32 31
  %313 = load i32, ptr %312, align 8, !tbaa !28
  %314 = zext i32 %313 to i64
  %315 = call i32 @fstWriterVarint(ptr noundef %310, i64 noundef %314)
  store i32 0, ptr %14, align 4, !tbaa !18
  br label %316

316:                                              ; preds = %365, %293
  %317 = load i32, ptr %14, align 4, !tbaa !18
  %318 = load ptr, ptr %2, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.fstWriterContext, ptr %318, i32 0, i32 31
  %320 = load i32, ptr %319, align 8, !tbaa !28
  %321 = icmp ult i32 %317, %320
  br i1 %321, label %322, label %368

322:                                              ; preds = %316
  %323 = load ptr, ptr %2, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.fstWriterContext, ptr %323, i32 0, i32 29
  %325 = load ptr, ptr %324, align 8, !tbaa !29
  %326 = getelementptr inbounds %struct.fstBlackoutChain, ptr %325, i32 0, i32 2
  %327 = load i8, ptr %326, align 8
  %328 = and i8 %327, 1
  %329 = zext i8 %328 to i32
  %330 = load ptr, ptr %2, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.fstWriterContext, ptr %330, i32 0, i32 0
  %332 = load ptr, ptr %331, align 8, !tbaa !17
  %333 = call i32 @fputc(i32 noundef %329, ptr noundef %332)
  %334 = load ptr, ptr %2, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.fstWriterContext, ptr %334, i32 0, i32 0
  %336 = load ptr, ptr %335, align 8, !tbaa !17
  %337 = load ptr, ptr %2, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.fstWriterContext, ptr %337, i32 0, i32 29
  %339 = load ptr, ptr %338, align 8, !tbaa !29
  %340 = getelementptr inbounds %struct.fstBlackoutChain, ptr %339, i32 0, i32 1
  %341 = load i64, ptr %340, align 8, !tbaa !30
  %342 = load i64, ptr %11, align 8, !tbaa !27
  %343 = sub i64 %341, %342
  %344 = call i32 @fstWriterVarint(ptr noundef %336, i64 noundef %343)
  %345 = load ptr, ptr %2, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.fstWriterContext, ptr %345, i32 0, i32 29
  %347 = load ptr, ptr %346, align 8, !tbaa !29
  %348 = getelementptr inbounds %struct.fstBlackoutChain, ptr %347, i32 0, i32 1
  %349 = load i64, ptr %348, align 8, !tbaa !30
  store i64 %349, ptr %11, align 8, !tbaa !27
  %350 = load ptr, ptr %2, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.fstWriterContext, ptr %350, i32 0, i32 29
  %352 = load ptr, ptr %351, align 8, !tbaa !29
  %353 = getelementptr inbounds %struct.fstBlackoutChain, ptr %352, i32 0, i32 0
  %354 = load ptr, ptr %353, align 8, !tbaa !32
  %355 = load ptr, ptr %2, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.fstWriterContext, ptr %355, i32 0, i32 30
  store ptr %354, ptr %356, align 8, !tbaa !33
  %357 = load ptr, ptr %2, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.fstWriterContext, ptr %357, i32 0, i32 29
  %359 = load ptr, ptr %358, align 8, !tbaa !29
  call void @free(ptr noundef %359) #9
  %360 = load ptr, ptr %2, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.fstWriterContext, ptr %360, i32 0, i32 30
  %362 = load ptr, ptr %361, align 8, !tbaa !33
  %363 = load ptr, ptr %2, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.fstWriterContext, ptr %363, i32 0, i32 29
  store ptr %362, ptr %364, align 8, !tbaa !29
  br label %365

365:                                              ; preds = %322
  %366 = load i32, ptr %14, align 4, !tbaa !18
  %367 = add i32 %366, 1
  store i32 %367, ptr %14, align 4, !tbaa !18
  br label %316, !llvm.loop !34

368:                                              ; preds = %316
  %369 = load ptr, ptr %2, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.fstWriterContext, ptr %369, i32 0, i32 0
  %371 = load ptr, ptr %370, align 8, !tbaa !17
  %372 = call i64 @ftello(ptr noundef %371)
  store i64 %372, ptr %13, align 8, !tbaa !27
  %373 = load ptr, ptr %2, align 8, !tbaa !5
  %374 = load ptr, ptr %2, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.fstWriterContext, ptr %374, i32 0, i32 0
  %376 = load ptr, ptr %375, align 8, !tbaa !17
  %377 = load i64, ptr %12, align 8, !tbaa !27
  %378 = call i32 @fstWriterFseeko(ptr noundef %373, ptr noundef %376, i64 noundef %377, i32 noundef 0)
  %379 = load ptr, ptr %2, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.fstWriterContext, ptr %379, i32 0, i32 0
  %381 = load ptr, ptr %380, align 8, !tbaa !17
  %382 = load i64, ptr %13, align 8, !tbaa !27
  %383 = load i64, ptr %12, align 8, !tbaa !27
  %384 = sub nsw i64 %382, %383
  %385 = call i32 @fstWriterUint64(ptr noundef %381, i64 noundef %384)
  %386 = load ptr, ptr %2, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.fstWriterContext, ptr %386, i32 0, i32 0
  %388 = load ptr, ptr %387, align 8, !tbaa !17
  %389 = call i32 @fflush(ptr noundef %388)
  %390 = load ptr, ptr %2, align 8, !tbaa !5
  %391 = load ptr, ptr %2, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.fstWriterContext, ptr %391, i32 0, i32 0
  %393 = load ptr, ptr %392, align 8, !tbaa !17
  %394 = load i64, ptr %4, align 8, !tbaa !27
  %395 = call i32 @fstWriterFseeko(ptr noundef %390, ptr noundef %393, i64 noundef %394, i32 noundef 0)
  %396 = load ptr, ptr %2, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.fstWriterContext, ptr %396, i32 0, i32 0
  %398 = load ptr, ptr %397, align 8, !tbaa !17
  %399 = call i32 @fputc(i32 noundef 2, ptr noundef %398)
  %400 = load ptr, ptr %2, align 8, !tbaa !5
  %401 = load ptr, ptr %2, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.fstWriterContext, ptr %401, i32 0, i32 0
  %403 = load ptr, ptr %402, align 8, !tbaa !17
  %404 = call i32 @fstWriterFseeko(ptr noundef %400, ptr noundef %403, i64 noundef 0, i32 noundef 2)
  %405 = load ptr, ptr %2, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.fstWriterContext, ptr %405, i32 0, i32 0
  %407 = load ptr, ptr %406, align 8, !tbaa !17
  %408 = call i32 @fflush(ptr noundef %407)
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  br label %409

409:                                              ; preds = %368, %288
  %410 = load ptr, ptr %2, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.fstWriterContext, ptr %410, i32 0, i32 34
  %412 = load i8, ptr %411, align 1
  %413 = and i8 %412, 1
  %414 = zext i8 %413 to i32
  %415 = icmp ne i32 %414, 0
  br i1 %415, label %416, label %691

416:                                              ; preds = %409
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  store i32 0, ptr %19, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  %417 = load ptr, ptr %2, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.fstWriterContext, ptr %417, i32 0, i32 12
  %419 = load ptr, ptr %418, align 8, !tbaa !35
  %420 = call i64 @strlen(ptr noundef %419) #12
  %421 = add i64 %420, 5
  %422 = add i64 %421, 1
  %423 = trunc i64 %422 to i32
  store i32 %423, ptr %20, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %424 = load i32, ptr %20, align 4, !tbaa !18
  %425 = sext i32 %424 to i64
  %426 = call noalias ptr @malloc(i64 noundef %425) #11
  store ptr %426, ptr %21, align 8, !tbaa !5
  %427 = load ptr, ptr %2, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.fstWriterContext, ptr %427, i32 0, i32 0
  %429 = load ptr, ptr %428, align 8, !tbaa !17
  %430 = call i64 @ftello(ptr noundef %429)
  store i64 %430, ptr %4, align 8, !tbaa !27
  %431 = load ptr, ptr %2, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.fstWriterContext, ptr %431, i32 0, i32 0
  %433 = load ptr, ptr %432, align 8, !tbaa !17
  %434 = call i32 @fputc(i32 noundef 255, ptr noundef %433)
  %435 = load ptr, ptr %2, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.fstWriterContext, ptr %435, i32 0, i32 0
  %437 = load ptr, ptr %436, align 8, !tbaa !17
  %438 = call i64 @ftello(ptr noundef %437)
  store i64 %438, ptr %6, align 8, !tbaa !27
  %439 = load ptr, ptr %2, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.fstWriterContext, ptr %439, i32 0, i32 0
  %441 = load ptr, ptr %440, align 8, !tbaa !17
  %442 = call i32 @fstWriterUint64(ptr noundef %441, i64 noundef 0)
  %443 = load ptr, ptr %2, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.fstWriterContext, ptr %443, i32 0, i32 0
  %445 = load ptr, ptr %444, align 8, !tbaa !17
  %446 = load ptr, ptr %2, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.fstWriterContext, ptr %446, i32 0, i32 7
  %448 = load i64, ptr %447, align 8, !tbaa !36
  %449 = call i32 @fstWriterUint64(ptr noundef %445, i64 noundef %448)
  %450 = load ptr, ptr %2, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.fstWriterContext, ptr %450, i32 0, i32 16
  %452 = load i8, ptr %451, align 4
  %453 = lshr i8 %452, 2
  %454 = and i8 %453, 1
  %455 = zext i8 %454 to i32
  %456 = icmp ne i32 %455, 0
  br i1 %456, label %523, label %457

457:                                              ; preds = %416
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  %458 = call noalias ptr @malloc(i64 noundef 32768) #11
  store ptr %458, ptr %22, align 8, !tbaa !5
  %459 = load ptr, ptr %2, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.fstWriterContext, ptr %459, i32 0, i32 0
  %461 = load ptr, ptr %460, align 8, !tbaa !17
  %462 = call i32 @fileno(ptr noundef %461) #9
  %463 = call i32 @dup(i32 noundef %462) #9
  store i32 %463, ptr %18, align 4, !tbaa !18
  %464 = load ptr, ptr %2, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.fstWriterContext, ptr %464, i32 0, i32 0
  %466 = load ptr, ptr %465, align 8, !tbaa !17
  %467 = call i32 @fflush(ptr noundef %466)
  %468 = load i32, ptr %18, align 4, !tbaa !18
  %469 = call ptr @gzdopen(i32 noundef %468, ptr noundef @.str.5)
  store ptr %469, ptr %17, align 8, !tbaa !5
  %470 = load ptr, ptr %17, align 8, !tbaa !5
  %471 = icmp ne ptr %470, null
  br i1 %471, label %472, label %518

472:                                              ; preds = %457
  %473 = load ptr, ptr %2, align 8, !tbaa !5
  %474 = load ptr, ptr %2, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.fstWriterContext, ptr %474, i32 0, i32 1
  %476 = load ptr, ptr %475, align 8, !tbaa !37
  %477 = call i32 @fstWriterFseeko(ptr noundef %473, ptr noundef %476, i64 noundef 0, i32 noundef 0)
  store i64 0, ptr %15, align 8, !tbaa !27
  br label %478

478:                                              ; preds = %512, %472
  %479 = load i64, ptr %15, align 8, !tbaa !27
  %480 = load ptr, ptr %2, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.fstWriterContext, ptr %480, i32 0, i32 7
  %482 = load i64, ptr %481, align 8, !tbaa !36
  %483 = icmp slt i64 %479, %482
  br i1 %483, label %484, label %515

484:                                              ; preds = %478
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  %485 = load ptr, ptr %2, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.fstWriterContext, ptr %485, i32 0, i32 7
  %487 = load i64, ptr %486, align 8, !tbaa !36
  %488 = load i64, ptr %15, align 8, !tbaa !27
  %489 = sub nsw i64 %487, %488
  %490 = icmp sgt i64 %489, 32768
  br i1 %490, label %491, label %492

491:                                              ; preds = %484
  br label %498

492:                                              ; preds = %484
  %493 = load ptr, ptr %2, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.fstWriterContext, ptr %493, i32 0, i32 7
  %495 = load i64, ptr %494, align 8, !tbaa !36
  %496 = load i64, ptr %15, align 8, !tbaa !27
  %497 = sub nsw i64 %495, %496
  br label %498

498:                                              ; preds = %492, %491
  %499 = phi i64 [ 32768, %491 ], [ %497, %492 ]
  %500 = trunc i64 %499 to i32
  store i32 %500, ptr %23, align 4, !tbaa !18
  %501 = load ptr, ptr %22, align 8, !tbaa !5
  %502 = load i32, ptr %23, align 4, !tbaa !18
  %503 = zext i32 %502 to i64
  %504 = load ptr, ptr %2, align 8, !tbaa !5
  %505 = getelementptr inbounds %struct.fstWriterContext, ptr %504, i32 0, i32 1
  %506 = load ptr, ptr %505, align 8, !tbaa !37
  %507 = call i64 @fstFread(ptr noundef %501, i64 noundef %503, i64 noundef 1, ptr noundef %506)
  %508 = load ptr, ptr %17, align 8, !tbaa !5
  %509 = load ptr, ptr %22, align 8, !tbaa !5
  %510 = load i32, ptr %23, align 4, !tbaa !18
  %511 = call i32 @gzwrite(ptr noundef %508, ptr noundef %509, i32 noundef %510)
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  br label %512

512:                                              ; preds = %498
  %513 = load i64, ptr %15, align 8, !tbaa !27
  %514 = add nsw i64 %513, 32768
  store i64 %514, ptr %15, align 8, !tbaa !27
  br label %478, !llvm.loop !38

515:                                              ; preds = %478
  %516 = load ptr, ptr %17, align 8, !tbaa !5
  %517 = call i32 @gzclose(ptr noundef %516)
  br label %521

518:                                              ; preds = %457
  %519 = load i32, ptr %18, align 4, !tbaa !18
  %520 = call i32 @close(i32 noundef %519)
  br label %521

521:                                              ; preds = %518, %515
  %522 = load ptr, ptr %22, align 8, !tbaa !5
  call void @free(ptr noundef %522) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  br label %620

523:                                              ; preds = %416
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  store ptr null, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  %524 = load ptr, ptr %2, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.fstWriterContext, ptr %524, i32 0, i32 0
  %526 = load ptr, ptr %525, align 8, !tbaa !17
  %527 = call i32 @fflush(ptr noundef %526)
  %528 = load ptr, ptr %2, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.fstWriterContext, ptr %528, i32 0, i32 7
  %530 = load i64, ptr %529, align 8, !tbaa !36
  %531 = trunc i64 %530 to i32
  %532 = call i32 @LZ4_compressBound(i32 noundef %531)
  store i32 %532, ptr %24, align 4, !tbaa !18
  %533 = load i32, ptr %24, align 4, !tbaa !18
  %534 = sext i32 %533 to i64
  %535 = call noalias ptr @malloc(i64 noundef %534) #11
  store ptr %535, ptr %25, align 8, !tbaa !5
  %536 = call ptr @__errno_location() #10
  store i32 0, ptr %536, align 4, !tbaa !18
  %537 = load ptr, ptr %2, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.fstWriterContext, ptr %537, i32 0, i32 7
  %539 = load i64, ptr %538, align 8, !tbaa !36
  %540 = icmp ne i64 %539, 0
  br i1 %540, label %541, label %550

541:                                              ; preds = %523
  %542 = load ptr, ptr %2, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.fstWriterContext, ptr %542, i32 0, i32 7
  %544 = load i64, ptr %543, align 8, !tbaa !36
  %545 = load ptr, ptr %2, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.fstWriterContext, ptr %545, i32 0, i32 1
  %547 = load ptr, ptr %546, align 8, !tbaa !37
  %548 = call i32 @fileno(ptr noundef %547) #9
  %549 = call ptr @mmap(ptr noundef null, i64 noundef %544, i32 noundef 3, i32 noundef 1, i32 noundef %548, i64 noundef 0) #9
  store ptr %549, ptr %26, align 8, !tbaa !5
  call void @fstWriterMmapSanity(ptr noundef %549, ptr noundef @.str.3, i32 noundef 2069, ptr noundef @.str.6)
  br label %550

550:                                              ; preds = %541, %523
  %551 = load ptr, ptr %26, align 8, !tbaa !5
  %552 = load ptr, ptr %25, align 8, !tbaa !5
  %553 = load ptr, ptr %2, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.fstWriterContext, ptr %553, i32 0, i32 7
  %555 = load i64, ptr %554, align 8, !tbaa !36
  %556 = trunc i64 %555 to i32
  %557 = load i32, ptr %24, align 4, !tbaa !18
  %558 = call i32 @LZ4_compress_default(ptr noundef %551, ptr noundef %552, i32 noundef %556, i32 noundef %557)
  store i32 %558, ptr %27, align 4, !tbaa !18
  %559 = load ptr, ptr %26, align 8, !tbaa !5
  %560 = icmp ne ptr %559, null
  br i1 %560, label %561, label %567

561:                                              ; preds = %550
  %562 = load ptr, ptr %26, align 8, !tbaa !5
  %563 = load ptr, ptr %2, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.fstWriterContext, ptr %563, i32 0, i32 7
  %565 = load i64, ptr %564, align 8, !tbaa !36
  %566 = call i32 @munmap(ptr noundef %562, i64 noundef %565) #9
  br label %567

567:                                              ; preds = %561, %550
  %568 = load ptr, ptr %2, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.fstWriterContext, ptr %568, i32 0, i32 34
  %570 = load i8, ptr %569, align 1
  %571 = lshr i8 %570, 1
  %572 = and i8 %571, 1
  %573 = zext i8 %572 to i32
  %574 = icmp ne i32 %573, 0
  br i1 %574, label %580, label %575

575:                                              ; preds = %567
  %576 = load ptr, ptr %2, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.fstWriterContext, ptr %576, i32 0, i32 7
  %578 = load i64, ptr %577, align 8, !tbaa !36
  %579 = icmp sgt i64 %578, 4194304
  br label %580

580:                                              ; preds = %575, %567
  %581 = phi i1 [ false, %567 ], [ %579, %575 ]
  %582 = zext i1 %581 to i32
  store i32 %582, ptr %19, align 4, !tbaa !18
  %583 = load i32, ptr %19, align 4, !tbaa !18
  %584 = icmp ne i32 %583, 0
  br i1 %584, label %585, label %610

585:                                              ; preds = %580
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  %586 = load i32, ptr %27, align 4, !tbaa !18
  %587 = call i32 @LZ4_compressBound(i32 noundef %586)
  store i32 %587, ptr %29, align 4, !tbaa !18
  %588 = load i32, ptr %29, align 4, !tbaa !18
  %589 = sext i32 %588 to i64
  %590 = call noalias ptr @malloc(i64 noundef %589) #11
  store ptr %590, ptr %28, align 8, !tbaa !5
  %591 = load ptr, ptr %25, align 8, !tbaa !5
  %592 = load ptr, ptr %28, align 8, !tbaa !5
  %593 = load i32, ptr %27, align 4, !tbaa !18
  %594 = load i32, ptr %29, align 4, !tbaa !18
  %595 = call i32 @LZ4_compress_default(ptr noundef %591, ptr noundef %592, i32 noundef %593, i32 noundef %594)
  store i32 %595, ptr %30, align 4, !tbaa !18
  %596 = load ptr, ptr %2, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.fstWriterContext, ptr %596, i32 0, i32 0
  %598 = load ptr, ptr %597, align 8, !tbaa !17
  %599 = load i32, ptr %27, align 4, !tbaa !18
  %600 = sext i32 %599 to i64
  %601 = call i32 @fstWriterVarint(ptr noundef %598, i64 noundef %600)
  %602 = load ptr, ptr %28, align 8, !tbaa !5
  %603 = load i32, ptr %30, align 4, !tbaa !18
  %604 = sext i32 %603 to i64
  %605 = load ptr, ptr %2, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.fstWriterContext, ptr %605, i32 0, i32 0
  %607 = load ptr, ptr %606, align 8, !tbaa !17
  %608 = call i64 @fstFwrite(ptr noundef %602, i64 noundef %604, i64 noundef 1, ptr noundef %607)
  %609 = load ptr, ptr %28, align 8, !tbaa !5
  call void @free(ptr noundef %609) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  br label %618

610:                                              ; preds = %580
  %611 = load ptr, ptr %25, align 8, !tbaa !5
  %612 = load i32, ptr %27, align 4, !tbaa !18
  %613 = sext i32 %612 to i64
  %614 = load ptr, ptr %2, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.fstWriterContext, ptr %614, i32 0, i32 0
  %616 = load ptr, ptr %615, align 8, !tbaa !17
  %617 = call i64 @fstFwrite(ptr noundef %611, i64 noundef %613, i64 noundef 1, ptr noundef %616)
  br label %618

618:                                              ; preds = %610, %585
  %619 = load ptr, ptr %25, align 8, !tbaa !5
  call void @free(ptr noundef %619) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  br label %620

620:                                              ; preds = %618, %521
  %621 = load ptr, ptr %2, align 8, !tbaa !5
  %622 = load ptr, ptr %2, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.fstWriterContext, ptr %622, i32 0, i32 0
  %624 = load ptr, ptr %623, align 8, !tbaa !17
  %625 = call i32 @fstWriterFseeko(ptr noundef %621, ptr noundef %624, i64 noundef 0, i32 noundef 2)
  %626 = load ptr, ptr %2, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.fstWriterContext, ptr %626, i32 0, i32 0
  %628 = load ptr, ptr %627, align 8, !tbaa !17
  %629 = call i64 @ftello(ptr noundef %628)
  store i64 %629, ptr %16, align 8, !tbaa !27
  %630 = load ptr, ptr %2, align 8, !tbaa !5
  %631 = load ptr, ptr %2, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.fstWriterContext, ptr %631, i32 0, i32 0
  %633 = load ptr, ptr %632, align 8, !tbaa !17
  %634 = load i64, ptr %6, align 8, !tbaa !27
  %635 = call i32 @fstWriterFseeko(ptr noundef %630, ptr noundef %633, i64 noundef %634, i32 noundef 0)
  %636 = load ptr, ptr %2, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.fstWriterContext, ptr %636, i32 0, i32 0
  %638 = load ptr, ptr %637, align 8, !tbaa !17
  %639 = load i64, ptr %16, align 8, !tbaa !27
  %640 = load i64, ptr %6, align 8, !tbaa !27
  %641 = sub nsw i64 %639, %640
  %642 = call i32 @fstWriterUint64(ptr noundef %638, i64 noundef %641)
  %643 = load ptr, ptr %2, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.fstWriterContext, ptr %643, i32 0, i32 0
  %645 = load ptr, ptr %644, align 8, !tbaa !17
  %646 = call i32 @fflush(ptr noundef %645)
  %647 = load ptr, ptr %2, align 8, !tbaa !5
  %648 = load ptr, ptr %2, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.fstWriterContext, ptr %648, i32 0, i32 0
  %650 = load ptr, ptr %649, align 8, !tbaa !17
  %651 = load i64, ptr %4, align 8, !tbaa !27
  %652 = call i32 @fstWriterFseeko(ptr noundef %647, ptr noundef %650, i64 noundef %651, i32 noundef 0)
  %653 = load ptr, ptr %2, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.fstWriterContext, ptr %653, i32 0, i32 16
  %655 = load i8, ptr %654, align 4
  %656 = lshr i8 %655, 2
  %657 = and i8 %656, 1
  %658 = zext i8 %657 to i32
  %659 = icmp ne i32 %658, 0
  br i1 %659, label %660, label %665

660:                                              ; preds = %620
  %661 = load i32, ptr %19, align 4, !tbaa !18
  %662 = icmp ne i32 %661, 0
  %663 = zext i1 %662 to i64
  %664 = select i1 %662, i32 7, i32 6
  br label %666

665:                                              ; preds = %620
  br label %666

666:                                              ; preds = %665, %660
  %667 = phi i32 [ %664, %660 ], [ 4, %665 ]
  %668 = load ptr, ptr %2, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.fstWriterContext, ptr %668, i32 0, i32 0
  %670 = load ptr, ptr %669, align 8, !tbaa !17
  %671 = call i32 @fputc(i32 noundef %667, ptr noundef %670)
  %672 = load ptr, ptr %2, align 8, !tbaa !5
  %673 = load ptr, ptr %2, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.fstWriterContext, ptr %673, i32 0, i32 0
  %675 = load ptr, ptr %674, align 8, !tbaa !17
  %676 = call i32 @fstWriterFseeko(ptr noundef %672, ptr noundef %675, i64 noundef 0, i32 noundef 2)
  %677 = load ptr, ptr %2, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.fstWriterContext, ptr %677, i32 0, i32 0
  %679 = load ptr, ptr %678, align 8, !tbaa !17
  %680 = call i32 @fflush(ptr noundef %679)
  %681 = load ptr, ptr %21, align 8, !tbaa !5
  %682 = load i32, ptr %20, align 4, !tbaa !18
  %683 = sext i32 %682 to i64
  %684 = load ptr, ptr %2, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.fstWriterContext, ptr %684, i32 0, i32 12
  %686 = load ptr, ptr %685, align 8, !tbaa !35
  %687 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %681, i64 noundef %683, ptr noundef @.str.7, ptr noundef %686) #9
  %688 = load ptr, ptr %21, align 8, !tbaa !5
  %689 = call i32 @unlink(ptr noundef %688) #9
  %690 = load ptr, ptr %21, align 8, !tbaa !5
  call void @free(ptr noundef %690) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  br label %691

691:                                              ; preds = %666, %409
  %692 = load ptr, ptr %2, align 8, !tbaa !5
  %693 = load ptr, ptr %2, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.fstWriterContext, ptr %693, i32 0, i32 0
  %695 = load ptr, ptr %694, align 8, !tbaa !17
  %696 = call i32 @fstWriterFseeko(ptr noundef %692, ptr noundef %695, i64 noundef 9, i32 noundef 0)
  %697 = load ptr, ptr %2, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.fstWriterContext, ptr %697, i32 0, i32 0
  %699 = load ptr, ptr %698, align 8, !tbaa !17
  %700 = load ptr, ptr %2, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.fstWriterContext, ptr %700, i32 0, i32 22
  %702 = load i64, ptr %701, align 8, !tbaa !39
  %703 = call i32 @fstWriterUint64(ptr noundef %699, i64 noundef %702)
  %704 = load ptr, ptr %2, align 8, !tbaa !5
  %705 = getelementptr inbounds %struct.fstWriterContext, ptr %704, i32 0, i32 0
  %706 = load ptr, ptr %705, align 8, !tbaa !17
  %707 = load ptr, ptr %2, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.fstWriterContext, ptr %707, i32 0, i32 21
  %709 = load i64, ptr %708, align 8, !tbaa !40
  %710 = call i32 @fstWriterUint64(ptr noundef %706, i64 noundef %709)
  %711 = load ptr, ptr %2, align 8, !tbaa !5
  %712 = load ptr, ptr %2, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.fstWriterContext, ptr %712, i32 0, i32 0
  %714 = load ptr, ptr %713, align 8, !tbaa !17
  %715 = call i32 @fstWriterFseeko(ptr noundef %711, ptr noundef %714, i64 noundef 41, i32 noundef 0)
  %716 = load ptr, ptr %2, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.fstWriterContext, ptr %716, i32 0, i32 0
  %718 = load ptr, ptr %717, align 8, !tbaa !17
  %719 = load ptr, ptr %2, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.fstWriterContext, ptr %719, i32 0, i32 27
  %721 = load i32, ptr %720, align 8, !tbaa !41
  %722 = zext i32 %721 to i64
  %723 = call i32 @fstWriterUint64(ptr noundef %718, i64 noundef %722)
  %724 = load ptr, ptr %2, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.fstWriterContext, ptr %724, i32 0, i32 0
  %726 = load ptr, ptr %725, align 8, !tbaa !17
  %727 = load ptr, ptr %2, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.fstWriterContext, ptr %727, i32 0, i32 14
  %729 = load i32, ptr %728, align 4, !tbaa !42
  %730 = zext i32 %729 to i64
  %731 = call i32 @fstWriterUint64(ptr noundef %726, i64 noundef %730)
  %732 = load ptr, ptr %2, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.fstWriterContext, ptr %732, i32 0, i32 0
  %734 = load ptr, ptr %733, align 8, !tbaa !17
  %735 = load ptr, ptr %2, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.fstWriterContext, ptr %735, i32 0, i32 13
  %737 = load i32, ptr %736, align 8, !tbaa !19
  %738 = zext i32 %737 to i64
  %739 = call i32 @fstWriterUint64(ptr noundef %734, i64 noundef %738)
  %740 = load ptr, ptr %2, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.fstWriterContext, ptr %740, i32 0, i32 0
  %742 = load ptr, ptr %741, align 8, !tbaa !17
  %743 = load ptr, ptr %2, align 8, !tbaa !5
  %744 = getelementptr inbounds %struct.fstWriterContext, ptr %743, i32 0, i32 25
  %745 = load i32, ptr %744, align 8, !tbaa !43
  %746 = zext i32 %745 to i64
  %747 = call i32 @fstWriterUint64(ptr noundef %742, i64 noundef %746)
  %748 = load ptr, ptr %2, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.fstWriterContext, ptr %748, i32 0, i32 0
  %750 = load ptr, ptr %749, align 8, !tbaa !17
  %751 = call i32 @fflush(ptr noundef %750)
  %752 = load ptr, ptr %2, align 8, !tbaa !5
  %753 = getelementptr inbounds %struct.fstWriterContext, ptr %752, i32 0, i32 5
  %754 = load ptr, ptr %2, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.fstWriterContext, ptr %754, i32 0, i32 50
  call void @tmpfile_close(ptr noundef %753, ptr noundef %755)
  %756 = load ptr, ptr %2, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.fstWriterContext, ptr %756, i32 0, i32 6
  %758 = load ptr, ptr %757, align 8, !tbaa !44
  call void @free(ptr noundef %758) #9
  %759 = load ptr, ptr %2, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.fstWriterContext, ptr %759, i32 0, i32 6
  store ptr null, ptr %760, align 8, !tbaa !44
  %761 = load ptr, ptr %2, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.fstWriterContext, ptr %761, i32 0, i32 4
  %763 = load ptr, ptr %2, align 8, !tbaa !5
  %764 = getelementptr inbounds %struct.fstWriterContext, ptr %763, i32 0, i32 49
  call void @tmpfile_close(ptr noundef %762, ptr noundef %764)
  %765 = load ptr, ptr %2, align 8, !tbaa !5
  %766 = getelementptr inbounds %struct.fstWriterContext, ptr %765, i32 0, i32 3
  %767 = load ptr, ptr %2, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.fstWriterContext, ptr %767, i32 0, i32 48
  call void @tmpfile_close(ptr noundef %766, ptr noundef %768)
  %769 = load ptr, ptr %2, align 8, !tbaa !5
  %770 = getelementptr inbounds %struct.fstWriterContext, ptr %769, i32 0, i32 2
  %771 = load ptr, ptr %2, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.fstWriterContext, ptr %771, i32 0, i32 47
  call void @tmpfile_close(ptr noundef %770, ptr noundef %772)
  %773 = load ptr, ptr %2, align 8, !tbaa !5
  %774 = getelementptr inbounds %struct.fstWriterContext, ptr %773, i32 0, i32 1
  %775 = load ptr, ptr %774, align 8, !tbaa !37
  %776 = icmp ne ptr %775, null
  br i1 %776, label %777, label %784

777:                                              ; preds = %691
  %778 = load ptr, ptr %2, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.fstWriterContext, ptr %778, i32 0, i32 1
  %780 = load ptr, ptr %779, align 8, !tbaa !37
  %781 = call i32 @fclose(ptr noundef %780)
  %782 = load ptr, ptr %2, align 8, !tbaa !5
  %783 = getelementptr inbounds %struct.fstWriterContext, ptr %782, i32 0, i32 1
  store ptr null, ptr %783, align 8, !tbaa !37
  br label %784

784:                                              ; preds = %777, %691
  %785 = load ptr, ptr %2, align 8, !tbaa !5
  %786 = getelementptr inbounds %struct.fstWriterContext, ptr %785, i32 0, i32 0
  %787 = load ptr, ptr %786, align 8, !tbaa !17
  %788 = icmp ne ptr %787, null
  br i1 %788, label %789, label %941

789:                                              ; preds = %784
  %790 = load ptr, ptr %2, align 8, !tbaa !5
  %791 = getelementptr inbounds %struct.fstWriterContext, ptr %790, i32 0, i32 34
  %792 = load i8, ptr %791, align 1
  %793 = lshr i8 %792, 1
  %794 = and i8 %793, 1
  %795 = zext i8 %794 to i32
  %796 = icmp ne i32 %795, 0
  br i1 %796, label %797, label %933

797:                                              ; preds = %789
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  %798 = load ptr, ptr %2, align 8, !tbaa !5
  %799 = getelementptr inbounds %struct.fstWriterContext, ptr %798, i32 0, i32 12
  %800 = load ptr, ptr %799, align 8, !tbaa !35
  %801 = call i64 @strlen(ptr noundef %800) #12
  %802 = trunc i64 %801 to i32
  store i32 %802, ptr %34, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %803 = load i32, ptr %34, align 4, !tbaa !18
  %804 = add nsw i32 %803, 5
  %805 = sext i32 %804 to i64
  %806 = call noalias ptr @calloc(i64 noundef 1, i64 noundef %805) #13
  store ptr %806, ptr %35, align 8, !tbaa !5
  %807 = load ptr, ptr %35, align 8, !tbaa !5
  %808 = load ptr, ptr %2, align 8, !tbaa !5
  %809 = getelementptr inbounds %struct.fstWriterContext, ptr %808, i32 0, i32 12
  %810 = load ptr, ptr %809, align 8, !tbaa !35
  %811 = call ptr @strcpy(ptr noundef %807, ptr noundef %810) #9
  %812 = load ptr, ptr %35, align 8, !tbaa !5
  %813 = load i32, ptr %34, align 4, !tbaa !18
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds i8, ptr %812, i64 %814
  %816 = call ptr @strcpy(ptr noundef %815, ptr noundef @.str.8) #9
  %817 = load ptr, ptr %35, align 8, !tbaa !5
  %818 = call noalias ptr @fopen(ptr noundef %817, ptr noundef @.str.9)
  store ptr %818, ptr %31, align 8, !tbaa !5
  %819 = load ptr, ptr %31, align 8, !tbaa !5
  %820 = icmp ne ptr %819, null
  br i1 %820, label %821, label %919

821:                                              ; preds = %797
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #9
  call void @llvm.lifetime.start.p0(i64 32768, ptr %38) #9
  %822 = load ptr, ptr %2, align 8, !tbaa !5
  %823 = load ptr, ptr %2, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.fstWriterContext, ptr %823, i32 0, i32 0
  %825 = load ptr, ptr %824, align 8, !tbaa !17
  %826 = call i32 @fstWriterFseeko(ptr noundef %822, ptr noundef %825, i64 noundef 0, i32 noundef 2)
  %827 = load ptr, ptr %2, align 8, !tbaa !5
  %828 = getelementptr inbounds %struct.fstWriterContext, ptr %827, i32 0, i32 0
  %829 = load ptr, ptr %828, align 8, !tbaa !17
  %830 = call i64 @ftello(ptr noundef %829)
  store i64 %830, ptr %33, align 8, !tbaa !27
  %831 = load ptr, ptr %31, align 8, !tbaa !5
  %832 = call i32 @fputc(i32 noundef 254, ptr noundef %831)
  %833 = load ptr, ptr %31, align 8, !tbaa !5
  %834 = call i32 @fstWriterUint64(ptr noundef %833, i64 noundef 0)
  %835 = load ptr, ptr %31, align 8, !tbaa !5
  %836 = load i64, ptr %33, align 8, !tbaa !27
  %837 = call i32 @fstWriterUint64(ptr noundef %835, i64 noundef %836)
  %838 = load ptr, ptr %31, align 8, !tbaa !5
  %839 = call i32 @fflush(ptr noundef %838)
  %840 = load ptr, ptr %2, align 8, !tbaa !5
  %841 = load ptr, ptr %2, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.fstWriterContext, ptr %841, i32 0, i32 0
  %843 = load ptr, ptr %842, align 8, !tbaa !17
  %844 = call i32 @fstWriterFseeko(ptr noundef %840, ptr noundef %843, i64 noundef 0, i32 noundef 0)
  %845 = load ptr, ptr %31, align 8, !tbaa !5
  %846 = call i32 @fileno(ptr noundef %845) #9
  %847 = call i32 @dup(i32 noundef %846) #9
  store i32 %847, ptr %37, align 4, !tbaa !18
  %848 = load i32, ptr %37, align 4, !tbaa !18
  %849 = call ptr @gzdopen(i32 noundef %848, ptr noundef @.str.5)
  store ptr %849, ptr %36, align 8, !tbaa !5
  %850 = load ptr, ptr %36, align 8, !tbaa !5
  %851 = icmp ne ptr %850, null
  br i1 %851, label %852, label %886

852:                                              ; preds = %821
  store i64 0, ptr %32, align 8, !tbaa !27
  br label %853

853:                                              ; preds = %880, %852
  %854 = load i64, ptr %32, align 8, !tbaa !27
  %855 = load i64, ptr %33, align 8, !tbaa !27
  %856 = icmp slt i64 %854, %855
  br i1 %856, label %857, label %883

857:                                              ; preds = %853
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  %858 = load i64, ptr %33, align 8, !tbaa !27
  %859 = load i64, ptr %32, align 8, !tbaa !27
  %860 = sub nsw i64 %858, %859
  %861 = icmp sgt i64 %860, 32768
  br i1 %861, label %862, label %863

862:                                              ; preds = %857
  br label %867

863:                                              ; preds = %857
  %864 = load i64, ptr %33, align 8, !tbaa !27
  %865 = load i64, ptr %32, align 8, !tbaa !27
  %866 = sub nsw i64 %864, %865
  br label %867

867:                                              ; preds = %863, %862
  %868 = phi i64 [ 32768, %862 ], [ %866, %863 ]
  store i64 %868, ptr %39, align 8, !tbaa !27
  %869 = getelementptr inbounds [32768 x i8], ptr %38, i64 0, i64 0
  %870 = load i64, ptr %39, align 8, !tbaa !27
  %871 = load ptr, ptr %2, align 8, !tbaa !5
  %872 = getelementptr inbounds %struct.fstWriterContext, ptr %871, i32 0, i32 0
  %873 = load ptr, ptr %872, align 8, !tbaa !17
  %874 = call i64 @fstFread(ptr noundef %869, i64 noundef %870, i64 noundef 1, ptr noundef %873)
  %875 = load ptr, ptr %36, align 8, !tbaa !5
  %876 = getelementptr inbounds [32768 x i8], ptr %38, i64 0, i64 0
  %877 = load i64, ptr %39, align 8, !tbaa !27
  %878 = trunc i64 %877 to i32
  %879 = call i32 @gzwrite(ptr noundef %875, ptr noundef %876, i32 noundef %878)
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  br label %880

880:                                              ; preds = %867
  %881 = load i64, ptr %32, align 8, !tbaa !27
  %882 = add nsw i64 %881, 32768
  store i64 %882, ptr %32, align 8, !tbaa !27
  br label %853, !llvm.loop !45

883:                                              ; preds = %853
  %884 = load ptr, ptr %36, align 8, !tbaa !5
  %885 = call i32 @gzclose(ptr noundef %884)
  br label %889

886:                                              ; preds = %821
  %887 = load i32, ptr %37, align 4, !tbaa !18
  %888 = call i32 @close(i32 noundef %887)
  br label %889

889:                                              ; preds = %886, %883
  %890 = load ptr, ptr %2, align 8, !tbaa !5
  %891 = load ptr, ptr %31, align 8, !tbaa !5
  %892 = call i32 @fstWriterFseeko(ptr noundef %890, ptr noundef %891, i64 noundef 0, i32 noundef 2)
  %893 = load ptr, ptr %31, align 8, !tbaa !5
  %894 = call i64 @ftello(ptr noundef %893)
  store i64 %894, ptr %32, align 8, !tbaa !27
  %895 = load ptr, ptr %2, align 8, !tbaa !5
  %896 = load ptr, ptr %31, align 8, !tbaa !5
  %897 = call i32 @fstWriterFseeko(ptr noundef %895, ptr noundef %896, i64 noundef 1, i32 noundef 0)
  %898 = load ptr, ptr %31, align 8, !tbaa !5
  %899 = load i64, ptr %32, align 8, !tbaa !27
  %900 = sub nsw i64 %899, 1
  %901 = call i32 @fstWriterUint64(ptr noundef %898, i64 noundef %900)
  %902 = load ptr, ptr %31, align 8, !tbaa !5
  %903 = call i32 @fclose(ptr noundef %902)
  %904 = load ptr, ptr %2, align 8, !tbaa !5
  %905 = getelementptr inbounds %struct.fstWriterContext, ptr %904, i32 0, i32 0
  %906 = load ptr, ptr %905, align 8, !tbaa !17
  %907 = call i32 @fclose(ptr noundef %906)
  %908 = load ptr, ptr %2, align 8, !tbaa !5
  %909 = getelementptr inbounds %struct.fstWriterContext, ptr %908, i32 0, i32 0
  store ptr null, ptr %909, align 8, !tbaa !17
  %910 = load ptr, ptr %2, align 8, !tbaa !5
  %911 = getelementptr inbounds %struct.fstWriterContext, ptr %910, i32 0, i32 12
  %912 = load ptr, ptr %911, align 8, !tbaa !35
  %913 = call i32 @unlink(ptr noundef %912) #9
  %914 = load ptr, ptr %35, align 8, !tbaa !5
  %915 = load ptr, ptr %2, align 8, !tbaa !5
  %916 = getelementptr inbounds %struct.fstWriterContext, ptr %915, i32 0, i32 12
  %917 = load ptr, ptr %916, align 8, !tbaa !35
  %918 = call i32 @rename(ptr noundef %914, ptr noundef %917) #9
  call void @llvm.lifetime.end.p0(i64 32768, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  br label %931

919:                                              ; preds = %797
  %920 = load ptr, ptr %2, align 8, !tbaa !5
  %921 = getelementptr inbounds %struct.fstWriterContext, ptr %920, i32 0, i32 34
  %922 = load i8, ptr %921, align 1
  %923 = and i8 %922, -3
  %924 = or i8 %923, 0
  store i8 %924, ptr %921, align 1
  %925 = load ptr, ptr %2, align 8, !tbaa !5
  %926 = getelementptr inbounds %struct.fstWriterContext, ptr %925, i32 0, i32 0
  %927 = load ptr, ptr %926, align 8, !tbaa !17
  %928 = call i32 @fclose(ptr noundef %927)
  %929 = load ptr, ptr %2, align 8, !tbaa !5
  %930 = getelementptr inbounds %struct.fstWriterContext, ptr %929, i32 0, i32 0
  store ptr null, ptr %930, align 8, !tbaa !17
  br label %931

931:                                              ; preds = %919, %889
  %932 = load ptr, ptr %35, align 8, !tbaa !5
  call void @free(ptr noundef %932) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  br label %940

933:                                              ; preds = %789
  %934 = load ptr, ptr %2, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct.fstWriterContext, ptr %934, i32 0, i32 0
  %936 = load ptr, ptr %935, align 8, !tbaa !17
  %937 = call i32 @fclose(ptr noundef %936)
  %938 = load ptr, ptr %2, align 8, !tbaa !5
  %939 = getelementptr inbounds %struct.fstWriterContext, ptr %938, i32 0, i32 0
  store ptr null, ptr %939, align 8, !tbaa !17
  br label %940

940:                                              ; preds = %933, %931
  br label %941

941:                                              ; preds = %940, %784
  %942 = load ptr, ptr %2, align 8, !tbaa !5
  %943 = getelementptr inbounds %struct.fstWriterContext, ptr %942, i32 0, i32 44
  %944 = load ptr, ptr %943, align 8, !tbaa !46
  %945 = icmp ne ptr %944, null
  br i1 %945, label %946, label %949

946:                                              ; preds = %941
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  store i32 65535, ptr %40, align 4, !tbaa !18
  %947 = load ptr, ptr %2, align 8, !tbaa !5
  %948 = getelementptr inbounds %struct.fstWriterContext, ptr %947, i32 0, i32 44
  call void @JenkinsFree(ptr noundef %948, i32 noundef 65535)
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  br label %949

949:                                              ; preds = %946, %941
  %950 = load ptr, ptr %2, align 8, !tbaa !5
  %951 = getelementptr inbounds %struct.fstWriterContext, ptr %950, i32 0, i32 12
  %952 = load ptr, ptr %951, align 8, !tbaa !35
  call void @free(ptr noundef %952) #9
  %953 = load ptr, ptr %2, align 8, !tbaa !5
  %954 = getelementptr inbounds %struct.fstWriterContext, ptr %953, i32 0, i32 12
  store ptr null, ptr %954, align 8, !tbaa !35
  %955 = load ptr, ptr %2, align 8, !tbaa !5
  call void @free(ptr noundef %955) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #9
  br label %956

956:                                              ; preds = %949, %48, %43, %1
  ret void
}

; Function Attrs: nounwind uwtable
declare hidden i32 @fstFtruncate(i32 noundef, i64 noundef) #6

; Function Attrs: nounwind
declare i32 @fileno(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @fstWriterFseeko(ptr noundef, ptr noundef, i64 noundef, i32 noundef) #6

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare i64 @llvm.expect.i64(i64, i64) #7

; Function Attrs: nounwind uwtable
declare dso_local void @fstWriterEmitTimeChange(ptr noundef, i64 noundef) #6

; Function Attrs: nounwind uwtable
declare dso_local void @fstWriterEmitValueChange(ptr noundef, i32 noundef, ptr noundef) #6

; Function Attrs: nounwind uwtable
declare hidden void @fstWriterFlushContextPrivate(ptr noundef) #6

; Function Attrs: nounwind uwtable
declare hidden void @fstDestroyMmaps(ptr noundef, i32 noundef) #6

declare i32 @fflush(ptr noundef) #5

declare i64 @ftello(ptr noundef) #5

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__errno_location() #8

; Function Attrs: nounwind uwtable
declare hidden void @fstWriterMmapSanity(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #6

; Function Attrs: nounwind
declare ptr @mmap(ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef, i64 noundef) #2

declare i64 @compressBound(i64 noundef) #5

declare i32 @compress2(ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef) #5

declare i32 @fputc(i32 noundef, ptr noundef) #5

; Function Attrs: nounwind uwtable
declare hidden i32 @fstWriterUint64(ptr noundef, i64 noundef) #6

; Function Attrs: nounwind uwtable
declare hidden i64 @fstFwrite(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #6

; Function Attrs: nounwind
declare i32 @munmap(ptr noundef, i64 noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @fstWriterVarint(ptr noundef, i64 noundef) #6

; Function Attrs: nounwind
declare i32 @dup(i32 noundef) #2

declare ptr @gzdopen(i32 noundef, ptr noundef) #5

; Function Attrs: nounwind uwtable
declare hidden i64 @fstFread(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #6

declare i32 @gzwrite(ptr noundef, ptr noundef, i32 noundef) #5

declare i32 @gzclose(ptr noundef) #5

declare i32 @close(i32 noundef) #5

declare i32 @LZ4_compressBound(i32 noundef) #5

declare i32 @LZ4_compress_default(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #5

; Function Attrs: nounwind
declare i32 @snprintf(ptr noundef, i64 noundef, ptr noundef, ...) #2

declare noalias ptr @fopen(ptr noundef, ptr noundef) #5

; Function Attrs: nounwind
declare i32 @rename(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @JenkinsFree(ptr noundef, i32 noundef) #6

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

!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/C++ TBAA"}
!9 = !{!10, !7, i64 235}
!10 = !{!"fstWriterContext", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !11, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !12, i64 88, !6, i64 96, !12, i64 104, !12, i64 108, !12, i64 112, !12, i64 116, !12, i64 116, !12, i64 116, !12, i64 116, !11, i64 120, !11, i64 128, !12, i64 136, !12, i64 140, !11, i64 144, !11, i64 152, !12, i64 160, !12, i64 164, !12, i64 168, !11, i64 176, !12, i64 184, !13, i64 192, !6, i64 200, !6, i64 208, !12, i64 216, !11, i64 224, !7, i64 232, !12, i64 233, !12, i64 233, !12, i64 233, !12, i64 233, !12, i64 233, !12, i64 233, !12, i64 233, !12, i64 233, !7, i64 234, !7, i64 235, !12, i64 236, !11, i64 240, !11, i64 248, !11, i64 256, !11, i64 264, !11, i64 272, !12, i64 280, !6, i64 288, !12, i64 296, !12, i64 300, !6, i64 304, !6, i64 312, !6, i64 320, !6, i64 328, !12, i64 336}
!11 = !{!"long", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = !{!10, !7, i64 234}
!15 = !{!10, !11, i64 128}
!16 = !{!10, !12, i64 160}
!17 = !{!10, !6, i64 0}
!18 = !{!12, !12, i64 0}
!19 = !{!10, !12, i64 104}
!20 = !{!10, !6, i64 72}
!21 = !{!10, !6, i64 64}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!10, !6, i64 80}
!25 = !{!10, !12, i64 88}
!26 = !{!10, !6, i64 16}
!27 = !{!11, !11, i64 0}
!28 = !{!10, !12, i64 216}
!29 = !{!10, !6, i64 200}
!30 = !{!31, !11, i64 8}
!31 = !{!"fstBlackoutChain", !6, i64 0, !11, i64 8, !12, i64 16}
!32 = !{!31, !6, i64 0}
!33 = !{!10, !6, i64 208}
!34 = distinct !{!34, !23}
!35 = !{!10, !6, i64 96}
!36 = !{!10, !11, i64 56}
!37 = !{!10, !6, i64 8}
!38 = distinct !{!38, !23}
!39 = !{!10, !11, i64 152}
!40 = !{!10, !11, i64 144}
!41 = !{!10, !12, i64 184}
!42 = !{!10, !12, i64 108}
!43 = !{!10, !12, i64 168}
!44 = !{!10, !6, i64 48}
!45 = distinct !{!45, !23}
!46 = !{!10, !6, i64 288}


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

@.str.3 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [3 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 nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @calloc(i64 noundef, i64 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strcpy(ptr noalias noundef returned writeonly, ptr noalias nocapture noundef readonly) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #5

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare noundef i32 @unlink(ptr nocapture noundef readonly) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare hidden void @tmpfile_close(ptr noundef, ptr noundef) local_unnamed_addr #7

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

; Function Attrs: nounwind uwtable
define dso_local void @fstWriterClose(ptr noundef %0) local_unnamed_addr #7 {
  %2 = alloca i64, align 8
  %3 = alloca [32768 x i8], align 16
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %408, label %4

4:                                                ; preds = %1
  %5 = getelementptr inbounds i8, ptr %0, i64 235
  %6 = load i8, ptr %5, align 1, !tbaa !5
  %.not300 = icmp eq i8 %6, 0
  br i1 %.not300, label %7, label %408

7:                                                ; preds = %4
  %8 = getelementptr inbounds i8, ptr %0, i64 234
  %9 = load i8, ptr %8, align 2, !tbaa !13
  %.not301 = icmp eq i8 %9, 0
  br i1 %.not301, label %10, label %408

10:                                               ; preds = %7
  store i8 1, ptr %5, align 1, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %0, i64 233
  %12 = load i8, ptr %11, align 1
  %13 = and i8 %12, 16
  %.not302 = icmp eq i8 %13, 0
  br i1 %.not302, label %35, label %14

14:                                               ; preds = %10
  %15 = getelementptr inbounds i8, ptr %0, i64 128
  %16 = load i64, ptr %15, align 8, !tbaa !14
  %.not303 = icmp eq i64 %16, 0
  br i1 %.not303, label %35, label %17

17:                                               ; preds = %14
  %18 = getelementptr inbounds i8, ptr %0, i64 160
  %19 = load i32, ptr %18, align 8, !tbaa !15
  %20 = icmp ult i32 %19, 2
  br i1 %20, label %21, label %35

21:                                               ; preds = %17
  %22 = getelementptr inbounds i8, ptr %0, i64 116
  %23 = load i8, ptr %22, align 4
  %24 = and i8 %23, 2
  %.not304 = icmp eq i8 %24, 0
  br i1 %.not304, label %25, label %35

25:                                               ; preds = %21
  %26 = load ptr, ptr %0, align 8, !tbaa !16
  %27 = tail call i32 @fileno(ptr noundef %26) #12
  %28 = load i64, ptr %15, align 8, !tbaa !14
  %29 = tail call i32 @fstFtruncate(i32 noundef %27, i64 noundef %28)
  %30 = load ptr, ptr %0, align 8, !tbaa !16
  %31 = load i64, ptr %15, align 8, !tbaa !14
  %32 = tail call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %30, i64 noundef %31, i32 noundef 0)
  %33 = load i8, ptr %11, align 1
  %34 = and i8 %33, -17
  store i8 %34, ptr %11, align 1
  br label %60

35:                                               ; preds = %21, %17, %14, %10
  %36 = or i8 %12, 4
  store i8 %36, ptr %11, align 1
  %37 = and i8 %12, 8
  %.not305 = icmp eq i8 %37, 0
  br i1 %.not305, label %38, label %60

38:                                               ; preds = %35
  %39 = getelementptr inbounds i8, ptr %0, i64 116
  %40 = load i8, ptr %39, align 4
  %41 = and i8 %40, 2
  %.not306 = icmp eq i8 %41, 0
  br i1 %.not306, label %.loopexit, label %42, !prof !17

42:                                               ; preds = %38
  tail call void @fstWriterEmitTimeChange(ptr noundef nonnull %0, i64 noundef 0)
  %43 = getelementptr inbounds i8, ptr %0, i64 104
  %44 = load i32, ptr %43, align 8, !tbaa !18
  %.not347 = icmp eq i32 %44, 0
  br i1 %.not347, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %42
  %45 = getelementptr inbounds i8, ptr %0, i64 72
  %46 = getelementptr inbounds i8, ptr %0, i64 64
  br label %47

47:                                               ; preds = %.lr.ph, %47
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %47 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %48 = load ptr, ptr %45, align 8, !tbaa !19
  %49 = load ptr, ptr %46, align 8, !tbaa !20
  %50 = shl nuw nsw i64 %indvars.iv, 2
  %51 = and i64 %50, 4294967292
  %52 = getelementptr inbounds i32, ptr %49, i64 %51
  %53 = load i32, ptr %52, align 4, !tbaa !21
  %54 = zext i32 %53 to i64
  %55 = getelementptr inbounds i8, ptr %48, i64 %54
  %56 = trunc nuw i64 %indvars.iv.next to i32
  tail call void @fstWriterEmitValueChange(ptr noundef nonnull %0, i32 noundef %56, ptr noundef %55)
  %57 = load i32, ptr %43, align 8, !tbaa !18
  %58 = zext i32 %57 to i64
  %59 = icmp ult i64 %indvars.iv.next, %58
  br i1 %59, label %47, label %.loopexit, !llvm.loop !22

.loopexit:                                        ; preds = %47, %42, %38
  tail call void @fstWriterFlushContextPrivate(ptr noundef nonnull %0)
  br label %60

60:                                               ; preds = %35, %.loopexit, %25
  tail call void @fstDestroyMmaps(ptr noundef nonnull %0, i32 noundef 1)
  %61 = getelementptr inbounds i8, ptr %0, i64 80
  %62 = load ptr, ptr %61, align 8, !tbaa !24
  %.not307 = icmp eq ptr %62, null
  br i1 %.not307, label %65, label %63

63:                                               ; preds = %60
  tail call void @free(ptr noundef nonnull %62) #12
  store ptr null, ptr %61, align 8, !tbaa !24
  %64 = getelementptr inbounds i8, ptr %0, i64 88
  store i32 0, ptr %64, align 8, !tbaa !25
  br label %65

65:                                               ; preds = %63, %60
  %66 = getelementptr inbounds i8, ptr %0, i64 16
  %67 = load ptr, ptr %66, align 8, !tbaa !26
  %68 = tail call i32 @fflush(ptr noundef %67)
  %69 = load ptr, ptr %66, align 8, !tbaa !26
  %70 = tail call i64 @ftello(ptr noundef %69)
  %71 = tail call ptr @__errno_location() #13
  store i32 0, ptr %71, align 4, !tbaa !21
  %.not308 = icmp eq i64 %70, 0
  br i1 %.not308, label %.thread, label %72

72:                                               ; preds = %65
  %73 = load ptr, ptr %66, align 8, !tbaa !26
  %74 = tail call i32 @fileno(ptr noundef %73) #12
  %75 = tail call ptr @mmap(ptr noundef null, i64 noundef %70, i32 noundef 3, i32 noundef 1, i32 noundef %74, i64 noundef 0) #12
  tail call void @fstWriterMmapSanity(ptr noundef %75, ptr noundef nonnull @.str.3, i32 noundef 1940, ptr noundef nonnull @.str.4)
  %.not309 = icmp eq ptr %75, null
  br i1 %.not309, label %.thread, label %76

76:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #12
  store i64 %70, ptr %2, align 8, !tbaa !27
  %77 = tail call i64 @compressBound(i64 noundef %70) #12
  %78 = tail call noalias ptr @malloc(i64 noundef %77) #14
  %79 = call i32 @compress2(ptr noundef %78, ptr noundef nonnull %2, ptr noundef nonnull %75, i64 noundef %70, i32 noundef 9) #12
  %.not310 = icmp ne i32 %79, 0
  %80 = load i64, ptr %2, align 8
  %81 = icmp sgt i64 %80, %70
  %or.cond = select i1 %.not310, i1 true, i1 %81
  br i1 %or.cond, label %82, label %83

82:                                               ; preds = %76
  store i64 %70, ptr %2, align 8, !tbaa !27
  br label %83

83:                                               ; preds = %76, %82
  %84 = load ptr, ptr %0, align 8, !tbaa !16
  %85 = call i64 @ftello(ptr noundef %84)
  %86 = load ptr, ptr %0, align 8, !tbaa !16
  %87 = call i32 @fputc(i32 noundef 255, ptr noundef %86)
  %88 = load ptr, ptr %0, align 8, !tbaa !16
  %89 = load i64, ptr %2, align 8, !tbaa !27
  %90 = add i64 %89, 24
  %91 = call i32 @fstWriterUint64(ptr noundef %88, i64 noundef %90)
  %92 = load ptr, ptr %0, align 8, !tbaa !16
  %93 = call i32 @fstWriterUint64(ptr noundef %92, i64 noundef %70)
  %94 = load ptr, ptr %0, align 8, !tbaa !16
  %95 = getelementptr inbounds i8, ptr %0, i64 104
  %96 = load i32, ptr %95, align 8, !tbaa !18
  %97 = zext i32 %96 to i64
  %98 = call i32 @fstWriterUint64(ptr noundef %94, i64 noundef %97)
  %99 = load i64, ptr %2, align 8, !tbaa !27
  %.not311 = icmp eq i64 %99, %70
  %100 = select i1 %.not311, ptr %75, ptr %78
  %101 = load ptr, ptr %0, align 8, !tbaa !16
  %102 = call i64 @fstFwrite(ptr noundef %100, i64 noundef %99, i64 noundef 1, ptr noundef %101)
  %103 = load ptr, ptr %0, align 8, !tbaa !16
  %104 = call i32 @fflush(ptr noundef %103)
  %105 = load ptr, ptr %0, align 8, !tbaa !16
  %106 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %105, i64 noundef %85, i32 noundef 0)
  %107 = load ptr, ptr %0, align 8, !tbaa !16
  %108 = call i32 @fputc(i32 noundef 3, ptr noundef %107)
  %109 = load ptr, ptr %0, align 8, !tbaa !16
  %110 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %109, i64 noundef 0, i32 noundef 2)
  %111 = load ptr, ptr %0, align 8, !tbaa !16
  %112 = call i32 @fflush(ptr noundef %111)
  call void @free(ptr noundef %78) #12
  %113 = call i32 @munmap(ptr noundef nonnull %75, i64 noundef %70) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #12
  br label %.thread

.thread:                                          ; preds = %65, %83, %72
  %114 = getelementptr inbounds i8, ptr %0, i64 216
  %115 = load i32, ptr %114, align 8, !tbaa !28
  %.not312 = icmp eq i32 %115, 0
  br i1 %.not312, label %170, label %116

116:                                              ; preds = %.thread
  %117 = load ptr, ptr %0, align 8, !tbaa !16
  %118 = call i64 @ftello(ptr noundef %117)
  %119 = load ptr, ptr %0, align 8, !tbaa !16
  %120 = call i32 @fputc(i32 noundef 255, ptr noundef %119)
  %121 = add nsw i64 %118, 1
  %122 = load ptr, ptr %0, align 8, !tbaa !16
  %123 = call i32 @fstWriterUint64(ptr noundef %122, i64 noundef 0)
  %124 = load ptr, ptr %0, align 8, !tbaa !16
  %125 = load i32, ptr %114, align 8, !tbaa !28
  %126 = zext i32 %125 to i64
  %127 = call i32 @fstWriterVarint(ptr noundef %124, i64 noundef %126)
  %128 = load i32, ptr %114, align 8, !tbaa !28
  %.not348 = icmp eq i32 %128, 0
  br i1 %.not348, label %._crit_edge, label %.lr.ph339

.lr.ph339:                                        ; preds = %116
  %129 = getelementptr inbounds i8, ptr %0, i64 200
  %130 = getelementptr inbounds i8, ptr %0, i64 208
  %.pre = load ptr, ptr %129, align 8, !tbaa !29
  br label %131

131:                                              ; preds = %.lr.ph339, %131
  %132 = phi ptr [ %.pre, %.lr.ph339 ], [ %149, %131 ]
  %.0282338 = phi i64 [ 0, %.lr.ph339 ], [ %147, %131 ]
  %.0283337 = phi i32 [ 0, %.lr.ph339 ], [ %150, %131 ]
  %133 = getelementptr inbounds i8, ptr %132, i64 16
  %134 = load i8, ptr %133, align 8
  %135 = and i8 %134, 1
  %136 = zext nneg i8 %135 to i32
  %137 = load ptr, ptr %0, align 8, !tbaa !16
  %138 = call i32 @fputc(i32 noundef %136, ptr noundef %137)
  %139 = load ptr, ptr %0, align 8, !tbaa !16
  %140 = load ptr, ptr %129, align 8, !tbaa !29
  %141 = getelementptr inbounds i8, ptr %140, i64 8
  %142 = load i64, ptr %141, align 8, !tbaa !30
  %143 = sub i64 %142, %.0282338
  %144 = call i32 @fstWriterVarint(ptr noundef %139, i64 noundef %143)
  %145 = load ptr, ptr %129, align 8, !tbaa !29
  %146 = getelementptr inbounds i8, ptr %145, i64 8
  %147 = load i64, ptr %146, align 8, !tbaa !30
  %148 = load ptr, ptr %145, align 8, !tbaa !32
  store ptr %148, ptr %130, align 8, !tbaa !33
  call void @free(ptr noundef %145) #12
  %149 = load ptr, ptr %130, align 8, !tbaa !33
  store ptr %149, ptr %129, align 8, !tbaa !29
  %150 = add nuw i32 %.0283337, 1
  %151 = load i32, ptr %114, align 8, !tbaa !28
  %152 = icmp ult i32 %150, %151
  br i1 %152, label %131, label %._crit_edge, !llvm.loop !34

._crit_edge:                                      ; preds = %131, %116
  %153 = load ptr, ptr %0, align 8, !tbaa !16
  %154 = call i64 @ftello(ptr noundef %153)
  %155 = load ptr, ptr %0, align 8, !tbaa !16
  %156 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %155, i64 noundef %121, i32 noundef 0)
  %157 = load ptr, ptr %0, align 8, !tbaa !16
  %158 = sub nsw i64 %154, %121
  %159 = call i32 @fstWriterUint64(ptr noundef %157, i64 noundef %158)
  %160 = load ptr, ptr %0, align 8, !tbaa !16
  %161 = call i32 @fflush(ptr noundef %160)
  %162 = load ptr, ptr %0, align 8, !tbaa !16
  %163 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %162, i64 noundef %118, i32 noundef 0)
  %164 = load ptr, ptr %0, align 8, !tbaa !16
  %165 = call i32 @fputc(i32 noundef 2, ptr noundef %164)
  %166 = load ptr, ptr %0, align 8, !tbaa !16
  %167 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %166, i64 noundef 0, i32 noundef 2)
  %168 = load ptr, ptr %0, align 8, !tbaa !16
  %169 = call i32 @fflush(ptr noundef %168)
  br label %170

170:                                              ; preds = %._crit_edge, %.thread
  %171 = load i8, ptr %11, align 1
  %172 = and i8 %171, 1
  %.not313 = icmp eq i8 %172, 0
  br i1 %.not313, label %289, label %173

173:                                              ; preds = %170
  %174 = getelementptr inbounds i8, ptr %0, i64 96
  %175 = load ptr, ptr %174, align 8, !tbaa !35
  %176 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %175) #15
  %177 = shl i64 %176, 32
  %sext = add i64 %177, 25769803776
  %178 = ashr exact i64 %sext, 32
  %179 = call noalias ptr @malloc(i64 noundef %178) #14
  %180 = load ptr, ptr %0, align 8, !tbaa !16
  %181 = call i64 @ftello(ptr noundef %180)
  %182 = load ptr, ptr %0, align 8, !tbaa !16
  %183 = call i32 @fputc(i32 noundef 255, ptr noundef %182)
  %184 = load ptr, ptr %0, align 8, !tbaa !16
  %185 = call i64 @ftello(ptr noundef %184)
  %186 = load ptr, ptr %0, align 8, !tbaa !16
  %187 = call i32 @fstWriterUint64(ptr noundef %186, i64 noundef 0)
  %188 = load ptr, ptr %0, align 8, !tbaa !16
  %189 = getelementptr inbounds i8, ptr %0, i64 56
  %190 = load i64, ptr %189, align 8, !tbaa !36
  %191 = call i32 @fstWriterUint64(ptr noundef %188, i64 noundef %190)
  %192 = getelementptr inbounds i8, ptr %0, i64 116
  %193 = load i8, ptr %192, align 4
  %194 = and i8 %193, 4
  %.not314 = icmp eq i8 %194, 0
  br i1 %.not314, label %195, label %222

195:                                              ; preds = %173
  %196 = call noalias dereferenceable_or_null(32768) ptr @malloc(i64 noundef 32768) #14
  %197 = load ptr, ptr %0, align 8, !tbaa !16
  %198 = call i32 @fileno(ptr noundef %197) #12
  %199 = call i32 @dup(i32 noundef %198) #12
  %200 = load ptr, ptr %0, align 8, !tbaa !16
  %201 = call i32 @fflush(ptr noundef %200)
  %202 = call ptr @gzdopen(i32 noundef %199, ptr noundef nonnull @.str.5) #12
  %.not315 = icmp eq ptr %202, null
  br i1 %.not315, label %220, label %203

203:                                              ; preds = %195
  %204 = getelementptr inbounds i8, ptr %0, i64 8
  %205 = load ptr, ptr %204, align 8, !tbaa !37
  %206 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %205, i64 noundef 0, i32 noundef 0)
  %207 = load i64, ptr %189, align 8, !tbaa !36
  %208 = icmp sgt i64 %207, 0
  br i1 %208, label %.lr.ph342, label %._crit_edge343

.lr.ph342:                                        ; preds = %203, %.lr.ph342
  %209 = phi i64 [ %217, %.lr.ph342 ], [ %207, %203 ]
  %.0284340 = phi i64 [ %216, %.lr.ph342 ], [ 0, %203 ]
  %210 = sub nsw i64 %209, %.0284340
  %spec.select = call i64 @llvm.smin.i64(i64 %210, i64 32768)
  %211 = trunc i64 %spec.select to i32
  %212 = and i64 %spec.select, 4294967295
  %213 = load ptr, ptr %204, align 8, !tbaa !37
  %214 = call i64 @fstFread(ptr noundef %196, i64 noundef %212, i64 noundef 1, ptr noundef %213)
  %215 = call i32 @gzwrite(ptr noundef nonnull %202, ptr noundef %196, i32 noundef %211) #12
  %216 = add nuw nsw i64 %.0284340, 32768
  %217 = load i64, ptr %189, align 8, !tbaa !36
  %218 = icmp slt i64 %216, %217
  br i1 %218, label %.lr.ph342, label %._crit_edge343, !llvm.loop !38

._crit_edge343:                                   ; preds = %.lr.ph342, %203
  %219 = call i32 @gzclose(ptr noundef nonnull %202) #12
  br label %264

220:                                              ; preds = %195
  %221 = call i32 @close(i32 noundef %199) #12
  br label %264

222:                                              ; preds = %173
  %223 = load ptr, ptr %0, align 8, !tbaa !16
  %224 = call i32 @fflush(ptr noundef %223)
  %225 = load i64, ptr %189, align 8, !tbaa !36
  %226 = trunc i64 %225 to i32
  %227 = call i32 @LZ4_compressBound(i32 noundef %226) #12
  %228 = sext i32 %227 to i64
  %229 = call noalias ptr @malloc(i64 noundef %228) #14
  store i32 0, ptr %71, align 4, !tbaa !21
  %230 = load i64, ptr %189, align 8, !tbaa !36
  %.not316 = icmp eq i64 %230, 0
  br i1 %.not316, label %.thread333, label %232

.thread333:                                       ; preds = %222
  %231 = call i32 @LZ4_compress_default(ptr noundef null, ptr noundef %229, i32 noundef 0, i32 noundef %227) #12
  br label %243

232:                                              ; preds = %222
  %233 = getelementptr inbounds i8, ptr %0, i64 8
  %234 = load ptr, ptr %233, align 8, !tbaa !37
  %235 = call i32 @fileno(ptr noundef %234) #12
  %236 = call ptr @mmap(ptr noundef null, i64 noundef %230, i32 noundef 3, i32 noundef 1, i32 noundef %235, i64 noundef 0) #12
  call void @fstWriterMmapSanity(ptr noundef %236, ptr noundef nonnull @.str.3, i32 noundef 2069, ptr noundef nonnull @.str.6)
  %237 = load i64, ptr %189, align 8, !tbaa !36
  %238 = trunc i64 %237 to i32
  %239 = call i32 @LZ4_compress_default(ptr noundef %236, ptr noundef %229, i32 noundef %238, i32 noundef %227) #12
  %.not317 = icmp eq ptr %236, null
  br i1 %.not317, label %243, label %240

240:                                              ; preds = %232
  %241 = load i64, ptr %189, align 8, !tbaa !36
  %242 = call i32 @munmap(ptr noundef nonnull %236, i64 noundef %241) #12
  br label %243

243:                                              ; preds = %.thread333, %240, %232
  %244 = phi i32 [ %231, %.thread333 ], [ %239, %240 ], [ %239, %232 ]
  %245 = load i8, ptr %11, align 1
  %246 = and i8 %245, 2
  %.not318 = icmp eq i8 %246, 0
  br i1 %.not318, label %247, label %.critedge

247:                                              ; preds = %243
  %248 = load i64, ptr %189, align 8, !tbaa !36
  %249 = icmp sgt i64 %248, 4194304
  br i1 %249, label %250, label %.critedge

250:                                              ; preds = %247
  %251 = call i32 @LZ4_compressBound(i32 noundef %244) #12
  %252 = sext i32 %251 to i64
  %253 = call noalias ptr @malloc(i64 noundef %252) #14
  %254 = call i32 @LZ4_compress_default(ptr noundef %229, ptr noundef %253, i32 noundef %244, i32 noundef %251) #12
  %255 = load ptr, ptr %0, align 8, !tbaa !16
  %256 = sext i32 %244 to i64
  %257 = call i32 @fstWriterVarint(ptr noundef %255, i64 noundef %256)
  %258 = sext i32 %254 to i64
  %259 = load ptr, ptr %0, align 8, !tbaa !16
  %260 = call i64 @fstFwrite(ptr noundef %253, i64 noundef %258, i64 noundef 1, ptr noundef %259)
  call void @free(ptr noundef %253) #12
  br label %264

.critedge:                                        ; preds = %243, %247
  %261 = sext i32 %244 to i64
  %262 = load ptr, ptr %0, align 8, !tbaa !16
  %263 = call i64 @fstFwrite(ptr noundef %229, i64 noundef %261, i64 noundef 1, ptr noundef %262)
  br label %264

264:                                              ; preds = %250, %.critedge, %._crit_edge343, %220
  %.sink = phi ptr [ %196, %220 ], [ %196, %._crit_edge343 ], [ %229, %.critedge ], [ %229, %250 ]
  %.0285 = phi i32 [ 6, %220 ], [ 6, %._crit_edge343 ], [ 6, %.critedge ], [ 7, %250 ]
  call void @free(ptr noundef %.sink) #12
  %265 = load ptr, ptr %0, align 8, !tbaa !16
  %266 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %265, i64 noundef 0, i32 noundef 2)
  %267 = load ptr, ptr %0, align 8, !tbaa !16
  %268 = call i64 @ftello(ptr noundef %267)
  %269 = load ptr, ptr %0, align 8, !tbaa !16
  %270 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %269, i64 noundef %185, i32 noundef 0)
  %271 = load ptr, ptr %0, align 8, !tbaa !16
  %272 = sub nsw i64 %268, %185
  %273 = call i32 @fstWriterUint64(ptr noundef %271, i64 noundef %272)
  %274 = load ptr, ptr %0, align 8, !tbaa !16
  %275 = call i32 @fflush(ptr noundef %274)
  %276 = load ptr, ptr %0, align 8, !tbaa !16
  %277 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %276, i64 noundef %181, i32 noundef 0)
  %278 = load i8, ptr %192, align 4
  %279 = and i8 %278, 4
  %.not319 = icmp eq i8 %279, 0
  %spec.select330 = select i1 %.not319, i32 4, i32 %.0285
  %280 = load ptr, ptr %0, align 8, !tbaa !16
  %281 = call i32 @fputc(i32 noundef %spec.select330, ptr noundef %280)
  %282 = load ptr, ptr %0, align 8, !tbaa !16
  %283 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %282, i64 noundef 0, i32 noundef 2)
  %284 = load ptr, ptr %0, align 8, !tbaa !16
  %285 = call i32 @fflush(ptr noundef %284)
  %286 = load ptr, ptr %174, align 8, !tbaa !35
  %287 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %179, i64 noundef %178, ptr noundef nonnull @.str.7, ptr noundef %286) #12
  %288 = call i32 @unlink(ptr noundef %179) #12
  call void @free(ptr noundef %179) #12
  br label %289

289:                                              ; preds = %264, %170
  %290 = load ptr, ptr %0, align 8, !tbaa !16
  %291 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %290, i64 noundef 9, i32 noundef 0)
  %292 = load ptr, ptr %0, align 8, !tbaa !16
  %293 = getelementptr inbounds i8, ptr %0, i64 152
  %294 = load i64, ptr %293, align 8, !tbaa !39
  %295 = call i32 @fstWriterUint64(ptr noundef %292, i64 noundef %294)
  %296 = load ptr, ptr %0, align 8, !tbaa !16
  %297 = getelementptr inbounds i8, ptr %0, i64 144
  %298 = load i64, ptr %297, align 8, !tbaa !40
  %299 = call i32 @fstWriterUint64(ptr noundef %296, i64 noundef %298)
  %300 = load ptr, ptr %0, align 8, !tbaa !16
  %301 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %300, i64 noundef 41, i32 noundef 0)
  %302 = load ptr, ptr %0, align 8, !tbaa !16
  %303 = getelementptr inbounds i8, ptr %0, i64 184
  %304 = load i32, ptr %303, align 8, !tbaa !41
  %305 = zext i32 %304 to i64
  %306 = call i32 @fstWriterUint64(ptr noundef %302, i64 noundef %305)
  %307 = load ptr, ptr %0, align 8, !tbaa !16
  %308 = getelementptr inbounds i8, ptr %0, i64 108
  %309 = load i32, ptr %308, align 4, !tbaa !42
  %310 = zext i32 %309 to i64
  %311 = call i32 @fstWriterUint64(ptr noundef %307, i64 noundef %310)
  %312 = load ptr, ptr %0, align 8, !tbaa !16
  %313 = getelementptr inbounds i8, ptr %0, i64 104
  %314 = load i32, ptr %313, align 8, !tbaa !18
  %315 = zext i32 %314 to i64
  %316 = call i32 @fstWriterUint64(ptr noundef %312, i64 noundef %315)
  %317 = load ptr, ptr %0, align 8, !tbaa !16
  %318 = getelementptr inbounds i8, ptr %0, i64 168
  %319 = load i32, ptr %318, align 8, !tbaa !43
  %320 = zext i32 %319 to i64
  %321 = call i32 @fstWriterUint64(ptr noundef %317, i64 noundef %320)
  %322 = load ptr, ptr %0, align 8, !tbaa !16
  %323 = call i32 @fflush(ptr noundef %322)
  %324 = getelementptr inbounds i8, ptr %0, i64 40
  %325 = getelementptr inbounds i8, ptr %0, i64 328
  call void @tmpfile_close(ptr noundef nonnull %324, ptr noundef nonnull %325)
  %326 = getelementptr inbounds i8, ptr %0, i64 48
  %327 = load ptr, ptr %326, align 8, !tbaa !44
  call void @free(ptr noundef %327) #12
  store ptr null, ptr %326, align 8, !tbaa !44
  %328 = getelementptr inbounds i8, ptr %0, i64 32
  %329 = getelementptr inbounds i8, ptr %0, i64 320
  call void @tmpfile_close(ptr noundef nonnull %328, ptr noundef nonnull %329)
  %330 = getelementptr inbounds i8, ptr %0, i64 24
  %331 = getelementptr inbounds i8, ptr %0, i64 312
  call void @tmpfile_close(ptr noundef nonnull %330, ptr noundef nonnull %331)
  %332 = getelementptr inbounds i8, ptr %0, i64 304
  call void @tmpfile_close(ptr noundef nonnull %66, ptr noundef nonnull %332)
  %333 = getelementptr inbounds i8, ptr %0, i64 8
  %334 = load ptr, ptr %333, align 8, !tbaa !37
  %.not321 = icmp eq ptr %334, null
  br i1 %.not321, label %337, label %335

335:                                              ; preds = %289
  %336 = call i32 @fclose(ptr noundef nonnull %334)
  store ptr null, ptr %333, align 8, !tbaa !37
  br label %337

337:                                              ; preds = %335, %289
  %338 = load ptr, ptr %0, align 8, !tbaa !16
  %.not322 = icmp eq ptr %338, null
  br i1 %.not322, label %401, label %339

339:                                              ; preds = %337
  %340 = load i8, ptr %11, align 1
  %341 = and i8 %340, 2
  %.not323 = icmp eq i8 %341, 0
  br i1 %.not323, label %399, label %342

342:                                              ; preds = %339
  %343 = getelementptr inbounds i8, ptr %0, i64 96
  %344 = load ptr, ptr %343, align 8, !tbaa !35
  %345 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %344) #15
  %346 = shl i64 %345, 32
  %sext324 = add i64 %346, 21474836480
  %347 = ashr exact i64 %sext324, 32
  %348 = call noalias ptr @calloc(i64 noundef 1, i64 noundef %347) #16
  %349 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %348, ptr noundef nonnull dereferenceable(1) %344) #12
  %350 = ashr exact i64 %346, 32
  %351 = getelementptr inbounds i8, ptr %348, i64 %350
  %352 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %351, ptr noundef nonnull dereferenceable(1) @.str.8) #12
  %353 = call noalias ptr @fopen(ptr noundef %348, ptr noundef nonnull @.str.9)
  %.not326 = icmp eq ptr %353, null
  br i1 %.not326, label %393, label %354

354:                                              ; preds = %342
  call void @llvm.lifetime.start.p0(i64 32768, ptr nonnull %3) #12
  %355 = load ptr, ptr %0, align 8, !tbaa !16
  %356 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %355, i64 noundef 0, i32 noundef 2)
  %357 = load ptr, ptr %0, align 8, !tbaa !16
  %358 = call i64 @ftello(ptr noundef %357)
  %359 = call i32 @fputc(i32 noundef 254, ptr noundef nonnull %353)
  %360 = call i32 @fstWriterUint64(ptr noundef nonnull %353, i64 noundef 0)
  %361 = call i32 @fstWriterUint64(ptr noundef nonnull %353, i64 noundef %358)
  %362 = call i32 @fflush(ptr noundef nonnull %353)
  %363 = load ptr, ptr %0, align 8, !tbaa !16
  %364 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef %363, i64 noundef 0, i32 noundef 0)
  %365 = call i32 @fileno(ptr noundef nonnull %353) #12
  %366 = call i32 @dup(i32 noundef %365) #12
  %367 = call ptr @gzdopen(i32 noundef %366, ptr noundef nonnull @.str.5) #12
  %.not327 = icmp eq ptr %367, null
  br i1 %.not327, label %378, label %.preheader

.preheader:                                       ; preds = %354
  %368 = icmp sgt i64 %358, 0
  br i1 %368, label %.lr.ph345, label %._crit_edge346

.lr.ph345:                                        ; preds = %.preheader, %.lr.ph345
  %.0286344 = phi i64 [ %375, %.lr.ph345 ], [ 0, %.preheader ]
  %369 = sub nsw i64 %358, %.0286344
  %370 = call i64 @llvm.smin.i64(i64 %369, i64 32768)
  %371 = load ptr, ptr %0, align 8, !tbaa !16
  %372 = call i64 @fstFread(ptr noundef nonnull %3, i64 noundef %370, i64 noundef 1, ptr noundef %371)
  %373 = trunc i64 %370 to i32
  %374 = call i32 @gzwrite(ptr noundef nonnull %367, ptr noundef nonnull %3, i32 noundef %373) #12
  %375 = add nuw nsw i64 %.0286344, 32768
  %376 = icmp slt i64 %375, %358
  br i1 %376, label %.lr.ph345, label %._crit_edge346, !llvm.loop !45

._crit_edge346:                                   ; preds = %.lr.ph345, %.preheader
  %377 = call i32 @gzclose(ptr noundef nonnull %367) #12
  br label %380

378:                                              ; preds = %354
  %379 = call i32 @close(i32 noundef %366) #12
  br label %380

380:                                              ; preds = %378, %._crit_edge346
  %381 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef nonnull %353, i64 noundef 0, i32 noundef 2)
  %382 = call i64 @ftello(ptr noundef nonnull %353)
  %383 = call i32 @fstWriterFseeko(ptr noundef nonnull %0, ptr noundef nonnull %353, i64 noundef 1, i32 noundef 0)
  %384 = add nsw i64 %382, -1
  %385 = call i32 @fstWriterUint64(ptr noundef nonnull %353, i64 noundef %384)
  %386 = call i32 @fclose(ptr noundef nonnull %353)
  %387 = load ptr, ptr %0, align 8, !tbaa !16
  %388 = call i32 @fclose(ptr noundef %387)
  store ptr null, ptr %0, align 8, !tbaa !16
  %389 = load ptr, ptr %343, align 8, !tbaa !35
  %390 = call i32 @unlink(ptr noundef %389) #12
  %391 = load ptr, ptr %343, align 8, !tbaa !35
  %392 = call i32 @rename(ptr noundef %348, ptr noundef %391) #12
  call void @llvm.lifetime.end.p0(i64 32768, ptr nonnull %3) #12
  br label %398

393:                                              ; preds = %342
  %394 = load i8, ptr %11, align 1
  %395 = and i8 %394, -3
  store i8 %395, ptr %11, align 1
  %396 = load ptr, ptr %0, align 8, !tbaa !16
  %397 = call i32 @fclose(ptr noundef %396)
  store ptr null, ptr %0, align 8, !tbaa !16
  br label %398

398:                                              ; preds = %393, %380
  call void @free(ptr noundef %348) #12
  br label %401

399:                                              ; preds = %339
  %400 = call i32 @fclose(ptr noundef nonnull %338)
  store ptr null, ptr %0, align 8, !tbaa !16
  br label %401

401:                                              ; preds = %398, %399, %337
  %402 = getelementptr inbounds i8, ptr %0, i64 288
  %403 = load ptr, ptr %402, align 8, !tbaa !46
  %.not328 = icmp eq ptr %403, null
  br i1 %.not328, label %405, label %404

404:                                              ; preds = %401
  call void @JenkinsFree(ptr noundef nonnull %402, i32 noundef 65535)
  br label %405

405:                                              ; preds = %404, %401
  %406 = getelementptr inbounds i8, ptr %0, i64 96
  %407 = load ptr, ptr %406, align 8, !tbaa !35
  call void @free(ptr noundef %407) #12
  call void @free(ptr noundef nonnull %0) #12
  br label %408

408:                                              ; preds = %405, %7, %4, %1
  ret void
}

; Function Attrs: nounwind uwtable
declare hidden i32 @fstFtruncate(i32 noundef, i64 noundef) local_unnamed_addr #7

; Function Attrs: nofree nounwind
declare noundef i32 @fileno(ptr nocapture noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare hidden i32 @fstWriterFseeko(ptr noundef, ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: nounwind uwtable
declare dso_local void @fstWriterEmitTimeChange(ptr noundef, i64 noundef) local_unnamed_addr #7

; Function Attrs: nounwind uwtable
declare dso_local void @fstWriterEmitValueChange(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: nounwind uwtable
declare hidden void @fstWriterFlushContextPrivate(ptr noundef) local_unnamed_addr #7

; Function Attrs: nounwind uwtable
declare hidden void @fstDestroyMmaps(ptr noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: nofree nounwind
declare noundef i32 @fflush(ptr nocapture noundef) local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare noundef i64 @ftello(ptr nocapture noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__errno_location() local_unnamed_addr #8

; Function Attrs: nounwind uwtable
declare hidden void @fstWriterMmapSanity(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: nounwind
declare ptr @mmap(ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef, i64 noundef) local_unnamed_addr #9

declare i64 @compressBound(i64 noundef) local_unnamed_addr #10

declare i32 @compress2(ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #10

; Function Attrs: nofree nounwind
declare noundef i32 @fputc(i32 noundef, ptr nocapture noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare hidden i32 @fstWriterUint64(ptr noundef, i64 noundef) local_unnamed_addr #7

; Function Attrs: nounwind uwtable
declare hidden i64 @fstFwrite(ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: nounwind
declare i32 @munmap(ptr noundef, i64 noundef) local_unnamed_addr #9

; Function Attrs: nounwind uwtable
declare hidden i32 @fstWriterVarint(ptr noundef, i64 noundef) local_unnamed_addr #7

; Function Attrs: nounwind
declare i32 @dup(i32 noundef) local_unnamed_addr #9

declare ptr @gzdopen(i32 noundef, ptr noundef) local_unnamed_addr #10

; Function Attrs: nounwind uwtable
declare hidden i64 @fstFread(ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #7

declare i32 @gzwrite(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #10

declare i32 @gzclose(ptr noundef) local_unnamed_addr #10

declare i32 @close(i32 noundef) local_unnamed_addr #10

declare i32 @LZ4_compressBound(i32 noundef) local_unnamed_addr #10

declare i32 @LZ4_compress_default(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #10

; Function Attrs: nofree nounwind
declare noundef i32 @snprintf(ptr noalias nocapture noundef writeonly, i64 noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare noundef i32 @rename(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare dso_local void @JenkinsFree(ptr noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smin.i64(i64, i64) #11

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 nofree nounwind willreturn memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nofree nounwind willreturn memory(argmem: readwrite) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nofree 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 #7 = { 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 #8 = { mustprogress nofree nosync nounwind willreturn memory(none) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { 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 #10 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #11 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #12 = { nounwind }
attributes #13 = { nounwind willreturn memory(none) }
attributes #14 = { nounwind allocsize(0) }
attributes #15 = { nounwind willreturn memory(read) }
attributes #16 = { nounwind allocsize(0,1) }

!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, !8, i64 235}
!6 = !{!"fstWriterContext", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !10, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !11, i64 88, !7, i64 96, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 116, !11, i64 116, !11, i64 116, !10, i64 120, !10, i64 128, !11, i64 136, !11, i64 140, !10, i64 144, !10, i64 152, !11, i64 160, !11, i64 164, !11, i64 168, !10, i64 176, !11, i64 184, !12, i64 192, !7, i64 200, !7, i64 208, !11, i64 216, !10, i64 224, !8, i64 232, !11, i64 233, !11, i64 233, !11, i64 233, !11, i64 233, !11, i64 233, !11, i64 233, !11, i64 233, !11, i64 233, !8, i64 234, !8, i64 235, !11, i64 236, !10, i64 240, !10, i64 248, !10, i64 256, !10, i64 264, !10, i64 272, !11, i64 280, !7, i64 288, !11, i64 296, !11, i64 300, !7, i64 304, !7, i64 312, !7, i64 320, !7, i64 328, !11, i64 336}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!"double", !8, i64 0}
!13 = !{!6, !8, i64 234}
!14 = !{!6, !10, i64 128}
!15 = !{!6, !11, i64 160}
!16 = !{!6, !7, i64 0}
!17 = !{!"branch_weights", !"expected", i32 2000, i32 1}
!18 = !{!6, !11, i64 104}
!19 = !{!6, !7, i64 72}
!20 = !{!6, !7, i64 64}
!21 = !{!11, !11, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!6, !7, i64 80}
!25 = !{!6, !11, i64 88}
!26 = !{!6, !7, i64 16}
!27 = !{!10, !10, i64 0}
!28 = !{!6, !11, i64 216}
!29 = !{!6, !7, i64 200}
!30 = !{!31, !10, i64 8}
!31 = !{!"fstBlackoutChain", !7, i64 0, !10, i64 8, !11, i64 16}
!32 = !{!31, !7, i64 0}
!33 = !{!6, !7, i64 208}
!34 = distinct !{!34, !23}
!35 = !{!6, !7, i64 96}
!36 = !{!6, !10, i64 56}
!37 = !{!6, !7, i64 8}
!38 = distinct !{!38, !23}
!39 = !{!6, !10, i64 152}
!40 = !{!6, !10, i64 144}
!41 = !{!6, !11, i64 184}
!42 = !{!6, !11, i64 108}
!43 = !{!6, !11, i64 168}
!44 = !{!6, !7, i64 48}
!45 = distinct !{!45, !23}
!46 = !{!6, !7, i64 288}


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