; LLVM IR from thalium/icebox :: third_party/virtualbox/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Universal (PartitionInstallElToritoChildHandles)

; 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.CDROM_DEVICE_PATH = type { %struct.EFI_DEVICE_PATH_PROTOCOL, i32, i64, i64 }
%struct.EFI_DEVICE_PATH_PROTOCOL = type { i8, i8, [2 x i8] }
%struct._EFI_BLOCK_IO_PROTOCOL = type { i64, ptr, ptr, ptr, ptr, ptr }
%struct.EFI_BLOCK_IO_MEDIA = type { i32, i8, i8, i8, i8, i8, i32, i32, i64, i64, i32, i32 }
%struct._EFI_DISK_IO_PROTOCOL = type { i64, ptr, ptr }
%struct.anon = type { i8, [5 x i8], [82 x i8] }
%struct.anon.1 = type { i8, [5 x i8], i8, i8, [32 x i8], [32 x i8], [8 x i8], [2 x i32] }
%struct.anon.0 = type { i8, [5 x i8], i8, [32 x i8], [32 x i8], [4 x i8], [13 x i8] }
%struct.anon.3 = type { i8, i8, i16, [24 x i8], i16, i16 }
%union.ELTORITO_CATALOG = type { %struct.anon.4, [20 x i8] }
%struct.anon.4 = type { i8, i8, i16, i8, i8, i16, i32 }

@.str = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [58 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i64 @PartitionInstallElToritoChildHandles(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6) #0 {
  %8 = alloca i64, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i64, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca ptr, align 8
  %27 = alloca %struct.CDROM_DEVICE_PATH, align 1
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i64, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  store ptr %0, ptr %9, align 8, !tbaa !5
  store ptr %1, ptr %10, align 8, !tbaa !5
  store ptr %2, ptr %11, align 8, !tbaa !5
  store ptr %3, ptr %12, align 8, !tbaa !5
  store ptr %4, ptr %13, align 8, !tbaa !5
  store ptr %5, ptr %14, align 8, !tbaa !5
  store ptr %6, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 24, 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 8, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  store i64 -9223372036854775794, ptr %30, align 8, !tbaa !9
  %33 = load ptr, ptr %13, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct._EFI_BLOCK_IO_PROTOCOL, ptr %33, i32 0, i32 1
  %35 = load ptr, ptr %34, align 8, !tbaa !11
  store ptr %35, ptr %19, align 8, !tbaa !5
  store i32 0, ptr %31, align 4, !tbaa !13
  %36 = load ptr, ptr %19, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %36, i32 0, i32 6
  %38 = load i32, ptr %37, align 4, !tbaa !15
  %39 = icmp ne i32 %38, 2048
  br i1 %39, label %40, label %41

40:                                               ; preds = %7
  store i64 -9223372036854775794, ptr %8, align 8
  store i32 1, ptr %32, align 4
  br label %423

41:                                               ; preds = %7
  %42 = load ptr, ptr %19, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %42, i32 0, i32 6
  %44 = load i32, ptr %43, align 4, !tbaa !15
  %45 = zext i32 %44 to i64
  %46 = call ptr @AllocatePool(i64 noundef %45)
  store ptr %46, ptr %20, align 8, !tbaa !5
  %47 = load ptr, ptr %20, align 8, !tbaa !5
  %48 = icmp eq ptr %47, null
  br i1 %48, label %49, label %50

49:                                               ; preds = %41
  store i64 -9223372036854775794, ptr %8, align 8
  store i32 1, ptr %32, align 4
  br label %423

50:                                               ; preds = %41
  %51 = load ptr, ptr %20, align 8, !tbaa !5
  store ptr %51, ptr %21, align 8, !tbaa !5
  store i32 15, ptr %17, align 4, !tbaa !13
  br label %52

52:                                               ; preds = %419, %256, %221, %194, %156, %117, %50
  br label %53

53:                                               ; preds = %52
  %54 = load i32, ptr %17, align 4, !tbaa !13
  %55 = add i32 %54, 1
  store i32 %55, ptr %17, align 4, !tbaa !13
  %56 = load i32, ptr %17, align 4, !tbaa !13
  %57 = zext i32 %56 to i64
  %58 = load ptr, ptr %19, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %58, i32 0, i32 8
  %60 = load i64, ptr %59, align 8, !tbaa !17
  %61 = icmp ugt i64 %57, %60
  br i1 %61, label %62, label %63

62:                                               ; preds = %53
  br label %420

63:                                               ; preds = %53
  %64 = load ptr, ptr %11, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct._EFI_DISK_IO_PROTOCOL, ptr %64, i32 0, i32 1
  %66 = load ptr, ptr %65, align 8, !tbaa !18
  %67 = load ptr, ptr %11, align 8, !tbaa !5
  %68 = load ptr, ptr %19, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %68, i32 0, i32 0
  %70 = load i32, ptr %69, align 8, !tbaa !20
  %71 = load i32, ptr %17, align 4, !tbaa !13
  %72 = zext i32 %71 to i64
  %73 = load ptr, ptr %19, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %73, i32 0, i32 6
  %75 = load i32, ptr %74, align 4, !tbaa !15
  %76 = call i64 @MultU64x32(i64 noundef %72, i32 noundef %75)
  %77 = load ptr, ptr %19, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %77, i32 0, i32 6
  %79 = load i32, ptr %78, align 4, !tbaa !15
  %80 = zext i32 %79 to i64
  %81 = load ptr, ptr %20, align 8, !tbaa !5
  %82 = call i64 %66(ptr noundef %67, i32 noundef %70, i64 noundef %76, i64 noundef %80, ptr noundef %81)
  store i64 %82, ptr %16, align 8, !tbaa !9
  %83 = load i64, ptr %16, align 8, !tbaa !9
  %84 = icmp slt i64 %83, 0
  br i1 %84, label %85, label %87

85:                                               ; preds = %63
  %86 = load i64, ptr %16, align 8, !tbaa !9
  store i64 %86, ptr %30, align 8, !tbaa !9
  br label %420

87:                                               ; preds = %63
  %88 = load ptr, ptr %20, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.anon, ptr %88, i32 0, i32 0
  %90 = load i8, ptr %89, align 1, !tbaa !21
  %91 = zext i8 %90 to i32
  %92 = icmp eq i32 %91, 255
  br i1 %92, label %99, label %93

93:                                               ; preds = %87
  %94 = load ptr, ptr %20, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.anon, ptr %94, i32 0, i32 1
  %96 = getelementptr inbounds [5 x i8], ptr %95, i64 0, i64 0
  %97 = call i64 @CompareMem(ptr noundef %96, ptr noundef @.str, i64 noundef 5)
  %98 = icmp ne i64 %97, 0
  br i1 %98, label %99, label %100

99:                                               ; preds = %93, %87
  br label %420

100:                                              ; preds = %93
  %101 = load ptr, ptr %20, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.anon.1, ptr %101, i32 0, i32 0
  %103 = load i8, ptr %102, align 1, !tbaa !21
  %104 = zext i8 %103 to i32
  %105 = icmp eq i32 %104, 1
  br i1 %105, label %106, label %111

106:                                              ; preds = %100
  %107 = load ptr, ptr %20, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.anon.1, ptr %107, i32 0, i32 7
  %109 = getelementptr inbounds [2 x i32], ptr %108, i64 0, i64 0
  %110 = load i32, ptr %109, align 1, !tbaa !21
  store i32 %110, ptr %31, align 4, !tbaa !13
  br label %111

111:                                              ; preds = %106, %100
  %112 = load ptr, ptr %20, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.anon.0, ptr %112, i32 0, i32 3
  %114 = getelementptr inbounds [32 x i8], ptr %113, i64 0, i64 0
  %115 = call i64 @CompareMem(ptr noundef %114, ptr noundef @.str.1, i64 noundef 23)
  %116 = icmp ne i64 %115, 0
  br i1 %116, label %117, label %118

117:                                              ; preds = %111
  br label %52

118:                                              ; preds = %111
  %119 = load ptr, ptr %20, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.anon.0, ptr %119, i32 0, i32 5
  %121 = getelementptr inbounds [4 x i8], ptr %120, i64 0, i64 0
  %122 = getelementptr inbounds i8, ptr %121, i64 0
  %123 = load i8, ptr %122, align 1, !tbaa !21
  %124 = zext i8 %123 to i32
  %125 = shl i32 %124, 0
  %126 = load ptr, ptr %20, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.anon.0, ptr %126, i32 0, i32 5
  %128 = getelementptr inbounds [4 x i8], ptr %127, i64 0, i64 0
  %129 = getelementptr inbounds i8, ptr %128, i64 1
  %130 = load i8, ptr %129, align 1, !tbaa !21
  %131 = zext i8 %130 to i32
  %132 = shl i32 %131, 8
  %133 = or i32 %125, %132
  %134 = load ptr, ptr %20, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.anon.0, ptr %134, i32 0, i32 5
  %136 = getelementptr inbounds [4 x i8], ptr %135, i64 0, i64 0
  %137 = getelementptr inbounds i8, ptr %136, i64 2
  %138 = load i8, ptr %137, align 1, !tbaa !21
  %139 = zext i8 %138 to i32
  %140 = shl i32 %139, 16
  %141 = or i32 %133, %140
  %142 = load ptr, ptr %20, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.anon.0, ptr %142, i32 0, i32 5
  %144 = getelementptr inbounds [4 x i8], ptr %143, i64 0, i64 0
  %145 = getelementptr inbounds i8, ptr %144, i64 3
  %146 = load i8, ptr %145, align 1, !tbaa !21
  %147 = zext i8 %146 to i32
  %148 = shl i32 %147, 24
  %149 = or i32 %141, %148
  store i32 %149, ptr %18, align 4, !tbaa !13
  %150 = load i32, ptr %18, align 4, !tbaa !13
  %151 = zext i32 %150 to i64
  %152 = load ptr, ptr %19, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %152, i32 0, i32 8
  %154 = load i64, ptr %153, align 8, !tbaa !17
  %155 = icmp ugt i64 %151, %154
  br i1 %155, label %156, label %157

156:                                              ; preds = %118
  br label %52

157:                                              ; preds = %118
  %158 = load ptr, ptr %11, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct._EFI_DISK_IO_PROTOCOL, ptr %158, i32 0, i32 1
  %160 = load ptr, ptr %159, align 8, !tbaa !18
  %161 = load ptr, ptr %11, align 8, !tbaa !5
  %162 = load ptr, ptr %19, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %162, i32 0, i32 0
  %164 = load i32, ptr %163, align 8, !tbaa !20
  %165 = load i32, ptr %18, align 4, !tbaa !13
  %166 = zext i32 %165 to i64
  %167 = load ptr, ptr %19, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %167, i32 0, i32 6
  %169 = load i32, ptr %168, align 4, !tbaa !15
  %170 = call i64 @MultU64x32(i64 noundef %166, i32 noundef %169)
  %171 = load ptr, ptr %19, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %171, i32 0, i32 6
  %173 = load i32, ptr %172, align 4, !tbaa !15
  %174 = zext i32 %173 to i64
  %175 = load ptr, ptr %21, align 8, !tbaa !5
  %176 = call i64 %160(ptr noundef %161, i32 noundef %164, i64 noundef %170, i64 noundef %174, ptr noundef %175)
  store i64 %176, ptr %16, align 8, !tbaa !9
  %177 = load i64, ptr %16, align 8, !tbaa !9
  %178 = icmp slt i64 %177, 0
  br i1 %178, label %179, label %195

179:                                              ; preds = %157
  br label %180

180:                                              ; preds = %179
  %181 = call zeroext i8 @DebugPrintEnabled()
  %182 = icmp ne i8 %181, 0
  br i1 %182, label %183, label %192

183:                                              ; preds = %180
  br label %184

184:                                              ; preds = %183
  %185 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648)
  %186 = icmp ne i8 %185, 0
  br i1 %186, label %187, label %189

