; LLVM IR from JayXon/Leanify :: lib/LZMA (LzmaDec)

; 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.CLzmaDec = type { %struct._CLzmaProps, ptr, ptr, ptr, i64, i64, ptr, i32, i32, i32, i32, [4 x i32], i32, i32, i32, i32, [20 x i8] }
%struct._CLzmaProps = type { i8, i8, i8, i8, i32 }

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

43:                                               ; preds = %6
  %44 = load ptr, ptr %8, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.CLzmaDec, ptr %44, i32 0, i32 13
  %46 = load i32, ptr %45, align 4, !tbaa !13
  %47 = icmp ugt i32 %46, 276
  br i1 %47, label %48, label %55

48:                                               ; preds = %43
  %49 = load ptr, ptr %8, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.CLzmaDec, ptr %49, i32 0, i32 13
  %51 = load i32, ptr %50, align 4, !tbaa !13
  %52 = icmp eq i32 %51, 511
  %53 = zext i1 %52 to i64
  %54 = select i1 %52, i32 11, i32 1
  store i32 %54, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %588

55:                                               ; preds = %43
  br label %56

56:                                               ; preds = %78, %55
  %57 = load i64, ptr %14, align 8, !tbaa !9
  %58 = icmp ugt i64 %57, 0
  br i1 %58, label %59, label %64

59:                                               ; preds = %56
  %60 = load ptr, ptr %8, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.CLzmaDec, ptr %60, i32 0, i32 15
  %62 = load i32, ptr %61, align 4, !tbaa !16
  %63 = icmp ult i32 %62, 5
  br label %64

64:                                               ; preds = %59, %56
  %65 = phi i1 [ false, %56 ], [ %63, %59 ]
  br i1 %65, label %66, label %84

66:                                               ; preds = %64
  %67 = load ptr, ptr %10, align 8, !tbaa !5
  %68 = getelementptr inbounds i8, ptr %67, i32 1
  store ptr %68, ptr %10, align 8, !tbaa !5
  %69 = load i8, ptr %67, align 1, !tbaa !17
  %70 = load ptr, ptr %8, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.CLzmaDec, ptr %70, i32 0, i32 16
  %72 = load ptr, ptr %8, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.CLzmaDec, ptr %72, i32 0, i32 15
  %74 = load i32, ptr %73, align 4, !tbaa !16
  %75 = add i32 %74, 1
  store i32 %75, ptr %73, align 4, !tbaa !16
  %76 = zext i32 %74 to i64
  %77 = getelementptr inbounds [20 x i8], ptr %71, i64 0, i64 %76
  store i8 %69, ptr %77, align 1, !tbaa !17
  br label %78

78:                                               ; preds = %66
  %79 = load ptr, ptr %11, align 8, !tbaa !5
  %80 = load i64, ptr %79, align 8, !tbaa !9
  %81 = add i64 %80, 1
  store i64 %81, ptr %79, align 8, !tbaa !9
  %82 = load i64, ptr %14, align 8, !tbaa !9
  %83 = add i64 %82, -1
  store i64 %83, ptr %14, align 8, !tbaa !9
  br label %56, !llvm.loop !18

84:                                               ; preds = %64
  %85 = load ptr, ptr %8, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.CLzmaDec, ptr %85, i32 0, i32 15
  %87 = load i32, ptr %86, align 4, !tbaa !16
  %88 = icmp ne i32 %87, 0
  br i1 %88, label %89, label %97

89:                                               ; preds = %84
  %90 = load ptr, ptr %8, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.CLzmaDec, ptr %90, i32 0, i32 16
  %92 = getelementptr inbounds [20 x i8], ptr %91, i64 0, i64 0
  %93 = load i8, ptr %92, align 8, !tbaa !17
  %94 = zext i8 %93 to i32
  %95 = icmp ne i32 %94, 0
  br i1 %95, label %96, label %97

96:                                               ; preds = %89
  store i32 1, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %588

97:                                               ; preds = %89, %84
  %98 = load ptr, ptr %8, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.CLzmaDec, ptr %98, i32 0, i32 15
  %100 = load i32, ptr %99, align 4, !tbaa !16
  %101 = icmp ult i32 %100, 5
  br i1 %101, label %102, label %104

102:                                              ; preds = %97
  %103 = load ptr, ptr %13, align 8, !tbaa !5
  store i32 3, ptr %103, align 4, !tbaa !11
  store i32 0, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %588

104:                                              ; preds = %97
  %105 = load ptr, ptr %8, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.CLzmaDec, ptr %105, i32 0, i32 16
  %107 = getelementptr inbounds [20 x i8], ptr %106, i64 0, i64 1
  %108 = load i8, ptr %107, align 1, !tbaa !17
  %109 = zext i8 %108 to i32
  %110 = shl i32 %109, 24
  %111 = load ptr, ptr %8, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.CLzmaDec, ptr %111, i32 0, i32 16
  %113 = getelementptr inbounds [20 x i8], ptr %112, i64 0, i64 2
  %114 = load i8, ptr %113, align 2, !tbaa !17
  %115 = zext i8 %114 to i32
  %116 = shl i32 %115, 16
  %117 = or i32 %110, %116
  %118 = load ptr, ptr %8, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.CLzmaDec, ptr %118, i32 0, i32 16
  %120 = getelementptr inbounds [20 x i8], ptr %119, i64 0, i64 3
  %121 = load i8, ptr %120, align 1, !tbaa !17
  %122 = zext i8 %121 to i32
  %123 = shl i32 %122, 8
  %124 = or i32 %117, %123
  %125 = load ptr, ptr %8, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.CLzmaDec, ptr %125, i32 0, i32 16
  %127 = getelementptr inbounds [20 x i8], ptr %126, i64 0, i64 4
  %128 = load i8, ptr %127, align 4, !tbaa !17
  %129 = zext i8 %128 to i32
  %130 = or i32 %124, %129
  %131 = load ptr, ptr %8, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.CLzmaDec, ptr %131, i32 0, i32 8
  store i32 %130, ptr %132, align 4, !tbaa !20
  %133 = load ptr, ptr %8, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.CLzmaDec, ptr %133, i32 0, i32 10
  %135 = load i32, ptr %134, align 4, !tbaa !21
  %136 = icmp eq i32 %135, 0
  br i1 %136, label %137, label %148

137:                                              ; preds = %104
  %138 = load ptr, ptr %8, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.CLzmaDec, ptr %138, i32 0, i32 9
  %140 = load i32, ptr %139, align 8, !tbaa !22
  %141 = icmp eq i32 %140, 0
  br i1 %141, label %142, label %148

142:                                              ; preds = %137
  %143 = load ptr, ptr %8, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.CLzmaDec, ptr %143, i32 0, i32 8
  %145 = load i32, ptr %144, align 4, !tbaa !20
  %146 = icmp uge i32 %145, -1073742848
  br i1 %146, label %147, label %148

147:                                              ; preds = %142
  store i32 1, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %588

148:                                              ; preds = %142, %137, %104
  %149 = load ptr, ptr %8, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.CLzmaDec, ptr %149, i32 0, i32 7
  store i32 -1, ptr %150, align 8, !tbaa !23
  %151 = load ptr, ptr %8, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.CLzmaDec, ptr %151, i32 0, i32 15
  store i32 0, ptr %152, align 4, !tbaa !16
  %153 = load ptr, ptr %8, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.CLzmaDec, ptr %153, i32 0, i32 13
  %155 = load i32, ptr %154, align 4, !tbaa !13
  %156 = icmp ugt i32 %155, 275
  br i1 %156, label %157, label %201

157:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #2
  %158 = load ptr, ptr %8, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.CLzmaDec, ptr %158, i32 0, i32 0
  %160 = getelementptr inbounds %struct._CLzmaProps, ptr %159, i32 0, i32 0
  %161 = load i8, ptr %160, align 8, !tbaa !24
  %162 = zext i8 %161 to i32
  %163 = load ptr, ptr %8, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.CLzmaDec, ptr %163, i32 0, i32 0
  %165 = getelementptr inbounds %struct._CLzmaProps, ptr %164, i32 0, i32 1
  %166 = load i8, ptr %165, align 1, !tbaa !25
  %167 = zext i8 %166 to i32
  %168 = add nsw i32 %162, %167
  %169 = shl i32 768, %168
  %170 = add i32 1984, %169
  %171 = zext i32 %170 to i64
  store i64 %171, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #2
  %172 = load ptr, ptr %8, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.CLzmaDec, ptr %172, i32 0, i32 1
  %174 = load ptr, ptr %173, align 8, !tbaa !26
  store ptr %174, ptr %18, align 8, !tbaa !5
  store i64 0, ptr %17, align 8, !tbaa !9
  br label %175

175:                                              ; preds = %183, %157
  %176 = load i64, ptr %17, align 8, !tbaa !9
  %177 = load i64, ptr %16, align 8, !tbaa !9
  %178 = icmp ult i64 %176, %177
  br i1 %178, label %179, label %186

179:                                              ; preds = %175
  %180 = load ptr, ptr %18, align 8, !tbaa !5
  %181 = load i64, ptr %17, align 8, !tbaa !9
  %182 = getelementptr inbounds i16, ptr %180, i64 %181
  store i16 1024, ptr %182, align 2, !tbaa !27
  br label %183

183:                                              ; preds = %179
  %184 = load i64, ptr %17, align 8, !tbaa !9
  %185 = add i64 %184, 1
  store i64 %185, ptr %17, align 8, !tbaa !9
  br label %175, !llvm.loop !29

186:                                              ; preds = %175
  %187 = load ptr, ptr %8, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.CLzmaDec, ptr %187, i32 0, i32 11
  %189 = getelementptr inbounds [4 x i32], ptr %188, i64 0, i64 3
  store i32 1, ptr %189, align 4, !tbaa !11
  %190 = load ptr, ptr %8, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.CLzmaDec, ptr %190, i32 0, i32 11
  %192 = getelementptr inbounds [4 x i32], ptr %191, i64 0, i64 2
  store i32 1, ptr %192, align 8, !tbaa !11
  %193 = load ptr, ptr %8, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.CLzmaDec, ptr %193, i32 0, i32 11
  %195 = getelementptr inbounds [4 x i32], ptr %194, i64 0, i64 1
  store i32 1, ptr %195, align 4, !tbaa !11
  %196 = load ptr, ptr %8, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.CLzmaDec, ptr %196, i32 0, i32 11
  %198 = getelementptr inbounds [4 x i32], ptr %197, i64 0, i64 0
  store i32 1, ptr %198, align 8, !tbaa !11
  %199 = load ptr, ptr %8, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.CLzmaDec, ptr %199, i32 0, i32 12
  store i32 0, ptr %200, align 8, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #2
  br label %201

201:                                              ; preds = %186, %148
  %202 = load ptr, ptr %8, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.CLzmaDec, ptr %202, i32 0, i32 13
  store i32 0, ptr %203, align 4, !tbaa !13
  br label %204

204:                                              ; preds = %201, %6
  br label %205

