; LLVM IR from carlk3/no-OS-FatFS-SD-SDIO-SPI-RPi-Pico :: src/ff15/source (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.DIR = type { %struct.FFOBJID, i32, i32, i64, ptr, [12 x i8], i32, ptr }
%struct.FFOBJID = type { ptr, i16, i8, i8, i32, i64, i32, i32, i32, i32, i32, i32 }
%struct.FATFS = type { i8, i8, i8, i8, i8, i8, i16, i16, i16, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, [512 x i8] }
%struct.FIL = type { %struct.FFOBJID, i8, i8, i64, i32, i64, i64, ptr, ptr, [512 x i8] }

; 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 @mount_volume(ptr noundef, ptr noundef, i8 noundef zeroext) #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
define dso_local i32 @f_open(ptr noundef %0, ptr noundef %1, i8 noundef zeroext %2) #1 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i8, align 1
  %8 = alloca i32, align 4
  %9 = alloca %struct.DIR, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %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
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i8 %2, ptr %7, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 96, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  %19 = load ptr, ptr %5, align 8, !tbaa !5
  %20 = icmp ne ptr %19, null
  br i1 %20, label %22, label %21

21:                                               ; preds = %3
  store i32 9, ptr %4, align 4
  store i32 1, ptr %18, align 4
  br label %490

22:                                               ; preds = %3
  %23 = load i8, ptr %7, align 1, !tbaa !9
  %24 = zext i8 %23 to i32
  %25 = and i32 %24, 63
  %26 = trunc i32 %25 to i8
  store i8 %26, ptr %7, align 1, !tbaa !9
  %27 = load i8, ptr %7, align 1, !tbaa !9
  %28 = call i32 @mount_volume(ptr noundef %6, ptr noundef %10, i8 noundef zeroext %27)
  store i32 %28, ptr %8, align 4, !tbaa !10
  %29 = load i32, ptr %8, align 4, !tbaa !10
  %30 = icmp eq i32 %29, 0
  br i1 %30, label %31, label %481

31:                                               ; preds = %22
  %32 = load ptr, ptr %10, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 0
  %34 = getelementptr inbounds %struct.FFOBJID, ptr %33, i32 0, i32 0
  store ptr %32, ptr %34, align 8, !tbaa !12
  %35 = call ptr @ff_memalloc(i32 noundef 1120)
  store ptr %35, ptr %17, align 8, !tbaa !5
  %36 = load ptr, ptr %17, align 8, !tbaa !5
  %37 = icmp ne ptr %36, null
  br i1 %37, label %39, label %38

38:                                               ; preds = %31
  store i32 17, ptr %4, align 4
  store i32 1, ptr %18, align 4
  br label %490

39:                                               ; preds = %31
  %40 = load ptr, ptr %17, align 8, !tbaa !5
  %41 = load ptr, ptr %10, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.FATFS, ptr %41, i32 0, i32 9
  store ptr %40, ptr %42, align 8, !tbaa !17
  %43 = load ptr, ptr %17, align 8, !tbaa !5
  %44 = getelementptr inbounds i16, ptr %43, i64 255
  %45 = getelementptr inbounds i16, ptr %44, i64 1
  %46 = load ptr, ptr %10, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.FATFS, ptr %46, i32 0, i32 10
  store ptr %45, ptr %47, align 8, !tbaa !19
  %48 = load ptr, ptr %6, align 8, !tbaa !5
  %49 = call i32 @follow_path(ptr noundef %9, ptr noundef %48)
  store i32 %49, ptr %8, align 4, !tbaa !10
  %50 = load i32, ptr %8, align 4, !tbaa !10
  %51 = icmp eq i32 %50, 0
  br i1 %51, label %52, label %69

52:                                               ; preds = %39
  %53 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 5
  %54 = getelementptr inbounds [12 x i8], ptr %53, i64 0, i64 11
  %55 = load i8, ptr %54, align 1, !tbaa !9
  %56 = zext i8 %55 to i32
  %57 = and i32 %56, 128
  %58 = icmp ne i32 %57, 0
  br i1 %58, label %59, label %60

59:                                               ; preds = %52
  store i32 6, ptr %8, align 4, !tbaa !10
  br label %68

60:                                               ; preds = %52
  %61 = load i8, ptr %7, align 1, !tbaa !9
  %62 = zext i8 %61 to i32
  %63 = and i32 %62, -2
  %64 = icmp ne i32 %63, 0
  %65 = zext i1 %64 to i64
  %66 = select i1 %64, i32 1, i32 0
  %67 = call i32 @chk_share(ptr noundef %9, i32 noundef %66)
  store i32 %67, ptr %8, align 4, !tbaa !10
  br label %68

68:                                               ; preds = %60, %59
  br label %69

69:                                               ; preds = %68, %39
  %70 = load i8, ptr %7, align 1, !tbaa !9
  %71 = zext i8 %70 to i32
  %72 = and i32 %71, 28
  %73 = icmp ne i32 %72, 0
  br i1 %73, label %74, label %225

74:                                               ; preds = %69
  %75 = load i32, ptr %8, align 4, !tbaa !10
  %76 = icmp ne i32 %75, 0
  br i1 %76, label %77, label %93

77:                                               ; preds = %74
  %78 = load i32, ptr %8, align 4, !tbaa !10
  %79 = icmp eq i32 %78, 4
  br i1 %79, label %80, label %88

80:                                               ; preds = %77
  %81 = call i32 @enq_share()
  %82 = icmp ne i32 %81, 0
  br i1 %82, label %83, label %85

83:                                               ; preds = %80
  %84 = call i32 @dir_register(ptr noundef %9)
  br label %86

85:                                               ; preds = %80
  br label %86

86:                                               ; preds = %85, %83
  %87 = phi i32 [ %84, %83 ], [ 18, %85 ]
  store i32 %87, ptr %8, align 4, !tbaa !10
  br label %88

88:                                               ; preds = %86, %77
  %89 = load i8, ptr %7, align 1, !tbaa !9
  %90 = zext i8 %89 to i32
  %91 = or i32 %90, 8
  %92 = trunc i32 %91 to i8
  store i8 %92, ptr %7, align 1, !tbaa !9
  br label %109

93:                                               ; preds = %74
  %94 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 0
  %95 = getelementptr inbounds %struct.FFOBJID, ptr %94, i32 0, i32 2
  %96 = load i8, ptr %95, align 2, !tbaa !20
  %97 = zext i8 %96 to i32
  %98 = and i32 %97, 17
  %99 = icmp ne i32 %98, 0
  br i1 %99, label %100, label %101

100:                                              ; preds = %93
  store i32 7, ptr %8, align 4, !tbaa !10
  br label %108

101:                                              ; preds = %93
  %102 = load i8, ptr %7, align 1, !tbaa !9
  %103 = zext i8 %102 to i32
  %104 = and i32 %103, 4
  %105 = icmp ne i32 %104, 0
  br i1 %105, label %106, label %107

106:                                              ; preds = %101
  store i32 8, ptr %8, align 4, !tbaa !10
  br label %107

107:                                              ; preds = %106, %101
  br label %108

108:                                              ; preds = %107, %100
  br label %109

109:                                              ; preds = %108, %88
  %110 = load i32, ptr %8, align 4, !tbaa !10
  %111 = icmp eq i32 %110, 0
  br i1 %111, label %112, label %224

112:                                              ; preds = %109
  %113 = load i8, ptr %7, align 1, !tbaa !9
  %114 = zext i8 %113 to i32
  %115 = and i32 %114, 8
  %116 = icmp ne i32 %115, 0
  br i1 %116, label %117, label %224

117:                                              ; preds = %112
  %118 = load ptr, ptr %10, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.FATFS, ptr %118, i32 0, i32 0
  %120 = load i8, ptr %119, align 8, !tbaa !21
  %121 = zext i8 %120 to i32
  %122 = icmp eq i32 %121, 4
  br i1 %122, label %123, label %177

123:                                              ; preds = %117
  %124 = load ptr, ptr %10, align 8, !tbaa !5
  %125 = load ptr, ptr %5, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.FIL, ptr %125, i32 0, i32 0
  %127 = getelementptr inbounds %struct.FFOBJID, ptr %126, i32 0, i32 0
  store ptr %124, ptr %127, align 8, !tbaa !22
  %128 = load ptr, ptr %10, align 8, !tbaa !5
  %129 = load ptr, ptr %5, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.FIL, ptr %129, i32 0, i32 0
  call void @init_alloc_info(ptr noundef %128, ptr noundef %130)
  %131 = load ptr, ptr %10, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.FATFS, ptr %131, i32 0, i32 10
  %133 = load ptr, ptr %132, align 8, !tbaa !19
  %134 = getelementptr inbounds i8, ptr %133, i64 2
  call void @llvm.memset.p0.i64(ptr align 1 %134, i8 0, i64 30, i1 false)
  %135 = load ptr, ptr %10, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.FATFS, ptr %135, i32 0, i32 10
  %137 = load ptr, ptr %136, align 8, !tbaa !19
  %138 = getelementptr inbounds i8, ptr %137, i64 38
  call void @llvm.memset.p0.i64(ptr align 1 %138, i8 0, i64 26, i1 false)
  %139 = load ptr, ptr %10, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.FATFS, ptr %139, i32 0, i32 10
  %141 = load ptr, ptr %140, align 8, !tbaa !19
  %142 = getelementptr inbounds i8, ptr %141, i64 4
  store i8 32, ptr %142, align 1, !tbaa !9
  %143 = load ptr, ptr %10, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.FATFS, ptr %143, i32 0, i32 10
  %145 = load ptr, ptr %144, align 8, !tbaa !19
  %146 = getelementptr inbounds i8, ptr %145, i64 8
  %147 = call i32 @get_fattime()
  call void @st_dword(ptr noundef %146, i32 noundef %147)
  %148 = load ptr, ptr %10, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.FATFS, ptr %148, i32 0, i32 10
  %150 = load ptr, ptr %149, align 8, !tbaa !19
  %151 = getelementptr inbounds i8, ptr %150, i64 33
  store i8 1, ptr %151, align 1, !tbaa !9
  %152 = call i32 @store_xdir(ptr noundef %9)
  store i32 %152, ptr %8, align 4, !tbaa !10
  %153 = load i32, ptr %8, align 4, !tbaa !10
  %154 = icmp eq i32 %153, 0
  br i1 %154, label %155, label %176

155:                                              ; preds = %123
  %156 = load ptr, ptr %5, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.FIL, ptr %156, i32 0, i32 0
  %158 = getelementptr inbounds %struct.FFOBJID, ptr %157, i32 0, i32 4
  %159 = load i32, ptr %158, align 4, !tbaa !24
  %160 = icmp ne i32 %159, 0
  br i1 %160, label %161, label %176

161:                                              ; preds = %155
  %162 = load ptr, ptr %5, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.FIL, ptr %162, i32 0, i32 0
  %164 = load ptr, ptr %5, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.FIL, ptr %164, i32 0, i32 0
  %166 = getelementptr inbounds %struct.FFOBJID, ptr %165, i32 0, i32 4
  %167 = load i32, ptr %166, align 4, !tbaa !24
  %168 = call i32 @remove_chain(ptr noundef %163, i32 noundef %167, i32 noundef 0)
  store i32 %168, ptr %8, align 4, !tbaa !10
  %169 = load ptr, ptr %5, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.FIL, ptr %169, i32 0, i32 0
  %171 = getelementptr inbounds %struct.FFOBJID, ptr %170, i32 0, i32 4
  %172 = load i32, ptr %171, align 4, !tbaa !24
  %173 = sub i32 %172, 1
  %174 = load ptr, ptr %10, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.FATFS, ptr %174, i32 0, i32 11
  store i32 %173, ptr %175, align 8, !tbaa !25
  br label %176

176:                                              ; preds = %161, %155, %123
  br label %223

177:                                              ; preds = %117
  %178 = call i32 @get_fattime()
  store i32 %178, ptr %14, align 4, !tbaa !10
  %179 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 4
  %180 = load ptr, ptr %179, align 8, !tbaa !26
  %181 = getelementptr inbounds i8, ptr %180, i64 14
  %182 = load i32, ptr %14, align 4, !tbaa !10
  call void @st_dword(ptr noundef %181, i32 noundef %182)
  %183 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 4
  %184 = load ptr, ptr %183, align 8, !tbaa !26
  %185 = getelementptr inbounds i8, ptr %184, i64 22
  %186 = load i32, ptr %14, align 4, !tbaa !10
  call void @st_dword(ptr noundef %185, i32 noundef %186)
  %187 = load ptr, ptr %10, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 4
  %189 = load ptr, ptr %188, align 8, !tbaa !26
  %190 = call i32 @ld_clust(ptr noundef %187, ptr noundef %189)
  store i32 %190, ptr %11, align 4, !tbaa !10
  %191 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 4
  %192 = load ptr, ptr %191, align 8, !tbaa !26
  %193 = getelementptr inbounds i8, ptr %192, i64 11
  store i8 32, ptr %193, align 1, !tbaa !9
  %194 = load ptr, ptr %10, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 4
  %196 = load ptr, ptr %195, align 8, !tbaa !26
  call void @st_clust(ptr noundef %194, ptr noundef %196, i32 noundef 0)
  %197 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 4
  %198 = load ptr, ptr %197, align 8, !tbaa !26
  %199 = getelementptr inbounds i8, ptr %198, i64 28
  call void @st_dword(ptr noundef %199, i32 noundef 0)
  %200 = load ptr, ptr %10, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.FATFS, ptr %200, i32 0, i32 4
  store i8 1, ptr %201, align 4, !tbaa !27
  %202 = load i32, ptr %11, align 4, !tbaa !10
  %203 = icmp ne i32 %202, 0
  br i1 %203, label %204, label %222

204:                                              ; preds = %177
  %205 = load ptr, ptr %10, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.FATFS, ptr %205, i32 0, i32 24
  %207 = load i64, ptr %206, align 8, !tbaa !28
  store i64 %207, ptr %15, align 8, !tbaa !29
  %208 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 0
  %209 = load i32, ptr %11, align 4, !tbaa !10
  %210 = call i32 @remove_chain(ptr noundef %208, i32 noundef %209, i32 noundef 0)
  store i32 %210, ptr %8, align 4, !tbaa !10
  %211 = load i32, ptr %8, align 4, !tbaa !10
  %212 = icmp eq i32 %211, 0
  br i1 %212, label %213, label %221

213:                                              ; preds = %204
  %214 = load ptr, ptr %10, align 8, !tbaa !5
  %215 = load i64, ptr %15, align 8, !tbaa !29
  %216 = call i32 @move_window(ptr noundef %214, i64 noundef %215)
  store i32 %216, ptr %8, align 4, !tbaa !10
  %217 = load i32, ptr %11, align 4, !tbaa !10
  %218 = sub i32 %217, 1
  %219 = load ptr, ptr %10, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.FATFS, ptr %219, i32 0, i32 11
  store i32 %218, ptr %220, align 8, !tbaa !25
  br label %221

221:                                              ; preds = %213, %204
  br label %222

222:                                              ; preds = %221, %177
  br label %223

223:                                              ; preds = %222, %176
  br label %224

224:                                              ; preds = %223, %112, %109
  br label %252

225:                                              ; preds = %69
  %226 = load i32, ptr %8, align 4, !tbaa !10
  %227 = icmp eq i32 %226, 0
  br i1 %227, label %228, label %251

228:                                              ; preds = %225
  %229 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 0
  %230 = getelementptr inbounds %struct.FFOBJID, ptr %229, i32 0, i32 2
  %231 = load i8, ptr %230, align 2, !tbaa !20
  %232 = zext i8 %231 to i32
  %233 = and i32 %232, 16
  %234 = icmp ne i32 %233, 0
  br i1 %234, label %235, label %236

235:                                              ; preds = %228
  store i32 4, ptr %8, align 4, !tbaa !10
  br label %250

236:                                              ; preds = %228
  %237 = load i8, ptr %7, align 1, !tbaa !9
  %238 = zext i8 %237 to i32
  %239 = and i32 %238, 2
  %240 = icmp ne i32 %239, 0
  br i1 %240, label %241, label %249

241:                                              ; preds = %236
  %242 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 0
  %243 = getelementptr inbounds %struct.FFOBJID, ptr %242, i32 0, i32 2
  %244 = load i8, ptr %243, align 2, !tbaa !20
  %245 = zext i8 %244 to i32
  %246 = and i32 %245, 1
  %247 = icmp ne i32 %246, 0
  br i1 %247, label %248, label %249

248:                                              ; preds = %241
  store i32 7, ptr %8, align 4, !tbaa !10
  br label %249

249:                                              ; preds = %248, %241, %236
  br label %250

250:                                              ; preds = %249, %235
  br label %251

251:                                              ; preds = %250, %225
  br label %252

252:                                              ; preds = %251, %224
  %253 = load i32, ptr %8, align 4, !tbaa !10
  %254 = icmp eq i32 %253, 0
  br i1 %254, label %255, label %292

255:                                              ; preds = %252
  %256 = load i8, ptr %7, align 1, !tbaa !9
  %257 = zext i8 %256 to i32
  %258 = and i32 %257, 8
  %259 = icmp ne i32 %258, 0
  br i1 %259, label %260, label %265

260:                                              ; preds = %255
  %261 = load i8, ptr %7, align 1, !tbaa !9
  %262 = zext i8 %261 to i32
  %263 = or i32 %262, 64
  %264 = trunc i32 %263 to i8
  store i8 %264, ptr %7, align 1, !tbaa !9
  br label %265

265:                                              ; preds = %260, %255
  %266 = load ptr, ptr %10, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.FATFS, ptr %266, i32 0, i32 24
  %268 = load i64, ptr %267, align 8, !tbaa !28
  %269 = load ptr, ptr %5, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.FIL, ptr %269, i32 0, i32 6
  store i64 %268, ptr %270, align 8, !tbaa !30
  %271 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 4
  %272 = load ptr, ptr %271, align 8, !tbaa !26
  %273 = load ptr, ptr %5, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.FIL, ptr %273, i32 0, i32 7
  store ptr %272, ptr %274, align 8, !tbaa !31
  %275 = load i8, ptr %7, align 1, !tbaa !9
  %276 = zext i8 %275 to i32
  %277 = and i32 %276, -2
  %278 = icmp ne i32 %277, 0
  %279 = zext i1 %278 to i64
  %280 = select i1 %278, i32 1, i32 0
  %281 = call i32 @inc_share(ptr noundef %9, i32 noundef %280)
  %282 = load ptr, ptr %5, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.FIL, ptr %282, i32 0, i32 0
  %284 = getelementptr inbounds %struct.FFOBJID, ptr %283, i32 0, i32 11
  store i32 %281, ptr %284, align 4, !tbaa !32
  %285 = load ptr, ptr %5, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.FIL, ptr %285, i32 0, i32 0
  %287 = getelementptr inbounds %struct.FFOBJID, ptr %286, i32 0, i32 11
  %288 = load i32, ptr %287, align 4, !tbaa !32
  %289 = icmp eq i32 %288, 0
  br i1 %289, label %290, label %291

290:                                              ; preds = %265
  store i32 2, ptr %8, align 4, !tbaa !10
  br label %291

291:                                              ; preds = %290, %265
  br label %292

292:                                              ; preds = %291, %252
  %293 = load i32, ptr %8, align 4, !tbaa !10
  %294 = icmp eq i32 %293, 0
  br i1 %294, label %295, label %479

295:                                              ; preds = %292
  %296 = load ptr, ptr %10, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.FATFS, ptr %296, i32 0, i32 0
  %298 = load i8, ptr %297, align 8, !tbaa !21
  %299 = zext i8 %298 to i32
  %300 = icmp eq i32 %299, 4
  br i1 %300, label %301, label %329

301:                                              ; preds = %295
  %302 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 0
  %303 = getelementptr inbounds %struct.FFOBJID, ptr %302, i32 0, i32 4
  %304 = load i32, ptr %303, align 4, !tbaa !33
  %305 = load ptr, ptr %5, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.FIL, ptr %305, i32 0, i32 0
  %307 = getelementptr inbounds %struct.FFOBJID, ptr %306, i32 0, i32 8
  store i32 %304, ptr %307, align 8, !tbaa !34
  %308 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 0
  %309 = getelementptr inbounds %struct.FFOBJID, ptr %308, i32 0, i32 5
  %310 = load i64, ptr %309, align 8, !tbaa !35
  %311 = trunc i64 %310 to i32
  %312 = and i32 %311, -256
  %313 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 0
  %314 = getelementptr inbounds %struct.FFOBJID, ptr %313, i32 0, i32 3
  %315 = load i8, ptr %314, align 1, !tbaa !36
  %316 = zext i8 %315 to i32
  %317 = or i32 %312, %316
  %318 = load ptr, ptr %5, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.FIL, ptr %318, i32 0, i32 0
  %320 = getelementptr inbounds %struct.FFOBJID, ptr %319, i32 0, i32 9
  store i32 %317, ptr %320, align 4, !tbaa !37
  %321 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 6
  %322 = load i32, ptr %321, align 4, !tbaa !38
  %323 = load ptr, ptr %5, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.FIL, ptr %323, i32 0, i32 0
  %325 = getelementptr inbounds %struct.FFOBJID, ptr %324, i32 0, i32 10
  store i32 %322, ptr %325, align 8, !tbaa !39
  %326 = load ptr, ptr %10, align 8, !tbaa !5
  %327 = load ptr, ptr %5, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.FIL, ptr %327, i32 0, i32 0
  call void @init_alloc_info(ptr noundef %326, ptr noundef %328)
  br label %345

329:                                              ; preds = %295
  %330 = load ptr, ptr %10, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 4
  %332 = load ptr, ptr %331, align 8, !tbaa !26
  %333 = call i32 @ld_clust(ptr noundef %330, ptr noundef %332)
  %334 = load ptr, ptr %5, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.FIL, ptr %334, i32 0, i32 0
  %336 = getelementptr inbounds %struct.FFOBJID, ptr %335, i32 0, i32 4
  store i32 %333, ptr %336, align 4, !tbaa !24
  %337 = getelementptr inbounds %struct.DIR, ptr %9, i32 0, i32 4
  %338 = load ptr, ptr %337, align 8, !tbaa !26
  %339 = getelementptr inbounds i8, ptr %338, i64 28
  %340 = call i32 @ld_dword(ptr noundef %339)
  %341 = zext i32 %340 to i64
  %342 = load ptr, ptr %5, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.FIL, ptr %342, i32 0, i32 0
  %344 = getelementptr inbounds %struct.FFOBJID, ptr %343, i32 0, i32 5
  store i64 %341, ptr %344, align 8, !tbaa !40
  br label %345

345:                                              ; preds = %329, %301
  %346 = load ptr, ptr %5, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.FIL, ptr %346, i32 0, i32 8
  store ptr null, ptr %347, align 8, !tbaa !41
  %348 = load ptr, ptr %10, align 8, !tbaa !5
  %349 = load ptr, ptr %5, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.FIL, ptr %349, i32 0, i32 0
  %351 = getelementptr inbounds %struct.FFOBJID, ptr %350, i32 0, i32 0
  store ptr %348, ptr %351, align 8, !tbaa !22
  %352 = load ptr, ptr %10, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.FATFS, ptr %352, i32 0, i32 6
  %354 = load i16, ptr %353, align 2, !tbaa !42
  %355 = load ptr, ptr %5, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.FIL, ptr %355, i32 0, i32 0
  %357 = getelementptr inbounds %struct.FFOBJID, ptr %356, i32 0, i32 1
  store i16 %354, ptr %357, align 8, !tbaa !43
  %358 = load i8, ptr %7, align 1, !tbaa !9
  %359 = load ptr, ptr %5, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.FIL, ptr %359, i32 0, i32 1
  store i8 %358, ptr %360, align 8, !tbaa !44
  %361 = load ptr, ptr %5, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.FIL, ptr %361, i32 0, i32 2
  store i8 0, ptr %362, align 1, !tbaa !45
  %363 = load ptr, ptr %5, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.FIL, ptr %363, i32 0, i32 5
  store i64 0, ptr %364, align 8, !tbaa !46
  %365 = load ptr, ptr %5, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.FIL, ptr %365, i32 0, i32 3
  store i64 0, ptr %366, align 8, !tbaa !47
  %367 = load ptr, ptr %5, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.FIL, ptr %367, i32 0, i32 9
  %369 = getelementptr inbounds [512 x i8], ptr %368, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %369, i8 0, i64 512, i1 false)
  %370 = load i8, ptr %7, align 1, !tbaa !9
  %371 = zext i8 %370 to i32
  %372 = and i32 %371, 32
  %373 = icmp ne i32 %372, 0
  br i1 %373, label %374, label %478