187:                                              ; preds = %184
  %188 = load i64, ptr %16, align 8, !tbaa !9
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef @.str.2, i64 noundef %188)
  br label %189

189:                                              ; preds = %187, %184
  br label %190

190:                                              ; preds = %189
  br label %191

191:                                              ; preds = %190
  br label %192

192:                                              ; preds = %191, %180
  br label %193

193:                                              ; preds = %192
  br label %194

194:                                              ; preds = %193
  br label %52

195:                                              ; preds = %157
  %196 = load ptr, ptr %21, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.anon.3, ptr %196, i32 0, i32 0
  %198 = load i8, ptr %197, align 1, !tbaa !21
  %199 = zext i8 %198 to i32
  %200 = icmp ne i32 %199, 1
  br i1 %200, label %207, label %201

201:                                              ; preds = %195
  %202 = load ptr, ptr %21, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.anon.3, ptr %202, i32 0, i32 5
  %204 = load i16, ptr %203, align 1, !tbaa !21
  %205 = zext i16 %204 to i32
  %206 = icmp ne i32 %205, 43605
  br i1 %206, label %207, label %222

207:                                              ; preds = %201, %195
  br label %208

208:                                              ; preds = %207
  %209 = call zeroext i8 @DebugPrintEnabled()
  %210 = icmp ne i8 %209, 0
  br i1 %210, label %211, label %219

211:                                              ; preds = %208
  br label %212

212:                                              ; preds = %211
  %213 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648)
  %214 = icmp ne i8 %213, 0
  br i1 %214, label %215, label %216

215:                                              ; preds = %212
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef @.str.3)
  br label %216

216:                                              ; preds = %215, %212
  br label %217

217:                                              ; preds = %216
  br label %218

218:                                              ; preds = %217
  br label %219

219:                                              ; preds = %218, %208
  br label %220

220:                                              ; preds = %219
  br label %221

221:                                              ; preds = %220
  br label %52

222:                                              ; preds = %201
  store i64 0, ptr %22, align 8, !tbaa !9
  %223 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %223, ptr %26, align 8, !tbaa !5
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %224