205:                                              ; preds = %584, %582, %204
  %206 = load ptr, ptr %8, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.CLzmaDec, ptr %206, i32 0, i32 13
  %208 = load i32, ptr %207, align 4, !tbaa !13
  %209 = icmp eq i32 %208, 274
  br i1 %209, label %210, label %218

210:                                              ; preds = %205
  %211 = load ptr, ptr %8, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.CLzmaDec, ptr %211, i32 0, i32 8
  %213 = load i32, ptr %212, align 4, !tbaa !20
  %214 = icmp ne i32 %213, 0
  br i1 %214, label %215, label %216

215:                                              ; preds = %210
  store i32 1, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %588

216:                                              ; preds = %210
  %217 = load ptr, ptr %13, align 8, !tbaa !5
  store i32 1, ptr %217, align 4, !tbaa !11
  store i32 0, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %588

218:                                              ; preds = %205
  %219 = load ptr, ptr %8, align 8, !tbaa !5
  %220 = load i64, ptr %9, align 8, !tbaa !9
  call void @LzmaDec_WriteRem(ptr noundef %219, i64 noundef %220)
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #2
  store i32 0, ptr %19, align 4, !tbaa !11
  %221 = load ptr, ptr %8, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.CLzmaDec, ptr %221, i32 0, i32 5
  %223 = load i64, ptr %222, align 8, !tbaa !31
  %224 = load i64, ptr %9, align 8, !tbaa !9
  %225 = icmp uge i64 %223, %224
  br i1 %225, label %226, label %251

226:                                              ; preds = %218
  %227 = load ptr, ptr %8, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.CLzmaDec, ptr %227, i32 0, i32 13
  %229 = load i32, ptr %228, align 4, !tbaa !13
  %230 = icmp eq i32 %229, 0
  br i1 %230, label %231, label %238

231:                                              ; preds = %226
  %232 = load ptr, ptr %8, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.CLzmaDec, ptr %232, i32 0, i32 8
  %234 = load i32, ptr %233, align 4, !tbaa !20
  %235 = icmp eq i32 %234, 0
  br i1 %235, label %236, label %238

236:                                              ; preds = %231
  %237 = load ptr, ptr %13, align 8, !tbaa !5
  store i32 4, ptr %237, align 4, !tbaa !11
  store i32 0, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %582

238:                                              ; preds = %231, %226
  %239 = load i32, ptr %12, align 4, !tbaa !11
  %240 = icmp eq i32 %239, 0
  br i1 %240, label %241, label %243

241:                                              ; preds = %238
  %242 = load ptr, ptr %13, align 8, !tbaa !5
  store i32 2, ptr %242, align 4, !tbaa !11
  store i32 0, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %582

243:                                              ; preds = %238
  %244 = load ptr, ptr %8, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.CLzmaDec, ptr %244, i32 0, i32 13
  %246 = load i32, ptr %245, align 4, !tbaa !13
  %247 = icmp ne i32 %246, 0
  br i1 %247, label %248, label %250

248:                                              ; preds = %243
  %249 = load ptr, ptr %13, align 8, !tbaa !5
  store i32 2, ptr %249, align 4, !tbaa !11
  store i32 1, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %582

250:                                              ; preds = %243
  store i32 1, ptr %19, align 4, !tbaa !11
  br label %251

251:                                              ; preds = %250, %218
  %252 = load ptr, ptr %8, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.CLzmaDec, ptr %252, i32 0, i32 15
  %254 = load i32, ptr %253, align 4, !tbaa !16
  %255 = icmp eq i32 %254, 0
  br i1 %255, label %256, label %409

256:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #2
  store i32 -1, ptr %21, align 4, !tbaa !11
  %257 = load i64, ptr %14, align 8, !tbaa !9
  %258 = icmp ult i64 %257, 20
  br i1 %258, label %262, label %259

259:                                              ; preds = %256
  %260 = load i32, ptr %19, align 4, !tbaa !11
  %261 = icmp ne i32 %260, 0
  br i1 %261, label %262, label %353

262:                                              ; preds = %259, %256
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #2
  %263 = load ptr, ptr %10, align 8, !tbaa !5
  %264 = load i64, ptr %14, align 8, !tbaa !9
  %265 = getelementptr inbounds i8, ptr %263, i64 %264
  store ptr %265, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #2
  %266 = load ptr, ptr %8, align 8, !tbaa !5
  %267 = load ptr, ptr %10, align 8, !tbaa !5
  %268 = call i32 @LzmaDec_TryDummy(ptr noundef %266, ptr noundef %267, ptr noundef %22)
  store i32 %268, ptr %23, align 4, !tbaa !11
  %269 = load i32, ptr %23, align 4, !tbaa !11
  %270 = icmp eq i32 %269, 0
  br i1 %270, label %271, label %303

271:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #2
  %272 = load i64, ptr %14, align 8, !tbaa !9
  %273 = icmp uge i64 %272, 20
  br i1 %273, label %274, label %275

274:                                              ; preds = %271
  store i32 8, ptr %15, align 4
  br label %302

275:                                              ; preds = %271
  %276 = load i64, ptr %14, align 8, !tbaa !9
  %277 = load ptr, ptr %11, align 8, !tbaa !5
  %278 = load i64, ptr %277, align 8, !tbaa !9
  %279 = add i64 %278, %276
  store i64 %279, ptr %277, align 8, !tbaa !9
  %280 = load i64, ptr %14, align 8, !tbaa !9
  %281 = trunc i64 %280 to i32
  %282 = load ptr, ptr %8, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.CLzmaDec, ptr %282, i32 0, i32 15
  store i32 %281, ptr %283, align 4, !tbaa !16
  store i64 0, ptr %24, align 8, !tbaa !9
  br label %284

284:                                              ; preds = %297, %275
  %285 = load i64, ptr %24, align 8, !tbaa !9
  %286 = load i64, ptr %14, align 8, !tbaa !9
  %287 = icmp ult i64 %285, %286
  br i1 %287, label %288, label %300

288:                                              ; preds = %284
  %289 = load ptr, ptr %10, align 8, !tbaa !5
  %290 = load i64, ptr %24, align 8, !tbaa !9
  %291 = getelementptr inbounds i8, ptr %289, i64 %290
  %292 = load i8, ptr %291, align 1, !tbaa !17
  %293 = load ptr, ptr %8, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.CLzmaDec, ptr %293, i32 0, i32 16
  %295 = load i64, ptr %24, align 8, !tbaa !9
  %296 = getelementptr inbounds [20 x i8], ptr %294, i64 0, i64 %295
  store i8 %292, ptr %296, align 1, !tbaa !17
  br label %297

297:                                              ; preds = %288
  %298 = load i64, ptr %24, align 8, !tbaa !9
  %299 = add i64 %298, 1
  store i64 %299, ptr %24, align 8, !tbaa !9
  br label %284, !llvm.loop !32

300:                                              ; preds = %284
  %301 = load ptr, ptr %13, align 8, !tbaa !5
  store i32 3, ptr %301, align 4, !tbaa !11
  store i32 0, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %302

302:                                              ; preds = %300, %274
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #2
  br label %350

303:                                              ; preds = %262
  %304 = load ptr, ptr %22, align 8, !tbaa !5
  %305 = load ptr, ptr %10, align 8, !tbaa !5
  %306 = ptrtoint ptr %304 to i64
  %307 = ptrtoint ptr %305 to i64
  %308 = sub i64 %306, %307
  %309 = trunc i64 %308 to i32
  store i32 %309, ptr %21, align 4, !tbaa !11
  %310 = load i32, ptr %21, align 4, !tbaa !11
  %311 = icmp ugt i32 %310, 20
  br i1 %311, label %312, label %313

312:                                              ; preds = %303
  store i32 8, ptr %15, align 4
  br label %350

313:                                              ; preds = %303
  %314 = load i32, ptr %19, align 4, !tbaa !11
  %315 = icmp ne i32 %314, 0
  br i1 %315, label %316, label %348

316:                                              ; preds = %313
  %317 = load i32, ptr %23, align 4, !tbaa !11
  %318 = icmp eq i32 %317, 2
  br i1 %318, label %348, label %319

319:                                              ; preds = %316
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #2
  %320 = load i32, ptr %21, align 4, !tbaa !11
  %321 = zext i32 %320 to i64
  %322 = load ptr, ptr %11, align 8, !tbaa !5
  %323 = load i64, ptr %322, align 8, !tbaa !9
  %324 = add i64 %323, %321
  store i64 %324, ptr %322, align 8, !tbaa !9
  %325 = load i32, ptr %21, align 4, !tbaa !11
  %326 = load ptr, ptr %8, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.CLzmaDec, ptr %326, i32 0, i32 15
  store i32 %325, ptr %327, align 4, !tbaa !16
  store i32 0, ptr %25, align 4, !tbaa !11
  br label %328

328:                                              ; preds = %343, %319
  %329 = load i32, ptr %25, align 4, !tbaa !11
  %330 = load i32, ptr %21, align 4, !tbaa !11
  %331 = icmp ult i32 %329, %330
  br i1 %331, label %332, label %346

332:                                              ; preds = %328
  %333 = load ptr, ptr %10, align 8, !tbaa !5
  %334 = load i32, ptr %25, align 4, !tbaa !11
  %335 = zext i32 %334 to i64
  %336 = getelementptr inbounds i8, ptr %333, i64 %335
  %337 = load i8, ptr %336, align 1, !tbaa !17
  %338 = load ptr, ptr %8, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.CLzmaDec, ptr %338, i32 0, i32 16
  %340 = load i32, ptr %25, align 4, !tbaa !11
  %341 = zext i32 %340 to i64
  %342 = getelementptr inbounds [20 x i8], ptr %339, i64 0, i64 %341
  store i8 %337, ptr %342, align 1, !tbaa !17
  br label %343

343:                                              ; preds = %332
  %344 = load i32, ptr %25, align 4, !tbaa !11
  %345 = add i32 %344, 1
  store i32 %345, ptr %25, align 4, !tbaa !11
  br label %328, !llvm.loop !33

346:                                              ; preds = %328
  %347 = load ptr, ptr %13, align 8, !tbaa !5
  store i32 2, ptr %347, align 4, !tbaa !11
  store i32 1, ptr %7, align 4
  store i32 1, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #2
  br label %350

348:                                              ; preds = %316, %313
  %349 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %349, ptr %20, align 8, !tbaa !5
  store i32 0, ptr %15, align 4
  br label %350

350:                                              ; preds = %348, %346, %312, %302
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #2
  %351 = load i32, ptr %15, align 4
  switch i32 %351, label %408 [
    i32 0, label %352
  ]

352:                                              ; preds = %350
  br label %358

353:                                              ; preds = %259
  %354 = load ptr, ptr %10, align 8, !tbaa !5
  %355 = load i64, ptr %14, align 8, !tbaa !9
  %356 = getelementptr inbounds i8, ptr %354, i64 %355
  %357 = getelementptr inbounds i8, ptr %356, i64 -20
  store ptr %357, ptr %20, align 8, !tbaa !5
  br label %358