374:                                              ; preds = %345
  %375 = load ptr, ptr %5, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.FIL, ptr %375, i32 0, i32 0
  %377 = getelementptr inbounds %struct.FFOBJID, ptr %376, i32 0, i32 5
  %378 = load i64, ptr %377, align 8, !tbaa !40
  %379 = icmp ugt i64 %378, 0
  br i1 %379, label %380, label %478

380:                                              ; preds = %374
  %381 = load ptr, ptr %5, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.FIL, ptr %381, i32 0, i32 0
  %383 = getelementptr inbounds %struct.FFOBJID, ptr %382, i32 0, i32 5
  %384 = load i64, ptr %383, align 8, !tbaa !40
  %385 = load ptr, ptr %5, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.FIL, ptr %385, i32 0, i32 3
  store i64 %384, ptr %386, align 8, !tbaa !47
  %387 = load ptr, ptr %10, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.FATFS, ptr %387, i32 0, i32 8
  %389 = load i16, ptr %388, align 2, !tbaa !48
  %390 = zext i16 %389 to i32
  %391 = mul i32 %390, 512
  store i32 %391, ptr %12, align 4, !tbaa !10
  %392 = load ptr, ptr %5, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.FIL, ptr %392, i32 0, i32 0
  %394 = getelementptr inbounds %struct.FFOBJID, ptr %393, i32 0, i32 4
  %395 = load i32, ptr %394, align 4, !tbaa !24
  store i32 %395, ptr %13, align 4, !tbaa !10
  %396 = load ptr, ptr %5, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.FIL, ptr %396, i32 0, i32 0
  %398 = getelementptr inbounds %struct.FFOBJID, ptr %397, i32 0, i32 5
  %399 = load i64, ptr %398, align 8, !tbaa !40
  store i64 %399, ptr %16, align 8, !tbaa !29
  br label %400