224:                                              ; preds = %235, %222
  %225 = load i64, ptr %23, align 8, !tbaa !9
  %226 = icmp ult i64 %225, 16
  br i1 %226, label %227, label %238

227:                                              ; preds = %224
  %228 = load ptr, ptr %26, align 8, !tbaa !5
  %229 = load i64, ptr %23, align 8, !tbaa !9
  %230 = getelementptr inbounds i16, ptr %228, i64 %229
  %231 = load i16, ptr %230, align 2, !tbaa !22
  %232 = zext i16 %231 to i64
  %233 = load i64, ptr %22, align 8, !tbaa !9
  %234 = add i64 %233, %232
  store i64 %234, ptr %22, align 8, !tbaa !9
  br label %235

235:                                              ; preds = %227
  %236 = load i64, ptr %23, align 8, !tbaa !9
  %237 = add i64 %236, 1
  store i64 %237, ptr %23, align 8, !tbaa !9
  br label %224, !llvm.loop !24

238:                                              ; preds = %224
  %239 = load i64, ptr %22, align 8, !tbaa !9
  %240 = and i64 %239, 65535
  %241 = icmp ne i64 %240, 0
  br i1 %241, label %242, label %257

242:                                              ; preds = %238
  br label %243

243:                                              ; preds = %242
  %244 = call zeroext i8 @DebugPrintEnabled()
  %245 = icmp ne i8 %244, 0
  br i1 %245, label %246, label %254

246:                                              ; preds = %243
  br label %247

247:                                              ; preds = %246
  %248 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648)
  %249 = icmp ne i8 %248, 0
  br i1 %249, label %250, label %251

250:                                              ; preds = %247
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef @.str.4)
  br label %251

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

252:                                              ; preds = %251
  br label %253

253:                                              ; preds = %252
  br label %254

254:                                              ; preds = %253, %243
  br label %255

255:                                              ; preds = %254
  br label %256

256:                                              ; preds = %255
  br label %52

257:                                              ; preds = %238
  %258 = load ptr, ptr %19, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %258, i32 0, i32 6
  %260 = load i32, ptr %259, align 4, !tbaa !15
  %261 = zext i32 %260 to i64
  %262 = udiv i64 %261, 32
  store i64 %262, ptr %25, align 8, !tbaa !9
  store i64 1, ptr %23, align 8, !tbaa !9
  store i64 1, ptr %24, align 8, !tbaa !9
  br label %263

263:                                              ; preds = %416, %257
  %264 = load i64, ptr %23, align 8, !tbaa !9
  %265 = load i64, ptr %25, align 8, !tbaa !9
  %266 = icmp ult i64 %264, %265
  br i1 %266, label %267, label %419

267:                                              ; preds = %263
  %268 = load ptr, ptr %21, align 8, !tbaa !5
  %269 = getelementptr inbounds %union.ELTORITO_CATALOG, ptr %268, i64 1
  store ptr %269, ptr %21, align 8, !tbaa !5
  %270 = load ptr, ptr %21, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.anon.4, ptr %270, i32 0, i32 0
  %272 = load i8, ptr %271, align 1, !tbaa !21
  %273 = zext i8 %272 to i32
  %274 = icmp ne i32 %273, 136
  br i1 %274, label %280, label %275

275:                                              ; preds = %267
  %276 = load ptr, ptr %21, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.anon.4, ptr %276, i32 0, i32 6
  %278 = load i32, ptr %277, align 1, !tbaa !21
  %279 = icmp eq i32 %278, 0
  br i1 %279, label %280, label %281

280:                                              ; preds = %275, %267
  br label %416

281:                                              ; preds = %275
  store i32 512, ptr %28, align 4, !tbaa !13
  %282 = load ptr, ptr %21, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.anon.4, ptr %282, i32 0, i32 5
  %284 = load i16, ptr %283, align 1, !tbaa !21
  %285 = zext i16 %284 to i32
  store i32 %285, ptr %29, align 4, !tbaa !13
  %286 = load ptr, ptr %21, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.anon.4, ptr %286, i32 0, i32 1
  %288 = load i8, ptr %287, align 1
  %289 = and i8 %288, 15
  %290 = zext i8 %289 to i32
  switch i32 %290, label %298 [
    i32 0, label %291
    i32 4, label %321
    i32 1, label %295
    i32 2, label %296
    i32 3, label %297
  ]

291:                                              ; preds = %281
  %292 = load ptr, ptr %19, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %292, i32 0, i32 6
  %294 = load i32, ptr %293, align 4, !tbaa !15
  store i32 %294, ptr %28, align 4, !tbaa !13
  br label %321

295:                                              ; preds = %281
  store i32 2400, ptr %29, align 4, !tbaa !13
  br label %321

296:                                              ; preds = %281
  store i32 2880, ptr %29, align 4, !tbaa !13
  br label %321

297:                                              ; preds = %281
  store i32 5760, ptr %29, align 4, !tbaa !13
  br label %321

298:                                              ; preds = %281
  br label %299

299:                                              ; preds = %298
  %300 = call zeroext i8 @DebugPrintEnabled()
  %301 = icmp ne i8 %300, 0
  br i1 %301, label %302, label %315

302:                                              ; preds = %299
  br label %303

303:                                              ; preds = %302
  %304 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 1)
  %305 = icmp ne i8 %304, 0
  br i1 %305, label %306, label %312

306:                                              ; preds = %303
  %307 = load ptr, ptr %21, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.anon.4, ptr %307, i32 0, i32 1
  %309 = load i8, ptr %308, align 1
  %310 = and i8 %309, 15
  %311 = zext i8 %310 to i32
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 1, ptr noundef @.str.5, i32 noundef %311)
  br label %312

312:                                              ; preds = %306, %303
  br label %313

313:                                              ; preds = %312
  br label %314

314:                                              ; preds = %313
  br label %315

315:                                              ; preds = %314, %299
  br label %316

316:                                              ; preds = %315
  br label %317

317:                                              ; preds = %316
  store i32 0, ptr %29, align 4, !tbaa !13
  %318 = load ptr, ptr %19, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %318, i32 0, i32 6
  %320 = load i32, ptr %319, align 4, !tbaa !15
  store i32 %320, ptr %28, align 4, !tbaa !13
  br label %321

321:                                              ; preds = %317, %297, %296, %295, %291, %281
  %322 = getelementptr inbounds %struct.CDROM_DEVICE_PATH, ptr %27, i32 0, i32 0
  %323 = getelementptr inbounds %struct.EFI_DEVICE_PATH_PROTOCOL, ptr %322, i32 0, i32 0
  store i8 4, ptr %323, align 1, !tbaa !26
  %324 = getelementptr inbounds %struct.CDROM_DEVICE_PATH, ptr %27, i32 0, i32 0
  %325 = getelementptr inbounds %struct.EFI_DEVICE_PATH_PROTOCOL, ptr %324, i32 0, i32 1
  store i8 2, ptr %325, align 1, !tbaa !29
  %326 = getelementptr inbounds %struct.CDROM_DEVICE_PATH, ptr %27, i32 0, i32 0
  %327 = call zeroext i16 @SetDevicePathNodeLength(ptr noundef %326, i64 noundef 24)
  %328 = load i64, ptr %23, align 8, !tbaa !9
  %329 = icmp eq i64 %328, 1
  br i1 %329, label %330, label %331