358:                                              ; preds = %353, %352
  %359 = load ptr, ptr %10, align 8, !tbaa !5
  %360 = load ptr, ptr %8, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.CLzmaDec, ptr %360, i32 0, i32 6
  store ptr %359, ptr %361, align 8, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #2
  %362 = load ptr, ptr %8, align 8, !tbaa !5
  %363 = load i64, ptr %9, align 8, !tbaa !9
  %364 = load ptr, ptr %20, align 8, !tbaa !5
  %365 = call i32 @LzmaDec_DecodeReal2(ptr noundef %362, i64 noundef %363, ptr noundef %364)
  store i32 %365, ptr %26, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #2
  %366 = load ptr, ptr %8, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.CLzmaDec, ptr %366, i32 0, i32 6
  %368 = load ptr, ptr %367, align 8, !tbaa !34
  %369 = load ptr, ptr %10, align 8, !tbaa !5
  %370 = ptrtoint ptr %368 to i64
  %371 = ptrtoint ptr %369 to i64
  %372 = sub i64 %370, %371
  store i64 %372, ptr %27, align 8, !tbaa !9
  %373 = load i32, ptr %21, align 4, !tbaa !11
  %374 = icmp slt i32 %373, 0
  br i1 %374, label %375, label %381

375:                                              ; preds = %358
  %376 = load i64, ptr %27, align 8, !tbaa !9
  %377 = load i64, ptr %14, align 8, !tbaa !9
  %378 = icmp ugt i64 %376, %377
  br i1 %378, label %379, label %380

379:                                              ; preds = %375
  store i32 8, ptr %15, align 4
  br label %405

380:                                              ; preds = %375
  br label %388

381:                                              ; preds = %358
  %382 = load i32, ptr %21, align 4, !tbaa !11
  %383 = zext i32 %382 to i64
  %384 = load i64, ptr %27, align 8, !tbaa !9
  %385 = icmp ne i64 %383, %384
  br i1 %385, label %386, label %387

386:                                              ; preds = %381
  store i32 8, ptr %15, align 4
  br label %405

387:                                              ; preds = %381
  br label %388

388:                                              ; preds = %387, %380
  %389 = load i64, ptr %27, align 8, !tbaa !9
  %390 = load ptr, ptr %10, align 8, !tbaa !5
  %391 = getelementptr inbounds i8, ptr %390, i64 %389
  store ptr %391, ptr %10, align 8, !tbaa !5
  %392 = load i64, ptr %27, align 8, !tbaa !9
  %393 = load i64, ptr %14, align 8, !tbaa !9
  %394 = sub i64 %393, %392
  store i64 %394, ptr %14, align 8, !tbaa !9
  %395 = load i64, ptr %27, align 8, !tbaa !9
  %396 = load ptr, ptr %11, align 8, !tbaa !5
  %397 = load i64, ptr %396, align 8, !tbaa !9
  %398 = add i64 %397, %395
  store i64 %398, ptr %396, align 8, !tbaa !9
  %399 = load i32, ptr %26, align 4, !tbaa !11
  %400 = icmp ne i32 %399, 0
  br i1 %400, label %401, label %404

401:                                              ; preds = %388
  %402 = load ptr, ptr %8, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.CLzmaDec, ptr %402, i32 0, i32 13
  store i32 512, ptr %403, align 4, !tbaa !13
  store i32 1, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %405

404:                                              ; preds = %388
  store i32 0, ptr %15, align 4
  br label %405

405:                                              ; preds = %404, %401, %386, %379
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #2
  %406 = load i32, ptr %15, align 4
  switch i32 %406, label %408 [
    i32 0, label %407
  ]

407:                                              ; preds = %405
  store i32 9, ptr %15, align 4
  br label %408

408:                                              ; preds = %407, %405, %350
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #2
  br label %582

409:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #2
  %410 = load ptr, ptr %8, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.CLzmaDec, ptr %410, i32 0, i32 15
  %412 = load i32, ptr %411, align 4, !tbaa !16
  store i32 %412, ptr %28, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #2
  store i32 0, ptr %29, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #2
  store i32 -1, ptr %30, align 4, !tbaa !11
  br label %413

413:                                              ; preds = %423, %409
  %414 = load i32, ptr %28, align 4, !tbaa !11
  %415 = icmp ult i32 %414, 20
  br i1 %415, label %416, label %421

416:                                              ; preds = %413
  %417 = load i32, ptr %29, align 4, !tbaa !11
  %418 = zext i32 %417 to i64
  %419 = load i64, ptr %14, align 8, !tbaa !9
  %420 = icmp ult i64 %418, %419
  br label %421

421:                                              ; preds = %416, %413
  %422 = phi i1 [ false, %413 ], [ %420, %416 ]
  br i1 %422, label %423, label %436

423:                                              ; preds = %421
  %424 = load ptr, ptr %10, align 8, !tbaa !5
  %425 = load i32, ptr %29, align 4, !tbaa !11
  %426 = add i32 %425, 1
  store i32 %426, ptr %29, align 4, !tbaa !11
  %427 = zext i32 %425 to i64
  %428 = getelementptr inbounds i8, ptr %424, i64 %427
  %429 = load i8, ptr %428, align 1, !tbaa !17
  %430 = load ptr, ptr %8, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.CLzmaDec, ptr %430, i32 0, i32 16
  %432 = load i32, ptr %28, align 4, !tbaa !11
  %433 = add i32 %432, 1
  store i32 %433, ptr %28, align 4, !tbaa !11
  %434 = zext i32 %432 to i64
  %435 = getelementptr inbounds [20 x i8], ptr %431, i64 0, i64 %434
  store i8 %429, ptr %435, align 1, !tbaa !17
  br label %413, !llvm.loop !35

436:                                              ; preds = %421
  %437 = load i32, ptr %28, align 4, !tbaa !11
  %438 = icmp ult i32 %437, 20
  br i1 %438, label %442, label %439

439:                                              ; preds = %436
  %440 = load i32, ptr %19, align 4, !tbaa !11
  %441 = icmp ne i32 %440, 0
  br i1 %441, label %442, label %509

442:                                              ; preds = %439, %436
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #2
  %443 = load ptr, ptr %8, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.CLzmaDec, ptr %443, i32 0, i32 16
  %445 = getelementptr inbounds [20 x i8], ptr %444, i64 0, i64 0
  %446 = load i32, ptr %28, align 4, !tbaa !11
  %447 = zext i32 %446 to i64
  %448 = getelementptr inbounds i8, ptr %445, i64 %447
  store ptr %448, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #2
  %449 = load ptr, ptr %8, align 8, !tbaa !5
  %450 = load ptr, ptr %8, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.CLzmaDec, ptr %450, i32 0, i32 16
  %452 = getelementptr inbounds [20 x i8], ptr %451, i64 0, i64 0
  %453 = call i32 @LzmaDec_TryDummy(ptr noundef %449, ptr noundef %452, ptr noundef %31)
  store i32 %453, ptr %32, align 4, !tbaa !11
  %454 = load i32, ptr %32, align 4, !tbaa !11
  %455 = icmp eq i32 %454, 0
  br i1 %455, label %456, label %470

456:                                              ; preds = %442
  %457 = load i32, ptr %28, align 4, !tbaa !11
  %458 = icmp uge i32 %457, 20
  br i1 %458, label %459, label %460

459:                                              ; preds = %456
  store i32 8, ptr %15, align 4
  br label %506

460:                                              ; preds = %456
  %461 = load i32, ptr %28, align 4, !tbaa !11
  %462 = load ptr, ptr %8, align 8, !tbaa !5
  %463 = getelementptr inbounds %struct.CLzmaDec, ptr %462, i32 0, i32 15
  store i32 %461, ptr %463, align 4, !tbaa !16
  %464 = load i32, ptr %29, align 4, !tbaa !11
  %465 = zext i32 %464 to i64
  %466 = load ptr, ptr %11, align 8, !tbaa !5
  %467 = load i64, ptr %466, align 8, !tbaa !9
  %468 = add i64 %467, %465
  store i64 %468, ptr %466, align 8, !tbaa !9
  %469 = load ptr, ptr %13, align 8, !tbaa !5
  store i32 3, ptr %469, align 4, !tbaa !11
  store i32 0, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %506

470:                                              ; preds = %442
  %471 = load ptr, ptr %31, align 8, !tbaa !5
  %472 = load ptr, ptr %8, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.CLzmaDec, ptr %472, i32 0, i32 16
  %474 = getelementptr inbounds [20 x i8], ptr %473, i64 0, i64 0
  %475 = ptrtoint ptr %471 to i64
  %476 = ptrtoint ptr %474 to i64
  %477 = sub i64 %475, %476
  %478 = trunc i64 %477 to i32
  store i32 %478, ptr %30, align 4, !tbaa !11
  %479 = load i32, ptr %30, align 4, !tbaa !11
  %480 = load ptr, ptr %8, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.CLzmaDec, ptr %480, i32 0, i32 15
  %482 = load i32, ptr %481, align 4, !tbaa !16
  %483 = icmp ult i32 %479, %482
  br i1 %483, label %484, label %485

484:                                              ; preds = %470
  store i32 8, ptr %15, align 4
  br label %506

485:                                              ; preds = %470
  %486 = load i32, ptr %19, align 4, !tbaa !11
  %487 = icmp ne i32 %486, 0
  br i1 %487, label %488, label %505

488:                                              ; preds = %485
  %489 = load i32, ptr %32, align 4, !tbaa !11
  %490 = icmp eq i32 %489, 2
  br i1 %490, label %505, label %491

491:                                              ; preds = %488
  %492 = load i32, ptr %30, align 4, !tbaa !11
  %493 = load ptr, ptr %8, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.CLzmaDec, ptr %493, i32 0, i32 15
  %495 = load i32, ptr %494, align 4, !tbaa !16
  %496 = sub i32 %492, %495
  %497 = zext i32 %496 to i64
  %498 = load ptr, ptr %11, align 8, !tbaa !5
  %499 = load i64, ptr %498, align 8, !tbaa !9
  %500 = add i64 %499, %497
  store i64 %500, ptr %498, align 8, !tbaa !9
  %501 = load i32, ptr %30, align 4, !tbaa !11
  %502 = load ptr, ptr %8, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.CLzmaDec, ptr %502, i32 0, i32 15
  store i32 %501, ptr %503, align 4, !tbaa !16
  %504 = load ptr, ptr %13, align 8, !tbaa !5
  store i32 2, ptr %504, align 4, !tbaa !11
  store i32 1, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %506

505:                                              ; preds = %488, %485
  store i32 0, ptr %15, align 4
  br label %506

506:                                              ; preds = %505, %491, %484, %460, %459
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #2
  %507 = load i32, ptr %15, align 4
  switch i32 %507, label %579 [
    i32 0, label %508
  ]

508:                                              ; preds = %506
  br label %509