400:                                              ; preds = %423, %380
  %401 = load i32, ptr %8, align 4, !tbaa !10
  %402 = icmp eq i32 %401, 0
  br i1 %402, label %403, label %408

403:                                              ; preds = %400
  %404 = load i64, ptr %16, align 8, !tbaa !29
  %405 = load i32, ptr %12, align 4, !tbaa !10
  %406 = zext i32 %405 to i64
  %407 = icmp ugt i64 %404, %406
  br label %408

408:                                              ; preds = %403, %400
  %409 = phi i1 [ false, %400 ], [ %407, %403 ]
  br i1 %409, label %410, label %428

410:                                              ; preds = %408
  %411 = load ptr, ptr %5, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.FIL, ptr %411, i32 0, i32 0
  %413 = load i32, ptr %13, align 4, !tbaa !10
  %414 = call i32 @get_fat(ptr noundef %412, i32 noundef %413)
  store i32 %414, ptr %13, align 4, !tbaa !10
  %415 = load i32, ptr %13, align 4, !tbaa !10
  %416 = icmp ule i32 %415, 1
  br i1 %416, label %417, label %418

417:                                              ; preds = %410
  store i32 2, ptr %8, align 4, !tbaa !10
  br label %418

418:                                              ; preds = %417, %410
  %419 = load i32, ptr %13, align 4, !tbaa !10
  %420 = icmp eq i32 %419, -1
  br i1 %420, label %421, label %422