330:                                              ; preds = %321
  store i64 0, ptr %24, align 8, !tbaa !9
  br label %331

331:                                              ; preds = %330, %321
  %332 = load i64, ptr %24, align 8, !tbaa !9
  %333 = trunc i64 %332 to i32
  %334 = getelementptr inbounds %struct.CDROM_DEVICE_PATH, ptr %27, i32 0, i32 1
  store i32 %333, ptr %334, align 1, !tbaa !30
  %335 = load i64, ptr %24, align 8, !tbaa !9
  %336 = add i64 %335, 1
  store i64 %336, ptr %24, align 8, !tbaa !9
  %337 = load ptr, ptr %21, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.anon.4, ptr %337, i32 0, i32 6
  %339 = load i32, ptr %338, align 1, !tbaa !21
  %340 = zext i32 %339 to i64
  %341 = getelementptr inbounds %struct.CDROM_DEVICE_PATH, ptr %27, i32 0, i32 2
  store i64 %340, ptr %341, align 1, !tbaa !31
  %342 = load i32, ptr %29, align 4, !tbaa !13
  %343 = icmp ult i32 %342, 2
  br i1 %343, label %344, label %374

344:                                              ; preds = %331
  %345 = load i32, ptr %31, align 4, !tbaa !13
  %346 = zext i32 %345 to i64
  %347 = load ptr, ptr %19, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %347, i32 0, i32 8
  %349 = load i64, ptr %348, align 8, !tbaa !17
  %350 = add i64 %349, 1
  %351 = icmp ugt i64 %346, %350
  br i1 %351, label %352, label %365

352:                                              ; preds = %344
  %353 = load ptr, ptr %19, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %353, i32 0, i32 8
  %355 = load i64, ptr %354, align 8, !tbaa !17
  %356 = load ptr, ptr %21, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.anon.4, ptr %356, i32 0, i32 6
  %358 = load i32, ptr %357, align 1, !tbaa !21
  %359 = zext i32 %358 to i64
  %360 = sub i64 %355, %359
  %361 = add i64 %360, 1
  %362 = trunc i64 %361 to i32
  %363 = zext i32 %362 to i64
  %364 = getelementptr inbounds %struct.CDROM_DEVICE_PATH, ptr %27, i32 0, i32 3
  store i64 %363, ptr %364, align 1, !tbaa !32
  br label %373

365:                                              ; preds = %344
  %366 = load i32, ptr %31, align 4, !tbaa !13
  %367 = load ptr, ptr %21, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.anon.4, ptr %367, i32 0, i32 6
  %369 = load i32, ptr %368, align 1, !tbaa !21
  %370 = sub i32 %366, %369
  %371 = zext i32 %370 to i64
  %372 = getelementptr inbounds %struct.CDROM_DEVICE_PATH, ptr %27, i32 0, i32 3
  store i64 %371, ptr %372, align 1, !tbaa !32
  br label %373

373:                                              ; preds = %365, %352
  br label %390

374:                                              ; preds = %331
  %375 = load i32, ptr %29, align 4, !tbaa !13
  %376 = zext i32 %375 to i64
  %377 = load i32, ptr %28, align 4, !tbaa !13
  %378 = call i64 @MultU64x32(i64 noundef %376, i32 noundef %377)
  %379 = load ptr, ptr %19, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %379, i32 0, i32 6
  %381 = load i32, ptr %380, align 4, !tbaa !15
  %382 = zext i32 %381 to i64
  %383 = add i64 %378, %382
  %384 = sub i64 %383, 1
  %385 = load ptr, ptr %19, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.EFI_BLOCK_IO_MEDIA, ptr %385, i32 0, i32 6
  %387 = load i32, ptr %386, align 4, !tbaa !15
  %388 = call i64 @DivU64x32(i64 noundef %384, i32 noundef %387)
  %389 = getelementptr inbounds %struct.CDROM_DEVICE_PATH, ptr %27, i32 0, i32 3
  store i64 %388, ptr %389, align 1, !tbaa !32
  br label %390

390:                                              ; preds = %374, %373
  %391 = load ptr, ptr %9, align 8, !tbaa !5
  %392 = load ptr, ptr %10, align 8, !tbaa !5
  %393 = load ptr, ptr %11, align 8, !tbaa !5
  %394 = load ptr, ptr %12, align 8, !tbaa !5
  %395 = load ptr, ptr %13, align 8, !tbaa !5
  %396 = load ptr, ptr %14, align 8, !tbaa !5
  %397 = load ptr, ptr %15, align 8, !tbaa !5
  %398 = load ptr, ptr %21, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.anon.4, ptr %398, i32 0, i32 6
  %400 = load i32, ptr %399, align 1, !tbaa !21
  %401 = zext i32 %400 to i64
  %402 = load ptr, ptr %21, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.anon.4, ptr %402, i32 0, i32 6
  %404 = load i32, ptr %403, align 1, !tbaa !21
  %405 = zext i32 %404 to i64
  %406 = getelementptr inbounds %struct.CDROM_DEVICE_PATH, ptr %27, i32 0, i32 3
  %407 = load i64, ptr %406, align 1, !tbaa !32
  %408 = add i64 %405, %407
  %409 = sub i64 %408, 1
  %410 = load i32, ptr %28, align 4, !tbaa !13
  %411 = call i64 @PartitionInstallChildHandle(ptr noundef %391, ptr noundef %392, ptr noundef %393, ptr noundef %394, ptr noundef %395, ptr noundef %396, ptr noundef %397, ptr noundef %27, i64 noundef %401, i64 noundef %409, i32 noundef %410, i8 noundef zeroext 0)
  store i64 %411, ptr %16, align 8, !tbaa !9
  %412 = load i64, ptr %16, align 8, !tbaa !9
  %413 = icmp slt i64 %412, 0
  br i1 %413, label %415, label %414

414:                                              ; preds = %390
  store i64 0, ptr %30, align 8, !tbaa !9
  br label %415

415:                                              ; preds = %414, %390
  br label %416

416:                                              ; preds = %415, %280
  %417 = load i64, ptr %23, align 8, !tbaa !9
  %418 = add i64 %417, 1
  store i64 %418, ptr %23, align 8, !tbaa !9
  br label %263, !llvm.loop !33

419:                                              ; preds = %263
  br label %52

420:                                              ; preds = %99, %85, %62
  %421 = load ptr, ptr %20, align 8, !tbaa !5
  call void @FreePool(ptr noundef %421)
  %422 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %422, ptr %8, align 8
  store i32 1, ptr %32, align 4
  br label %423

423:                                              ; preds = %420, %49, %40
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, 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 24, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  %424 = load i64, ptr %8, align 8
  ret i64 %424
}

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