509:                                              ; preds = %508, %439
  %510 = load ptr, ptr %8, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.CLzmaDec, ptr %510, i32 0, i32 16
  %512 = getelementptr inbounds [20 x i8], ptr %511, i64 0, i64 0
  %513 = load ptr, ptr %8, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.CLzmaDec, ptr %513, i32 0, i32 6
  store ptr %512, ptr %514, align 8, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #2
  %515 = load ptr, ptr %8, align 8, !tbaa !5
  %516 = load i64, ptr %9, align 8, !tbaa !9
  %517 = load ptr, ptr %8, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.CLzmaDec, ptr %517, i32 0, i32 6
  %519 = load ptr, ptr %518, align 8, !tbaa !34
  %520 = call i32 @LzmaDec_DecodeReal2(ptr noundef %515, i64 noundef %516, ptr noundef %519)
  store i32 %520, ptr %33, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #2
  %521 = load ptr, ptr %8, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.CLzmaDec, ptr %521, i32 0, i32 6
  %523 = load ptr, ptr %522, align 8, !tbaa !34
  %524 = load ptr, ptr %8, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.CLzmaDec, ptr %524, i32 0, i32 16
  %526 = getelementptr inbounds [20 x i8], ptr %525, i64 0, i64 0
  %527 = ptrtoint ptr %523 to i64
  %528 = ptrtoint ptr %526 to i64
  %529 = sub i64 %527, %528
  store i64 %529, ptr %34, align 8, !tbaa !9
  %530 = load ptr, ptr %8, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.CLzmaDec, ptr %530, i32 0, i32 15
  %532 = load i32, ptr %531, align 4, !tbaa !16
  store i32 %532, ptr %28, align 4, !tbaa !11
  %533 = load i32, ptr %30, align 4, !tbaa !11
  %534 = icmp slt i32 %533, 0
  br i1 %534, label %535, label %546

535:                                              ; preds = %509
  %536 = load i64, ptr %34, align 8, !tbaa !9
  %537 = icmp ugt i64 %536, 20
  br i1 %537, label %538, label %539

538:                                              ; preds = %535
  store i32 8, ptr %15, align 4
  br label %576

539:                                              ; preds = %535
  %540 = load i64, ptr %34, align 8, !tbaa !9
  %541 = load i32, ptr %28, align 4, !tbaa !11
  %542 = zext i32 %541 to i64
  %543 = icmp ult i64 %540, %542
  br i1 %543, label %544, label %545

544:                                              ; preds = %539
  store i32 8, ptr %15, align 4
  br label %576

545:                                              ; preds = %539
  br label %553

546:                                              ; preds = %509
  %547 = load i32, ptr %30, align 4, !tbaa !11
  %548 = zext i32 %547 to i64
  %549 = load i64, ptr %34, align 8, !tbaa !9
  %550 = icmp ne i64 %548, %549
  br i1 %550, label %551, label %552

551:                                              ; preds = %546
  store i32 8, ptr %15, align 4
  br label %576

552:                                              ; preds = %546
  br label %553

553:                                              ; preds = %552, %545
  %554 = load i32, ptr %28, align 4, !tbaa !11
  %555 = zext i32 %554 to i64
  %556 = load i64, ptr %34, align 8, !tbaa !9
  %557 = sub i64 %556, %555
  store i64 %557, ptr %34, align 8, !tbaa !9
  %558 = load i64, ptr %34, align 8, !tbaa !9
  %559 = load ptr, ptr %10, align 8, !tbaa !5
  %560 = getelementptr inbounds i8, ptr %559, i64 %558
  store ptr %560, ptr %10, align 8, !tbaa !5
  %561 = load i64, ptr %34, align 8, !tbaa !9
  %562 = load i64, ptr %14, align 8, !tbaa !9
  %563 = sub i64 %562, %561
  store i64 %563, ptr %14, align 8, !tbaa !9
  %564 = load i64, ptr %34, align 8, !tbaa !9
  %565 = load ptr, ptr %11, align 8, !tbaa !5
  %566 = load i64, ptr %565, align 8, !tbaa !9
  %567 = add i64 %566, %564
  store i64 %567, ptr %565, align 8, !tbaa !9
  %568 = load ptr, ptr %8, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.CLzmaDec, ptr %568, i32 0, i32 15
  store i32 0, ptr %569, align 4, !tbaa !16
  %570 = load i32, ptr %33, align 4, !tbaa !11
  %571 = icmp ne i32 %570, 0
  br i1 %571, label %572, label %575

572:                                              ; preds = %553
  %573 = load ptr, ptr %8, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.CLzmaDec, ptr %573, i32 0, i32 13
  store i32 512, ptr %574, align 4, !tbaa !13
  store i32 1, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %576

575:                                              ; preds = %553
  store i32 0, ptr %15, align 4
  br label %576

576:                                              ; preds = %575, %572, %551, %544, %538
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #2
  %577 = load i32, ptr %15, align 4
  switch i32 %577, label %579 [
    i32 0, label %578
  ]

578:                                              ; preds = %576
  store i32 0, ptr %15, align 4
  br label %579

579:                                              ; preds = %578, %576, %506
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #2
  %580 = load i32, ptr %15, align 4
  switch i32 %580, label %582 [
    i32 0, label %581
  ]

581:                                              ; preds = %579
  store i32 0, ptr %15, align 4
  br label %582

582:                                              ; preds = %581, %579, %408, %248, %241, %236
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #2
  %583 = load i32, ptr %15, align 4
  switch i32 %583, label %588 [
    i32 0, label %584
    i32 8, label %585
    i32 9, label %205
  ]

584:                                              ; preds = %582
  br label %205

585:                                              ; preds = %582
  %586 = load ptr, ptr %8, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.CLzmaDec, ptr %586, i32 0, i32 13
  store i32 511, ptr %587, align 4, !tbaa !13
  store i32 11, ptr %7, align 4
  store i32 1, ptr %15, align 4
  br label %588

588:                                              ; preds = %585, %582, %216, %215, %147, %102, %96, %48
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #2
  %589 = load i32, ptr %7, align 4
  ret i32 %589
}

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

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