421:                                              ; preds = %418
  store i32 1, ptr %8, align 4, !tbaa !10
  br label %422

422:                                              ; preds = %421, %418
  br label %423

423:                                              ; preds = %422
  %424 = load i32, ptr %12, align 4, !tbaa !10
  %425 = zext i32 %424 to i64
  %426 = load i64, ptr %16, align 8, !tbaa !29
  %427 = sub i64 %426, %425
  store i64 %427, ptr %16, align 8, !tbaa !29
  br label %400, !llvm.loop !49

428:                                              ; preds = %408
  %429 = load i32, ptr %13, align 4, !tbaa !10
  %430 = load ptr, ptr %5, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.FIL, ptr %430, i32 0, i32 4
  store i32 %429, ptr %431, align 8, !tbaa !51
  %432 = load i32, ptr %8, align 4, !tbaa !10
  %433 = icmp eq i32 %432, 0
  br i1 %433, label %434, label %468

434:                                              ; preds = %428
  %435 = load i64, ptr %16, align 8, !tbaa !29
  %436 = urem i64 %435, 512
  %437 = icmp ne i64 %436, 0
  br i1 %437, label %438, label %468

438:                                              ; preds = %434
  %439 = load ptr, ptr %10, align 8, !tbaa !5
  %440 = load i32, ptr %13, align 4, !tbaa !10
  %441 = call i64 @clst2sect(ptr noundef %439, i32 noundef %440)
  store i64 %441, ptr %15, align 8, !tbaa !29
  %442 = load i64, ptr %15, align 8, !tbaa !29
  %443 = icmp eq i64 %442, 0
  br i1 %443, label %444, label %445