declare ptr @AllocatePool(i64 noundef) #2

declare i64 @MultU64x32(i64 noundef, i32 noundef) #2

declare i64 @CompareMem(ptr noundef, ptr noundef, i64 noundef) #2

declare zeroext i8 @DebugPrintEnabled() #2

declare zeroext i8 @DebugPrintLevelEnabled(i64 noundef) #2

declare void @DebugPrint(i64 noundef, ptr noundef, ...) #2

declare zeroext i16 @SetDevicePathNodeLength(ptr noundef, i64 noundef) #2

declare i64 @DivU64x32(i64 noundef, i32 noundef) #2

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

declare void @FreePool(ptr noundef) #2

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = !{!10, !10, i64 0}
!10 = !{!"long long", !7, i64 0}
!11 = !{!12, !6, i64 8}
!12 = !{!"_EFI_BLOCK_IO_PROTOCOL", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!16, !14, i64 12}
!16 = !{!"", !14, i64 0, !7, i64 4, !7, i64 5, !7, i64 6, !7, i64 7, !7, i64 8, !14, i64 12, !14, i64 16, !10, i64 24, !10, i64 32, !14, i64 40, !14, i64 44}
!17 = !{!16, !10, i64 24}
!18 = !{!19, !6, i64 8}
!19 = !{!"_EFI_DISK_IO_PROTOCOL", !10, i64 0, !6, i64 8, !6, i64 16}
!20 = !{!16, !14, i64 0}
!21 = !{!7, !7, i64 0}
!22 = !{!23, !23, i64 0}
!23 = !{!"short", !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!27, !7, i64 0}
!27 = !{!"", !28, i64 0, !14, i64 4, !10, i64 8, !10, i64 16}
!28 = !{!"", !7, i64 0, !7, i64 1, !7, i64 2}
!29 = !{!27, !7, i64 1}
!30 = !{!27, !14, i64 4}
!31 = !{!27, !10, i64 8}
!32 = !{!27, !10, i64 16}
!33 = distinct !{!33, !25}


; 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.CDROM_DEVICE_PATH = type { %struct.EFI_DEVICE_PATH_PROTOCOL, i32, i64, i64 }
%struct.EFI_DEVICE_PATH_PROTOCOL = type { i8, i8, [2 x i8] }

@.str = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [58 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i64 @PartitionInstallElToritoChildHandles(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6) local_unnamed_addr #0 {
  %8 = alloca %struct.CDROM_DEVICE_PATH, align 1
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #4
  %9 = getelementptr inbounds i8, ptr %4, i64 8
  %10 = load ptr, ptr %9, align 8, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %10, i64 12
  %12 = load i32, ptr %11, align 4, !tbaa !11
  %.not = icmp eq i32 %12, 2048
  br i1 %.not, label %13, label %245

13:                                               ; preds = %7
  %14 = tail call ptr @AllocatePool(i64 noundef 2048) #4
  %15 = icmp eq ptr %14, null
  br i1 %15, label %245, label %.preheader121

.preheader121:                                    ; preds = %13
  %16 = getelementptr inbounds i8, ptr %2, i64 8
  %17 = getelementptr inbounds i8, ptr %14, i64 1
  %18 = getelementptr inbounds i8, ptr %10, i64 24
  %19 = load i64, ptr %18, align 8, !tbaa !14
  %20 = icmp ult i64 %19, 16
  br i1 %20, label %.outer._crit_edge, label %.lr.ph.lr.ph

.lr.ph.lr.ph:                                     ; preds = %.preheader121
  %21 = getelementptr inbounds i8, ptr %14, i64 80
  %22 = getelementptr inbounds i8, ptr %14, i64 7
  %23 = getelementptr inbounds i8, ptr %14, i64 71
  %24 = getelementptr inbounds i8, ptr %14, i64 73
  %25 = getelementptr inbounds i8, ptr %14, i64 74
  %26 = getelementptr inbounds i8, ptr %8, i64 1
  %27 = getelementptr inbounds i8, ptr %8, i64 4
  %28 = getelementptr inbounds i8, ptr %8, i64 8
  %29 = getelementptr inbounds i8, ptr %8, i64 16
  br label %.lr.ph

.loopexit:                                        ; preds = %243, %184, %122
  %.198.lcssa = phi ptr [ %.097.ph143, %122 ], [ %128, %184 ], [ %185, %243 ]
  %.187.lcssa = phi i64 [ %.086.ph144, %122 ], [ %.2.peel, %184 ], [ %.2, %243 ]
  %30 = add i32 %43, 1
  %31 = zext i32 %30 to i64
  %32 = load i64, ptr %18, align 8, !tbaa !14
  %33 = icmp ult i64 %32, %31
  br i1 %33, label %.outer._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.lr.ph, %.loopexit
  %34 = phi i64 [ 16, %.lr.ph.lr.ph ], [ %31, %.loopexit ]
  %35 = phi i32 [ 16, %.lr.ph.lr.ph ], [ %30, %.loopexit ]
  %.0.ph145 = phi i32 [ 0, %.lr.ph.lr.ph ], [ %.1, %.loopexit ]
  %.086.ph144 = phi i64 [ -9223372036854775794, %.lr.ph.lr.ph ], [ %.187.lcssa, %.loopexit ]
  %.097.ph143 = phi ptr [ %14, %.lr.ph.lr.ph ], [ %.198.lcssa, %.loopexit ]
  %36 = getelementptr inbounds i8, ptr %.097.ph143, i64 30
  %37 = getelementptr inbounds i8, ptr %.097.ph143, i64 16
  %38 = getelementptr inbounds i8, ptr %.097.ph143, i64 24
  %39 = getelementptr inbounds i8, ptr %.097.ph143, i64 26
  %40 = getelementptr inbounds i8, ptr %.097.ph143, i64 28
  br label %41

41:                                               ; preds = %.lr.ph, %.backedge
  %42 = phi i64 [ %34, %.lr.ph ], [ %92, %.backedge ]
  %43 = phi i32 [ %35, %.lr.ph ], [ %91, %.backedge ]
  %.0127 = phi i32 [ %.0.ph145, %.lr.ph ], [ %.1, %.backedge ]
  %44 = load ptr, ptr %16, align 8, !tbaa !15
  %45 = load i32, ptr %10, align 8, !tbaa !17
  %46 = load i32, ptr %11, align 4, !tbaa !11
  %47 = call i64 @MultU64x32(i64 noundef %42, i32 noundef %46) #4
  %48 = load i32, ptr %11, align 4, !tbaa !11
  %49 = zext i32 %48 to i64
  %50 = call i64 %44(ptr noundef %2, i32 noundef %45, i64 noundef %47, i64 noundef %49, ptr noundef nonnull %14) #4
  %51 = icmp slt i64 %50, 0
  br i1 %51, label %.outer._crit_edge, label %52

52:                                               ; preds = %41
  %53 = load i8, ptr %14, align 1, !tbaa !18
  %54 = icmp eq i8 %53, -1
  br i1 %54, label %.outer._crit_edge, label %55

55:                                               ; preds = %52
  %56 = call i64 @CompareMem(ptr noundef nonnull %17, ptr noundef nonnull @.str, i64 noundef 5) #4
  %.not106 = icmp eq i64 %56, 0
  br i1 %.not106, label %57, label %.outer._crit_edge

57:                                               ; preds = %55
  %58 = load i8, ptr %14, align 1, !tbaa !18
  %59 = icmp eq i8 %58, 1
  br i1 %59, label %60, label %62

60:                                               ; preds = %57
  %61 = load i32, ptr %21, align 1, !tbaa !18
  br label %62

62:                                               ; preds = %60, %57
  %.1 = phi i32 [ %61, %60 ], [ %.0127, %57 ]
  %63 = call i64 @CompareMem(ptr noundef nonnull %22, ptr noundef nonnull @.str.1, i64 noundef 23) #4
  %.not107 = icmp eq i64 %63, 0
  br i1 %.not107, label %64, label %.backedge

64:                                               ; preds = %62
  %65 = load i16, ptr %23, align 1
  %66 = zext i16 %65 to i64
  %67 = load i8, ptr %24, align 1, !tbaa !18
  %68 = zext i8 %67 to i64
  %69 = shl nuw nsw i64 %68, 16
  %70 = or disjoint i64 %69, %66
  %71 = load i8, ptr %25, align 1, !tbaa !18
  %72 = zext i8 %71 to i64
  %73 = shl nuw nsw i64 %72, 24
  %74 = or disjoint i64 %70, %73
  %75 = load i64, ptr %18, align 8, !tbaa !14
  %76 = icmp ugt i64 %74, %75
  br i1 %76, label %.backedge, label %77

77:                                               ; preds = %64
  %78 = load ptr, ptr %16, align 8, !tbaa !15
  %79 = load i32, ptr %10, align 8, !tbaa !17
  %80 = load i32, ptr %11, align 4, !tbaa !11
  %81 = call i64 @MultU64x32(i64 noundef %74, i32 noundef %80) #4
  %82 = load i32, ptr %11, align 4, !tbaa !11
  %83 = zext i32 %82 to i64
  %84 = call i64 %78(ptr noundef nonnull %2, i32 noundef %79, i64 noundef %81, i64 noundef %83, ptr noundef %.097.ph143) #4
  %85 = icmp slt i64 %84, 0
  br i1 %85, label %86, label %95

86:                                               ; preds = %77
  %87 = call zeroext i8 @DebugPrintEnabled() #4
  %.not118 = icmp eq i8 %87, 0
  br i1 %.not118, label %.backedge, label %88

88:                                               ; preds = %86
  %89 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648) #4
  %.not119 = icmp eq i8 %89, 0
  br i1 %.not119, label %.backedge, label %90