; Function Attrs: nounwind uwtable
declare hidden void @LzmaDec_WriteRem(ptr noundef, i64 noundef) #0

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

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

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 = { 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", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !12, i64 92}
!14 = !{!"", !15, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !10, i64 32, !10, i64 40, !6, i64 48, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !7, i64 72, !12, i64 88, !12, i64 92, !12, i64 96, !12, i64 100, !7, i64 104}
!15 = !{!"_CLzmaProps", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !12, i64 4}
!16 = !{!14, !12, i64 100}
!17 = !{!7, !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!14, !12, i64 60}
!21 = !{!14, !12, i64 68}
!22 = !{!14, !12, i64 64}
!23 = !{!14, !12, i64 56}
!24 = !{!14, !7, i64 0}
!25 = !{!14, !7, i64 1}
!26 = !{!14, !6, i64 8}
!27 = !{!28, !28, i64 0}
!28 = !{!"short", !7, i64 0}
!29 = distinct !{!29, !19}
!30 = !{!14, !12, i64 88}
!31 = !{!14, !10, i64 40}
!32 = distinct !{!32, !19}
!33 = distinct !{!33, !19}
!34 = !{!14, !6, i64 48}
!35 = distinct !{!35, !19}


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

; Function Attrs: nounwind uwtable
define dso_local i32 @LzmaDec_DecodeToDic(ptr noundef %0, i64 noundef %1, ptr noundef %2, ptr nocapture noundef %3, i32 noundef %4, ptr nocapture noundef writeonly %5) local_unnamed_addr #0 {
  %7 = ptrtoint ptr %0 to i64
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = load i64, ptr %3, align 8, !tbaa !5
  store i64 0, ptr %3, align 8, !tbaa !5
  store i32 0, ptr %5, align 4, !tbaa !9
  %11 = getelementptr inbounds i8, ptr %0, i64 92
  %12 = load i32, ptr %11, align 4, !tbaa !11
  %13 = icmp ugt i32 %12, 274
  br i1 %13, label %14, label %116

14:                                               ; preds = %6
  %15 = icmp ugt i32 %12, 276
  br i1 %15, label %26, label %.preheader288

.preheader288:                                    ; preds = %14
  %16 = getelementptr inbounds i8, ptr %0, i64 100
  %.not290 = icmp eq i64 %10, 0
  %.pre = load i32, ptr %16, align 4, !tbaa !15
  br i1 %.not290, label %.critedge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader288
  %17 = getelementptr inbounds i8, ptr %0, i64 104
  %umax = tail call i32 @llvm.umax.i32(i32 %.pre, i32 5)
  %wide.trip.count = zext i32 %umax to i64
  %exitcond.not455 = icmp ugt i32 %.pre, 4
  br i1 %exitcond.not455, label %.critedge, label %.lr.ph459

.lr.ph459:                                        ; preds = %.lr.ph
  %18 = zext nneg i32 %.pre to i64
  %19 = getelementptr inbounds i8, ptr %2, i64 1
  %20 = load i8, ptr %2, align 1, !tbaa !16
  %indvars.iv.next = add nuw nsw i64 %18, 1
  %21 = trunc nuw nsw i64 %indvars.iv.next to i32
  store i32 %21, ptr %16, align 4, !tbaa !15
  %22 = getelementptr inbounds [20 x i8], ptr %17, i64 0, i64 %18
  store i8 %20, ptr %22, align 1, !tbaa !16
  %23 = load i64, ptr %3, align 8, !tbaa !5
  %24 = add i64 %23, 1
  store i64 %24, ptr %3, align 8, !tbaa !5
  %25 = add i64 %10, -1
  %.not = icmp eq i64 %25, 0
  br i1 %.not, label %.critedge.thread, label %29, !llvm.loop !17

26:                                               ; preds = %14
  %27 = icmp eq i32 %12, 511
  %28 = select i1 %27, i32 11, i32 1
  br label %.thread273

29:                                               ; preds = %.lr.ph459
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.critedge, label %30, !llvm.loop !17

30:                                               ; preds = %29
  %31 = getelementptr inbounds i8, ptr %2, i64 2
  %32 = load i8, ptr %19, align 1, !tbaa !16
  %indvars.iv.next.1 = add nuw nsw i64 %18, 2
  %33 = trunc nuw nsw i64 %indvars.iv.next.1 to i32
  store i32 %33, ptr %16, align 4, !tbaa !15
  %34 = getelementptr inbounds [20 x i8], ptr %17, i64 0, i64 %indvars.iv.next
  store i8 %32, ptr %34, align 1, !tbaa !16
  %35 = load i64, ptr %3, align 8, !tbaa !5
  %36 = add i64 %35, 1
  store i64 %36, ptr %3, align 8, !tbaa !5
  %37 = add i64 %10, -2
  %.not.1 = icmp eq i64 %37, 0
  br i1 %.not.1, label %.critedge.thread, label %38, !llvm.loop !17

38:                                               ; preds = %30
  %exitcond.not.1 = icmp eq i64 %indvars.iv.next.1, %wide.trip.count
  br i1 %exitcond.not.1, label %.critedge, label %39, !llvm.loop !17

39:                                               ; preds = %38
  %40 = getelementptr inbounds i8, ptr %2, i64 3
  %41 = load i8, ptr %31, align 1, !tbaa !16
  %indvars.iv.next.2 = add nuw nsw i64 %18, 3
  %42 = trunc nuw nsw i64 %indvars.iv.next.2 to i32
  store i32 %42, ptr %16, align 4, !tbaa !15
  %43 = getelementptr inbounds [20 x i8], ptr %17, i64 0, i64 %indvars.iv.next.1
  store i8 %41, ptr %43, align 1, !tbaa !16
  %44 = load i64, ptr %3, align 8, !tbaa !5
  %45 = add i64 %44, 1
  store i64 %45, ptr %3, align 8, !tbaa !5
  %46 = add i64 %10, -3
  %.not.2 = icmp eq i64 %46, 0
  br i1 %.not.2, label %.critedge.thread, label %47, !llvm.loop !17

47:                                               ; preds = %39
  %exitcond.not.2 = icmp eq i64 %indvars.iv.next.2, %wide.trip.count
  br i1 %exitcond.not.2, label %.critedge, label %48, !llvm.loop !17

48:                                               ; preds = %47
  %49 = getelementptr inbounds i8, ptr %2, i64 4
  %50 = load i8, ptr %40, align 1, !tbaa !16
  %indvars.iv.next.3 = add nuw nsw i64 %18, 4
  %51 = trunc nuw nsw i64 %indvars.iv.next.3 to i32
  store i32 %51, ptr %16, align 4, !tbaa !15
  %52 = getelementptr inbounds [20 x i8], ptr %17, i64 0, i64 %indvars.iv.next.2
  store i8 %50, ptr %52, align 1, !tbaa !16
  %53 = load i64, ptr %3, align 8, !tbaa !5
  %54 = add i64 %53, 1
  store i64 %54, ptr %3, align 8, !tbaa !5
  %55 = add i64 %10, -4
  %.not.3 = icmp eq i64 %55, 0
  br i1 %.not.3, label %.critedge.thread, label %56, !llvm.loop !17

56:                                               ; preds = %48
  %exitcond.not.3 = icmp eq i64 %indvars.iv.next.3, %wide.trip.count
  br i1 %exitcond.not.3, label %.critedge, label %57, !llvm.loop !17

57:                                               ; preds = %56
  %58 = getelementptr inbounds i8, ptr %2, i64 5
  %59 = load i8, ptr %49, align 1, !tbaa !16
  %indvars.iv.next.4 = add nuw nsw i32 %.pre, 5
  store i32 %indvars.iv.next.4, ptr %16, align 4, !tbaa !15
  %60 = getelementptr inbounds [20 x i8], ptr %17, i64 0, i64 %indvars.iv.next.3
  store i8 %59, ptr %60, align 1, !tbaa !16
  %61 = load i64, ptr %3, align 8, !tbaa !5
  %62 = add i64 %61, 1
  store i64 %62, ptr %3, align 8, !tbaa !5
  %63 = add i64 %10, -5
  %.not.4 = icmp eq i64 %63, 0
  br i1 %.not.4, label %.critedge.thread, label %.critedge, !llvm.loop !17

.critedge:                                        ; preds = %29, %38, %47, %56, %57, %.lr.ph, %.preheader288
  %64 = phi i32 [ %.pre, %.preheader288 ], [ %.pre, %.lr.ph ], [ %21, %29 ], [ %33, %38 ], [ %42, %47 ], [ %51, %56 ], [ %indvars.iv.next.4, %57 ]
  %.0205.lcssa = phi i64 [ 0, %.preheader288 ], [ %10, %.lr.ph ], [ %25, %29 ], [ %37, %38 ], [ %46, %47 ], [ %55, %56 ], [ %63, %57 ]
  %.0193.lcssa = phi ptr [ %2, %.preheader288 ], [ %2, %.lr.ph ], [ %19, %29 ], [ %31, %38 ], [ %40, %47 ], [ %49, %56 ], [ %58, %57 ]
  %.not244 = icmp eq i32 %64, 0
  br i1 %.not244, label %.thread, label %.critedge.thread

.critedge.thread:                                 ; preds = %.lr.ph459, %30, %39, %48, %57, %.critedge
  %.0193.lcssa348 = phi ptr [ %.0193.lcssa, %.critedge ], [ %19, %.lr.ph459 ], [ %31, %30 ], [ %40, %39 ], [ %49, %48 ], [ %58, %57 ]
  %.0205.lcssa347 = phi i64 [ %.0205.lcssa, %.critedge ], [ 0, %57 ], [ 0, %48 ], [ 0, %39 ], [ 0, %30 ], [ 0, %.lr.ph459 ]
  %65 = phi i32 [ %64, %.critedge ], [ %21, %.lr.ph459 ], [ %33, %30 ], [ %42, %39 ], [ %51, %48 ], [ %indvars.iv.next.4, %57 ]
  %66 = getelementptr inbounds i8, ptr %0, i64 104
  %67 = load i8, ptr %66, align 8, !tbaa !16
  %.not245 = icmp eq i8 %67, 0
  br i1 %.not245, label %68, label %.thread273

68:                                               ; preds = %.critedge.thread
  %69 = icmp ult i32 %65, 5
  br i1 %69, label %.thread, label %70

.thread:                                          ; preds = %.critedge, %68
  store i32 3, ptr %5, align 4, !tbaa !9
  br label %.thread273

70:                                               ; preds = %68
  %71 = getelementptr inbounds i8, ptr %0, i64 105
  %72 = load i8, ptr %71, align 1, !tbaa !16
  %73 = zext i8 %72 to i32
  %74 = shl nuw i32 %73, 24
  %75 = getelementptr inbounds i8, ptr %0, i64 106
  %76 = load i8, ptr %75, align 2, !tbaa !16
  %77 = zext i8 %76 to i32
  %78 = shl nuw nsw i32 %77, 16
  %79 = or disjoint i32 %78, %74
  %80 = getelementptr inbounds i8, ptr %0, i64 107
  %81 = load i8, ptr %80, align 1, !tbaa !16
  %82 = zext i8 %81 to i32
  %83 = shl nuw nsw i32 %82, 8
  %84 = or disjoint i32 %79, %83
  %85 = getelementptr inbounds i8, ptr %0, i64 108
  %86 = load i8, ptr %85, align 4, !tbaa !16
  %87 = zext i8 %86 to i32
  %88 = or disjoint i32 %84, %87
  %89 = getelementptr inbounds i8, ptr %0, i64 60
  store i32 %88, ptr %89, align 4, !tbaa !19
  %90 = getelementptr inbounds i8, ptr %0, i64 68
  %91 = load i32, ptr %90, align 4, !tbaa !20
  %92 = icmp eq i32 %91, 0
  br i1 %92, label %93, label %98

93:                                               ; preds = %70
  %94 = getelementptr inbounds i8, ptr %0, i64 64
  %95 = load i32, ptr %94, align 8, !tbaa !21
  %96 = icmp eq i32 %95, 0
  %97 = icmp ugt i32 %84, -1073742849
  %or.cond255 = select i1 %96, i1 %97, i1 false
  br i1 %or.cond255, label %.thread273, label %98

98:                                               ; preds = %93, %70
  %99 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 -1, ptr %99, align 8, !tbaa !22
  store i32 0, ptr %16, align 4, !tbaa !15
  %.not287 = icmp eq i32 %12, 275
  br i1 %.not287, label %.thread349, label %vector.ph

vector.ph:                                        ; preds = %98
  %100 = load i8, ptr %0, align 8, !tbaa !23
  %101 = zext i8 %100 to i32
  %102 = getelementptr inbounds i8, ptr %0, i64 1
  %103 = load i8, ptr %102, align 1, !tbaa !24
  %104 = zext i8 %103 to i32
  %105 = add nuw nsw i32 %104, %101
  %106 = shl i32 768, %105
  %107 = add nuw i32 %106, 1984
  %108 = zext i32 %107 to i64
  %109 = getelementptr inbounds i8, ptr %0, i64 8
  %110 = load ptr, ptr %109, align 8, !tbaa !25
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %111 = getelementptr inbounds i16, ptr %110, i64 %index
  %112 = getelementptr inbounds i8, ptr %111, i64 16
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %111, align 2, !tbaa !26
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %112, align 2, !tbaa !26
  %index.next = add nuw i64 %index, 16
  %113 = icmp eq i64 %index.next, %108
  br i1 %113, label %middle.block, label %vector.body, !llvm.loop !28

middle.block:                                     ; preds = %vector.body
  %114 = getelementptr inbounds i8, ptr %0, i64 72
  store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %114, align 8, !tbaa !9
  %115 = getelementptr inbounds i8, ptr %0, i64 88
  store i32 0, ptr %115, align 8, !tbaa !31
  br label %.thread349

.thread349:                                       ; preds = %98, %middle.block
  store i32 0, ptr %11, align 4, !tbaa !11
  br label %.lr.ph317

116:                                              ; preds = %6
  %117 = icmp eq i32 %12, 274
  br i1 %117, label %._crit_edge318, label %.lr.ph317

.lr.ph317:                                        ; preds = %.thread349, %116
  %.1194353 = phi ptr [ %.0193.lcssa348, %.thread349 ], [ %2, %116 ]
  %.1206352 = phi i64 [ %.0205.lcssa347, %.thread349 ], [ %10, %116 ]
  %118 = getelementptr inbounds i8, ptr %0, i64 40
  %119 = getelementptr inbounds i8, ptr %0, i64 60
  %120 = icmp eq i32 %4, 0
  %121 = getelementptr inbounds i8, ptr %0, i64 100
  %122 = getelementptr i8, ptr %0, i64 104
  %123 = ptrtoint ptr %122 to i64
  %124 = getelementptr inbounds i8, ptr %0, i64 48
  %125 = add i64 %7, 104
  br label %129

._crit_edge318:                                   ; preds = %.backedge, %116
  %126 = getelementptr inbounds i8, ptr %0, i64 60
  %127 = load i32, ptr %126, align 4, !tbaa !19
  %.not254 = icmp eq i32 %127, 0
  br i1 %.not254, label %128, label %.thread273

128:                                              ; preds = %._crit_edge318
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %.thread273

129:                                              ; preds = %.lr.ph317, %.backedge
  %.2195314 = phi ptr [ %.1194353, %.lr.ph317 ], [ %.7200360, %.backedge ]
  %.2207313 = phi i64 [ %.1206352, %.lr.ph317 ], [ %.7212359, %.backedge ]
  %.2207313.fr = freeze i64 %.2207313
  %.2195314462 = ptrtoint ptr %.2195314 to i64
  call void @LzmaDec_WriteRem(ptr noundef nonnull %0, i64 noundef %1)
  %130 = load i64, ptr %118, align 8, !tbaa !32
  %.not246 = icmp uge i64 %130, %1
  br i1 %.not246, label %131, label %140

131:                                              ; preds = %129
  %132 = load i32, ptr %11, align 4, !tbaa !11
  %133 = icmp eq i32 %132, 0
  br i1 %133, label %134, label %.thread258

134:                                              ; preds = %131
  %135 = load i32, ptr %119, align 4, !tbaa !19
  %136 = icmp eq i32 %135, 0
  br i1 %136, label %137, label %138

137:                                              ; preds = %134
  store i32 4, ptr %5, align 4, !tbaa !9
  br label %.thread273

138:                                              ; preds = %134
  br i1 %120, label %.loopexit, label %140

.thread258:                                       ; preds = %131
  br i1 %120, label %.loopexit, label %139

.loopexit:                                        ; preds = %138, %.thread258
  store i32 2, ptr %5, align 4, !tbaa !9
  br label %.thread273

139:                                              ; preds = %.thread258
  store i32 2, ptr %5, align 4, !tbaa !9
  br label %.thread273

140:                                              ; preds = %138, %129
  %141 = load i32, ptr %121, align 4, !tbaa !15
  %142 = icmp eq i32 %141, 0
  br i1 %142, label %159, label %.preheader

.preheader:                                       ; preds = %140
  %143 = icmp ult i32 %141, 20
  %144 = icmp ne i64 %.2207313.fr, 0
  %145 = and i1 %143, %144
  br i1 %145, label %.lr.ph300.preheader, label %._crit_edge

.lr.ph300.preheader:                              ; preds = %.preheader
  %146 = zext nneg i32 %141 to i64
  %147 = add i64 %.2207313.fr, -1
  %148 = sub nsw i64 19, %146
  %umin = call i64 @llvm.umin.i64(i64 %147, i64 %148)
  %149 = add i64 %umin, 1
  %min.iters.check465 = icmp ult i64 %149, 16
  br i1 %min.iters.check465, label %.lr.ph300.preheader534, label %vector.memcheck

.lr.ph300.preheader534:                           ; preds = %middle.block463, %vector.memcheck, %.lr.ph300.preheader
  %indvars.iv329.ph = phi i64 [ %146, %vector.memcheck ], [ %146, %.lr.ph300.preheader ], [ %ind.end, %middle.block463 ]
  %indvars.iv327.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph300.preheader ], [ %n.vec468, %middle.block463 ]
  br label %.lr.ph300