444:                                              ; preds = %438
  store i32 2, ptr %8, align 4, !tbaa !10
  br label %467

445:                                              ; preds = %438
  %446 = load i64, ptr %15, align 8, !tbaa !29
  %447 = load i64, ptr %16, align 8, !tbaa !29
  %448 = udiv i64 %447, 512
  %449 = trunc i64 %448 to i32
  %450 = zext i32 %449 to i64
  %451 = add i64 %446, %450
  %452 = load ptr, ptr %5, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.FIL, ptr %452, i32 0, i32 5
  store i64 %451, ptr %453, align 8, !tbaa !46
  %454 = load ptr, ptr %10, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.FATFS, ptr %454, i32 0, i32 1
  %456 = load i8, ptr %455, align 1, !tbaa !52
  %457 = load ptr, ptr %5, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.FIL, ptr %457, i32 0, i32 9
  %459 = getelementptr inbounds [512 x i8], ptr %458, i64 0, i64 0
  %460 = load ptr, ptr %5, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.FIL, ptr %460, i32 0, i32 5
  %462 = load i64, ptr %461, align 8, !tbaa !46
  %463 = call i32 @disk_read(i8 noundef zeroext %456, ptr noundef %459, i64 noundef %462, i32 noundef 1)
  %464 = icmp ne i32 %463, 0
  br i1 %464, label %465, label %466

465:                                              ; preds = %445
  store i32 1, ptr %8, align 4, !tbaa !10
  br label %466

466:                                              ; preds = %465, %445
  br label %467

467:                                              ; preds = %466, %444
  br label %468

468:                                              ; preds = %467, %434, %428
  %469 = load i32, ptr %8, align 4, !tbaa !10
  %470 = icmp ne i32 %469, 0
  br i1 %470, label %471, label %477

471:                                              ; preds = %468
  %472 = load ptr, ptr %5, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.FIL, ptr %472, i32 0, i32 0
  %474 = getelementptr inbounds %struct.FFOBJID, ptr %473, i32 0, i32 11
  %475 = load i32, ptr %474, align 4, !tbaa !32
  %476 = call i32 @dec_share(i32 noundef %475)
  br label %477

477:                                              ; preds = %471, %468
  br label %478

478:                                              ; preds = %477, %374, %345
  br label %479

479:                                              ; preds = %478, %292
  %480 = load ptr, ptr %17, align 8, !tbaa !5
  call void @ff_memfree(ptr noundef %480)
  br label %481

481:                                              ; preds = %479, %22
  %482 = load i32, ptr %8, align 4, !tbaa !10
  %483 = icmp ne i32 %482, 0
  br i1 %483, label %484, label %488

484:                                              ; preds = %481
  %485 = load ptr, ptr %5, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.FIL, ptr %485, i32 0, i32 0
  %487 = getelementptr inbounds %struct.FFOBJID, ptr %486, i32 0, i32 0
  store ptr null, ptr %487, align 8, !tbaa !22
  br label %488

488:                                              ; preds = %484, %481
  %489 = load i32, ptr %8, align 4, !tbaa !10
  store i32 %489, ptr %4, align 4
  store i32 1, ptr %18, align 4
  br label %490

490:                                              ; preds = %488, %38, %21
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 96, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  %491 = load i32, ptr %4, align 4
  ret i32 %491
}

declare ptr @ff_memalloc(i32 noundef) #2

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @enq_share() #1

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

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

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

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

declare i32 @get_fattime() #2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @dec_share(i32 noundef) #1

declare void @ff_memfree(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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !6, i64 0}
!13 = !{!"", !14, i64 0, !11, i64 48, !11, i64 52, !16, i64 56, !6, i64 64, !7, i64 72, !11, i64 84, !6, i64 88}
!14 = !{!"", !6, i64 0, !15, i64 8, !7, i64 10, !7, i64 11, !11, i64 12, !16, i64 16, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44}
!15 = !{!"short", !7, i64 0}
!16 = !{!"long", !7, i64 0}
!17 = !{!18, !6, i64 16}
!18 = !{!"", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4, !7, i64 5, !15, i64 6, !15, i64 8, !15, i64 10, !6, i64 16, !6, i64 24, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !16, i64 64, !16, i64 72, !16, i64 80, !16, i64 88, !16, i64 96, !16, i64 104, !7, i64 112}
!19 = !{!18, !6, i64 24}
!20 = !{!13, !7, i64 10}
!21 = !{!18, !7, i64 0}
!22 = !{!23, !6, i64 0}
!23 = !{!"", !14, i64 0, !7, i64 48, !7, i64 49, !16, i64 56, !11, i64 64, !16, i64 72, !16, i64 80, !6, i64 88, !6, i64 96, !7, i64 104}
!24 = !{!23, !11, i64 12}
!25 = !{!18, !11, i64 32}
!26 = !{!13, !6, i64 64}
!27 = !{!18, !7, i64 4}
!28 = !{!18, !16, i64 104}
!29 = !{!16, !16, i64 0}
!30 = !{!23, !16, i64 80}
!31 = !{!23, !6, i64 88}
!32 = !{!23, !11, i64 44}
!33 = !{!13, !11, i64 12}
!34 = !{!23, !11, i64 32}
!35 = !{!13, !16, i64 16}
!36 = !{!13, !7, i64 11}
!37 = !{!23, !11, i64 36}
!38 = !{!13, !11, i64 84}
!39 = !{!23, !11, i64 40}
!40 = !{!23, !16, i64 16}
!41 = !{!23, !6, i64 96}
!42 = !{!18, !15, i64 6}
!43 = !{!23, !15, i64 8}
!44 = !{!23, !7, i64 48}
!45 = !{!23, !7, i64 49}
!46 = !{!23, !16, i64 72}
!47 = !{!23, !16, i64 56}
!48 = !{!18, !15, i64 10}
!49 = distinct !{!49, !50}
!50 = !{!"llvm.loop.mustprogress"}
!51 = !{!23, !11, i64 64}
!52 = !{!18, !7, i64 1}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.DIR = type { %struct.FFOBJID, i32, i32, i64, ptr, [12 x i8], i32, ptr }
%struct.FFOBJID = type { ptr, i16, i8, i8, i32, i64, i32, i32, i32, i32, i32, i32 }

; 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 @mount_volume(ptr noundef, ptr noundef, i8 noundef zeroext) 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
define dso_local i32 @f_open(ptr noundef %0, ptr noundef %1, i8 noundef zeroext %2) local_unnamed_addr #1 {
  %4 = alloca ptr, align 8
  %5 = alloca %struct.DIR, align 8
  %6 = alloca ptr, align 8
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %5) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #4
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %207, label %7

7:                                                ; preds = %3
  %8 = and i8 %2, 63
  %9 = call i32 @mount_volume(ptr noundef nonnull %4, ptr noundef nonnull %6, i8 noundef zeroext %8)
  %10 = icmp eq i32 %9, 0
  br i1 %10, label %11, label %.thread171

11:                                               ; preds = %7
  %12 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %12, ptr %5, align 8, !tbaa !9
  %13 = call ptr @ff_memalloc(i32 noundef 1120) #4
  %.not107 = icmp eq ptr %13, null
  br i1 %.not107, label %207, label %14

