; LLVM IR from bitbank2/AnimatedGIF :: examples/gif_from_spi_flash (ff)

; 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.FATFS = type { i8, i8, i8, i8, i8, i16, i16, i16, i32, i32, i32, i32, i32, i32, i32, i32, i32, [512 x i8] }

@FatFs = external hidden global [1 x ptr], align 8
@f_mkfs.cst = external hidden constant [7 x i16], align 2
@f_mkfs.cst32 = external hidden constant [7 x i16], align 2
@.str = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [20 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 uwtable
declare hidden i32 @get_ldnumber(ptr noundef) #1

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

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

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

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

declare i32 @disk_write(i8 noundef zeroext, ptr noundef, i32 noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @st_word(ptr noundef, i16 noundef zeroext) #1

; Function Attrs: nounwind uwtable
define dso_local i32 @f_mkfs(ptr noundef %0, i8 noundef zeroext %1, i32 noundef %2, ptr noundef %3, i32 noundef %4) #1 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i8, align 1
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i8, align 1
  %15 = alloca i8, align 1
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i8, align 1
  %19 = alloca i8, align 1
  %20 = alloca i16, align 2
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i8, align 1
  %39 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store i8 %1, ptr %8, align 1, !tbaa !9
  store i32 %2, ptr %9, align 4, !tbaa !10
  store ptr %3, ptr %10, align 8, !tbaa !5
  store i32 %4, ptr %11, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  store i32 1, ptr %12, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  store i32 512, ptr %13, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #3
  %40 = call i32 @get_ldnumber(ptr noundef %7)
  store i32 %40, ptr %37, align 4, !tbaa !10
  %41 = load i32, ptr %37, align 4, !tbaa !10
  %42 = icmp slt i32 %41, 0
  br i1 %42, label %43, label %44

43:                                               ; preds = %5
  store i32 11, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

44:                                               ; preds = %5
  %45 = load i32, ptr %37, align 4, !tbaa !10
  %46 = sext i32 %45 to i64
  %47 = getelementptr inbounds [1 x ptr], ptr @FatFs, i64 0, i64 %46
  %48 = load ptr, ptr %47, align 8, !tbaa !5
  %49 = icmp ne ptr %48, null
  br i1 %49, label %50, label %56

50:                                               ; preds = %44
  %51 = load i32, ptr %37, align 4, !tbaa !10
  %52 = sext i32 %51 to i64
  %53 = getelementptr inbounds [1 x ptr], ptr @FatFs, i64 0, i64 %52
  %54 = load ptr, ptr %53, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.FATFS, ptr %54, i32 0, i32 0
  store i8 0, ptr %55, align 4, !tbaa !12
  br label %56

56:                                               ; preds = %50, %44
  %57 = load i32, ptr %37, align 4, !tbaa !10
  %58 = trunc i32 %57 to i8
  store i8 %58, ptr %18, align 1, !tbaa !9
  store i8 0, ptr %19, align 1, !tbaa !9
  %59 = load i8, ptr %18, align 1, !tbaa !9
  %60 = call zeroext i8 @disk_initialize(i8 noundef zeroext %59)
  store i8 %60, ptr %38, align 1, !tbaa !9
  %61 = load i8, ptr %38, align 1, !tbaa !9
  %62 = zext i8 %61 to i32
  %63 = and i32 %62, 1
  %64 = icmp ne i32 %63, 0
  br i1 %64, label %65, label %66

65:                                               ; preds = %56
  store i32 3, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

66:                                               ; preds = %56
  %67 = load i8, ptr %38, align 1, !tbaa !9
  %68 = zext i8 %67 to i32
  %69 = and i32 %68, 4
  %70 = icmp ne i32 %69, 0
  br i1 %70, label %71, label %72

71:                                               ; preds = %66
  store i32 10, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

72:                                               ; preds = %66
  %73 = load i8, ptr %18, align 1, !tbaa !9
  %74 = call i32 @disk_ioctl(i8 noundef zeroext %73, i8 noundef zeroext 3, ptr noundef %23)
  %75 = icmp ne i32 %74, 0
  br i1 %75, label %88, label %76

76:                                               ; preds = %72
  %77 = load i32, ptr %23, align 4, !tbaa !10
  %78 = icmp ne i32 %77, 0
  br i1 %78, label %79, label %88

79:                                               ; preds = %76
  %80 = load i32, ptr %23, align 4, !tbaa !10
  %81 = icmp ugt i32 %80, 32768
  br i1 %81, label %88, label %82

82:                                               ; preds = %79
  %83 = load i32, ptr %23, align 4, !tbaa !10
  %84 = load i32, ptr %23, align 4, !tbaa !10
  %85 = sub i32 %84, 1
  %86 = and i32 %83, %85
  %87 = icmp ne i32 %86, 0
  br i1 %87, label %88, label %89

88:                                               ; preds = %82, %79, %76, %72
  store i32 1, ptr %23, align 4, !tbaa !10
  br label %89

89:                                               ; preds = %88, %82
  store i16 512, ptr %20, align 2, !tbaa !15
  %90 = load i32, ptr %9, align 4, !tbaa !10
  %91 = icmp ne i32 %90, 0
  br i1 %91, label %92, label %97

92:                                               ; preds = %89
  %93 = load i32, ptr %9, align 4, !tbaa !10
  %94 = load i16, ptr %20, align 2, !tbaa !15
  %95 = zext i16 %94 to i32
  %96 = icmp ult i32 %93, %95
  br i1 %96, label %106, label %97

97:                                               ; preds = %92, %89
  %98 = load i32, ptr %9, align 4, !tbaa !10
  %99 = icmp ugt i32 %98, 16777216
  br i1 %99, label %106, label %100

100:                                              ; preds = %97
  %101 = load i32, ptr %9, align 4, !tbaa !10
  %102 = load i32, ptr %9, align 4, !tbaa !10
  %103 = sub i32 %102, 1
  %104 = and i32 %101, %103
  %105 = icmp ne i32 %104, 0
  br i1 %105, label %106, label %107

106:                                              ; preds = %100, %97, %92
  store i32 19, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

107:                                              ; preds = %100
  %108 = load i16, ptr %20, align 2, !tbaa !15
  %109 = zext i16 %108 to i32
  %110 = load i32, ptr %9, align 4, !tbaa !10
  %111 = udiv i32 %110, %109
  store i32 %111, ptr %9, align 4, !tbaa !10
  %112 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %112, ptr %16, align 8, !tbaa !5
  %113 = load i32, ptr %11, align 4, !tbaa !10
  %114 = load i16, ptr %20, align 2, !tbaa !15
  %115 = zext i16 %114 to i32
  %116 = udiv i32 %113, %115
  store i32 %116, ptr %22, align 4, !tbaa !10
  %117 = load i32, ptr %22, align 4, !tbaa !10
  %118 = load i16, ptr %20, align 2, !tbaa !15
  %119 = zext i16 %118 to i32
  %120 = mul i32 %117, %119
  store i32 %120, ptr %21, align 4, !tbaa !10
  %121 = load ptr, ptr %16, align 8, !tbaa !5
  %122 = icmp ne ptr %121, null
  br i1 %122, label %123, label %126

123:                                              ; preds = %107
  %124 = load i32, ptr %22, align 4, !tbaa !10
  %125 = icmp eq i32 %124, 0
  br i1 %125, label %126, label %127

126:                                              ; preds = %123, %107
  store i32 17, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

127:                                              ; preds = %123
  %128 = load i8, ptr %18, align 1, !tbaa !9
  %129 = call i32 @disk_ioctl(i8 noundef zeroext %128, i8 noundef zeroext 1, ptr noundef %32)
  %130 = icmp ne i32 %129, 0
  br i1 %130, label %131, label %132

131:                                              ; preds = %127
  store i32 1, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

132:                                              ; preds = %127
  %133 = load i8, ptr %8, align 1, !tbaa !9
  %134 = zext i8 %133 to i32
  %135 = and i32 %134, 8
  %136 = icmp ne i32 %135, 0
  %137 = zext i1 %136 to i64
  %138 = select i1 %136, i32 0, i32 63
  store i32 %138, ptr %29, align 4, !tbaa !10
  %139 = load i32, ptr %32, align 4, !tbaa !10
  %140 = load i32, ptr %29, align 4, !tbaa !10
  %141 = icmp ult i32 %139, %140
  br i1 %141, label %142, label %143

142:                                              ; preds = %132
  store i32 14, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

143:                                              ; preds = %132
  %144 = load i32, ptr %29, align 4, !tbaa !10
  %145 = load i32, ptr %32, align 4, !tbaa !10
  %146 = sub i32 %145, %144
  store i32 %146, ptr %32, align 4, !tbaa !10
  %147 = load i32, ptr %32, align 4, !tbaa !10
  %148 = icmp ult i32 %147, 128
  br i1 %148, label %149, label %150

149:                                              ; preds = %143
  store i32 14, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

150:                                              ; preds = %143
  br label %151

151:                                              ; preds = %150
  %152 = load i32, ptr %9, align 4, !tbaa !10
  %153 = icmp ugt i32 %152, 128
  br i1 %153, label %154, label %155

154:                                              ; preds = %151
  store i32 19, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

155:                                              ; preds = %151
  %156 = load i8, ptr %8, align 1, !tbaa !9
  %157 = zext i8 %156 to i32
  %158 = and i32 %157, 2
  %159 = icmp ne i32 %158, 0
  br i1 %159, label %160, label %172

160:                                              ; preds = %155
  %161 = load i8, ptr %8, align 1, !tbaa !9
  %162 = zext i8 %161 to i32
  %163 = and i32 %162, 7
  %164 = icmp eq i32 %163, 2
  br i1 %164, label %170, label %165

165:                                              ; preds = %160
  %166 = load i8, ptr %8, align 1, !tbaa !9
  %167 = zext i8 %166 to i32
  %168 = and i32 %167, 1
  %169 = icmp ne i32 %168, 0
  br i1 %169, label %171, label %170

170:                                              ; preds = %165, %160
  store i8 3, ptr %14, align 1, !tbaa !9
  br label %180

171:                                              ; preds = %165
  br label %172

172:                                              ; preds = %171, %155
  %173 = load i8, ptr %8, align 1, !tbaa !9
  %174 = zext i8 %173 to i32
  %175 = and i32 %174, 1
  %176 = icmp ne i32 %175, 0
  br i1 %176, label %178, label %177

177:                                              ; preds = %172
  store i32 19, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

178:                                              ; preds = %172
  store i8 2, ptr %14, align 1, !tbaa !9
  br label %179

179:                                              ; preds = %178
  br label %180

180:                                              ; preds = %179, %170
  br label %181

181:                                              ; preds = %421, %180
  %182 = load i32, ptr %9, align 4, !tbaa !10
  store i32 %182, ptr %25, align 4, !tbaa !10
  %183 = load i8, ptr %14, align 1, !tbaa !9
  %184 = zext i8 %183 to i32
  %185 = icmp eq i32 %184, 3
  br i1 %185, label %186, label %237

186:                                              ; preds = %181
  %187 = load i32, ptr %25, align 4, !tbaa !10
  %188 = icmp eq i32 %187, 0
  br i1 %188, label %189, label %216

189:                                              ; preds = %186
  %190 = load i32, ptr %32, align 4, !tbaa !10
  %191 = udiv i32 %190, 131072
  store i32 %191, ptr %28, align 4, !tbaa !10
  store i32 0, ptr %36, align 4, !tbaa !10
  store i32 1, ptr %25, align 4, !tbaa !10
  br label %192

192:                                              ; preds = %210, %189
  %193 = load i32, ptr %36, align 4, !tbaa !10
  %194 = zext i32 %193 to i64
  %195 = getelementptr inbounds [7 x i16], ptr @f_mkfs.cst32, i64 0, i64 %194
  %196 = load i16, ptr %195, align 2, !tbaa !15
  %197 = zext i16 %196 to i32
  %198 = icmp ne i32 %197, 0
  br i1 %198, label %199, label %207

199:                                              ; preds = %192
  %200 = load i32, ptr %36, align 4, !tbaa !10
  %201 = zext i32 %200 to i64
  %202 = getelementptr inbounds [7 x i16], ptr @f_mkfs.cst32, i64 0, i64 %201
  %203 = load i16, ptr %202, align 2, !tbaa !15
  %204 = zext i16 %203 to i32
  %205 = load i32, ptr %28, align 4, !tbaa !10
  %206 = icmp ule i32 %204, %205
  br label %207

207:                                              ; preds = %199, %192
  %208 = phi i1 [ false, %192 ], [ %206, %199 ]
  br i1 %208, label %209, label %215

209:                                              ; preds = %207
  br label %210

210:                                              ; preds = %209
  %211 = load i32, ptr %36, align 4, !tbaa !10
  %212 = add i32 %211, 1
  store i32 %212, ptr %36, align 4, !tbaa !10
  %213 = load i32, ptr %25, align 4, !tbaa !10
  %214 = shl i32 %213, 1
  store i32 %214, ptr %25, align 4, !tbaa !10
  br label %192, !llvm.loop !16

215:                                              ; preds = %207
  br label %216

216:                                              ; preds = %215, %186
  %217 = load i32, ptr %32, align 4, !tbaa !10
  %218 = load i32, ptr %25, align 4, !tbaa !10
  %219 = udiv i32 %217, %218
  store i32 %219, ptr %24, align 4, !tbaa !10
  %220 = load i32, ptr %24, align 4, !tbaa !10
  %221 = mul i32 %220, 4
  %222 = add i32 %221, 8
  %223 = load i16, ptr %20, align 2, !tbaa !15
  %224 = zext i16 %223 to i32
  %225 = add i32 %222, %224
  %226 = sub i32 %225, 1
  %227 = load i16, ptr %20, align 2, !tbaa !15
  %228 = zext i16 %227 to i32
  %229 = udiv i32 %226, %228
  store i32 %229, ptr %34, align 4, !tbaa !10
  store i32 32, ptr %33, align 4, !tbaa !10
  store i32 0, ptr %35, align 4, !tbaa !10
  %230 = load i32, ptr %24, align 4, !tbaa !10
  %231 = icmp ule i32 %230, 65525
  br i1 %231, label %235, label %232

232:                                              ; preds = %216
  %233 = load i32, ptr %24, align 4, !tbaa !10
  %234 = icmp ugt i32 %233, 268435445
  br i1 %234, label %235, label %236

235:                                              ; preds = %232, %216
  store i32 14, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

236:                                              ; preds = %232
  br label %295

237:                                              ; preds = %181
  %238 = load i32, ptr %25, align 4, !tbaa !10
  %239 = icmp eq i32 %238, 0
  br i1 %239, label %240, label %267

240:                                              ; preds = %237
  %241 = load i32, ptr %32, align 4, !tbaa !10
  %242 = udiv i32 %241, 4096
  store i32 %242, ptr %28, align 4, !tbaa !10
  store i32 0, ptr %36, align 4, !tbaa !10
  store i32 1, ptr %25, align 4, !tbaa !10
  br label %243

243:                                              ; preds = %261, %240
  %244 = load i32, ptr %36, align 4, !tbaa !10
  %245 = zext i32 %244 to i64
  %246 = getelementptr inbounds [7 x i16], ptr @f_mkfs.cst, i64 0, i64 %245
  %247 = load i16, ptr %246, align 2, !tbaa !15
  %248 = zext i16 %247 to i32
  %249 = icmp ne i32 %248, 0
  br i1 %249, label %250, label %258

250:                                              ; preds = %243
  %251 = load i32, ptr %36, align 4, !tbaa !10
  %252 = zext i32 %251 to i64
  %253 = getelementptr inbounds [7 x i16], ptr @f_mkfs.cst, i64 0, i64 %252
  %254 = load i16, ptr %253, align 2, !tbaa !15
  %255 = zext i16 %254 to i32
  %256 = load i32, ptr %28, align 4, !tbaa !10
  %257 = icmp ule i32 %255, %256
  br label %258

258:                                              ; preds = %250, %243
  %259 = phi i1 [ false, %243 ], [ %257, %250 ]
  br i1 %259, label %260, label %266

260:                                              ; preds = %258
  br label %261

261:                                              ; preds = %260
  %262 = load i32, ptr %36, align 4, !tbaa !10
  %263 = add i32 %262, 1
  store i32 %263, ptr %36, align 4, !tbaa !10
  %264 = load i32, ptr %25, align 4, !tbaa !10
  %265 = shl i32 %264, 1
  store i32 %265, ptr %25, align 4, !tbaa !10
  br label %243, !llvm.loop !18

266:                                              ; preds = %258
  br label %267

267:                                              ; preds = %266, %237
  %268 = load i32, ptr %32, align 4, !tbaa !10
  %269 = load i32, ptr %25, align 4, !tbaa !10
  %270 = udiv i32 %268, %269
  store i32 %270, ptr %24, align 4, !tbaa !10
  %271 = load i32, ptr %24, align 4, !tbaa !10
  %272 = icmp ugt i32 %271, 4085
  br i1 %272, label %273, label %277

273:                                              ; preds = %267
  %274 = load i32, ptr %24, align 4, !tbaa !10
  %275 = mul i32 %274, 2
  %276 = add i32 %275, 4
  store i32 %276, ptr %28, align 4, !tbaa !10
  br label %283

277:                                              ; preds = %267
  store i8 1, ptr %14, align 1, !tbaa !9
  %278 = load i32, ptr %24, align 4, !tbaa !10
  %279 = mul i32 %278, 3
  %280 = add i32 %279, 1
  %281 = udiv i32 %280, 2
  %282 = add i32 %281, 3
  store i32 %282, ptr %28, align 4, !tbaa !10
  br label %283

283:                                              ; preds = %277, %273
  %284 = load i32, ptr %28, align 4, !tbaa !10
  %285 = load i16, ptr %20, align 2, !tbaa !15
  %286 = zext i16 %285 to i32
  %287 = add i32 %284, %286
  %288 = sub i32 %287, 1
  %289 = load i16, ptr %20, align 2, !tbaa !15
  %290 = zext i16 %289 to i32
  %291 = udiv i32 %288, %290
  store i32 %291, ptr %34, align 4, !tbaa !10
  store i32 1, ptr %33, align 4, !tbaa !10
  %292 = load i16, ptr %20, align 2, !tbaa !15
  %293 = zext i16 %292 to i32
  %294 = udiv i32 16384, %293
  store i32 %294, ptr %35, align 4, !tbaa !10
  br label %295

295:                                              ; preds = %283, %236
  %296 = load i32, ptr %29, align 4, !tbaa !10
  %297 = load i32, ptr %33, align 4, !tbaa !10
  %298 = add i32 %296, %297
  store i32 %298, ptr %30, align 4, !tbaa !10
  %299 = load i32, ptr %30, align 4, !tbaa !10
  %300 = load i32, ptr %34, align 4, !tbaa !10
  %301 = mul i32 %300, 1
  %302 = add i32 %299, %301
  %303 = load i32, ptr %35, align 4, !tbaa !10
  %304 = add i32 %302, %303
  store i32 %304, ptr %31, align 4, !tbaa !10
  %305 = load i32, ptr %31, align 4, !tbaa !10
  %306 = load i32, ptr %23, align 4, !tbaa !10
  %307 = add i32 %305, %306
  %308 = sub i32 %307, 1
  %309 = load i32, ptr %23, align 4, !tbaa !10
  %310 = sub i32 %309, 1
  %311 = xor i32 %310, -1
  %312 = and i32 %308, %311
  %313 = load i32, ptr %31, align 4, !tbaa !10
  %314 = sub i32 %312, %313
  store i32 %314, ptr %28, align 4, !tbaa !10
  %315 = load i8, ptr %14, align 1, !tbaa !9
  %316 = zext i8 %315 to i32
  %317 = icmp eq i32 %316, 3
  br i1 %317, label %318, label %325

318:                                              ; preds = %295
  %319 = load i32, ptr %28, align 4, !tbaa !10
  %320 = load i32, ptr %33, align 4, !tbaa !10
  %321 = add i32 %320, %319
  store i32 %321, ptr %33, align 4, !tbaa !10
  %322 = load i32, ptr %28, align 4, !tbaa !10
  %323 = load i32, ptr %30, align 4, !tbaa !10
  %324 = add i32 %323, %322
  store i32 %324, ptr %30, align 4, !tbaa !10
  br label %330

325:                                              ; preds = %295
  %326 = load i32, ptr %28, align 4, !tbaa !10
  %327 = udiv i32 %326, 1
  %328 = load i32, ptr %34, align 4, !tbaa !10
  %329 = add i32 %328, %327
  store i32 %329, ptr %34, align 4, !tbaa !10
  br label %330

330:                                              ; preds = %325, %318
  %331 = load i32, ptr %32, align 4, !tbaa !10
  %332 = load i32, ptr %31, align 4, !tbaa !10
  %333 = load i32, ptr %25, align 4, !tbaa !10
  %334 = mul i32 %333, 16
  %335 = add i32 %332, %334
  %336 = load i32, ptr %29, align 4, !tbaa !10
  %337 = sub i32 %335, %336
  %338 = icmp ult i32 %331, %337
  br i1 %338, label %339, label %340

339:                                              ; preds = %330
  store i32 14, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

340:                                              ; preds = %330
  %341 = load i32, ptr %32, align 4, !tbaa !10
  %342 = load i32, ptr %33, align 4, !tbaa !10
  %343 = sub i32 %341, %342
  %344 = load i32, ptr %34, align 4, !tbaa !10
  %345 = mul i32 %344, 1
  %346 = sub i32 %343, %345
  %347 = load i32, ptr %35, align 4, !tbaa !10
  %348 = sub i32 %346, %347
  %349 = load i32, ptr %25, align 4, !tbaa !10
  %350 = udiv i32 %348, %349
  store i32 %350, ptr %24, align 4, !tbaa !10
  %351 = load i8, ptr %14, align 1, !tbaa !9
  %352 = zext i8 %351 to i32
  %353 = icmp eq i32 %352, 3
  br i1 %353, label %354, label %367

354:                                              ; preds = %340
  %355 = load i32, ptr %24, align 4, !tbaa !10
  %356 = icmp ule i32 %355, 65525
  br i1 %356, label %357, label %366

357:                                              ; preds = %354
  %358 = load i32, ptr %9, align 4, !tbaa !10
  %359 = icmp eq i32 %358, 0
  br i1 %359, label %360, label %365

360:                                              ; preds = %357
  %361 = load i32, ptr %25, align 4, !tbaa !10
  %362 = udiv i32 %361, 2
  store i32 %362, ptr %9, align 4, !tbaa !10
  %363 = icmp ne i32 %362, 0
  br i1 %363, label %364, label %365

364:                                              ; preds = %360
  br label %421

365:                                              ; preds = %360, %357
  store i32 14, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

366:                                              ; preds = %354
  br label %367

367:                                              ; preds = %366, %340
  %368 = load i8, ptr %14, align 1, !tbaa !9
  %369 = zext i8 %368 to i32
  %370 = icmp eq i32 %369, 2
  br i1 %370, label %371, label %412

371:                                              ; preds = %367
  %372 = load i32, ptr %24, align 4, !tbaa !10
  %373 = icmp ugt i32 %372, 65525
  br i1 %373, label %374, label %399

374:                                              ; preds = %371
  %375 = load i32, ptr %9, align 4, !tbaa !10
  %376 = icmp eq i32 %375, 0
  br i1 %376, label %377, label %384

377:                                              ; preds = %374
  %378 = load i32, ptr %25, align 4, !tbaa !10
  %379 = mul i32 %378, 2
  %380 = icmp ule i32 %379, 64
  br i1 %380, label %381, label %384

381:                                              ; preds = %377
  %382 = load i32, ptr %25, align 4, !tbaa !10
  %383 = mul i32 %382, 2
  store i32 %383, ptr %9, align 4, !tbaa !10
  br label %421

384:                                              ; preds = %377, %374
  %385 = load i8, ptr %8, align 1, !tbaa !9
  %386 = zext i8 %385 to i32
  %387 = and i32 %386, 2
  %388 = icmp ne i32 %387, 0
  br i1 %388, label %389, label %390

389:                                              ; preds = %384
  store i8 3, ptr %14, align 1, !tbaa !9
  br label %421

390:                                              ; preds = %384
  %391 = load i32, ptr %9, align 4, !tbaa !10
  %392 = icmp eq i32 %391, 0
  br i1 %392, label %393, label %398

393:                                              ; preds = %390
  %394 = load i32, ptr %25, align 4, !tbaa !10
  %395 = mul i32 %394, 2
  store i32 %395, ptr %9, align 4, !tbaa !10
  %396 = icmp ule i32 %395, 128
  br i1 %396, label %397, label %398

397:                                              ; preds = %393
  br label %421

398:                                              ; preds = %393, %390
  store i32 14, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

399:                                              ; preds = %371
  %400 = load i32, ptr %24, align 4, !tbaa !10
  %401 = icmp ule i32 %400, 4085
  br i1 %401, label %402, label %411

402:                                              ; preds = %399
  %403 = load i32, ptr %9, align 4, !tbaa !10
  %404 = icmp eq i32 %403, 0
  br i1 %404, label %405, label %410

405:                                              ; preds = %402
  %406 = load i32, ptr %25, align 4, !tbaa !10
  %407 = mul i32 %406, 2
  store i32 %407, ptr %9, align 4, !tbaa !10
  %408 = icmp ule i32 %407, 128
  br i1 %408, label %409, label %410

409:                                              ; preds = %405
  br label %421

410:                                              ; preds = %405, %402
  store i32 14, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

411:                                              ; preds = %399
  br label %412

412:                                              ; preds = %411, %367
  %413 = load i8, ptr %14, align 1, !tbaa !9
  %414 = zext i8 %413 to i32
  %415 = icmp eq i32 %414, 1
  br i1 %415, label %416, label %420

416:                                              ; preds = %412
  %417 = load i32, ptr %24, align 4, !tbaa !10
  %418 = icmp ugt i32 %417, 4085
  br i1 %418, label %419, label %420

419:                                              ; preds = %416
  store i32 14, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

420:                                              ; preds = %416, %412
  br label %422

421:                                              ; preds = %409, %397, %389, %381, %364
  br i1 true, label %181, label %422

422:                                              ; preds = %421, %420
  %423 = load ptr, ptr %16, align 8, !tbaa !5
  %424 = load i16, ptr %20, align 2, !tbaa !15
  %425 = zext i16 %424 to i32
  call void @mem_set(ptr noundef %423, i32 noundef 0, i32 noundef %425)
  %426 = load ptr, ptr %16, align 8, !tbaa !5
  %427 = getelementptr inbounds i8, ptr %426, i64 0
  call void @mem_cpy(ptr noundef %427, ptr noundef @.str, i32 noundef 11)
  %428 = load ptr, ptr %16, align 8, !tbaa !5
  %429 = getelementptr inbounds i8, ptr %428, i64 11
  %430 = load i16, ptr %20, align 2, !tbaa !15
  call void @st_word(ptr noundef %429, i16 noundef zeroext %430)
  %431 = load i32, ptr %25, align 4, !tbaa !10
  %432 = trunc i32 %431 to i8
  %433 = load ptr, ptr %16, align 8, !tbaa !5
  %434 = getelementptr inbounds i8, ptr %433, i64 13
  store i8 %432, ptr %434, align 1, !tbaa !9
  %435 = load ptr, ptr %16, align 8, !tbaa !5
  %436 = getelementptr inbounds i8, ptr %435, i64 14
  %437 = load i32, ptr %33, align 4, !tbaa !10
  %438 = trunc i32 %437 to i16
  call void @st_word(ptr noundef %436, i16 noundef zeroext %438)
  %439 = load ptr, ptr %16, align 8, !tbaa !5
  %440 = getelementptr inbounds i8, ptr %439, i64 16
  store i8 1, ptr %440, align 1, !tbaa !9
  %441 = load ptr, ptr %16, align 8, !tbaa !5
  %442 = getelementptr inbounds i8, ptr %441, i64 17
  %443 = load i8, ptr %14, align 1, !tbaa !9
  %444 = zext i8 %443 to i32
  %445 = icmp eq i32 %444, 3
  %446 = zext i1 %445 to i64
  %447 = select i1 %445, i32 0, i32 512
  %448 = trunc i32 %447 to i16
  call void @st_word(ptr noundef %442, i16 noundef zeroext %448)
  %449 = load i32, ptr %32, align 4, !tbaa !10
  %450 = icmp ult i32 %449, 65536
  br i1 %450, label %451, label %456

451:                                              ; preds = %422
  %452 = load ptr, ptr %16, align 8, !tbaa !5
  %453 = getelementptr inbounds i8, ptr %452, i64 19
  %454 = load i32, ptr %32, align 4, !tbaa !10
  %455 = trunc i32 %454 to i16
  call void @st_word(ptr noundef %453, i16 noundef zeroext %455)
  br label %460

456:                                              ; preds = %422
  %457 = load ptr, ptr %16, align 8, !tbaa !5
  %458 = getelementptr inbounds i8, ptr %457, i64 32
  %459 = load i32, ptr %32, align 4, !tbaa !10
  call void @st_dword(ptr noundef %458, i32 noundef %459)
  br label %460

460:                                              ; preds = %456, %451
  %461 = load ptr, ptr %16, align 8, !tbaa !5
  %462 = getelementptr inbounds i8, ptr %461, i64 21
  store i8 -8, ptr %462, align 1, !tbaa !9
  %463 = load ptr, ptr %16, align 8, !tbaa !5
  %464 = getelementptr inbounds i8, ptr %463, i64 24
  call void @st_word(ptr noundef %464, i16 noundef zeroext 63)
  %465 = load ptr, ptr %16, align 8, !tbaa !5
  %466 = getelementptr inbounds i8, ptr %465, i64 26
  call void @st_word(ptr noundef %466, i16 noundef zeroext 255)
  %467 = load ptr, ptr %16, align 8, !tbaa !5
  %468 = getelementptr inbounds i8, ptr %467, i64 28
  %469 = load i32, ptr %29, align 4, !tbaa !10
  call void @st_dword(ptr noundef %468, i32 noundef %469)
  %470 = load i8, ptr %14, align 1, !tbaa !9
  %471 = zext i8 %470 to i32
  %472 = icmp eq i32 %471, 3
  br i1 %472, label %473, label %491

473:                                              ; preds = %460
  %474 = load ptr, ptr %16, align 8, !tbaa !5
  %475 = getelementptr inbounds i8, ptr %474, i64 67
  call void @st_dword(ptr noundef %475, i32 noundef 1310785536)
  %476 = load ptr, ptr %16, align 8, !tbaa !5
  %477 = getelementptr inbounds i8, ptr %476, i64 36
  %478 = load i32, ptr %34, align 4, !tbaa !10
  call void @st_dword(ptr noundef %477, i32 noundef %478)
  %479 = load ptr, ptr %16, align 8, !tbaa !5
  %480 = getelementptr inbounds i8, ptr %479, i64 44
  call void @st_dword(ptr noundef %480, i32 noundef 2)
  %481 = load ptr, ptr %16, align 8, !tbaa !5
  %482 = getelementptr inbounds i8, ptr %481, i64 48
  call void @st_word(ptr noundef %482, i16 noundef zeroext 1)
  %483 = load ptr, ptr %16, align 8, !tbaa !5
  %484 = getelementptr inbounds i8, ptr %483, i64 50
  call void @st_word(ptr noundef %484, i16 noundef zeroext 6)
  %485 = load ptr, ptr %16, align 8, !tbaa !5
  %486 = getelementptr inbounds i8, ptr %485, i64 64
  store i8 -128, ptr %486, align 1, !tbaa !9
  %487 = load ptr, ptr %16, align 8, !tbaa !5
  %488 = getelementptr inbounds i8, ptr %487, i64 66
  store i8 41, ptr %488, align 1, !tbaa !9
  %489 = load ptr, ptr %16, align 8, !tbaa !5
  %490 = getelementptr inbounds i8, ptr %489, i64 71
  call void @mem_cpy(ptr noundef %490, ptr noundef @.str.1, i32 noundef 19)
  br label %504

491:                                              ; preds = %460
  %492 = load ptr, ptr %16, align 8, !tbaa !5
  %493 = getelementptr inbounds i8, ptr %492, i64 39
  call void @st_dword(ptr noundef %493, i32 noundef 1310785536)
  %494 = load ptr, ptr %16, align 8, !tbaa !5
  %495 = getelementptr inbounds i8, ptr %494, i64 22
  %496 = load i32, ptr %34, align 4, !tbaa !10
  %497 = trunc i32 %496 to i16
  call void @st_word(ptr noundef %495, i16 noundef zeroext %497)
  %498 = load ptr, ptr %16, align 8, !tbaa !5
  %499 = getelementptr inbounds i8, ptr %498, i64 36
  store i8 -128, ptr %499, align 1, !tbaa !9
  %500 = load ptr, ptr %16, align 8, !tbaa !5
  %501 = getelementptr inbounds i8, ptr %500, i64 38
  store i8 41, ptr %501, align 1, !tbaa !9
  %502 = load ptr, ptr %16, align 8, !tbaa !5
  %503 = getelementptr inbounds i8, ptr %502, i64 43
  call void @mem_cpy(ptr noundef %503, ptr noundef @.str.2, i32 noundef 19)
  br label %504

504:                                              ; preds = %491, %473
  %505 = load ptr, ptr %16, align 8, !tbaa !5
  %506 = getelementptr inbounds i8, ptr %505, i64 510
  call void @st_word(ptr noundef %506, i16 noundef zeroext -21931)
  %507 = load i8, ptr %18, align 1, !tbaa !9
  %508 = load ptr, ptr %16, align 8, !tbaa !5
  %509 = load i32, ptr %29, align 4, !tbaa !10
  %510 = call i32 @disk_write(i8 noundef zeroext %507, ptr noundef %508, i32 noundef %509, i32 noundef 1)
  %511 = icmp ne i32 %510, 0
  br i1 %511, label %512, label %513

512:                                              ; preds = %504
  store i32 1, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

513:                                              ; preds = %504
  %514 = load i8, ptr %14, align 1, !tbaa !9
  %515 = zext i8 %514 to i32
  %516 = icmp eq i32 %515, 3
  br i1 %516, label %517, label %548

517:                                              ; preds = %513
  %518 = load i8, ptr %18, align 1, !tbaa !9
  %519 = load ptr, ptr %16, align 8, !tbaa !5
  %520 = load i32, ptr %29, align 4, !tbaa !10
  %521 = add i32 %520, 6
  %522 = call i32 @disk_write(i8 noundef zeroext %518, ptr noundef %519, i32 noundef %521, i32 noundef 1)
  %523 = load ptr, ptr %16, align 8, !tbaa !5
  %524 = load i16, ptr %20, align 2, !tbaa !15
  %525 = zext i16 %524 to i32
  call void @mem_set(ptr noundef %523, i32 noundef 0, i32 noundef %525)
  %526 = load ptr, ptr %16, align 8, !tbaa !5
  %527 = getelementptr inbounds i8, ptr %526, i64 0
  call void @st_dword(ptr noundef %527, i32 noundef 1096897106)
  %528 = load ptr, ptr %16, align 8, !tbaa !5
  %529 = getelementptr inbounds i8, ptr %528, i64 484
  call void @st_dword(ptr noundef %529, i32 noundef 1631679090)
  %530 = load ptr, ptr %16, align 8, !tbaa !5
  %531 = getelementptr inbounds i8, ptr %530, i64 488
  %532 = load i32, ptr %24, align 4, !tbaa !10
  %533 = sub i32 %532, 1
  call void @st_dword(ptr noundef %531, i32 noundef %533)
  %534 = load ptr, ptr %16, align 8, !tbaa !5
  %535 = getelementptr inbounds i8, ptr %534, i64 492
  call void @st_dword(ptr noundef %535, i32 noundef 2)
  %536 = load ptr, ptr %16, align 8, !tbaa !5
  %537 = getelementptr inbounds i8, ptr %536, i64 510
  call void @st_word(ptr noundef %537, i16 noundef zeroext -21931)
  %538 = load i8, ptr %18, align 1, !tbaa !9
  %539 = load ptr, ptr %16, align 8, !tbaa !5
  %540 = load i32, ptr %29, align 4, !tbaa !10
  %541 = add i32 %540, 7
  %542 = call i32 @disk_write(i8 noundef zeroext %538, ptr noundef %539, i32 noundef %541, i32 noundef 1)
  %543 = load i8, ptr %18, align 1, !tbaa !9
  %544 = load ptr, ptr %16, align 8, !tbaa !5
  %545 = load i32, ptr %29, align 4, !tbaa !10
  %546 = add i32 %545, 1
  %547 = call i32 @disk_write(i8 noundef zeroext %543, ptr noundef %544, i32 noundef %546, i32 noundef 1)
  br label %548

548:                                              ; preds = %517, %513
  %549 = load ptr, ptr %16, align 8, !tbaa !5
  %550 = load i32, ptr %21, align 4, !tbaa !10
  call void @mem_set(ptr noundef %549, i32 noundef 0, i32 noundef %550)
  %551 = load i32, ptr %30, align 4, !tbaa !10
  store i32 %551, ptr %26, align 4, !tbaa !10
  store i32 0, ptr %36, align 4, !tbaa !10
  br label %552

552:                                              ; preds = %607, %548
  %553 = load i32, ptr %36, align 4, !tbaa !10
  %554 = icmp ult i32 %553, 1
  br i1 %554, label %555, label %610

555:                                              ; preds = %552
  %556 = load i8, ptr %14, align 1, !tbaa !9
  %557 = zext i8 %556 to i32
  %558 = icmp eq i32 %557, 3
  br i1 %558, label %559, label %566

559:                                              ; preds = %555
  %560 = load ptr, ptr %16, align 8, !tbaa !5
  %561 = getelementptr inbounds i8, ptr %560, i64 0
  call void @st_dword(ptr noundef %561, i32 noundef -8)
  %562 = load ptr, ptr %16, align 8, !tbaa !5
  %563 = getelementptr inbounds i8, ptr %562, i64 4
  call void @st_dword(ptr noundef %563, i32 noundef -1)
  %564 = load ptr, ptr %16, align 8, !tbaa !5
  %565 = getelementptr inbounds i8, ptr %564, i64 8
  call void @st_dword(ptr noundef %565, i32 noundef 268435455)
  br label %574

566:                                              ; preds = %555
  %567 = load ptr, ptr %16, align 8, !tbaa !5
  %568 = getelementptr inbounds i8, ptr %567, i64 0
  %569 = load i8, ptr %14, align 1, !tbaa !9
  %570 = zext i8 %569 to i32
  %571 = icmp eq i32 %570, 1
  %572 = zext i1 %571 to i64
  %573 = select i1 %571, i32 16777208, i32 -8
  call void @st_dword(ptr noundef %568, i32 noundef %573)
  br label %574

574:                                              ; preds = %566, %559
  %575 = load i32, ptr %34, align 4, !tbaa !10
  store i32 %575, ptr %27, align 4, !tbaa !10
  br label %576

576:                                              ; preds = %603, %574
  %577 = load i32, ptr %27, align 4, !tbaa !10
  %578 = load i32, ptr %22, align 4, !tbaa !10
  %579 = icmp ugt i32 %577, %578
  br i1 %579, label %580, label %582

580:                                              ; preds = %576
  %581 = load i32, ptr %22, align 4, !tbaa !10
  br label %584

582:                                              ; preds = %576
  %583 = load i32, ptr %27, align 4, !tbaa !10
  br label %584

584:                                              ; preds = %582, %580
  %585 = phi i32 [ %581, %580 ], [ %583, %582 ]
  store i32 %585, ptr %28, align 4, !tbaa !10
  %586 = load i8, ptr %18, align 1, !tbaa !9
  %587 = load ptr, ptr %16, align 8, !tbaa !5
  %588 = load i32, ptr %26, align 4, !tbaa !10
  %589 = load i32, ptr %28, align 4, !tbaa !10
  %590 = call i32 @disk_write(i8 noundef zeroext %586, ptr noundef %587, i32 noundef %588, i32 noundef %589)
  %591 = icmp ne i32 %590, 0
  br i1 %591, label %592, label %593

592:                                              ; preds = %584
  store i32 1, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

593:                                              ; preds = %584
  %594 = load ptr, ptr %16, align 8, !tbaa !5
  %595 = load i16, ptr %20, align 2, !tbaa !15
  %596 = zext i16 %595 to i32
  call void @mem_set(ptr noundef %594, i32 noundef 0, i32 noundef %596)
  %597 = load i32, ptr %28, align 4, !tbaa !10
  %598 = load i32, ptr %26, align 4, !tbaa !10
  %599 = add i32 %598, %597
  store i32 %599, ptr %26, align 4, !tbaa !10
  %600 = load i32, ptr %28, align 4, !tbaa !10
  %601 = load i32, ptr %27, align 4, !tbaa !10
  %602 = sub i32 %601, %600
  store i32 %602, ptr %27, align 4, !tbaa !10
  br label %603

603:                                              ; preds = %593
  %604 = load i32, ptr %27, align 4, !tbaa !10
  %605 = icmp ne i32 %604, 0
  br i1 %605, label %576, label %606, !llvm.loop !19

606:                                              ; preds = %603
  br label %607

607:                                              ; preds = %606
  %608 = load i32, ptr %36, align 4, !tbaa !10
  %609 = add i32 %608, 1
  store i32 %609, ptr %36, align 4, !tbaa !10
  br label %552, !llvm.loop !20

610:                                              ; preds = %552
  %611 = load i8, ptr %14, align 1, !tbaa !9
  %612 = zext i8 %611 to i32
  %613 = icmp eq i32 %612, 3
  br i1 %613, label %614, label %616

614:                                              ; preds = %610
  %615 = load i32, ptr %25, align 4, !tbaa !10
  br label %618

616:                                              ; preds = %610
  %617 = load i32, ptr %35, align 4, !tbaa !10
  br label %618

618:                                              ; preds = %616, %614
  %619 = phi i32 [ %615, %614 ], [ %617, %616 ]
  store i32 %619, ptr %27, align 4, !tbaa !10
  br label %620

620:                                              ; preds = %644, %618
  %621 = load i32, ptr %27, align 4, !tbaa !10
  %622 = load i32, ptr %22, align 4, !tbaa !10
  %623 = icmp ugt i32 %621, %622
  br i1 %623, label %624, label %626

624:                                              ; preds = %620
  %625 = load i32, ptr %22, align 4, !tbaa !10
  br label %628

626:                                              ; preds = %620
  %627 = load i32, ptr %27, align 4, !tbaa !10
  br label %628

628:                                              ; preds = %626, %624
  %629 = phi i32 [ %625, %624 ], [ %627, %626 ]
  store i32 %629, ptr %28, align 4, !tbaa !10
  %630 = load i8, ptr %18, align 1, !tbaa !9
  %631 = load ptr, ptr %16, align 8, !tbaa !5
  %632 = load i32, ptr %26, align 4, !tbaa !10
  %633 = load i32, ptr %28, align 4, !tbaa !10
  %634 = call i32 @disk_write(i8 noundef zeroext %630, ptr noundef %631, i32 noundef %632, i32 noundef %633)
  %635 = icmp ne i32 %634, 0
  br i1 %635, label %636, label %637

636:                                              ; preds = %628
  store i32 1, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

637:                                              ; preds = %628
  %638 = load i32, ptr %28, align 4, !tbaa !10
  %639 = load i32, ptr %26, align 4, !tbaa !10
  %640 = add i32 %639, %638
  store i32 %640, ptr %26, align 4, !tbaa !10
  %641 = load i32, ptr %28, align 4, !tbaa !10
  %642 = load i32, ptr %27, align 4, !tbaa !10
  %643 = sub i32 %642, %641
  store i32 %643, ptr %27, align 4, !tbaa !10
  br label %644

644:                                              ; preds = %637
  %645 = load i32, ptr %27, align 4, !tbaa !10
  %646 = icmp ne i32 %645, 0
  br i1 %646, label %620, label %647, !llvm.loop !21

647:                                              ; preds = %644
  %648 = load i8, ptr %14, align 1, !tbaa !9
  %649 = zext i8 %648 to i32
  %650 = icmp eq i32 %649, 3
  br i1 %650, label %651, label %652

651:                                              ; preds = %647
  store i8 12, ptr %15, align 1, !tbaa !9
  br label %664

652:                                              ; preds = %647
  %653 = load i32, ptr %32, align 4, !tbaa !10
  %654 = icmp uge i32 %653, 65536
  br i1 %654, label %655, label %656

655:                                              ; preds = %652
  store i8 6, ptr %15, align 1, !tbaa !9
  br label %663

656:                                              ; preds = %652
  %657 = load i8, ptr %14, align 1, !tbaa !9
  %658 = zext i8 %657 to i32
  %659 = icmp eq i32 %658, 2
  %660 = zext i1 %659 to i64
  %661 = select i1 %659, i32 4, i32 1
  %662 = trunc i32 %661 to i8
  store i8 %662, ptr %15, align 1, !tbaa !9
  br label %663

663:                                              ; preds = %656, %655
  br label %664

664:                                              ; preds = %663, %651
  %665 = load i8, ptr %8, align 1, !tbaa !9
  %666 = zext i8 %665 to i32
  %667 = and i32 %666, 8
  %668 = icmp ne i32 %667, 0
  br i1 %668, label %717, label %669

669:                                              ; preds = %664
  %670 = load ptr, ptr %16, align 8, !tbaa !5
  %671 = load i16, ptr %20, align 2, !tbaa !15
  %672 = zext i16 %671 to i32
  call void @mem_set(ptr noundef %670, i32 noundef 0, i32 noundef %672)
  %673 = load ptr, ptr %16, align 8, !tbaa !5
  %674 = getelementptr inbounds i8, ptr %673, i64 510
  call void @st_word(ptr noundef %674, i16 noundef zeroext -21931)
  %675 = load ptr, ptr %16, align 8, !tbaa !5
  %676 = getelementptr inbounds i8, ptr %675, i64 446
  store ptr %676, ptr %17, align 8, !tbaa !5
  %677 = load ptr, ptr %17, align 8, !tbaa !5
  %678 = getelementptr inbounds i8, ptr %677, i64 0
  store i8 0, ptr %678, align 1, !tbaa !9
  %679 = load ptr, ptr %17, align 8, !tbaa !5
  %680 = getelementptr inbounds i8, ptr %679, i64 1
  store i8 1, ptr %680, align 1, !tbaa !9
  %681 = load ptr, ptr %17, align 8, !tbaa !5
  %682 = getelementptr inbounds i8, ptr %681, i64 2
  store i8 1, ptr %682, align 1, !tbaa !9
  %683 = load ptr, ptr %17, align 8, !tbaa !5
  %684 = getelementptr inbounds i8, ptr %683, i64 3
  store i8 0, ptr %684, align 1, !tbaa !9
  %685 = load i8, ptr %15, align 1, !tbaa !9
  %686 = load ptr, ptr %17, align 8, !tbaa !5
  %687 = getelementptr inbounds i8, ptr %686, i64 4
  store i8 %685, ptr %687, align 1, !tbaa !9
  %688 = load i32, ptr %29, align 4, !tbaa !10
  %689 = load i32, ptr %32, align 4, !tbaa !10
  %690 = add i32 %688, %689
  %691 = udiv i32 %690, 16065
  store i32 %691, ptr %28, align 4, !tbaa !10
  %692 = load ptr, ptr %17, align 8, !tbaa !5
  %693 = getelementptr inbounds i8, ptr %692, i64 5
  store i8 -2, ptr %693, align 1, !tbaa !9
  %694 = load i32, ptr %28, align 4, !tbaa !10
  %695 = lshr i32 %694, 2
  %696 = and i32 %695, 192
  %697 = or i32 %696, 63
  %698 = trunc i32 %697 to i8
  %699 = load ptr, ptr %17, align 8, !tbaa !5
  %700 = getelementptr inbounds i8, ptr %699, i64 6
  store i8 %698, ptr %700, align 1, !tbaa !9
  %701 = load i32, ptr %28, align 4, !tbaa !10
  %702 = trunc i32 %701 to i8
  %703 = load ptr, ptr %17, align 8, !tbaa !5
  %704 = getelementptr inbounds i8, ptr %703, i64 7
  store i8 %702, ptr %704, align 1, !tbaa !9
  %705 = load ptr, ptr %17, align 8, !tbaa !5
  %706 = getelementptr inbounds i8, ptr %705, i64 8
  %707 = load i32, ptr %29, align 4, !tbaa !10
  call void @st_dword(ptr noundef %706, i32 noundef %707)
  %708 = load ptr, ptr %17, align 8, !tbaa !5
  %709 = getelementptr inbounds i8, ptr %708, i64 12
  %710 = load i32, ptr %32, align 4, !tbaa !10
  call void @st_dword(ptr noundef %709, i32 noundef %710)
  %711 = load i8, ptr %18, align 1, !tbaa !9
  %712 = load ptr, ptr %16, align 8, !tbaa !5
  %713 = call i32 @disk_write(i8 noundef zeroext %711, ptr noundef %712, i32 noundef 0, i32 noundef 1)
  %714 = icmp ne i32 %713, 0
  br i1 %714, label %715, label %716

715:                                              ; preds = %669
  store i32 1, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

716:                                              ; preds = %669
  br label %717

717:                                              ; preds = %716, %664
  %718 = load i8, ptr %18, align 1, !tbaa !9
  %719 = call i32 @disk_ioctl(i8 noundef zeroext %718, i8 noundef zeroext 0, ptr noundef null)
  %720 = icmp ne i32 %719, 0
  br i1 %720, label %721, label %722

721:                                              ; preds = %717
  store i32 1, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

722:                                              ; preds = %717
  store i32 0, ptr %6, align 4
  store i32 1, ptr %39, align 4
  br label %723

723:                                              ; preds = %722, %721, %715, %636, %592, %512, %419, %410, %398, %365, %339, %235, %177, %154, %149, %142, %131, %126, %106, %71, %65, %43
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  %724 = load i32, ptr %6, align 4
  ret i32 %724
}

declare zeroext i8 @disk_initialize(i8 noundef zeroext) #2

declare i32 @disk_ioctl(i8 noundef zeroext, i8 noundef zeroext, ptr noundef) #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { "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 }

!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 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !7, i64 0}
!13 = !{!"", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4, !14, i64 6, !14, i64 8, !14, i64 10, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !7, i64 48}
!14 = !{!"short", !7, i64 0}
!15 = !{!14, !14, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !17}
!21 = distinct !{!21, !17}


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