vector.memcheck:                                  ; preds = %.lr.ph300.preheader
  %150 = add i64 %125, %146
  %151 = sub i64 %150, %.2195314462
  %diff.check = icmp ult i64 %151, 16
  br i1 %diff.check, label %.lr.ph300.preheader534, label %vector.ph466

vector.ph466:                                     ; preds = %vector.memcheck
  %n.vec468 = and i64 %149, -16
  %ind.end = add i64 %n.vec468, %146
  %152 = add nuw nsw i64 %146, 15
  br label %vector.body471

vector.body471:                                   ; preds = %vector.body471, %vector.ph466
  %index472 = phi i64 [ 0, %vector.ph466 ], [ %index.next473, %vector.body471 ]
  %153 = phi i64 [ %152, %vector.ph466 ], [ %156, %vector.body471 ]
  %offset.idx = add i64 %index472, %146
  %154 = getelementptr inbounds i8, ptr %.2195314, i64 %index472
  %wide.load = load <16 x i8>, ptr %154, align 1, !tbaa !16
  %155 = getelementptr inbounds [20 x i8], ptr %122, i64 0, i64 %offset.idx
  store <16 x i8> %wide.load, ptr %155, align 1, !tbaa !16
  %index.next473 = add nuw i64 %index472, 16
  %156 = add i64 %153, 16
  %157 = icmp eq i64 %index.next473, %n.vec468
  br i1 %157, label %middle.block463, label %vector.body471, !llvm.loop !33

middle.block463:                                  ; preds = %vector.body471
  %158 = icmp ult i64 %153, 19
  %cmp.n474 = icmp eq i64 %149, %n.vec468
  br i1 %cmp.n474, label %._crit_edge.loopexit, label %.lr.ph300.preheader534

159:                                              ; preds = %140
  %160 = icmp ult i64 %.2207313.fr, 20
  %or.cond = or i1 %160, %.not246
  br i1 %or.cond, label %161, label %235

161:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #3
  %162 = getelementptr inbounds i8, ptr %.2195314, i64 %.2207313.fr
  store ptr %162, ptr %8, align 8, !tbaa !34
  %163 = call i32 @LzmaDec_TryDummy(ptr noundef nonnull %0, ptr noundef %.2195314, ptr noundef nonnull %8)
  %164 = icmp eq i32 %163, 0
  br i1 %164, label %165, label %198

165:                                              ; preds = %161
  %.2195314.lcssa444500 = ptrtoint ptr %.2195314 to i64
  %166 = icmp ugt i64 %.2207313.fr, 19
  br i1 %166, label %.thread260, label %167

167:                                              ; preds = %165
  %168 = load i64, ptr %3, align 8, !tbaa !5
  %169 = add i64 %168, %.2207313.fr
  store i64 %169, ptr %3, align 8, !tbaa !5
  %170 = trunc nuw nsw i64 %.2207313.fr to i32
  store i32 %170, ptr %121, align 4, !tbaa !15
  %.not320 = icmp eq i64 %.2207313.fr, 0
  br i1 %.not320, label %.thread260.sink.split, label %iter.check506

iter.check506:                                    ; preds = %167
  %min.iters.check504 = icmp ult i64 %.2207313.fr, 8
  br i1 %min.iters.check504, label %.lr.ph310.preheader, label %vector.memcheck499

vector.memcheck499:                               ; preds = %iter.check506
  %171 = add i64 %7, 104
  %172 = sub i64 %171, %.2195314.lcssa444500
  %diff.check501 = icmp ult i64 %172, 16
  br i1 %diff.check501, label %.lr.ph310.preheader, label %vector.main.loop.iter.check508

vector.main.loop.iter.check508:                   ; preds = %vector.memcheck499
  %min.iters.check507 = icmp ult i64 %.2207313.fr, 16
  br i1 %min.iters.check507, label %vec.epilog.ph519, label %vector.ph509

vector.ph509:                                     ; preds = %vector.main.loop.iter.check508
  %n.vec511 = and i64 %.2207313.fr, 16
  %wide.load514 = load <16 x i8>, ptr %.2195314, align 1, !tbaa !16
  store <16 x i8> %wide.load514, ptr %122, align 1, !tbaa !16
  %cmp.n516 = icmp eq i64 %.2207313.fr, %n.vec511
  br i1 %cmp.n516, label %.thread260.sink.split, label %vec.epilog.iter.check520

vec.epilog.iter.check520:                         ; preds = %vector.ph509
  %n.vec.remaining521 = and i64 %.2207313.fr, 8
  %min.epilog.iters.check522.not.not = icmp eq i64 %n.vec.remaining521, 0
  br i1 %min.epilog.iters.check522.not.not, label %.lr.ph310.preheader, label %vec.epilog.ph519

vec.epilog.ph519:                                 ; preds = %vector.main.loop.iter.check508, %vec.epilog.iter.check520
  %vec.epilog.resume.val523 = phi i64 [ %n.vec511, %vec.epilog.iter.check520 ], [ 0, %vector.main.loop.iter.check508 ]
  %n.vec525 = and i64 %.2207313.fr, 24
  br label %vec.epilog.vector.body527

vec.epilog.vector.body527:                        ; preds = %vec.epilog.vector.body527, %vec.epilog.ph519
  %index528 = phi i64 [ %vec.epilog.resume.val523, %vec.epilog.ph519 ], [ %index.next530, %vec.epilog.vector.body527 ]
  %173 = getelementptr inbounds i8, ptr %.2195314, i64 %index528
  %wide.load529 = load <8 x i8>, ptr %173, align 1, !tbaa !16
  %174 = getelementptr inbounds [20 x i8], ptr %122, i64 0, i64 %index528
  store <8 x i8> %wide.load529, ptr %174, align 1, !tbaa !16
  %index.next530 = add nuw i64 %index528, 8
  %175 = icmp eq i64 %index.next530, %n.vec525
  br i1 %175, label %vec.epilog.middle.block517, label %vec.epilog.vector.body527, !llvm.loop !35

vec.epilog.middle.block517:                       ; preds = %vec.epilog.vector.body527
  %cmp.n531 = icmp eq i64 %.2207313.fr, %n.vec525
  br i1 %cmp.n531, label %.thread260.sink.split, label %.lr.ph310.preheader

.lr.ph310.preheader:                              ; preds = %vec.epilog.middle.block517, %vector.memcheck499, %iter.check506, %vec.epilog.iter.check520
  %.0222308.ph = phi i64 [ 0, %iter.check506 ], [ 0, %vector.memcheck499 ], [ %n.vec511, %vec.epilog.iter.check520 ], [ %n.vec525, %vec.epilog.middle.block517 ]
  %xtraiter583 = and i64 %.2207313.fr, 3
  %lcmp.mod584.not = icmp eq i64 %xtraiter583, 0
  br i1 %lcmp.mod584.not, label %.lr.ph310.prol.loopexit, label %.lr.ph310.prol

.lr.ph310.prol:                                   ; preds = %.lr.ph310.preheader, %.lr.ph310.prol
  %.0222308.prol = phi i64 [ %179, %.lr.ph310.prol ], [ %.0222308.ph, %.lr.ph310.preheader ]
  %prol.iter585 = phi i64 [ %prol.iter585.next, %.lr.ph310.prol ], [ 0, %.lr.ph310.preheader ]
  %176 = getelementptr inbounds i8, ptr %.2195314, i64 %.0222308.prol
  %177 = load i8, ptr %176, align 1, !tbaa !16
  %178 = getelementptr inbounds [20 x i8], ptr %122, i64 0, i64 %.0222308.prol
  store i8 %177, ptr %178, align 1, !tbaa !16
  %179 = add nuw nsw i64 %.0222308.prol, 1
  %prol.iter585.next = add i64 %prol.iter585, 1
  %prol.iter585.cmp.not = icmp eq i64 %prol.iter585.next, %xtraiter583
  br i1 %prol.iter585.cmp.not, label %.lr.ph310.prol.loopexit, label %.lr.ph310.prol, !llvm.loop !36

.lr.ph310.prol.loopexit:                          ; preds = %.lr.ph310.prol, %.lr.ph310.preheader
  %.0222308.unr = phi i64 [ %.0222308.ph, %.lr.ph310.preheader ], [ %179, %.lr.ph310.prol ]
  %180 = sub nsw i64 %.0222308.ph, %.2207313.fr
  %181 = icmp ugt i64 %180, -4
  br i1 %181, label %.thread260.sink.split, label %.lr.ph310