14:                                               ; preds = %11
  %15 = load ptr, ptr %6, align 8, !tbaa !5
  %16 = getelementptr inbounds i8, ptr %15, i64 16
  store ptr %13, ptr %16, align 8, !tbaa !15
  %17 = getelementptr inbounds i8, ptr %13, i64 512
  %18 = getelementptr inbounds i8, ptr %15, i64 24
  store ptr %17, ptr %18, align 8, !tbaa !17
  %19 = load ptr, ptr %4, align 8, !tbaa !5
  %20 = call i32 @follow_path(ptr noundef nonnull %5, ptr noundef %19)
  %21 = icmp eq i32 %20, 0
  br i1 %21, label %22, label %29

22:                                               ; preds = %14
  %23 = getelementptr inbounds i8, ptr %5, i64 83
  %24 = load i8, ptr %23, align 1, !tbaa !18
  %.not108 = icmp sgt i8 %24, -1
  br i1 %.not108, label %25, label %.thread162

25:                                               ; preds = %22
  %26 = and i8 %2, 62
  %.not109 = icmp ne i8 %26, 0
  %27 = zext i1 %.not109 to i32
  %28 = call i32 @chk_share(ptr noundef nonnull %5, i32 noundef %27)
  br label %29

29:                                               ; preds = %25, %14
  %.091 = phi i32 [ %28, %25 ], [ %20, %14 ]
  %30 = zext nneg i8 %8 to i32
  %31 = and i32 %30, 28
  %.not110 = icmp eq i32 %31, 0
  br i1 %.not110, label %103, label %32

32:                                               ; preds = %29
  switch i32 %.091, label %43 [
    i32 0, label %37
    i32 4, label %33
  ]

33:                                               ; preds = %32
  %34 = call i32 @enq_share()
  %.not117 = icmp eq i32 %34, 0
  br i1 %.not117, label %.thread162, label %35

35:                                               ; preds = %33
  %36 = call i32 @dir_register(ptr noundef nonnull %5)
  br label %43

37:                                               ; preds = %32
  %38 = getelementptr inbounds i8, ptr %5, i64 10
  %39 = load i8, ptr %38, align 2, !tbaa !19
  %40 = and i8 %39, 17
  %.not115 = icmp eq i8 %40, 0
  br i1 %.not115, label %41, label %.thread162

41:                                               ; preds = %37
  %42 = and i32 %30, 4
  %.not116 = icmp eq i32 %42, 0
  br i1 %.not116, label %.thread136, label %.thread162

43:                                               ; preds = %32, %35
  %.192 = phi i32 [ %.091, %32 ], [ %36, %35 ]
  %44 = or i8 %8, 8
  %45 = icmp eq i32 %.192, 0
  br i1 %45, label %.thread136, label %.thread162

.thread136:                                       ; preds = %41, %43
  %.089139 = phi i8 [ %44, %43 ], [ %8, %41 ]
  %46 = and i8 %.089139, 8
  %.not118 = icmp eq i8 %46, 0
  br i1 %.not118, label %.thread156, label %47

47:                                               ; preds = %.thread136
  %48 = load ptr, ptr %6, align 8, !tbaa !5
  %49 = load i8, ptr %48, align 8, !tbaa !20
  %50 = icmp eq i8 %49, 4
  br i1 %50, label %51, label %77

51:                                               ; preds = %47
  store ptr %48, ptr %0, align 8, !tbaa !21
  call void @init_alloc_info(ptr noundef nonnull %48, ptr noundef nonnull %0)
  %52 = load ptr, ptr %6, align 8, !tbaa !5
  %53 = getelementptr inbounds i8, ptr %52, i64 24
  %54 = load ptr, ptr %53, align 8, !tbaa !17
  %55 = getelementptr inbounds i8, ptr %54, i64 2
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(30) %55, i8 0, i64 30, i1 false)
  %56 = load ptr, ptr %53, align 8, !tbaa !17
  %57 = getelementptr inbounds i8, ptr %56, i64 38
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(26) %57, i8 0, i64 26, i1 false)
  %58 = load ptr, ptr %53, align 8, !tbaa !17
  %59 = getelementptr inbounds i8, ptr %58, i64 4
  store i8 32, ptr %59, align 1, !tbaa !18
  %60 = load ptr, ptr %6, align 8, !tbaa !5
  %61 = getelementptr inbounds i8, ptr %60, i64 24
  %62 = load ptr, ptr %61, align 8, !tbaa !17
  %63 = getelementptr inbounds i8, ptr %62, i64 8
  %64 = call i32 @get_fattime() #4
  call void @st_dword(ptr noundef nonnull %63, i32 noundef %64)
  %65 = load ptr, ptr %6, align 8, !tbaa !5
  %66 = getelementptr inbounds i8, ptr %65, i64 24
  %67 = load ptr, ptr %66, align 8, !tbaa !17
  %68 = getelementptr inbounds i8, ptr %67, i64 33
  store i8 1, ptr %68, align 1, !tbaa !18
  %69 = call i32 @store_xdir(ptr noundef nonnull %5)
  %70 = icmp eq i32 %69, 0
  br i1 %70, label %71, label %.thread162

71:                                               ; preds = %51
  %72 = getelementptr inbounds i8, ptr %0, i64 12
  %73 = load i32, ptr %72, align 4, !tbaa !23
  %.not120 = icmp eq i32 %73, 0
  br i1 %.not120, label %.thread156, label %74

74:                                               ; preds = %71
  %75 = call i32 @remove_chain(ptr noundef nonnull %0, i32 noundef %73, i32 noundef 0)
  %76 = load i32, ptr %72, align 4, !tbaa !23
  br label %113

77:                                               ; preds = %47
  %78 = call i32 @get_fattime() #4
  %79 = getelementptr inbounds i8, ptr %5, i64 64
  %80 = load ptr, ptr %79, align 8, !tbaa !24
  %81 = getelementptr inbounds i8, ptr %80, i64 14
  call void @st_dword(ptr noundef nonnull %81, i32 noundef %78)
  %82 = load ptr, ptr %79, align 8, !tbaa !24
  %83 = getelementptr inbounds i8, ptr %82, i64 22
  call void @st_dword(ptr noundef nonnull %83, i32 noundef %78)
  %84 = load ptr, ptr %6, align 8, !tbaa !5
  %85 = load ptr, ptr %79, align 8, !tbaa !24
  %86 = call i32 @ld_clust(ptr noundef %84, ptr noundef %85)
  %87 = load ptr, ptr %79, align 8, !tbaa !24
  %88 = getelementptr inbounds i8, ptr %87, i64 11
  store i8 32, ptr %88, align 1, !tbaa !18
  %89 = load ptr, ptr %6, align 8, !tbaa !5
  %90 = load ptr, ptr %79, align 8, !tbaa !24
  call void @st_clust(ptr noundef %89, ptr noundef %90, i32 noundef 0)
  %91 = load ptr, ptr %79, align 8, !tbaa !24
  %92 = getelementptr inbounds i8, ptr %91, i64 28
  call void @st_dword(ptr noundef nonnull %92, i32 noundef 0)
  %93 = load ptr, ptr %6, align 8, !tbaa !5
  %94 = getelementptr inbounds i8, ptr %93, i64 4
  store i8 1, ptr %94, align 4, !tbaa !25
  %.not119 = icmp eq i32 %86, 0
  br i1 %.not119, label %.thread156, label %95