90:                                               ; preds = %88
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef nonnull @.str.2, i64 noundef %84) #4
  br label %.backedge

.backedge:                                        ; preds = %117, %121, %119, %112, %116, %114, %86, %90, %88, %62, %64
  %91 = add i32 %43, 1
  %92 = zext i32 %91 to i64
  %93 = load i64, ptr %18, align 8, !tbaa !14
  %94 = icmp ult i64 %93, %92
  br i1 %94, label %.outer._crit_edge, label %41

95:                                               ; preds = %77
  %96 = load i8, ptr %.097.ph143, align 1, !tbaa !18
  %.not108 = icmp eq i8 %96, 1
  br i1 %.not108, label %97, label %112

97:                                               ; preds = %95
  %98 = load i16, ptr %36, align 1, !tbaa !18
  %.not109 = icmp eq i16 %98, -21931
  br i1 %.not109, label %.preheader.preheader, label %112

.preheader.preheader:                             ; preds = %97
  %99 = load <8 x i16>, ptr %.097.ph143, align 2, !tbaa !19
  %100 = load <4 x i16>, ptr %37, align 2, !tbaa !19
  %101 = load i16, ptr %38, align 2, !tbaa !19
  %102 = zext i16 %101 to i64
  %103 = load i16, ptr %39, align 2, !tbaa !19
  %104 = zext i16 %103 to i64
  %105 = load i16, ptr %40, align 2, !tbaa !19
  %106 = zext i16 %105 to i64
  %107 = call i16 @llvm.vector.reduce.add.v8i16(<8 x i16> %99)
  %108 = zext i16 %107 to i64
  %109 = call i16 @llvm.vector.reduce.add.v4i16(<4 x i16> %100)
  %110 = zext i16 %109 to i64
  %op.rdx = add nuw nsw i64 %108, %110
  %op.rdx160 = add nuw nsw i64 %op.rdx, %102
  %op.rdx161 = add nuw nsw i64 %104, %106
  %op.rdx162 = add nuw nsw i64 %op.rdx160, %op.rdx161
  %op.rdx163 = add nuw nsw i64 %op.rdx162, 43605
  %111 = and i64 %op.rdx163, 65535
  %.not110 = icmp eq i64 %111, 0
  br i1 %.not110, label %122, label %117

112:                                              ; preds = %95, %97
  %113 = call zeroext i8 @DebugPrintEnabled() #4
  %.not116 = icmp eq i8 %113, 0
  br i1 %.not116, label %.backedge, label %114

114:                                              ; preds = %112
  %115 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648) #4
  %.not117 = icmp eq i8 %115, 0
  br i1 %.not117, label %.backedge, label %116

116:                                              ; preds = %114
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef nonnull @.str.3) #4
  br label %.backedge

117:                                              ; preds = %.preheader.preheader
  %118 = call zeroext i8 @DebugPrintEnabled() #4
  %.not114 = icmp eq i8 %118, 0
  br i1 %.not114, label %.backedge, label %119

119:                                              ; preds = %117
  %120 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648) #4
  %.not115 = icmp eq i8 %120, 0
  br i1 %.not115, label %.backedge, label %121

121:                                              ; preds = %119
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef nonnull @.str.4) #4
  br label %.backedge

122:                                              ; preds = %.preheader.preheader
  %123 = load i32, ptr %11, align 4, !tbaa !11
  %124 = lshr i32 %123, 5
  %125 = zext nneg i32 %124 to i64
  %126 = icmp ugt i32 %123, 63
  br i1 %126, label %.lr.ph140, label %.loopexit

.lr.ph140:                                        ; preds = %122
  %127 = zext i32 %.1 to i64
  %128 = getelementptr inbounds i8, ptr %.097.ph143, i64 32
  %129 = load i8, ptr %128, align 1, !tbaa !18
  %.not111.peel = icmp eq i8 %129, -120
  br i1 %.not111.peel, label %130, label %184

130:                                              ; preds = %.lr.ph140
  %131 = getelementptr inbounds i8, ptr %.097.ph143, i64 40
  %132 = load i32, ptr %131, align 1, !tbaa !18
  %133 = icmp eq i32 %132, 0
  br i1 %133, label %184, label %134