.lr.ph310:                                        ; preds = %.lr.ph310.prol.loopexit, %.lr.ph310
  %.0222308 = phi i64 [ %197, %.lr.ph310 ], [ %.0222308.unr, %.lr.ph310.prol.loopexit ]
  %182 = getelementptr inbounds i8, ptr %.2195314, i64 %.0222308
  %183 = load i8, ptr %182, align 1, !tbaa !16
  %184 = getelementptr inbounds [20 x i8], ptr %122, i64 0, i64 %.0222308
  store i8 %183, ptr %184, align 1, !tbaa !16
  %185 = add nuw nsw i64 %.0222308, 1
  %186 = getelementptr inbounds i8, ptr %.2195314, i64 %185
  %187 = load i8, ptr %186, align 1, !tbaa !16
  %188 = getelementptr inbounds [20 x i8], ptr %122, i64 0, i64 %185
  store i8 %187, ptr %188, align 1, !tbaa !16
  %189 = add nuw nsw i64 %.0222308, 2
  %190 = getelementptr inbounds i8, ptr %.2195314, i64 %189
  %191 = load i8, ptr %190, align 1, !tbaa !16
  %192 = getelementptr inbounds [20 x i8], ptr %122, i64 0, i64 %189
  store i8 %191, ptr %192, align 1, !tbaa !16
  %193 = add nuw nsw i64 %.0222308, 3
  %194 = getelementptr inbounds i8, ptr %.2195314, i64 %193
  %195 = load i8, ptr %194, align 1, !tbaa !16
  %196 = getelementptr inbounds [20 x i8], ptr %122, i64 0, i64 %193
  store i8 %195, ptr %196, align 1, !tbaa !16
  %197 = add nuw nsw i64 %.0222308, 4
  %exitcond339.not.3 = icmp eq i64 %197, %.2207313.fr
  br i1 %exitcond339.not.3, label %.thread260.sink.split, label %.lr.ph310, !llvm.loop !38

198:                                              ; preds = %161
  %199 = load ptr, ptr %8, align 8, !tbaa !34
  %200 = ptrtoint ptr %199 to i64
  %201 = ptrtoint ptr %.2195314 to i64
  %202 = sub i64 %200, %201
  %203 = trunc i64 %202 to i32
  %204 = icmp ugt i32 %203, 20
  br i1 %204, label %.thread260, label %205

205:                                              ; preds = %198
  %206 = icmp ne i32 %163, 2
  %or.cond7.not = and i1 %.not246, %206
  br i1 %or.cond7.not, label %207, label %234

207:                                              ; preds = %205
  %.2195314.lcssa446476 = ptrtoint ptr %.2195314 to i64
  %208 = and i64 %202, 31
  %209 = load i64, ptr %3, align 8, !tbaa !5
  %210 = add i64 %209, %208
  store i64 %210, ptr %3, align 8, !tbaa !5
  store i32 %203, ptr %121, align 4, !tbaa !15
  %.not319 = icmp eq i32 %203, 0
  br i1 %.not319, label %.thread260.sink.split, label %iter.check

iter.check:                                       ; preds = %207
  %wide.trip.count337 = and i64 %202, 31
  %min.iters.check480 = icmp ult i64 %wide.trip.count337, 8
  br i1 %min.iters.check480, label %.lr.ph306.preheader, label %vector.memcheck475

vector.memcheck475:                               ; preds = %iter.check
  %211 = add i64 %7, 104
  %212 = sub i64 %211, %.2195314.lcssa446476
  %diff.check477 = icmp ult i64 %212, 32
  br i1 %diff.check477, label %.lr.ph306.preheader, label %vec.epilog.ph

vec.epilog.ph:                                    ; preds = %vector.memcheck475
  %n.mod.vf492 = and i64 %202, 7
  %n.vec493 = sub nsw i64 %wide.trip.count337, %n.mod.vf492
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index495 = phi i64 [ 0, %vec.epilog.ph ], [ %index.next497, %vec.epilog.vector.body ]
  %213 = getelementptr inbounds i8, ptr %.2195314, i64 %index495
  %wide.load496 = load <8 x i8>, ptr %213, align 1, !tbaa !16
  %214 = getelementptr inbounds [20 x i8], ptr %122, i64 0, i64 %index495
  store <8 x i8> %wide.load496, ptr %214, align 1, !tbaa !16
  %index.next497 = add nuw i64 %index495, 8
  %215 = icmp eq i64 %index.next497, %n.vec493
  br i1 %215, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !39

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n498 = icmp eq i64 %n.mod.vf492, 0
  br i1 %cmp.n498, label %.thread260.sink.split, label %.lr.ph306.preheader

.lr.ph306.preheader:                              ; preds = %vec.epilog.middle.block, %vector.memcheck475, %iter.check
  %indvars.iv334.ph = phi i64 [ 0, %iter.check ], [ 0, %vector.memcheck475 ], [ %n.vec493, %vec.epilog.middle.block ]
  %216 = sub i64 %202, %indvars.iv334.ph
  %xtraiter = and i64 %216, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph306.prol.loopexit, label %.lr.ph306.prol

.lr.ph306.prol:                                   ; preds = %.lr.ph306.preheader, %.lr.ph306.prol
  %indvars.iv334.prol = phi i64 [ %indvars.iv.next335.prol, %.lr.ph306.prol ], [ %indvars.iv334.ph, %.lr.ph306.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph306.prol ], [ 0, %.lr.ph306.preheader ]
  %217 = getelementptr inbounds i8, ptr %.2195314, i64 %indvars.iv334.prol
  %218 = load i8, ptr %217, align 1, !tbaa !16
  %219 = getelementptr inbounds [20 x i8], ptr %122, i64 0, i64 %indvars.iv334.prol
  store i8 %218, ptr %219, align 1, !tbaa !16
  %indvars.iv.next335.prol = add nuw nsw i64 %indvars.iv334.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph306.prol.loopexit, label %.lr.ph306.prol, !llvm.loop !40

.lr.ph306.prol.loopexit:                          ; preds = %.lr.ph306.prol, %.lr.ph306.preheader
  %indvars.iv334.unr = phi i64 [ %indvars.iv334.ph, %.lr.ph306.preheader ], [ %indvars.iv.next335.prol, %.lr.ph306.prol ]
  %220 = sub nsw i64 %indvars.iv334.ph, %wide.trip.count337
  %221 = icmp ugt i64 %220, -4
  br i1 %221, label %.thread260.sink.split, label %.lr.ph306

.lr.ph306:                                        ; preds = %.lr.ph306.prol.loopexit, %.lr.ph306
  %indvars.iv334 = phi i64 [ %indvars.iv.next335.3, %.lr.ph306 ], [ %indvars.iv334.unr, %.lr.ph306.prol.loopexit ]
  %222 = getelementptr inbounds i8, ptr %.2195314, i64 %indvars.iv334
  %223 = load i8, ptr %222, align 1, !tbaa !16
  %224 = getelementptr inbounds [20 x i8], ptr %122, i64 0, i64 %indvars.iv334
  store i8 %223, ptr %224, align 1, !tbaa !16
  %indvars.iv.next335 = add nuw nsw i64 %indvars.iv334, 1
  %225 = getelementptr inbounds i8, ptr %.2195314, i64 %indvars.iv.next335
  %226 = load i8, ptr %225, align 1, !tbaa !16
  %227 = getelementptr inbounds [20 x i8], ptr %122, i64 0, i64 %indvars.iv.next335
  store i8 %226, ptr %227, align 1, !tbaa !16
  %indvars.iv.next335.1 = add nuw nsw i64 %indvars.iv334, 2
  %228 = getelementptr inbounds i8, ptr %.2195314, i64 %indvars.iv.next335.1
  %229 = load i8, ptr %228, align 1, !tbaa !16
  %230 = getelementptr inbounds [20 x i8], ptr %122, i64 0, i64 %indvars.iv.next335.1
  store i8 %229, ptr %230, align 1, !tbaa !16
  %indvars.iv.next335.2 = add nuw nsw i64 %indvars.iv334, 3
  %231 = getelementptr inbounds i8, ptr %.2195314, i64 %indvars.iv.next335.2
  %232 = load i8, ptr %231, align 1, !tbaa !16
  %233 = getelementptr inbounds [20 x i8], ptr %122, i64 0, i64 %indvars.iv.next335.2
  store i8 %232, ptr %233, align 1, !tbaa !16
  %indvars.iv.next335.3 = add nuw nsw i64 %indvars.iv334, 4
  %exitcond338.not.3 = icmp eq i64 %indvars.iv.next335.3, %wide.trip.count337
  br i1 %exitcond338.not.3, label %.thread260.sink.split, label %.lr.ph306, !llvm.loop !41

.thread260.sink.split:                            ; preds = %.lr.ph306.prol.loopexit, %.lr.ph306, %.lr.ph310.prol.loopexit, %.lr.ph310, %vec.epilog.middle.block, %vector.ph509, %vec.epilog.middle.block517, %207, %167
  %.sink = phi i32 [ 3, %167 ], [ 2, %207 ], [ 3, %vec.epilog.middle.block517 ], [ 3, %vector.ph509 ], [ 2, %vec.epilog.middle.block ], [ 3, %.lr.ph310 ], [ 3, %.lr.ph310.prol.loopexit ], [ 2, %.lr.ph306 ], [ 2, %.lr.ph306.prol.loopexit ]
  %.2.ph.ph = phi i32 [ 0, %167 ], [ 1, %207 ], [ 0, %vec.epilog.middle.block517 ], [ 0, %vector.ph509 ], [ 1, %vec.epilog.middle.block ], [ 0, %.lr.ph310 ], [ 0, %.lr.ph310.prol.loopexit ], [ 1, %.lr.ph306 ], [ 1, %.lr.ph306.prol.loopexit ]
  store i32 %.sink, ptr %5, align 4, !tbaa !9
  br label %.thread260