@FatFs = external hidden local_unnamed_addr global [1 x ptr], align 8
@f_mkfs.cst = external hidden local_unnamed_addr constant [7 x i16], align 2
@f_mkfs.cst32 = external hidden local_unnamed_addr constant [7 x i16], align 2
@.str = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [20 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: nounwind uwtable
declare hidden i32 @get_ldnumber(ptr noundef) local_unnamed_addr #1

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

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

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

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

declare i32 @disk_write(i8 noundef zeroext, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @st_word(ptr noundef, i16 noundef zeroext) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 20) i32 @f_mkfs(ptr noundef %0, i8 noundef zeroext %1, i32 noundef %2, ptr noundef %3, i32 noundef %4) local_unnamed_addr #1 {
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #4
  %9 = call i32 @get_ldnumber(ptr noundef nonnull %6)
  %10 = icmp slt i32 %9, 0
  br i1 %10, label %.loopexit, label %11

11:                                               ; preds = %5
  %12 = zext nneg i32 %9 to i64
  %13 = getelementptr inbounds [1 x ptr], ptr @FatFs, i64 0, i64 %12
  %14 = load ptr, ptr %13, align 8, !tbaa !5
  %.not = icmp eq ptr %14, null
  br i1 %.not, label %16, label %15

15:                                               ; preds = %11
  store i8 0, ptr %14, align 4, !tbaa !9
  br label %16

16:                                               ; preds = %15, %11
  %17 = trunc i32 %9 to i8
  %18 = call zeroext i8 @disk_initialize(i8 noundef zeroext %17) #4
  %19 = zext i8 %18 to i32
  %20 = and i32 %19, 1
  %.not290 = icmp eq i32 %20, 0
  br i1 %.not290, label %21, label %.loopexit

21:                                               ; preds = %16
  %22 = and i32 %19, 4
  %.not291 = icmp eq i32 %22, 0
  br i1 %.not291, label %23, label %.loopexit

23:                                               ; preds = %21
  %24 = call i32 @disk_ioctl(i8 noundef zeroext %17, i8 noundef zeroext 3, ptr noundef nonnull %7) #4
  %25 = icmp eq i32 %24, 0
  %26 = load i32, ptr %7, align 4
  %27 = add i32 %26, -1
  %28 = icmp ult i32 %27, 32768
  %or.cond3.not336 = select i1 %25, i1 %28, i1 false
  %29 = call range(i32 0, 17) i32 @llvm.ctpop.i32(i32 %26)
  %.not295 = icmp ult i32 %29, 2
  %or.cond = select i1 %or.cond3.not336, i1 %.not295, i1 false
  br i1 %or.cond, label %31, label %30

30:                                               ; preds = %23
  store i32 1, ptr %7, align 4, !tbaa !13
  br label %31

31:                                               ; preds = %23, %30
  %.not296 = icmp eq i32 %2, 0
  br i1 %.not296, label %35, label %32

32:                                               ; preds = %31
  %33 = add i32 %2, -512
  %or.cond5 = icmp ult i32 %33, 16776705
  %34 = call range(i32 0, 33) i32 @llvm.ctpop.i32(i32 %2)
  %.not297 = icmp ult i32 %34, 2
  %or.cond315 = select i1 %or.cond5, i1 %.not297, i1 false
  br i1 %or.cond315, label %35, label %.loopexit

35:                                               ; preds = %31, %32
  %36 = lshr i32 %2, 9
  %37 = lshr i32 %4, 9
  %38 = and i32 %4, -512
  %39 = icmp eq ptr %3, null
  %40 = icmp ult i32 %4, 512
  %or.cond8 = or i1 %39, %40
  br i1 %or.cond8, label %.loopexit, label %41

41:                                               ; preds = %35
  %42 = call i32 @disk_ioctl(i8 noundef zeroext %17, i8 noundef zeroext 1, ptr noundef nonnull %8) #4
  %.not298 = icmp eq i32 %42, 0
  br i1 %.not298, label %43, label %.loopexit

43:                                               ; preds = %41
  %44 = zext i8 %1 to i32
  %45 = and i32 %44, 8
  %.not299 = icmp eq i32 %45, 0
  %.neg393 = select i1 %.not299, i32 -63, i32 0
  %46 = select i1 %.not299, i32 63, i32 0
  %47 = load i32, ptr %8, align 4, !tbaa !13
  %48 = icmp ult i32 %47, %46
  br i1 %48, label %.loopexit, label %49

49:                                               ; preds = %43
  %50 = sub i32 %47, %46
  store i32 %50, ptr %8, align 4, !tbaa !13
  %51 = icmp ult i32 %50, 128
  br i1 %51, label %.loopexit, label %52

52:                                               ; preds = %49
  %53 = icmp ugt i32 %2, 66047
  br i1 %53, label %.loopexit, label %54

54:                                               ; preds = %52
  %55 = and i32 %44, 2
  %.not300 = icmp ne i32 %55, 0
  %56 = and i32 %44, 3
  %or.cond337 = icmp eq i32 %56, 2
  br i1 %or.cond337, label %59, label %57

57:                                               ; preds = %54
  %58 = and i32 %44, 1
  %.not302 = icmp eq i32 %58, 0
  br i1 %.not302, label %.loopexit, label %59

59:                                               ; preds = %54, %57
  %.0251 = phi i8 [ 2, %57 ], [ 3, %54 ]
  %60 = lshr i32 %50, 12
  %61 = load i16, ptr @f_mkfs.cst, align 2
  %.not303364 = icmp eq i16 %61, 0
  %62 = zext i16 %61 to i32
  %.not304365 = icmp ult i32 %60, %62
  %or.cond321366 = or i1 %.not303364, %.not304365
  %63 = lshr i32 %50, 17
  %64 = load i16, ptr @f_mkfs.cst32, align 2
  %.not305369 = icmp eq i16 %64, 0
  %65 = zext i16 %64 to i32
  %.not306370 = icmp ult i32 %63, %65
  %or.cond319371 = or i1 %.not305369, %.not306370
  %66 = load i32, ptr %7, align 4
  %67 = add i32 %66, -1
  %68 = sub i32 0, %66
  br label %69

69:                                               ; preds = %.backedge, %59
  %.1252 = phi i8 [ %.0251, %59 ], [ %.1252.be, %.backedge ]
  %.0243 = phi i32 [ %36, %59 ], [ %.0243.be, %.backedge ]
  %70 = icmp eq i8 %.1252, 3
  %71 = icmp ne i32 %.0243, 0
  %.0243.mux = select i1 %71, i32 %.0243, i32 1
  br i1 %70, label %72, label %83

72:                                               ; preds = %69
  %brmerge389 = select i1 %71, i1 true, i1 %or.cond319371
  br i1 %brmerge389, label %.critedge, label %.lr.ph374

.lr.ph374:                                        ; preds = %72, %.lr.ph374
  %.0244373 = phi i32 [ %73, %.lr.ph374 ], [ 0, %72 ]
  %.0262372 = phi i32 [ %74, %.lr.ph374 ], [ 1, %72 ]
  %73 = add i32 %.0244373, 1
  %74 = shl i32 %.0262372, 1
  %75 = zext i32 %73 to i64
  %76 = getelementptr inbounds [7 x i16], ptr @f_mkfs.cst32, i64 0, i64 %75
  %77 = load i16, ptr %76, align 2, !tbaa !14
  %.not305 = icmp eq i16 %77, 0
  %78 = zext i16 %77 to i32
  %.not306 = icmp ult i32 %63, %78
  %or.cond319 = or i1 %.not305, %.not306
  br i1 %or.cond319, label %.critedge, label %.lr.ph374, !llvm.loop !15

.critedge:                                        ; preds = %.lr.ph374, %72
  %.1263 = phi i32 [ %.0243.mux, %72 ], [ %74, %.lr.ph374 ]
  %79 = udiv i32 %50, %.1263
  %80 = shl nuw nsw i32 %79, 2
  %81 = add nuw i32 %80, 519
  %82 = add i32 %79, -268435446
  %or.cond11 = icmp ult i32 %82, -268369920
  br i1 %or.cond11, label %.loopexit, label %102

83:                                               ; preds = %69
  %brmerge391 = select i1 %71, i1 true, i1 %or.cond321366
  br i1 %brmerge391, label %.critedge13, label %.lr.ph

.lr.ph:                                           ; preds = %83, %.lr.ph
  %.1245368 = phi i32 [ %84, %.lr.ph ], [ 0, %83 ]
  %.2264367 = phi i32 [ %85, %.lr.ph ], [ 1, %83 ]
  %84 = add i32 %.1245368, 1
  %85 = shl i32 %.2264367, 1
  %86 = zext i32 %84 to i64
  %87 = getelementptr inbounds [7 x i16], ptr @f_mkfs.cst, i64 0, i64 %86
  %88 = load i16, ptr %87, align 2, !tbaa !14
  %.not303 = icmp eq i16 %88, 0
  %89 = zext i16 %88 to i32
  %.not304 = icmp ult i32 %60, %89
  %or.cond321 = or i1 %.not303, %.not304
  br i1 %or.cond321, label %.critedge13, label %.lr.ph, !llvm.loop !17

.critedge13:                                      ; preds = %.lr.ph, %83
  %.3265 = phi i32 [ %.0243.mux, %83 ], [ %85, %.lr.ph ]
  %90 = udiv i32 %50, %.3265
  %91 = icmp ugt i32 %90, 4085
  br i1 %91, label %92, label %95

92:                                               ; preds = %.critedge13
  %93 = shl i32 %90, 1
  %94 = add i32 %93, 4
  br label %100

95:                                               ; preds = %.critedge13
  %96 = mul nuw nsw i32 %90, 3
  %97 = add nuw nsw i32 %96, 1
  %98 = lshr i32 %97, 1
  %99 = add nuw nsw i32 %98, 3
  br label %100

100:                                              ; preds = %95, %92
  %.0256 = phi i32 [ %94, %92 ], [ %99, %95 ]
  %.2253 = phi i8 [ %.1252, %92 ], [ 1, %95 ]
  %101 = add i32 %.0256, 511
  br label %102

102:                                              ; preds = %.critedge, %100
  %.4266 = phi i32 [ %.1263, %.critedge ], [ %.3265, %100 ]
  %.3 = phi i8 [ 3, %.critedge ], [ %.2253, %100 ]
  %.0249 = phi i32 [ 32, %.critedge ], [ 1, %100 ]
  %.0247.in = phi i32 [ %81, %.critedge ], [ %101, %100 ]
  %.0246 = phi i32 [ 0, %.critedge ], [ 32, %100 ]
  %.0247 = lshr i32 %.0247.in, 9
  %103 = add nuw nsw i32 %.0249, %46
  %104 = add nuw nsw i32 %.0247, %103
  %105 = add nuw nsw i32 %104, %.0246
  %106 = add i32 %67, %105
  %107 = and i32 %106, %68
  %108 = sub i32 %107, %105
  %109 = icmp eq i8 %.3, 3
  %110 = add i32 %108, %.0247
  %111 = select i1 %109, i32 %108, i32 0
  %.1250 = add i32 %111, %.0249
  %112 = shl i32 %.4266, 4
  %113 = add i32 %112, %.neg393
  %114 = add i32 %113, %105
  %115 = icmp ult i32 %50, %114
  br i1 %115, label %.loopexit, label %116

116:                                              ; preds = %102
  %.1248 = select i1 %109, i32 %.0247, i32 %110
  %117 = add i32 %.0246, %.1248
  %118 = add i32 %117, %.1250
  %119 = sub i32 %50, %118
  %120 = udiv i32 %119, %.4266
  %121 = icmp ult i32 %120, 65526
  %or.cond19 = select i1 %109, i1 %121, i1 false
  br i1 %or.cond19, label %122, label %125

122:                                              ; preds = %116
  %123 = icmp ne i32 %.0243, 0
  %124 = lshr i32 %.4266, 1
  %.not314 = icmp ult i32 %.4266, 2
  %or.cond323 = or i1 %123, %.not314
  br i1 %or.cond323, label %.loopexit, label %.backedge

125:                                              ; preds = %116
  %126 = icmp eq i8 %.3, 2
  br i1 %126, label %127, label %141

127:                                              ; preds = %125
  %128 = icmp ugt i32 %120, 65525
  br i1 %128, label %129, label %135

129:                                              ; preds = %127
  %130 = icmp eq i32 %.0243, 0
  %131 = shl i32 %.4266, 1
  %132 = icmp ult i32 %131, 65
  %or.cond332 = and i1 %130, %132
  %brmerge = or i1 %.not300, %or.cond332
  %.3.mux = select i1 %or.cond332, i8 2, i8 3
  %.mux = select i1 %or.cond332, i32 %131, i32 %.0243
  br i1 %brmerge, label %.backedge, label %133

.backedge:                                        ; preds = %129, %137, %133, %122
  %.1252.be = phi i8 [ 3, %122 ], [ 2, %133 ], [ 2, %137 ], [ %.3.mux, %129 ]
  %.0243.be = phi i32 [ %124, %122 ], [ %131, %133 ], [ %139, %137 ], [ %.mux, %129 ]
  br label %69

133:                                              ; preds = %129
  %134 = icmp ult i32 %131, 129
  %or.cond326 = and i1 %130, %134
  br i1 %or.cond326, label %.backedge, label %.loopexit

135:                                              ; preds = %127
  %136 = icmp ult i32 %120, 4086
  br i1 %136, label %137, label %.thread

137:                                              ; preds = %135
  %138 = icmp eq i32 %.0243, 0
  %139 = shl i32 %.4266, 1
  %140 = icmp ult i32 %139, 129
  %or.cond329 = and i1 %138, %140
  br i1 %or.cond329, label %.backedge, label %.loopexit

141:                                              ; preds = %125
  %142 = icmp eq i8 %.3, 1
  %143 = icmp ugt i32 %120, 4085
  %or.cond16 = select i1 %142, i1 %143, i1 false
  br i1 %or.cond16, label %.loopexit, label %.thread

.thread:                                          ; preds = %135, %141
  %144 = phi i1 [ %142, %141 ], [ false, %135 ]
  %.0254348 = add i32 %111, %103
  call void @mem_set(ptr noundef %3, i32 noundef 0, i32 noundef 512)
  call void @mem_cpy(ptr noundef %3, ptr noundef nonnull @.str, i32 noundef 11)
  %145 = getelementptr inbounds i8, ptr %3, i64 11
  call void @st_word(ptr noundef nonnull %145, i16 noundef zeroext 512)
  %146 = trunc i32 %.4266 to i8
  %147 = getelementptr inbounds i8, ptr %3, i64 13
  store i8 %146, ptr %147, align 1, !tbaa !18
  %148 = getelementptr inbounds i8, ptr %3, i64 14
  %149 = trunc i32 %.1250 to i16
  call void @st_word(ptr noundef nonnull %148, i16 noundef zeroext %149)
  %150 = getelementptr inbounds i8, ptr %3, i64 16
  store i8 1, ptr %150, align 1, !tbaa !18
  %151 = getelementptr inbounds i8, ptr %3, i64 17
  %152 = select i1 %109, i16 0, i16 512
  call void @st_word(ptr noundef nonnull %151, i16 noundef zeroext %152)
  %153 = load i32, ptr %8, align 4, !tbaa !13
  %154 = icmp ult i32 %153, 65536
  br i1 %154, label %155, label %158

155:                                              ; preds = %.thread
  %156 = getelementptr inbounds i8, ptr %3, i64 19
  %157 = trunc nuw i32 %153 to i16
  call void @st_word(ptr noundef nonnull %156, i16 noundef zeroext %157)
  br label %160

158:                                              ; preds = %.thread
  %159 = getelementptr inbounds i8, ptr %3, i64 32
  call void @st_dword(ptr noundef nonnull %159, i32 noundef %153)
  br label %160

160:                                              ; preds = %158, %155
  %161 = getelementptr inbounds i8, ptr %3, i64 21
  store i8 -8, ptr %161, align 1, !tbaa !18
  %162 = getelementptr inbounds i8, ptr %3, i64 24
  call void @st_word(ptr noundef nonnull %162, i16 noundef zeroext 63)
  %163 = getelementptr inbounds i8, ptr %3, i64 26
  call void @st_word(ptr noundef nonnull %163, i16 noundef zeroext 255)
  %164 = getelementptr inbounds i8, ptr %3, i64 28
  call void @st_dword(ptr noundef nonnull %164, i32 noundef %46)
  br i1 %109, label %165, label %171

165:                                              ; preds = %160
  %166 = getelementptr inbounds i8, ptr %3, i64 67
  call void @st_dword(ptr noundef nonnull %166, i32 noundef 1310785536)
  %167 = getelementptr inbounds i8, ptr %3, i64 36
  call void @st_dword(ptr noundef nonnull %167, i32 noundef %.0247)
  %168 = getelementptr inbounds i8, ptr %3, i64 44
  call void @st_dword(ptr noundef nonnull %168, i32 noundef 2)
  %169 = getelementptr inbounds i8, ptr %3, i64 48
  call void @st_word(ptr noundef nonnull %169, i16 noundef zeroext 1)
  %170 = getelementptr inbounds i8, ptr %3, i64 50
  call void @st_word(ptr noundef nonnull %170, i16 noundef zeroext 6)
  br label %175

171:                                              ; preds = %160
  %172 = getelementptr inbounds i8, ptr %3, i64 39
  call void @st_dword(ptr noundef nonnull %172, i32 noundef 1310785536)
  %173 = getelementptr inbounds i8, ptr %3, i64 22
  %174 = trunc i32 %110 to i16
  call void @st_word(ptr noundef nonnull %173, i16 noundef zeroext %174)
  br label %175

175:                                              ; preds = %171, %165
  %.sink455 = phi i64 [ 36, %171 ], [ 64, %165 ]
  %.sink454 = phi i64 [ 38, %171 ], [ 66, %165 ]
  %.sink453 = phi i64 [ 43, %171 ], [ 71, %165 ]
  %.str.2.sink = phi ptr [ @.str.2, %171 ], [ @.str.1, %165 ]
  %176 = getelementptr inbounds i8, ptr %3, i64 %.sink455
  store i8 -128, ptr %176, align 1, !tbaa !18
  %177 = getelementptr inbounds i8, ptr %3, i64 %.sink454
  store i8 41, ptr %177, align 1, !tbaa !18
  %178 = getelementptr inbounds i8, ptr %3, i64 %.sink453
  call void @mem_cpy(ptr noundef nonnull %178, ptr noundef nonnull %.str.2.sink, i32 noundef 19)
  %179 = getelementptr inbounds i8, ptr %3, i64 510
  call void @st_word(ptr noundef nonnull %179, i16 noundef zeroext -21931)
  %180 = call i32 @disk_write(i8 noundef zeroext %17, ptr noundef nonnull %3, i32 noundef %46, i32 noundef 1) #4
  %.not307 = icmp eq i32 %180, 0
  br i1 %.not307, label %181, label %.loopexit

181:                                              ; preds = %175
  br i1 %109, label %.split.us, label %.split

.split.us:                                        ; preds = %181
  %182 = add nuw nsw i32 %46, 6
  %183 = call i32 @disk_write(i8 noundef zeroext %17, ptr noundef nonnull %3, i32 noundef %182, i32 noundef 1) #4
  call void @mem_set(ptr noundef nonnull %3, i32 noundef 0, i32 noundef 512)
  call void @st_dword(ptr noundef nonnull %3, i32 noundef 1096897106)
  %184 = getelementptr inbounds i8, ptr %3, i64 484
  call void @st_dword(ptr noundef nonnull %184, i32 noundef 1631679090)
  %185 = getelementptr inbounds i8, ptr %3, i64 488
  %186 = add i32 %120, -1
  call void @st_dword(ptr noundef nonnull %185, i32 noundef %186)
  %187 = getelementptr inbounds i8, ptr %3, i64 492
  call void @st_dword(ptr noundef nonnull %187, i32 noundef 2)
  call void @st_word(ptr noundef nonnull %179, i16 noundef zeroext -21931)
  %188 = add nuw nsw i32 %46, 7
  %189 = call i32 @disk_write(i8 noundef zeroext %17, ptr noundef nonnull %3, i32 noundef %188, i32 noundef 1) #4
  %190 = add nuw nsw i32 %46, 1
  %191 = call i32 @disk_write(i8 noundef zeroext %17, ptr noundef nonnull %3, i32 noundef %190, i32 noundef 1) #4
  call void @mem_set(ptr noundef nonnull %3, i32 noundef 0, i32 noundef %38)
  %192 = getelementptr inbounds i8, ptr %3, i64 8
  %193 = getelementptr inbounds i8, ptr %3, i64 4
  call void @st_dword(ptr noundef nonnull %3, i32 noundef -8)
  call void @st_dword(ptr noundef nonnull %193, i32 noundef -1)
  call void @st_dword(ptr noundef nonnull %192, i32 noundef 268435455)
  br label %194

194:                                              ; preds = %197, %.split.us
  %.1260.us = phi i32 [ %.0254348, %.split.us ], [ %198, %197 ]
  %.0257.us = phi i32 [ %.0247, %.split.us ], [ %199, %197 ]
  %195 = call i32 @llvm.umin.i32(i32 %.0257.us, i32 %37)
  %196 = call i32 @disk_write(i8 noundef zeroext %17, ptr noundef %3, i32 noundef %.1260.us, i32 noundef %195) #4
  %.not312.us = icmp eq i32 %196, 0
  br i1 %.not312.us, label %197, label %.loopexit

197:                                              ; preds = %194
  call void @mem_set(ptr noundef %3, i32 noundef 0, i32 noundef 512)
  %198 = add i32 %195, %.1260.us
  %199 = sub i32 %.0257.us, %195
  %.not313.us = icmp eq i32 %199, 0
  br i1 %.not313.us, label %.split387.us.preheader, label %194, !llvm.loop !19

.split:                                           ; preds = %181
  call void @mem_set(ptr noundef nonnull %3, i32 noundef 0, i32 noundef %38)
  %200 = select i1 %144, i32 16777208, i32 -8
  call void @st_dword(ptr noundef nonnull %3, i32 noundef %200)
  br label %201

201:                                              ; preds = %204, %.split
  %.1260 = phi i32 [ %.0254348, %.split ], [ %205, %204 ]
  %.0257 = phi i32 [ %110, %.split ], [ %206, %204 ]
  %202 = call i32 @llvm.umin.i32(i32 %.0257, i32 %37)
  %203 = call i32 @disk_write(i8 noundef zeroext %17, ptr noundef %3, i32 noundef %.1260, i32 noundef %202) #4
  %.not312 = icmp eq i32 %203, 0
  br i1 %.not312, label %204, label %.loopexit

204:                                              ; preds = %201
  call void @mem_set(ptr noundef %3, i32 noundef 0, i32 noundef 512)
  %205 = add i32 %202, %.1260
  %206 = sub i32 %.0257, %202
  %.not313 = icmp eq i32 %206, 0
  br i1 %.not313, label %.split387.us.preheader, label %201, !llvm.loop !19

.split387.us.preheader:                           ; preds = %204, %197
  %.2261.ph = phi i32 [ %198, %197 ], [ %205, %204 ]
  %.1258.ph = phi i32 [ %.4266, %197 ], [ %.0246, %204 ]
  br label %.split387.us

.split387.us:                                     ; preds = %.split387.us.preheader, %209
  %.2261 = phi i32 [ %210, %209 ], [ %.2261.ph, %.split387.us.preheader ]
  %.1258 = phi i32 [ %211, %209 ], [ %.1258.ph, %.split387.us.preheader ]
  %207 = call i32 @llvm.umin.i32(i32 %.1258, i32 %37)
  %208 = call i32 @disk_write(i8 noundef zeroext %17, ptr noundef %3, i32 noundef %.2261, i32 noundef %207) #4
  %.not308 = icmp eq i32 %208, 0
  br i1 %.not308, label %209, label %.loopexit

209:                                              ; preds = %.split387.us
  %210 = add i32 %207, %.2261
  %211 = sub i32 %.1258, %207
  %.not309 = icmp eq i32 %211, 0
  br i1 %.not309, label %212, label %.split387.us, !llvm.loop !20

212:                                              ; preds = %209
  br i1 %.not299, label %213, label %233

213:                                              ; preds = %212
  %214 = load i32, ptr %8, align 4
  %215 = icmp ugt i32 %214, 65535
  %216 = select i1 %126, i8 4, i8 1
  %spec.select = select i1 %215, i8 6, i8 %216
  %.0255 = select i1 %109, i8 12, i8 %spec.select
  call void @mem_set(ptr noundef %3, i32 noundef 0, i32 noundef 512)
  call void @st_word(ptr noundef nonnull %179, i16 noundef zeroext -21931)
  %217 = getelementptr inbounds i8, ptr %3, i64 446
  store <4 x i8> <i8 0, i8 1, i8 1, i8 0>, ptr %217, align 1, !tbaa !18
  %218 = getelementptr inbounds i8, ptr %3, i64 450
  store i8 %.0255, ptr %218, align 1, !tbaa !18
  %219 = load i32, ptr %8, align 4, !tbaa !13
  %220 = add i32 %219, 63
  %221 = udiv i32 %220, 16065
  %222 = getelementptr inbounds i8, ptr %3, i64 451
  store i8 -2, ptr %222, align 1, !tbaa !18
  %223 = lshr i32 %221, 2
  %224 = trunc i32 %223 to i8
  %225 = or i8 %224, 63
  %226 = getelementptr inbounds i8, ptr %3, i64 452
  store i8 %225, ptr %226, align 1, !tbaa !18
  %227 = trunc i32 %221 to i8
  %228 = getelementptr inbounds i8, ptr %3, i64 453
  store i8 %227, ptr %228, align 1, !tbaa !18
  %229 = getelementptr inbounds i8, ptr %3, i64 454
  call void @st_dword(ptr noundef nonnull %229, i32 noundef 63)
  %230 = getelementptr inbounds i8, ptr %3, i64 458
  %231 = load i32, ptr %8, align 4, !tbaa !13
  call void @st_dword(ptr noundef nonnull %230, i32 noundef %231)
  %232 = call i32 @disk_write(i8 noundef zeroext %17, ptr noundef %3, i32 noundef 0, i32 noundef 1) #4
  %.not310 = icmp eq i32 %232, 0
  br i1 %.not310, label %233, label %.loopexit

233:                                              ; preds = %213, %212
  %234 = call i32 @disk_ioctl(i8 noundef zeroext %17, i8 noundef zeroext 0, ptr noundef null) #4
  %.not311 = icmp ne i32 %234, 0
  %. = zext i1 %.not311 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %137, %133, %122, %102, %.critedge, %201, %194, %.split387.us, %233, %213, %175, %141, %57, %52, %49, %43, %41, %35, %32, %21, %16, %5
  %.0 = phi i32 [ 11, %5 ], [ 3, %16 ], [ 10, %21 ], [ 19, %32 ], [ 17, %35 ], [ 1, %41 ], [ 14, %43 ], [ 14, %49 ], [ 19, %52 ], [ 19, %57 ], [ 14, %141 ], [ 1, %175 ], [ 1, %213 ], [ %., %233 ], [ 1, %.split387.us ], [ 1, %194 ], [ 1, %201 ], [ 14, %.critedge ], [ 14, %102 ], [ 14, %122 ], [ 14, %133 ], [ 14, %137 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #4
  ret i32 %.0
}

declare zeroext i8 @disk_initialize(i8 noundef zeroext) local_unnamed_addr #2

declare i32 @disk_ioctl(i8 noundef zeroext, i8 noundef zeroext, ptr noundef) local_unnamed_addr #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.ctpop.i32(i32) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umin.i32(i32, i32) #3

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { "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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !7, i64 0}
!10 = !{!"", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4, !11, i64 6, !11, i64 8, !11, i64 10, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !7, i64 48}
!11 = !{!"short", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!12, !12, i64 0}
!14 = !{!11, !11, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = !{!7, !7, i64 0}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}


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