95:                                               ; preds = %77
  %96 = getelementptr inbounds i8, ptr %93, i64 104
  %97 = load i64, ptr %96, align 8, !tbaa !26
  %98 = call i32 @remove_chain(ptr noundef nonnull %5, i32 noundef %86, i32 noundef 0)
  %99 = icmp eq i32 %98, 0
  br i1 %99, label %100, label %.thread162

100:                                              ; preds = %95
  %101 = load ptr, ptr %6, align 8, !tbaa !5
  %102 = call i32 @move_window(ptr noundef %101, i64 noundef %97)
  br label %113

103:                                              ; preds = %29
  %104 = icmp eq i32 %.091, 0
  br i1 %104, label %105, label %.thread162

105:                                              ; preds = %103
  %106 = getelementptr inbounds i8, ptr %5, i64 10
  %107 = load i8, ptr %106, align 2, !tbaa !19
  %108 = zext i8 %107 to i32
  %109 = and i32 %108, 16
  %.not111 = icmp eq i32 %109, 0
  br i1 %.not111, label %110, label %.thread162

110:                                              ; preds = %105
  %111 = and i32 %30, 2
  %.not112 = icmp eq i32 %111, 0
  %112 = and i32 %108, 1
  %.not113 = icmp eq i32 %112, 0
  %or.cond = or i1 %.not112, %.not113
  br i1 %or.cond, label %.thread156, label %.thread162

113:                                              ; preds = %100, %74
  %.sink.in = phi i32 [ %86, %100 ], [ %76, %74 ]
  %.394 = phi i32 [ %102, %100 ], [ %75, %74 ]
  %.sink = add i32 %.sink.in, -1
  %.sink200 = load ptr, ptr %6, align 8, !tbaa !5
  %114 = getelementptr inbounds i8, ptr %.sink200, i64 32
  store i32 %.sink, ptr %114, align 8, !tbaa !27
  %115 = icmp eq i32 %.394, 0
  br i1 %115, label %.thread156, label %.thread162

.thread156:                                       ; preds = %110, %.thread136, %77, %71, %113
  %.1159 = phi i8 [ %.089139, %113 ], [ %.089139, %.thread136 ], [ %.089139, %77 ], [ %.089139, %71 ], [ %8, %110 ]
  %116 = shl i8 %.1159, 3
  %117 = and i8 %116, 64
  %spec.select129 = or i8 %117, %.1159
  %118 = load ptr, ptr %6, align 8, !tbaa !5
  %119 = getelementptr inbounds i8, ptr %118, i64 104
  %120 = load i64, ptr %119, align 8, !tbaa !26
  %121 = getelementptr inbounds i8, ptr %0, i64 80
  store i64 %120, ptr %121, align 8, !tbaa !28
  %122 = getelementptr inbounds i8, ptr %5, i64 64
  %123 = load ptr, ptr %122, align 8, !tbaa !24
  %124 = getelementptr inbounds i8, ptr %0, i64 88
  store ptr %123, ptr %124, align 8, !tbaa !29
  %.not122 = icmp ugt i8 %spec.select129, 1
  %125 = zext i1 %.not122 to i32
  %126 = call i32 @inc_share(ptr noundef nonnull %5, i32 noundef %125)
  %127 = getelementptr inbounds i8, ptr %0, i64 44
  store i32 %126, ptr %127, align 4, !tbaa !30
  %128 = icmp eq i32 %126, 0
  br i1 %128, label %.thread162, label %129

129:                                              ; preds = %.thread156
  %130 = load ptr, ptr %6, align 8, !tbaa !5
  %131 = load i8, ptr %130, align 8, !tbaa !20
  %132 = icmp eq i8 %131, 4
  br i1 %132, label %133, label %149

133:                                              ; preds = %129
  %134 = getelementptr inbounds i8, ptr %5, i64 12
  %135 = load i32, ptr %134, align 4, !tbaa !31
  %136 = getelementptr inbounds i8, ptr %0, i64 32
  store i32 %135, ptr %136, align 8, !tbaa !32
  %137 = getelementptr inbounds i8, ptr %5, i64 16
  %138 = load i64, ptr %137, align 8, !tbaa !33
  %139 = trunc i64 %138 to i32
  %140 = and i32 %139, -256
  %141 = getelementptr inbounds i8, ptr %5, i64 11
  %142 = load i8, ptr %141, align 1, !tbaa !34
  %143 = zext i8 %142 to i32
  %144 = or disjoint i32 %140, %143
  %145 = getelementptr inbounds i8, ptr %0, i64 36
  store i32 %144, ptr %145, align 4, !tbaa !35
  %146 = getelementptr inbounds i8, ptr %5, i64 84
  %147 = load i32, ptr %146, align 4, !tbaa !36
  %148 = getelementptr inbounds i8, ptr %0, i64 40
  store i32 %147, ptr %148, align 8, !tbaa !37
  call void @init_alloc_info(ptr noundef nonnull %130, ptr noundef nonnull %0)
  br label %158

149:                                              ; preds = %129
  %150 = load ptr, ptr %122, align 8, !tbaa !24
  %151 = call i32 @ld_clust(ptr noundef nonnull %130, ptr noundef %150)
  %152 = getelementptr inbounds i8, ptr %0, i64 12
  store i32 %151, ptr %152, align 4, !tbaa !23
  %153 = load ptr, ptr %122, align 8, !tbaa !24
  %154 = getelementptr inbounds i8, ptr %153, i64 28
  %155 = call i32 @ld_dword(ptr noundef nonnull %154)
  %156 = zext i32 %155 to i64
  %157 = getelementptr inbounds i8, ptr %0, i64 16
  store i64 %156, ptr %157, align 8, !tbaa !38
  br label %158

158:                                              ; preds = %149, %133
  %159 = getelementptr inbounds i8, ptr %0, i64 96
  store ptr null, ptr %159, align 8, !tbaa !39
  %160 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %160, ptr %0, align 8, !tbaa !21
  %161 = getelementptr inbounds i8, ptr %160, i64 6
  %162 = load i16, ptr %161, align 2, !tbaa !40
  %163 = getelementptr inbounds i8, ptr %0, i64 8
  store i16 %162, ptr %163, align 8, !tbaa !41
  %164 = getelementptr inbounds i8, ptr %0, i64 48
  store i8 %spec.select129, ptr %164, align 8, !tbaa !42
  %165 = getelementptr inbounds i8, ptr %0, i64 49
  store i8 0, ptr %165, align 1, !tbaa !43
  %166 = getelementptr inbounds i8, ptr %0, i64 72
  store i64 0, ptr %166, align 8, !tbaa !44
  %167 = getelementptr inbounds i8, ptr %0, i64 56
  store i64 0, ptr %167, align 8, !tbaa !45
  %168 = getelementptr inbounds i8, ptr %0, i64 104
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(512) %168, i8 0, i64 512, i1 false)
  %169 = and i8 %.1159, 32
  %.not123 = icmp eq i8 %169, 0
  br i1 %.not123, label %.thread176, label %170

170:                                              ; preds = %158
  %171 = getelementptr inbounds i8, ptr %0, i64 16
  %172 = load i64, ptr %171, align 8, !tbaa !38
  %.not124 = icmp eq i64 %172, 0
  br i1 %.not124, label %.thread176, label %173

173:                                              ; preds = %170
  store i64 %172, ptr %167, align 8, !tbaa !45
  %174 = getelementptr inbounds i8, ptr %160, i64 10
  %175 = load i16, ptr %174, align 2, !tbaa !46
  %176 = zext i16 %175 to i64
  %177 = shl nuw nsw i64 %176, 9
  %178 = getelementptr inbounds i8, ptr %0, i64 12
  %179 = load i32, ptr %178, align 4, !tbaa !23
  %180 = icmp ugt i64 %172, %177
  br i1 %180, label %.lr.ph, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %173
  %181 = getelementptr inbounds i8, ptr %0, i64 64
  store i32 %179, ptr %181, align 8, !tbaa !47
  br label %190

.lr.ph:                                           ; preds = %173, %.lr.ph
  %.088184 = phi i64 [ %185, %.lr.ph ], [ %172, %173 ]
  %.090183 = phi i32 [ %182, %.lr.ph ], [ %179, %173 ]
  %182 = call i32 @get_fat(ptr noundef %0, i32 noundef %.090183)
  %183 = icmp ult i32 %182, 2
  %spec.select130 = select i1 %183, i32 2, i32 0
  %184 = icmp eq i32 %182, -1
  %.7 = select i1 %184, i32 1, i32 %spec.select130
  %185 = sub i64 %.088184, %177
  %186 = icmp eq i32 %.7, 0
  %187 = icmp ugt i64 %185, %177
  %188 = select i1 %186, i1 %187, i1 false
  br i1 %188, label %.lr.ph, label %._crit_edge, !llvm.loop !48

._crit_edge:                                      ; preds = %.lr.ph
  %189 = getelementptr inbounds i8, ptr %0, i64 64
  store i32 %182, ptr %189, align 8, !tbaa !47
  br i1 %186, label %190, label %204

190:                                              ; preds = %._crit_edge.thread, %._crit_edge
  %.088.lcssa196 = phi i64 [ %172, %._crit_edge.thread ], [ %185, %._crit_edge ]
  %.090.lcssa195 = phi i32 [ %179, %._crit_edge.thread ], [ %182, %._crit_edge ]
  %191 = and i64 %.088.lcssa196, 511
  %.not125 = icmp eq i64 %191, 0
  br i1 %.not125, label %.thread176, label %192

192:                                              ; preds = %190
  %193 = load ptr, ptr %6, align 8, !tbaa !5
  %194 = call i64 @clst2sect(ptr noundef %193, i32 noundef %.090.lcssa195)
  %195 = icmp eq i64 %194, 0
  br i1 %195, label %204, label %196

196:                                              ; preds = %192
  %197 = lshr i64 %.088.lcssa196, 9
  %198 = and i64 %197, 4294967295
  %199 = add i64 %194, %198
  store i64 %199, ptr %166, align 8, !tbaa !44
  %200 = load ptr, ptr %6, align 8, !tbaa !5
  %201 = getelementptr inbounds i8, ptr %200, i64 1
  %202 = load i8, ptr %201, align 1, !tbaa !50
  %203 = call i32 @disk_read(i8 noundef zeroext %202, ptr noundef nonnull %168, i64 noundef %199, i32 noundef 1) #4
  %.not126 = icmp eq i32 %203, 0
  br i1 %.not126, label %.thread176, label %204

204:                                              ; preds = %._crit_edge, %192, %196
  %.8.ph = phi i32 [ 1, %196 ], [ 2, %192 ], [ %.7, %._crit_edge ]
  %205 = load i32, ptr %127, align 4, !tbaa !30
  %206 = call i32 @dec_share(i32 noundef %205)
  br label %.thread162

.thread176:                                       ; preds = %170, %158, %190, %196
  call void @ff_memfree(ptr noundef nonnull %13) #4
  br label %207

.thread162:                                       ; preds = %22, %.thread156, %41, %37, %33, %110, %105, %103, %43, %95, %51, %113, %204
  %.9 = phi i32 [ %.8.ph, %204 ], [ %.394, %113 ], [ 7, %110 ], [ 4, %105 ], [ %.091, %103 ], [ %.192, %43 ], [ %98, %95 ], [ %69, %51 ], [ 18, %33 ], [ 8, %41 ], [ 7, %37 ], [ 2, %.thread156 ], [ 6, %22 ]
  call void @ff_memfree(ptr noundef nonnull %13) #4
  br label %.thread171

.thread171:                                       ; preds = %7, %.thread162
  %.10174 = phi i32 [ %.9, %.thread162 ], [ %9, %7 ]
  store ptr null, ptr %0, align 8, !tbaa !21
  br label %207

207:                                              ; preds = %.thread176, %.thread171, %11, %3
  %.0 = phi i32 [ 9, %3 ], [ 17, %11 ], [ %.10174, %.thread171 ], [ 0, %.thread176 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %5) #4
  ret i32 %.0
}

declare ptr @ff_memalloc(i32 noundef) local_unnamed_addr #2

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @enq_share() local_unnamed_addr #1

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

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

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

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

declare i32 @get_fattime() local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @dec_share(i32 noundef) local_unnamed_addr #1

declare void @ff_memfree(ptr noundef) local_unnamed_addr #2

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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
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, !6, i64 0}
!10 = !{!"", !11, i64 0, !13, i64 48, !13, i64 52, !14, i64 56, !6, i64 64, !7, i64 72, !13, i64 84, !6, i64 88}
!11 = !{!"", !6, i64 0, !12, i64 8, !7, i64 10, !7, i64 11, !13, i64 12, !14, i64 16, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !13, i64 44}
!12 = !{!"short", !7, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!16, !6, i64 16}
!16 = !{!"", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4, !7, i64 5, !12, i64 6, !12, i64 8, !12, i64 10, !6, i64 16, !6, i64 24, !13, i64 32, !13, i64 36, !13, i64 40, !13, i64 44, !13, i64 48, !13, i64 52, !13, i64 56, !13, i64 60, !14, i64 64, !14, i64 72, !14, i64 80, !14, i64 88, !14, i64 96, !14, i64 104, !7, i64 112}
!17 = !{!16, !6, i64 24}
!18 = !{!7, !7, i64 0}
!19 = !{!10, !7, i64 10}
!20 = !{!16, !7, i64 0}
!21 = !{!22, !6, i64 0}
!22 = !{!"", !11, i64 0, !7, i64 48, !7, i64 49, !14, i64 56, !13, i64 64, !14, i64 72, !14, i64 80, !6, i64 88, !6, i64 96, !7, i64 104}
!23 = !{!22, !13, i64 12}
!24 = !{!10, !6, i64 64}
!25 = !{!16, !7, i64 4}
!26 = !{!16, !14, i64 104}
!27 = !{!16, !13, i64 32}
!28 = !{!22, !14, i64 80}
!29 = !{!22, !6, i64 88}
!30 = !{!22, !13, i64 44}
!31 = !{!10, !13, i64 12}
!32 = !{!22, !13, i64 32}
!33 = !{!10, !14, i64 16}
!34 = !{!10, !7, i64 11}
!35 = !{!22, !13, i64 36}
!36 = !{!10, !13, i64 84}
!37 = !{!22, !13, i64 40}
!38 = !{!22, !14, i64 16}
!39 = !{!22, !6, i64 96}
!40 = !{!16, !12, i64 6}
!41 = !{!22, !12, i64 8}
!42 = !{!22, !7, i64 48}
!43 = !{!22, !7, i64 49}
!44 = !{!22, !14, i64 72}
!45 = !{!22, !14, i64 56}
!46 = !{!16, !12, i64 10}
!47 = !{!22, !13, i64 64}
!48 = distinct !{!48, !49}
!49 = !{!"llvm.loop.mustprogress"}
!50 = !{!16, !7, i64 1}


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