.thread260:                                       ; preds = %198, %.thread260.sink.split, %165
  %.1214.ph = phi i32 [ 8, %165 ], [ 1, %.thread260.sink.split ], [ 8, %198 ]
  %.2.ph = phi i32 [ undef, %165 ], [ %.2.ph.ph, %.thread260.sink.split ], [ undef, %198 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #3
  br label %302

234:                                              ; preds = %205
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #3
  br label %238

235:                                              ; preds = %159
  %236 = getelementptr inbounds i8, ptr %.2195314, i64 %.2207313.fr
  %237 = getelementptr inbounds i8, ptr %236, i64 -20
  %.pre340 = ptrtoint ptr %.2195314 to i64
  br label %238

238:                                              ; preds = %234, %235
  %.pre-phi = phi i64 [ %201, %234 ], [ %.pre340, %235 ]
  %.2228 = phi ptr [ %.2195314, %234 ], [ %237, %235 ]
  %.1225 = phi i32 [ %203, %234 ], [ -1, %235 ]
  store ptr %.2195314, ptr %124, align 8, !tbaa !42
  %239 = call i32 @LzmaDec_DecodeReal2(ptr noundef nonnull %0, i64 noundef %1, ptr noundef %.2228)
  %240 = load ptr, ptr %124, align 8, !tbaa !42
  %241 = ptrtoint ptr %240 to i64
  %242 = sub i64 %241, %.pre-phi
  %243 = icmp slt i32 %.1225, 0
  br i1 %243, label %244, label %246

244:                                              ; preds = %238
  %245 = icmp ugt i64 %242, %.2207313.fr
  br i1 %245, label %.thread281, label %248

246:                                              ; preds = %238
  %247 = zext nneg i32 %.1225 to i64
  %.not252 = icmp eq i64 %242, %247
  br i1 %.not252, label %248, label %.thread281

248:                                              ; preds = %246, %244
  %249 = load i64, ptr %3, align 8, !tbaa !5
  %250 = add i64 %249, %242
  store i64 %250, ptr %3, align 8, !tbaa !5
  %.not253 = icmp eq i32 %239, 0
  br i1 %.not253, label %.backedge, label %251

251:                                              ; preds = %248
  store i32 512, ptr %11, align 4, !tbaa !11
  br label %.thread273

.lr.ph300:                                        ; preds = %.lr.ph300.preheader534, %.lr.ph300
  %indvars.iv329 = phi i64 [ %indvars.iv.next330, %.lr.ph300 ], [ %indvars.iv329.ph, %.lr.ph300.preheader534 ]
  %indvars.iv327 = phi i64 [ %indvars.iv.next328, %.lr.ph300 ], [ %indvars.iv327.ph, %.lr.ph300.preheader534 ]
  %indvars.iv.next328 = add nuw nsw i64 %indvars.iv327, 1
  %252 = getelementptr inbounds i8, ptr %.2195314, i64 %indvars.iv327
  %253 = load i8, ptr %252, align 1, !tbaa !16
  %indvars.iv.next330 = add nuw nsw i64 %indvars.iv329, 1
  %254 = getelementptr inbounds [20 x i8], ptr %122, i64 0, i64 %indvars.iv329
  store i8 %253, ptr %254, align 1, !tbaa !16
  %255 = icmp ult i64 %indvars.iv329, 19
  %256 = icmp ugt i64 %.2207313.fr, %indvars.iv.next328
  %257 = select i1 %255, i1 %256, i1 false
  br i1 %257, label %.lr.ph300, label %._crit_edge.loopexit, !llvm.loop !43

._crit_edge.loopexit:                             ; preds = %.lr.ph300, %middle.block463
  %indvars.iv.next328.lcssa = phi i64 [ %n.vec468, %middle.block463 ], [ %indvars.iv.next328, %.lr.ph300 ]
  %indvars.iv.next330.lcssa = phi i64 [ %ind.end, %middle.block463 ], [ %indvars.iv.next330, %.lr.ph300 ]
  %.lcssa410 = phi i1 [ %158, %middle.block463 ], [ %255, %.lr.ph300 ]
  %258 = trunc nuw nsw i64 %indvars.iv.next330.lcssa to i32
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader
  %.0204.lcssa = phi i32 [ %141, %.preheader ], [ %258, %._crit_edge.loopexit ]
  %.lcssa289 = phi i1 [ %143, %.preheader ], [ %.lcssa410, %._crit_edge.loopexit ]
  %.lcssa = phi i64 [ 0, %.preheader ], [ %indvars.iv.next328.lcssa, %._crit_edge.loopexit ]
  %or.cond9 = or i1 %.not246, %.lcssa289
  br i1 %or.cond9, label %259, label %284

259:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #3
  %260 = zext i32 %.0204.lcssa to i64
  %261 = getelementptr inbounds i8, ptr %122, i64 %260
  store ptr %261, ptr %9, align 8, !tbaa !34
  %262 = call i32 @LzmaDec_TryDummy(ptr noundef nonnull %0, ptr noundef nonnull %122, ptr noundef nonnull %9)
  %263 = icmp eq i32 %262, 0
  br i1 %263, label %264, label %269

264:                                              ; preds = %259
  %265 = icmp ugt i32 %.0204.lcssa, 19
  br i1 %265, label %.thread267, label %266

266:                                              ; preds = %264
  store i32 %.0204.lcssa, ptr %121, align 4, !tbaa !15
  %267 = load i64, ptr %3, align 8, !tbaa !5
  %268 = add i64 %267, %.lcssa
  store i64 %268, ptr %3, align 8, !tbaa !5
  br label %.thread267.sink.split

269:                                              ; preds = %259
  %270 = load ptr, ptr %9, align 8, !tbaa !34
  %271 = ptrtoint ptr %270 to i64
  %272 = sub i64 %271, %123
  %273 = trunc i64 %272 to i32
  %274 = load i32, ptr %121, align 4, !tbaa !15
  %275 = icmp ugt i32 %274, %273
  br i1 %275, label %.thread267, label %276

276:                                              ; preds = %269
  %277 = icmp ne i32 %262, 2
  %or.cond11.not = and i1 %.not246, %277
  br i1 %or.cond11.not, label %278, label %283

278:                                              ; preds = %276
  %279 = sub i32 %273, %274
  %280 = zext i32 %279 to i64
  %281 = load i64, ptr %3, align 8, !tbaa !5
  %282 = add i64 %281, %280
  store i64 %282, ptr %3, align 8, !tbaa !5
  store i32 %273, ptr %121, align 4, !tbaa !15
  br label %.thread267.sink.split

.thread267.sink.split:                            ; preds = %278, %266
  %.sink407 = phi i32 [ 3, %266 ], [ 2, %278 ]
  %.6.ph.ph = phi i32 [ 0, %266 ], [ 1, %278 ]
  store i32 %.sink407, ptr %5, align 4, !tbaa !9
  br label %.thread267

.thread267:                                       ; preds = %269, %.thread267.sink.split, %264
  %.4217.ph = phi i32 [ 8, %264 ], [ 1, %.thread267.sink.split ], [ 8, %269 ]
  %.6.ph = phi i32 [ undef, %264 ], [ %.6.ph.ph, %.thread267.sink.split ], [ undef, %269 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #3
  br label %302

283:                                              ; preds = %276
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #3
  br label %284

284:                                              ; preds = %283, %._crit_edge
  %.1202 = phi i32 [ %273, %283 ], [ -1, %._crit_edge ]
  store ptr %122, ptr %124, align 8, !tbaa !42
  %285 = call i32 @LzmaDec_DecodeReal2(ptr noundef nonnull %0, i64 noundef %1, ptr noundef nonnull %122)
  %286 = load ptr, ptr %124, align 8, !tbaa !42
  %287 = ptrtoint ptr %286 to i64
  %288 = sub i64 %287, %123
  %289 = load i32, ptr %121, align 4, !tbaa !15
  %290 = icmp slt i32 %.1202, 0
  br i1 %290, label %291, label %295

291:                                              ; preds = %284
  %292 = icmp ugt i64 %288, 20
  %293 = zext i32 %289 to i64
  %294 = icmp ult i64 %288, %293
  %or.cond257 = select i1 %292, i1 true, i1 %294
  br i1 %or.cond257, label %.thread281, label %297

295:                                              ; preds = %284
  %296 = zext nneg i32 %.1202 to i64
  %.not249 = icmp eq i64 %288, %296
  br i1 %.not249, label %._crit_edge341, label %.thread281

._crit_edge341:                                   ; preds = %295
  %.pre342 = zext i32 %289 to i64
  br label %297

297:                                              ; preds = %._crit_edge341, %291
  %.pre-phi343 = phi i64 [ %.pre342, %._crit_edge341 ], [ %293, %291 ]
  %298 = sub nsw i64 %288, %.pre-phi343
  %299 = load i64, ptr %3, align 8, !tbaa !5
  %300 = add i64 %299, %298
  store i64 %300, ptr %3, align 8, !tbaa !5
  store i32 0, ptr %121, align 4, !tbaa !15
  %.not250 = icmp eq i32 %285, 0
  br i1 %.not250, label %.backedge, label %301

301:                                              ; preds = %297
  store i32 512, ptr %11, align 4, !tbaa !11
  br label %.thread273

302:                                              ; preds = %.thread267, %.thread260
  %.7220 = phi i32 [ %.1214.ph, %.thread260 ], [ %.4217.ph, %.thread267 ]
  %.10 = phi i32 [ %.2.ph, %.thread260 ], [ %.6.ph, %.thread267 ]
  %cond = icmp eq i32 %.7220, 8
  br i1 %cond, label %.thread281, label %.thread273

.backedge:                                        ; preds = %297, %248
  %.pn = phi i64 [ %298, %297 ], [ %242, %248 ]
  %.7212359 = sub i64 %.2207313.fr, %.pn
  %.7200360 = getelementptr inbounds i8, ptr %.2195314, i64 %.pn
  %303 = load i32, ptr %11, align 4, !tbaa !11
  %304 = icmp eq i32 %303, 274
  br i1 %304, label %._crit_edge318, label %129

.thread281:                                       ; preds = %295, %291, %246, %244, %302
  store i32 511, ptr %11, align 4, !tbaa !11
  br label %.thread273

.thread273:                                       ; preds = %302, %301, %251, %139, %.loopexit, %137, %._crit_edge318, %93, %.critedge.thread, %.thread281, %128, %.thread, %26
  %.11 = phi i32 [ %28, %26 ], [ 0, %.thread ], [ 0, %128 ], [ 11, %.thread281 ], [ 1, %.critedge.thread ], [ 1, %93 ], [ 1, %._crit_edge318 ], [ 1, %301 ], [ 1, %251 ], [ 1, %139 ], [ 0, %.loopexit ], [ 0, %137 ], [ %.10, %302 ]
  ret i32 %.11
}

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

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

; Function Attrs: nounwind uwtable
declare hidden void @LzmaDec_WriteRem(ptr noundef, i64 noundef) local_unnamed_addr #0

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

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

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

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

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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 92}
!12 = !{!"", !13, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !6, i64 32, !6, i64 40, !14, i64 48, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !7, i64 72, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !7, i64 104}
!13 = !{!"_CLzmaProps", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !10, i64 4}
!14 = !{!"any pointer", !7, i64 0}
!15 = !{!12, !10, i64 100}
!16 = !{!7, !7, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!12, !10, i64 60}
!20 = !{!12, !10, i64 68}
!21 = !{!12, !10, i64 64}
!22 = !{!12, !10, i64 56}
!23 = !{!12, !7, i64 0}
!24 = !{!12, !7, i64 1}
!25 = !{!12, !14, i64 8}
!26 = !{!27, !27, i64 0}
!27 = !{!"short", !7, i64 0}
!28 = distinct !{!28, !18, !29, !30}
!29 = !{!"llvm.loop.isvectorized", i32 1}
!30 = !{!"llvm.loop.unroll.runtime.disable"}
!31 = !{!12, !10, i64 88}
!32 = !{!12, !6, i64 40}
!33 = distinct !{!33, !18, !29, !30}
!34 = !{!14, !14, i64 0}
!35 = distinct !{!35, !18, !29, !30}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.unroll.disable"}
!38 = distinct !{!38, !18, !29}
!39 = distinct !{!39, !18, !29, !30}
!40 = distinct !{!40, !37}
!41 = distinct !{!41, !18, !29}
!42 = !{!12, !14, i64 48}
!43 = distinct !{!43, !18, !29}


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