134:                                              ; preds = %130
  %135 = getelementptr inbounds i8, ptr %.097.ph143, i64 38
  %136 = load i16, ptr %135, align 1, !tbaa !18
  %137 = getelementptr inbounds i8, ptr %.097.ph143, i64 33
  %138 = load i8, ptr %137, align 1
  %139 = and i8 %138, 15
  switch i8 %139, label %144 [
    i8 0, label %143
    i8 4, label %154
    i8 1, label %142
    i8 2, label %141
    i8 3, label %140
  ]

140:                                              ; preds = %134
  br label %154

141:                                              ; preds = %134
  br label %154

142:                                              ; preds = %134
  br label %154

143:                                              ; preds = %134
  br label %154

144:                                              ; preds = %134
  %145 = call zeroext i8 @DebugPrintEnabled() #4
  %.not112.peel = icmp eq i8 %145, 0
  br i1 %.not112.peel, label %152, label %146

146:                                              ; preds = %144
  %147 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 1) #4
  %.not113.peel = icmp eq i8 %147, 0
  br i1 %.not113.peel, label %152, label %148

148:                                              ; preds = %146
  %149 = load i8, ptr %137, align 1
  %150 = and i8 %149, 15
  %151 = zext nneg i8 %150 to i32
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 1, ptr noundef nonnull @.str.5, i32 noundef %151) #4
  br label %152

152:                                              ; preds = %148, %146, %144
  %153 = load i32, ptr %11, align 4, !tbaa !11
  br label %154

154:                                              ; preds = %152, %143, %142, %141, %140, %134
  %.089.peel = phi i32 [ %153, %152 ], [ 512, %140 ], [ 512, %141 ], [ 512, %142 ], [ 512, %134 ], [ %123, %143 ]
  %.088.shrunk.peel = phi i16 [ 0, %152 ], [ 5760, %140 ], [ 2880, %141 ], [ 2400, %142 ], [ %136, %134 ], [ %136, %143 ]
  store i8 4, ptr %8, align 1, !tbaa !21
  store i8 2, ptr %26, align 1, !tbaa !24
  %155 = call zeroext i16 @SetDevicePathNodeLength(ptr noundef nonnull %8, i64 noundef 24) #4
  store i32 0, ptr %27, align 1, !tbaa !25
  %156 = load i32, ptr %131, align 1, !tbaa !18
  %157 = zext i32 %156 to i64
  store i64 %157, ptr %28, align 1, !tbaa !26
  %158 = icmp ult i16 %.088.shrunk.peel, 2
  br i1 %158, label %167, label %159

159:                                              ; preds = %154
  %160 = zext i16 %.088.shrunk.peel to i64
  %161 = call i64 @MultU64x32(i64 noundef %160, i32 noundef %.089.peel) #4
  %162 = load i32, ptr %11, align 4, !tbaa !11
  %163 = zext i32 %162 to i64
  %164 = add i64 %161, -1
  %165 = add i64 %164, %163
  %166 = call i64 @DivU64x32(i64 noundef %165, i32 noundef %162) #4
  store i64 %166, ptr %29, align 1, !tbaa !27
  %.pre = load i32, ptr %131, align 1, !tbaa !18
  %.pre154 = zext i32 %.pre to i64
  br label %178

167:                                              ; preds = %154
  %168 = load i64, ptr %18, align 8, !tbaa !14
  %169 = add i64 %168, 1
  %170 = icmp ult i64 %169, %127
  br i1 %170, label %174, label %171

171:                                              ; preds = %167
  %172 = sub i32 %.1, %156
  %173 = zext i32 %172 to i64
  store i64 %173, ptr %29, align 1, !tbaa !27
  br label %178

174:                                              ; preds = %167
  %175 = trunc i64 %168 to i32
  %reass.sub.peel = sub i32 %175, %156
  %176 = add i32 %reass.sub.peel, 1
  %177 = zext i32 %176 to i64
  store i64 %177, ptr %29, align 1, !tbaa !27
  br label %178

178:                                              ; preds = %174, %171, %159
  %.pre-phi155 = phi i64 [ %157, %174 ], [ %157, %171 ], [ %.pre154, %159 ]
  %179 = phi i64 [ %177, %174 ], [ %173, %171 ], [ %166, %159 ]
  %180 = add nsw i64 %.pre-phi155, -1
  %181 = add i64 %180, %179
  %182 = call i64 @PartitionInstallChildHandle(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef nonnull %8, i64 noundef %.pre-phi155, i64 noundef %181, i32 noundef %.089.peel, i8 noundef zeroext 0) #4
  %183 = icmp slt i64 %182, 0
  %spec.select120.peel = select i1 %183, i64 %.086.ph144, i64 0
  br label %184

184:                                              ; preds = %178, %130, %.lr.ph140
  %.2.peel = phi i64 [ %.086.ph144, %.lr.ph140 ], [ %.086.ph144, %130 ], [ %spec.select120.peel, %178 ]
  %exitcond.peel.not = icmp eq i32 %124, 2
  br i1 %exitcond.peel.not, label %.loopexit, label %.peel.next

.peel.next:                                       ; preds = %184, %243
  %.187138 = phi i64 [ %.2, %243 ], [ %.2.peel, %184 ]
  %.091137 = phi i32 [ %.293, %243 ], [ 1, %184 ]
  %.195136 = phi i64 [ %244, %243 ], [ 2, %184 ]
  %.198135 = phi ptr [ %185, %243 ], [ %128, %184 ]
  %185 = getelementptr inbounds i8, ptr %.198135, i64 32
  %186 = load i8, ptr %185, align 1, !tbaa !18
  %.not111 = icmp eq i8 %186, -120
  br i1 %.not111, label %187, label %243

187:                                              ; preds = %.peel.next
  %188 = getelementptr inbounds i8, ptr %.198135, i64 40
  %189 = load i32, ptr %188, align 1, !tbaa !18
  %190 = icmp eq i32 %189, 0
  br i1 %190, label %243, label %191

191:                                              ; preds = %187
  %192 = getelementptr inbounds i8, ptr %.198135, i64 38
  %193 = load i16, ptr %192, align 1, !tbaa !18
  %194 = getelementptr inbounds i8, ptr %.198135, i64 33
  %195 = load i8, ptr %194, align 1
  %196 = and i8 %195, 15
  switch i8 %196, label %202 [
    i8 0, label %197
    i8 4, label %212
    i8 1, label %199
    i8 2, label %200
    i8 3, label %201
  ]

197:                                              ; preds = %191
  %198 = load i32, ptr %11, align 4, !tbaa !11
  br label %212

199:                                              ; preds = %191
  br label %212

200:                                              ; preds = %191
  br label %212

201:                                              ; preds = %191
  br label %212

202:                                              ; preds = %191
  %203 = call zeroext i8 @DebugPrintEnabled() #4
  %.not112 = icmp eq i8 %203, 0
  br i1 %.not112, label %210, label %204

204:                                              ; preds = %202
  %205 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 1) #4
  %.not113 = icmp eq i8 %205, 0
  br i1 %.not113, label %210, label %206

206:                                              ; preds = %204
  %207 = load i8, ptr %194, align 1
  %208 = and i8 %207, 15
  %209 = zext nneg i8 %208 to i32
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 1, ptr noundef nonnull @.str.5, i32 noundef %209) #4
  br label %210

210:                                              ; preds = %204, %206, %202
  %211 = load i32, ptr %11, align 4, !tbaa !11
  br label %212

212:                                              ; preds = %210, %201, %200, %199, %197, %191
  %.089 = phi i32 [ %211, %210 ], [ 512, %201 ], [ 512, %200 ], [ 512, %199 ], [ 512, %191 ], [ %198, %197 ]
  %.088.shrunk = phi i16 [ 0, %210 ], [ 5760, %201 ], [ 2880, %200 ], [ 2400, %199 ], [ %193, %191 ], [ %193, %197 ]
  store i8 4, ptr %8, align 1, !tbaa !21
  store i8 2, ptr %26, align 1, !tbaa !24
  %213 = call zeroext i16 @SetDevicePathNodeLength(ptr noundef nonnull %8, i64 noundef 24) #4
  store i32 %.091137, ptr %27, align 1, !tbaa !25
  %214 = add i32 %.091137, 1
  %215 = load i32, ptr %188, align 1, !tbaa !18
  %216 = zext i32 %215 to i64
  store i64 %216, ptr %28, align 1, !tbaa !26
  %217 = icmp ult i16 %.088.shrunk, 2
  br i1 %217, label %218, label %229

218:                                              ; preds = %212
  %219 = load i64, ptr %18, align 8, !tbaa !14
  %220 = add i64 %219, 1
  %221 = icmp ult i64 %220, %127
  br i1 %221, label %222, label %226

222:                                              ; preds = %218
  %223 = trunc i64 %219 to i32
  %reass.sub = sub i32 %223, %215
  %224 = add i32 %reass.sub, 1
  %225 = zext i32 %224 to i64
  store i64 %225, ptr %29, align 1, !tbaa !27
  br label %237

226:                                              ; preds = %218
  %227 = sub i32 %.1, %215
  %228 = zext i32 %227 to i64
  store i64 %228, ptr %29, align 1, !tbaa !27
  br label %237

229:                                              ; preds = %212
  %230 = zext i16 %.088.shrunk to i64
  %231 = call i64 @MultU64x32(i64 noundef %230, i32 noundef %.089) #4
  %232 = load i32, ptr %11, align 4, !tbaa !11
  %233 = zext i32 %232 to i64
  %234 = add i64 %231, -1
  %235 = add i64 %234, %233
  %236 = call i64 @DivU64x32(i64 noundef %235, i32 noundef %232) #4
  store i64 %236, ptr %29, align 1, !tbaa !27
  %.pre152 = load i32, ptr %188, align 1, !tbaa !18
  %.pre153 = zext i32 %.pre152 to i64
  br label %237

237:                                              ; preds = %222, %226, %229
  %.pre-phi = phi i64 [ %216, %222 ], [ %216, %226 ], [ %.pre153, %229 ]
  %238 = phi i64 [ %225, %222 ], [ %228, %226 ], [ %236, %229 ]
  %239 = add nsw i64 %.pre-phi, -1
  %240 = add i64 %239, %238
  %241 = call i64 @PartitionInstallChildHandle(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef nonnull %8, i64 noundef %.pre-phi, i64 noundef %240, i32 noundef %.089, i8 noundef zeroext 0) #4
  %242 = icmp slt i64 %241, 0
  %spec.select120 = select i1 %242, i64 %.187138, i64 0
  br label %243

243:                                              ; preds = %237, %.peel.next, %187
  %.293 = phi i32 [ %.091137, %.peel.next ], [ %.091137, %187 ], [ %214, %237 ]
  %.2 = phi i64 [ %.187138, %.peel.next ], [ %.187138, %187 ], [ %spec.select120, %237 ]
  %244 = add nuw nsw i64 %.195136, 1
  %exitcond.not = icmp eq i64 %244, %125
  br i1 %exitcond.not, label %.loopexit, label %.peel.next, !llvm.loop !28

.outer._crit_edge:                                ; preds = %.loopexit, %.backedge, %55, %52, %41, %.preheader121
  %.3 = phi i64 [ -9223372036854775794, %.preheader121 ], [ %50, %41 ], [ %.086.ph144, %52 ], [ %.086.ph144, %55 ], [ %.086.ph144, %.backedge ], [ %.187.lcssa, %.loopexit ]
  call void @FreePool(ptr noundef nonnull %14) #4
  br label %245

245:                                              ; preds = %13, %7, %.outer._crit_edge
  %.090 = phi i64 [ %.3, %.outer._crit_edge ], [ -9223372036854775794, %7 ], [ -9223372036854775794, %13 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #4
  ret i64 %.090
}

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

declare ptr @AllocatePool(i64 noundef) local_unnamed_addr #2

declare i64 @MultU64x32(i64 noundef, i32 noundef) local_unnamed_addr #2

declare i64 @CompareMem(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

declare zeroext i8 @DebugPrintEnabled() local_unnamed_addr #2

declare zeroext i8 @DebugPrintLevelEnabled(i64 noundef) local_unnamed_addr #2

declare void @DebugPrint(i64 noundef, ptr noundef, ...) local_unnamed_addr #2

declare zeroext i16 @SetDevicePathNodeLength(ptr noundef, i64 noundef) local_unnamed_addr #2

declare i64 @DivU64x32(i64 noundef, i32 noundef) local_unnamed_addr #2

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

declare void @FreePool(ptr noundef) local_unnamed_addr #2

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i16 @llvm.vector.reduce.add.v8i16(<8 x i16>) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i16 @llvm.vector.reduce.add.v4i16(<4 x i16>) #3

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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, !10, i64 8}
!6 = !{!"_EFI_BLOCK_IO_PROTOCOL", !7, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!7 = !{!"long long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!12, !13, i64 12}
!12 = !{!"", !13, i64 0, !8, i64 4, !8, i64 5, !8, i64 6, !8, i64 7, !8, i64 8, !13, i64 12, !13, i64 16, !7, i64 24, !7, i64 32, !13, i64 40, !13, i64 44}
!13 = !{!"int", !8, i64 0}
!14 = !{!12, !7, i64 24}
!15 = !{!16, !10, i64 8}
!16 = !{!"_EFI_DISK_IO_PROTOCOL", !7, i64 0, !10, i64 8, !10, i64 16}
!17 = !{!12, !13, i64 0}
!18 = !{!8, !8, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"short", !8, i64 0}
!21 = !{!22, !8, i64 0}
!22 = !{!"", !23, i64 0, !13, i64 4, !7, i64 8, !7, i64 16}
!23 = !{!"", !8, i64 0, !8, i64 1, !8, i64 2}
!24 = !{!22, !8, i64 1}
!25 = !{!22, !13, i64 4}
!26 = !{!22, !7, i64 8}
!27 = !{!22, !7, i64 16}
!28 = distinct !{!28, !29, !30}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!"llvm.loop.peeled.count", i32 1}


; Effective O3 passes: AggressiveInstCombinePass,BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopFullUnrollPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass