; LLVM IR from mncoppola/rpef :: utilities_src/squashfs2.1/lzma/C/7zip/Compress/LZMA (LZMAEncoder)

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

%"class.NCompress::NLZMA::CState" = type { i8 }
%"class.NCompress::NLZMA::CEncoder" = type <{ %struct.ICompressCoder, %struct.ICompressSetOutStream, %struct.ICompressSetCoderProperties, %struct.ICompressWriteCoderProperties, %"class.NCompress::NLZMA::CBaseState", %class.CMyUnknownImp, [4096 x %"struct.NCompress::NLZMA::COptimal"], %class.CMyComPtr.5, %"class.NCompress::NRangeCoder::CEncoder", [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], [4 x %"class.NCompress::NRangeCoder::CBitTreeEncoder.7"], [114 x %"class.NCompress::NRangeCoder::CBitEncoder"], %"class.NCompress::NRangeCoder::CBitTreeEncoder.8", %"class.NCompress::NLZMA::NLength::CPriceTableEncoder", %"class.NCompress::NLZMA::NLength::CPriceTableEncoder", %"class.NCompress::NLZMA::CLiteralEncoder", [274 x i32], i8, i8, [2 x i8], i32, i32, i32, i32, i32, i8, [3 x i8], [4 x [64 x i32]], [4 x [128 x i32]], [16 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i8, [7 x i8], ptr, i32, i8, i8, [2 x i8] }>
%struct.ICompressCoder = type { %struct.IUnknown }
%struct.IUnknown = type { ptr }
%struct.ICompressSetOutStream = type { %struct.IUnknown }
%struct.ICompressSetCoderProperties = type { %struct.IUnknown }
%struct.ICompressWriteCoderProperties = type { %struct.IUnknown }
%"class.NCompress::NLZMA::CBaseState" = type { %"class.NCompress::NLZMA::CState", i8, [4 x i32] }
%class.CMyUnknownImp = type { i32 }
%"struct.NCompress::NLZMA::COptimal" = type { %"class.NCompress::NLZMA::CState", i8, i8, i32, i32, i32, i32, i32, [4 x i32] }
%class.CMyComPtr.5 = type { ptr }
%"class.NCompress::NRangeCoder::CEncoder" = type { i32, i8, i64, i32, [4 x i8], %class.COutBuffer }
%class.COutBuffer = type <{ ptr, i32, i32, i32, i32, %class.CMyComPtr.6, i64, ptr, i8, [7 x i8] }>
%class.CMyComPtr.6 = type { ptr }
%"class.NCompress::NRangeCoder::CBitEncoder" = type { %"class.NCompress::NRangeCoder::CBitModel" }
%"class.NCompress::NRangeCoder::CBitModel" = type { i32 }
%"class.NCompress::NRangeCoder::CBitTreeEncoder.7" = type { [64 x %"class.NCompress::NRangeCoder::CBitEncoder"] }
%"class.NCompress::NRangeCoder::CBitTreeEncoder.8" = type { [16 x %"class.NCompress::NRangeCoder::CBitEncoder"] }
%"class.NCompress::NLZMA::NLength::CPriceTableEncoder" = type { %"class.NCompress::NLZMA::NLength::CEncoder", [272 x [16 x i32]], i32, [16 x i32] }
%"class.NCompress::NLZMA::NLength::CEncoder" = type { %"class.NCompress::NRangeCoder::CBitEncoder", %"class.NCompress::NRangeCoder::CBitEncoder", [16 x %"class.NCompress::NRangeCoder::CBitTreeEncoder"], [16 x %"class.NCompress::NRangeCoder::CBitTreeEncoder"], %"class.NCompress::NRangeCoder::CBitTreeEncoder.4" }
%"class.NCompress::NRangeCoder::CBitTreeEncoder" = type { [8 x %"class.NCompress::NRangeCoder::CBitEncoder"] }
%"class.NCompress::NRangeCoder::CBitTreeEncoder.4" = type { [256 x %"class.NCompress::NRangeCoder::CBitEncoder"] }
%"class.NCompress::NLZMA::CLiteralEncoder" = type <{ ptr, i32, i32, i32, [4 x i8] }>

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z5MyMinIjET_S0_S0_(i32 noundef, i32 noundef) #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice0Ev(ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN9NCompress5NLZMA8CEncoder7MovePosEj(ptr noundef nonnull align 8 dereferenceable(210678), i32 noundef) #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN9NCompress5NLZMA8CEncoder8BackwardERjj(ptr noundef nonnull align 8 dereferenceable(210678), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9NCompress5NLZMA8COptimal10MakeAsCharEv(ptr noundef nonnull align 4 dereferenceable(40)) #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN9NCompress5NLZMA8CEncoder10GetOptimumEjRjS2_(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef %1, ptr noundef nonnull align 4 dereferenceable(4) %2, ptr noundef nonnull align 4 dereferenceable(4) %3) #4 align 2 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca [4 x i32], align 16
  %15 = alloca [4 x i32], align 16
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i8, align 1
  %19 = alloca i8, align 1
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca %"class.NCompress::NLZMA::CState", align 1
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca %"class.NCompress::NLZMA::CState", align 1
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca i32, align 4
  %36 = alloca %"class.NCompress::NLZMA::CState", align 1
  %37 = alloca i32, align 4
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca ptr, align 8
  %46 = alloca i8, align 1
  %47 = alloca i8, align 1
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca ptr, align 8
  %51 = alloca i8, align 1
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca %"class.NCompress::NLZMA::CState", align 1
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca %"class.NCompress::NLZMA::CState", align 1
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca %"class.NCompress::NLZMA::CState", align 1
  %66 = alloca ptr, align 8
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca %"class.NCompress::NLZMA::CState", align 1
  %73 = alloca ptr, align 8
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca %"class.NCompress::NLZMA::CState", align 1
  %77 = alloca i32, align 4
  %78 = alloca i32, align 4
  %79 = alloca %"class.NCompress::NLZMA::CState", align 1
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  %84 = alloca %"class.NCompress::NLZMA::CState", align 1
  %85 = alloca ptr, align 8
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca ptr, align 8
  %91 = alloca i32, align 4
  %92 = alloca i32, align 4
  %93 = alloca i32, align 4
  %94 = alloca %"class.NCompress::NLZMA::CState", align 1
  %95 = alloca i32, align 4
  %96 = alloca i32, align 4
  %97 = alloca i32, align 4
  %98 = alloca i32, align 4
  %99 = alloca i32, align 4
  %100 = alloca i32, align 4
  %101 = alloca %"class.NCompress::NLZMA::CState", align 1
  %102 = alloca ptr, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store i32 %1, ptr %7, align 4, !tbaa !9
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  %103 = load ptr, ptr %6, align 8
  %104 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 28
  %105 = load i32, ptr %104, align 8, !tbaa !11
  %106 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 29
  %107 = load i32, ptr %106, align 4, !tbaa !34
  %108 = icmp ne i32 %105, %107
  br i1 %108, label %109, label %130

109:                                              ; preds = %4
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  %110 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %111 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 29
  %112 = load i32, ptr %111, align 4, !tbaa !34
  %113 = zext i32 %112 to i64
  %114 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %110, i64 0, i64 %113
  store ptr %114, ptr %10, align 8, !tbaa !5
  %115 = load ptr, ptr %10, align 8, !tbaa !5
  %116 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %115, i32 0, i32 6
  %117 = load i32, ptr %116, align 4, !tbaa !35
  %118 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 29
  %119 = load i32, ptr %118, align 4, !tbaa !34
  %120 = sub i32 %117, %119
  %121 = load ptr, ptr %9, align 8, !tbaa !5
  store i32 %120, ptr %121, align 4, !tbaa !9
  %122 = load ptr, ptr %10, align 8, !tbaa !5
  %123 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %122, i32 0, i32 7
  %124 = load i32, ptr %123, align 4, !tbaa !37
  %125 = load ptr, ptr %8, align 8, !tbaa !5
  store i32 %124, ptr %125, align 4, !tbaa !9
  %126 = load ptr, ptr %10, align 8, !tbaa !5
  %127 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %126, i32 0, i32 6
  %128 = load i32, ptr %127, align 4, !tbaa !35
  %129 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 29
  store i32 %128, ptr %129, align 4, !tbaa !34
  store i32 0, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  br label %1586

130:                                              ; preds = %4
  %131 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 29
  store i32 0, ptr %131, align 4, !tbaa !34
  %132 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 28
  store i32 0, ptr %132, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  %133 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 30
  %134 = load i8, ptr %133, align 8, !tbaa !38, !range !39, !noundef !40
  %135 = trunc i8 %134 to i1
  br i1 %135, label %146, label %136

136:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  %137 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder18ReadMatchDistancesERj(ptr noundef nonnull align 8 dereferenceable(210678) %103, ptr noundef nonnull align 4 dereferenceable(4) %11)
  store i32 %137, ptr %12, align 4, !tbaa !9
  %138 = load i32, ptr %12, align 4, !tbaa !9
  %139 = icmp ne i32 %138, 0
  br i1 %139, label %140, label %142

140:                                              ; preds = %136
  %141 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %141, ptr %5, align 4
  store i32 1, ptr %13, align 4
  br label %143

142:                                              ; preds = %136
  store i32 0, ptr %13, align 4
  br label %143

143:                                              ; preds = %142, %140
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  %144 = load i32, ptr %13, align 4
  switch i32 %144, label %1585 [
    i32 0, label %145
  ]

145:                                              ; preds = %143
  br label %150

146:                                              ; preds = %130
  %147 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 26
  %148 = load i32, ptr %147, align 8, !tbaa !41
  store i32 %148, ptr %11, align 4, !tbaa !9
  %149 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 30
  store i8 0, ptr %149, align 8, !tbaa !38
  br label %150

150:                                              ; preds = %146, %145
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  store i32 0, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %151

151:                                              ; preds = %192, %150
  %152 = load i32, ptr %17, align 4, !tbaa !9
  %153 = icmp ult i32 %152, 4
  br i1 %153, label %154, label %195

154:                                              ; preds = %151
  %155 = getelementptr inbounds i8, ptr %103, i64 32
  %156 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %155, i32 0, i32 2
  %157 = load i32, ptr %17, align 4, !tbaa !9
  %158 = zext i32 %157 to i64
  %159 = getelementptr inbounds [4 x i32], ptr %156, i64 0, i64 %158
  %160 = load i32, ptr %159, align 4, !tbaa !9
  %161 = load i32, ptr %17, align 4, !tbaa !9
  %162 = zext i32 %161 to i64
  %163 = getelementptr inbounds [4 x i32], ptr %14, i64 0, i64 %162
  store i32 %160, ptr %163, align 4, !tbaa !9
  %164 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 7
  %165 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %164)
  %166 = load i32, ptr %17, align 4, !tbaa !9
  %167 = zext i32 %166 to i64
  %168 = getelementptr inbounds [4 x i32], ptr %14, i64 0, i64 %167
  %169 = load i32, ptr %168, align 4, !tbaa !9
  %170 = load ptr, ptr %165, align 8, !tbaa !42
  %171 = getelementptr inbounds ptr, ptr %170, i64 7
  %172 = load ptr, ptr %171, align 8
  %173 = call noundef i32 %172(ptr noundef nonnull align 8 dereferenceable(8) %165, i32 noundef -1, i32 noundef %169, i32 noundef 273)
  %174 = load i32, ptr %17, align 4, !tbaa !9
  %175 = zext i32 %174 to i64
  %176 = getelementptr inbounds [4 x i32], ptr %15, i64 0, i64 %175
  store i32 %173, ptr %176, align 4, !tbaa !9
  %177 = load i32, ptr %17, align 4, !tbaa !9
  %178 = icmp eq i32 %177, 0
  br i1 %178, label %189, label %179

179:                                              ; preds = %154
  %180 = load i32, ptr %17, align 4, !tbaa !9
  %181 = zext i32 %180 to i64
  %182 = getelementptr inbounds [4 x i32], ptr %15, i64 0, i64 %181
  %183 = load i32, ptr %182, align 4, !tbaa !9
  %184 = load i32, ptr %16, align 4, !tbaa !9
  %185 = zext i32 %184 to i64
  %186 = getelementptr inbounds [4 x i32], ptr %15, i64 0, i64 %185
  %187 = load i32, ptr %186, align 4, !tbaa !9
  %188 = icmp ugt i32 %183, %187
  br i1 %188, label %189, label %191

189:                                              ; preds = %179, %154
  %190 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %190, ptr %16, align 4, !tbaa !9
  br label %191

191:                                              ; preds = %189, %179
  br label %192

192:                                              ; preds = %191
  %193 = load i32, ptr %17, align 4, !tbaa !9
  %194 = add i32 %193, 1
  store i32 %194, ptr %17, align 4, !tbaa !9
  br label %151, !llvm.loop !44

195:                                              ; preds = %151
  %196 = load i32, ptr %16, align 4, !tbaa !9
  %197 = zext i32 %196 to i64
  %198 = getelementptr inbounds [4 x i32], ptr %15, i64 0, i64 %197
  %199 = load i32, ptr %198, align 4, !tbaa !9
  %200 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 25
  %201 = load i32, ptr %200, align 4, !tbaa !46
  %202 = icmp uge i32 %199, %201
  br i1 %202, label %203, label %215

203:                                              ; preds = %195
  %204 = load i32, ptr %16, align 4, !tbaa !9
  %205 = load ptr, ptr %8, align 8, !tbaa !5
  store i32 %204, ptr %205, align 4, !tbaa !9
  %206 = load i32, ptr %16, align 4, !tbaa !9
  %207 = zext i32 %206 to i64
  %208 = getelementptr inbounds [4 x i32], ptr %15, i64 0, i64 %207
  %209 = load i32, ptr %208, align 4, !tbaa !9
  %210 = load ptr, ptr %9, align 8, !tbaa !5
  store i32 %209, ptr %210, align 4, !tbaa !9
  %211 = load ptr, ptr %9, align 8, !tbaa !5
  %212 = load i32, ptr %211, align 4, !tbaa !9
  %213 = sub i32 %212, 1
  %214 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder7MovePosEj(ptr noundef nonnull align 8 dereferenceable(210678) %103, i32 noundef %213)
  store i32 %214, ptr %5, align 4
  store i32 1, ptr %13, align 4
  br label %1584

215:                                              ; preds = %195
  %216 = load i32, ptr %11, align 4, !tbaa !9
  %217 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 25
  %218 = load i32, ptr %217, align 4, !tbaa !46
  %219 = icmp uge i32 %216, %218
  br i1 %219, label %220, label %234

220:                                              ; preds = %215
  %221 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 21
  %222 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 25
  %223 = load i32, ptr %222, align 4, !tbaa !46
  %224 = zext i32 %223 to i64
  %225 = getelementptr inbounds [274 x i32], ptr %221, i64 0, i64 %224
  %226 = load i32, ptr %225, align 4, !tbaa !9
  %227 = add i32 %226, 4
  %228 = load ptr, ptr %8, align 8, !tbaa !5
  store i32 %227, ptr %228, align 4, !tbaa !9
  %229 = load i32, ptr %11, align 4, !tbaa !9
  %230 = load ptr, ptr %9, align 8, !tbaa !5
  store i32 %229, ptr %230, align 4, !tbaa !9
  %231 = load i32, ptr %11, align 4, !tbaa !9
  %232 = sub i32 %231, 1
  %233 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder7MovePosEj(ptr noundef nonnull align 8 dereferenceable(210678) %103, i32 noundef %232)
  store i32 %233, ptr %5, align 4
  store i32 1, ptr %13, align 4
  br label %1584

234:                                              ; preds = %215
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #5
  %235 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 7
  %236 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %235)
  %237 = load ptr, ptr %236, align 8, !tbaa !42
  %238 = getelementptr inbounds ptr, ptr %237, i64 6
  %239 = load ptr, ptr %238, align 8
  %240 = call noundef zeroext i8 %239(ptr noundef nonnull align 8 dereferenceable(8) %236, i32 noundef -1)
  store i8 %240, ptr %18, align 1, !tbaa !47
  %241 = getelementptr inbounds i8, ptr %103, i64 32
  %242 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %241, i32 0, i32 0
  %243 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %244 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %243, i64 0, i64 0
  %245 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %244, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %245, ptr align 8 %242, i64 1, i1 false), !tbaa.struct !48
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #5
  %246 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 7
  %247 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %246)
  %248 = getelementptr inbounds i8, ptr %103, i64 32
  %249 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %248, i32 0, i32 2
  %250 = getelementptr inbounds [4 x i32], ptr %249, i64 0, i64 0
  %251 = load i32, ptr %250, align 4, !tbaa !9
  %252 = sub i32 0, %251
  %253 = sub i32 %252, 1
  %254 = sub i32 %253, 1
  %255 = load ptr, ptr %247, align 8, !tbaa !42
  %256 = getelementptr inbounds ptr, ptr %255, i64 6
  %257 = load ptr, ptr %256, align 8
  %258 = call noundef zeroext i8 %257(ptr noundef nonnull align 8 dereferenceable(8) %247, i32 noundef %254)
  store i8 %258, ptr %19, align 1, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %259 = load i32, ptr %7, align 4, !tbaa !9
  %260 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 38
  %261 = load i32, ptr %260, align 8, !tbaa !49
  %262 = and i32 %259, %261
  store i32 %262, ptr %20, align 4, !tbaa !9
  %263 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 9
  %264 = getelementptr inbounds i8, ptr %103, i64 32
  %265 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %264, i32 0, i32 0
  %266 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %265, i32 0, i32 0
  %267 = load i8, ptr %266, align 8, !tbaa !50
  %268 = zext i8 %267 to i64
  %269 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %263, i64 0, i64 %268
  %270 = load i32, ptr %20, align 4, !tbaa !9
  %271 = zext i32 %270 to i64
  %272 = getelementptr inbounds [16 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %269, i64 0, i64 %271
  %273 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice0Ev(ptr noundef nonnull align 4 dereferenceable(4) %272)
  %274 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 20
  %275 = load i32, ptr %7, align 4, !tbaa !9
  %276 = getelementptr inbounds i8, ptr %103, i64 32
  %277 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %276, i32 0, i32 1
  %278 = load i8, ptr %277, align 1, !tbaa !51
  %279 = getelementptr inbounds i8, ptr %103, i64 32
  %280 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %279, i32 0, i32 0
  %281 = call noundef zeroext i1 @_ZNK9NCompress5NLZMA6CState11IsCharStateEv(ptr noundef nonnull align 1 dereferenceable(1) %280)
  %282 = xor i1 %281, true
  %283 = load i8, ptr %19, align 1, !tbaa !47
  %284 = load i8, ptr %18, align 1, !tbaa !47
  %285 = call noundef i32 @_ZNK9NCompress5NLZMA15CLiteralEncoder8GetPriceEjhbhh(ptr noundef nonnull align 8 dereferenceable(20) %274, i32 noundef %275, i8 noundef zeroext %278, i1 noundef zeroext %282, i8 noundef zeroext %283, i8 noundef zeroext %284)
  %286 = add i32 %273, %285
  %287 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %288 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %287, i64 0, i64 1
  %289 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %288, i32 0, i32 5
  store i32 %286, ptr %289, align 4, !tbaa !52
  %290 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %291 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %290, i64 0, i64 1
  call void @_ZN9NCompress5NLZMA8COptimal10MakeAsCharEv(ptr noundef nonnull align 4 dereferenceable(40) %291)
  %292 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %293 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %292, i64 0, i64 1
  %294 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %293, i32 0, i32 6
  store i32 0, ptr %294, align 8, !tbaa !35
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %295

295:                                              ; preds = %309, %234
  %296 = load i32, ptr %17, align 4, !tbaa !9
  %297 = icmp ult i32 %296, 4
  br i1 %297, label %298, label %312

298:                                              ; preds = %295
  %299 = load i32, ptr %17, align 4, !tbaa !9
  %300 = zext i32 %299 to i64
  %301 = getelementptr inbounds [4 x i32], ptr %14, i64 0, i64 %300
  %302 = load i32, ptr %301, align 4, !tbaa !9
  %303 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %304 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %303, i64 0, i64 0
  %305 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %304, i32 0, i32 8
  %306 = load i32, ptr %17, align 4, !tbaa !9
  %307 = zext i32 %306 to i64
  %308 = getelementptr inbounds [4 x i32], ptr %305, i64 0, i64 %307
  store i32 %302, ptr %308, align 4, !tbaa !9
  br label %309

309:                                              ; preds = %298
  %310 = load i32, ptr %17, align 4, !tbaa !9
  %311 = add i32 %310, 1
  store i32 %311, ptr %17, align 4, !tbaa !9
  br label %295, !llvm.loop !53

312:                                              ; preds = %295
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  %313 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 9
  %314 = getelementptr inbounds i8, ptr %103, i64 32
  %315 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %314, i32 0, i32 0
  %316 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %315, i32 0, i32 0
  %317 = load i8, ptr %316, align 8, !tbaa !50
  %318 = zext i8 %317 to i64
  %319 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %313, i64 0, i64 %318
  %320 = load i32, ptr %20, align 4, !tbaa !9
  %321 = zext i32 %320 to i64
  %322 = getelementptr inbounds [16 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %319, i64 0, i64 %321
  %323 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %322)
  store i32 %323, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %324 = load i32, ptr %21, align 4, !tbaa !9
  %325 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 10
  %326 = getelementptr inbounds i8, ptr %103, i64 32
  %327 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %326, i32 0, i32 0
  %328 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %327, i32 0, i32 0
  %329 = load i8, ptr %328, align 8, !tbaa !50
  %330 = zext i8 %329 to i64
  %331 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %325, i64 0, i64 %330
  %332 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %331)
  %333 = add i32 %324, %332
  store i32 %333, ptr %22, align 4, !tbaa !9
  %334 = load i8, ptr %19, align 1, !tbaa !47
  %335 = zext i8 %334 to i32
  %336 = load i8, ptr %18, align 1, !tbaa !47
  %337 = zext i8 %336 to i32
  %338 = icmp eq i32 %335, %337
  br i1 %338, label %339, label %362

339:                                              ; preds = %312
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  %340 = load i32, ptr %22, align 4, !tbaa !9
  %341 = getelementptr inbounds i8, ptr %103, i64 32
  %342 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %341, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %24, ptr align 8 %342, i64 1, i1 false), !tbaa.struct !48
  %343 = load i32, ptr %20, align 4, !tbaa !9
  %344 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %24, i32 0, i32 0
  %345 = load i8, ptr %344, align 1
  %346 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder15GetRepLen1PriceENS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %103, i8 %345, i32 noundef %343)
  %347 = add i32 %340, %346
  store i32 %347, ptr %23, align 4, !tbaa !9
  %348 = load i32, ptr %23, align 4, !tbaa !9
  %349 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %350 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %349, i64 0, i64 1
  %351 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %350, i32 0, i32 5
  %352 = load i32, ptr %351, align 4, !tbaa !52
  %353 = icmp ult i32 %348, %352
  br i1 %353, label %354, label %361

354:                                              ; preds = %339
  %355 = load i32, ptr %23, align 4, !tbaa !9
  %356 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %357 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %356, i64 0, i64 1
  %358 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %357, i32 0, i32 5
  store i32 %355, ptr %358, align 4, !tbaa !52
  %359 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %360 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %359, i64 0, i64 1
  call void @_ZN9NCompress5NLZMA8COptimal14MakeAsShortRepEv(ptr noundef nonnull align 4 dereferenceable(40) %360)
  br label %361

361:                                              ; preds = %354, %339
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  br label %362

362:                                              ; preds = %361, %312
  %363 = load i32, ptr %11, align 4, !tbaa !9
  %364 = icmp ult i32 %363, 2
  br i1 %364, label %365, label %372

365:                                              ; preds = %362
  %366 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %367 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %366, i64 0, i64 1
  %368 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %367, i32 0, i32 7
  %369 = load i32, ptr %368, align 4, !tbaa !37
  %370 = load ptr, ptr %8, align 8, !tbaa !5
  store i32 %369, ptr %370, align 4, !tbaa !9
  %371 = load ptr, ptr %9, align 8, !tbaa !5
  store i32 1, ptr %371, align 4, !tbaa !9
  store i32 0, ptr %5, align 4
  store i32 1, ptr %13, align 4
  br label %1583

372:                                              ; preds = %362
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  %373 = load i32, ptr %21, align 4, !tbaa !9
  %374 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 10
  %375 = getelementptr inbounds i8, ptr %103, i64 32
  %376 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %375, i32 0, i32 0
  %377 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %376, i32 0, i32 0
  %378 = load i8, ptr %377, align 8, !tbaa !50
  %379 = zext i8 %378 to i64
  %380 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %374, i64 0, i64 %379
  %381 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice0Ev(ptr noundef nonnull align 4 dereferenceable(4) %380)
  %382 = add i32 %373, %381
  store i32 %382, ptr %25, align 4, !tbaa !9
  %383 = load i32, ptr %11, align 4, !tbaa !9
  %384 = load i32, ptr %16, align 4, !tbaa !9
  %385 = zext i32 %384 to i64
  %386 = getelementptr inbounds [4 x i32], ptr %15, i64 0, i64 %385
  %387 = load i32, ptr %386, align 4, !tbaa !9
  %388 = icmp ule i32 %383, %387
  br i1 %388, label %389, label %390

389:                                              ; preds = %372
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %390

390:                                              ; preds = %389, %372
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  store i32 2, ptr %26, align 4, !tbaa !9
  br label %391

391:                                              ; preds = %432, %390
  %392 = load i32, ptr %26, align 4, !tbaa !9
  %393 = load i32, ptr %11, align 4, !tbaa !9
  %394 = icmp ule i32 %392, %393
  br i1 %394, label %395, label %435

395:                                              ; preds = %391
  %396 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %397 = load i32, ptr %26, align 4, !tbaa !9
  %398 = zext i32 %397 to i64
  %399 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %396, i64 0, i64 %398
  %400 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %399, i32 0, i32 6
  store i32 0, ptr %400, align 8, !tbaa !35
  %401 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 21
  %402 = load i32, ptr %26, align 4, !tbaa !9
  %403 = zext i32 %402 to i64
  %404 = getelementptr inbounds [274 x i32], ptr %401, i64 0, i64 %403
  %405 = load i32, ptr %404, align 4, !tbaa !9
  %406 = add i32 %405, 4
  %407 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %408 = load i32, ptr %26, align 4, !tbaa !9
  %409 = zext i32 %408 to i64
  %410 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %407, i64 0, i64 %409
  %411 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %410, i32 0, i32 7
  store i32 %406, ptr %411, align 4, !tbaa !37
  %412 = load i32, ptr %25, align 4, !tbaa !9
  %413 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 21
  %414 = load i32, ptr %26, align 4, !tbaa !9
  %415 = zext i32 %414 to i64
  %416 = getelementptr inbounds [274 x i32], ptr %413, i64 0, i64 %415
  %417 = load i32, ptr %416, align 4, !tbaa !9
  %418 = load i32, ptr %26, align 4, !tbaa !9
  %419 = load i32, ptr %20, align 4, !tbaa !9
  %420 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder14GetPosLenPriceEjjj(ptr noundef nonnull align 8 dereferenceable(210678) %103, i32 noundef %417, i32 noundef %418, i32 noundef %419)
  %421 = add i32 %412, %420
  %422 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %423 = load i32, ptr %26, align 4, !tbaa !9
  %424 = zext i32 %423 to i64
  %425 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %422, i64 0, i64 %424
  %426 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %425, i32 0, i32 5
  store i32 %421, ptr %426, align 4, !tbaa !52
  %427 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %428 = load i32, ptr %26, align 4, !tbaa !9
  %429 = zext i32 %428 to i64
  %430 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %427, i64 0, i64 %429
  %431 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %430, i32 0, i32 1
  store i8 0, ptr %431, align 1, !tbaa !54
  br label %432

432:                                              ; preds = %395
  %433 = load i32, ptr %26, align 4, !tbaa !9
  %434 = add i32 %433, 1
  store i32 %434, ptr %26, align 4, !tbaa !9
  br label %391, !llvm.loop !55

435:                                              ; preds = %391
  %436 = load i32, ptr %11, align 4, !tbaa !9
  %437 = load i32, ptr %16, align 4, !tbaa !9
  %438 = zext i32 %437 to i64
  %439 = getelementptr inbounds [4 x i32], ptr %15, i64 0, i64 %438
  %440 = load i32, ptr %439, align 4, !tbaa !9
  %441 = icmp ult i32 %436, %440
  br i1 %441, label %442, label %447

442:                                              ; preds = %435
  %443 = load i32, ptr %16, align 4, !tbaa !9
  %444 = zext i32 %443 to i64
  %445 = getelementptr inbounds [4 x i32], ptr %15, i64 0, i64 %444
  %446 = load i32, ptr %445, align 4, !tbaa !9
  store i32 %446, ptr %11, align 4, !tbaa !9
  br label %447

447:                                              ; preds = %442, %435
  br label %448

448:                                              ; preds = %458, %447
  %449 = load i32, ptr %26, align 4, !tbaa !9
  %450 = load i32, ptr %11, align 4, !tbaa !9
  %451 = icmp ule i32 %449, %450
  br i1 %451, label %452, label %461

452:                                              ; preds = %448
  %453 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %454 = load i32, ptr %26, align 4, !tbaa !9
  %455 = zext i32 %454 to i64
  %456 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %453, i64 0, i64 %455
  %457 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %456, i32 0, i32 5
  store i32 268435455, ptr %457, align 4, !tbaa !52
  br label %458

458:                                              ; preds = %452
  %459 = load i32, ptr %26, align 4, !tbaa !9
  %460 = add i32 %459, 1
  store i32 %460, ptr %26, align 4, !tbaa !9
  br label %448, !llvm.loop !56

461:                                              ; preds = %448
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %462

462:                                              ; preds = %511, %461
  %463 = load i32, ptr %17, align 4, !tbaa !9
  %464 = icmp ult i32 %463, 4
  br i1 %464, label %465, label %514

465:                                              ; preds = %462
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  %466 = load i32, ptr %17, align 4, !tbaa !9
  %467 = zext i32 %466 to i64
  %468 = getelementptr inbounds [4 x i32], ptr %15, i64 0, i64 %467
  %469 = load i32, ptr %468, align 4, !tbaa !9
  store i32 %469, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  store i32 2, ptr %28, align 4, !tbaa !9
  br label %470

470:                                              ; preds = %507, %465
  %471 = load i32, ptr %28, align 4, !tbaa !9
  %472 = load i32, ptr %27, align 4, !tbaa !9
  %473 = icmp ule i32 %471, %472
  br i1 %473, label %475, label %474

474:                                              ; preds = %470
  store i32 17, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  br label %510

475:                                              ; preds = %470
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  %476 = load i32, ptr %22, align 4, !tbaa !9
  %477 = load i32, ptr %17, align 4, !tbaa !9
  %478 = load i32, ptr %28, align 4, !tbaa !9
  %479 = getelementptr inbounds i8, ptr %103, i64 32
  %480 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %479, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %30, ptr align 8 %480, i64 1, i1 false), !tbaa.struct !48
  %481 = load i32, ptr %20, align 4, !tbaa !9
  %482 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %30, i32 0, i32 0
  %483 = load i8, ptr %482, align 1
  %484 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %103, i32 noundef %477, i32 noundef %478, i8 %483, i32 noundef %481)
  %485 = add i32 %476, %484
  store i32 %485, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %486 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %487 = load i32, ptr %28, align 4, !tbaa !9
  %488 = zext i32 %487 to i64
  %489 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %486, i64 0, i64 %488
  store ptr %489, ptr %31, align 8, !tbaa !5
  %490 = load i32, ptr %29, align 4, !tbaa !9
  %491 = load ptr, ptr %31, align 8, !tbaa !5
  %492 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %491, i32 0, i32 5
  %493 = load i32, ptr %492, align 4, !tbaa !52
  %494 = icmp ult i32 %490, %493
  br i1 %494, label %495, label %506

495:                                              ; preds = %475
  %496 = load i32, ptr %29, align 4, !tbaa !9
  %497 = load ptr, ptr %31, align 8, !tbaa !5
  %498 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %497, i32 0, i32 5
  store i32 %496, ptr %498, align 4, !tbaa !52
  %499 = load ptr, ptr %31, align 8, !tbaa !5
  %500 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %499, i32 0, i32 6
  store i32 0, ptr %500, align 4, !tbaa !35
  %501 = load i32, ptr %17, align 4, !tbaa !9
  %502 = load ptr, ptr %31, align 8, !tbaa !5
  %503 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %502, i32 0, i32 7
  store i32 %501, ptr %503, align 4, !tbaa !37
  %504 = load ptr, ptr %31, align 8, !tbaa !5
  %505 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %504, i32 0, i32 1
  store i8 0, ptr %505, align 1, !tbaa !54
  br label %506

506:                                              ; preds = %495, %475
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  br label %507

507:                                              ; preds = %506
  %508 = load i32, ptr %28, align 4, !tbaa !9
  %509 = add i32 %508, 1
  store i32 %509, ptr %28, align 4, !tbaa !9
  br label %470, !llvm.loop !57

510:                                              ; preds = %474
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  br label %511

511:                                              ; preds = %510
  %512 = load i32, ptr %17, align 4, !tbaa !9
  %513 = add i32 %512, 1
  store i32 %513, ptr %17, align 4, !tbaa !9
  br label %462, !llvm.loop !58

514:                                              ; preds = %462
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  store i32 0, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %515 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %515, ptr %33, align 4, !tbaa !9
  br label %516

516:                                              ; preds = %1581, %1579, %514
  br label %517

517:                                              ; preds = %516
  %518 = load i32, ptr %32, align 4, !tbaa !9
  %519 = add i32 %518, 1
  store i32 %519, ptr %32, align 4, !tbaa !9
  %520 = load i32, ptr %32, align 4, !tbaa !9
  %521 = load i32, ptr %33, align 4, !tbaa !9
  %522 = icmp eq i32 %520, %521
  br i1 %522, label %523, label %528

523:                                              ; preds = %517
  %524 = load ptr, ptr %8, align 8, !tbaa !5
  %525 = load i32, ptr %32, align 4, !tbaa !9
  %526 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder8BackwardERjj(ptr noundef nonnull align 8 dereferenceable(210678) %103, ptr noundef nonnull align 4 dereferenceable(4) %524, i32 noundef %525)
  %527 = load ptr, ptr %9, align 8, !tbaa !5
  store i32 %526, ptr %527, align 4, !tbaa !9
  store i32 0, ptr %5, align 4
  store i32 1, ptr %13, align 4
  br label %1582

528:                                              ; preds = %517
  %529 = load i32, ptr %7, align 4, !tbaa !9
  %530 = add i32 %529, 1
  store i32 %530, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %531 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %532 = load i32, ptr %32, align 4, !tbaa !9
  %533 = zext i32 %532 to i64
  %534 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %531, i64 0, i64 %533
  store ptr %534, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %535 = load ptr, ptr %34, align 8, !tbaa !5
  %536 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %535, i32 0, i32 6
  %537 = load i32, ptr %536, align 4, !tbaa !35
  store i32 %537, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #5
  %538 = load ptr, ptr %34, align 8, !tbaa !5
  %539 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %538, i32 0, i32 1
  %540 = load i8, ptr %539, align 1, !tbaa !54, !range !39, !noundef !40
  %541 = trunc i8 %540 to i1
  br i1 %541, label %542, label %571

542:                                              ; preds = %528
  %543 = load i32, ptr %35, align 4, !tbaa !9
  %544 = add i32 %543, -1
  store i32 %544, ptr %35, align 4, !tbaa !9
  %545 = load ptr, ptr %34, align 8, !tbaa !5
  %546 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %545, i32 0, i32 2
  %547 = load i8, ptr %546, align 2, !tbaa !59, !range !39, !noundef !40
  %548 = trunc i8 %547 to i1
  br i1 %548, label %549, label %564

549:                                              ; preds = %542
  %550 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %551 = load ptr, ptr %34, align 8, !tbaa !5
  %552 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %551, i32 0, i32 3
  %553 = load i32, ptr %552, align 4, !tbaa !60
  %554 = zext i32 %553 to i64
  %555 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %550, i64 0, i64 %554
  %556 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %555, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %36, ptr align 8 %556, i64 1, i1 false), !tbaa.struct !48
  %557 = load ptr, ptr %34, align 8, !tbaa !5
  %558 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %557, i32 0, i32 4
  %559 = load i32, ptr %558, align 4, !tbaa !61
  %560 = icmp ult i32 %559, 4
  br i1 %560, label %561, label %562

561:                                              ; preds = %549
  call void @_ZN9NCompress5NLZMA6CState9UpdateRepEv(ptr noundef nonnull align 1 dereferenceable(1) %36)
  br label %563

562:                                              ; preds = %549
  call void @_ZN9NCompress5NLZMA6CState11UpdateMatchEv(ptr noundef nonnull align 1 dereferenceable(1) %36)
  br label %563

563:                                              ; preds = %562, %561
  br label %570

564:                                              ; preds = %542
  %565 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %566 = load i32, ptr %35, align 4, !tbaa !9
  %567 = zext i32 %566 to i64
  %568 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %565, i64 0, i64 %567
  %569 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %568, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %36, ptr align 8 %569, i64 1, i1 false), !tbaa.struct !48
  br label %570

570:                                              ; preds = %564, %563
  call void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1) %36)
  br label %577

571:                                              ; preds = %528
  %572 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %573 = load i32, ptr %35, align 4, !tbaa !9
  %574 = zext i32 %573 to i64
  %575 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %572, i64 0, i64 %574
  %576 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %575, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %36, ptr align 8 %576, i64 1, i1 false), !tbaa.struct !48
  br label %577

577:                                              ; preds = %571, %570
  %578 = load i32, ptr %35, align 4, !tbaa !9
  %579 = load i32, ptr %32, align 4, !tbaa !9
  %580 = sub i32 %579, 1
  %581 = icmp eq i32 %578, %580
  br i1 %581, label %582, label %588

582:                                              ; preds = %577
  %583 = load ptr, ptr %34, align 8, !tbaa !5
  %584 = call noundef zeroext i1 @_ZN9NCompress5NLZMA8COptimal10IsShortRepEv(ptr noundef nonnull align 4 dereferenceable(40) %583)
  br i1 %584, label %585, label %586

585:                                              ; preds = %582
  call void @_ZN9NCompress5NLZMA6CState14UpdateShortRepEv(ptr noundef nonnull align 1 dereferenceable(1) %36)
  br label %587

586:                                              ; preds = %582
  call void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1) %36)
  br label %587

587:                                              ; preds = %586, %585
  br label %689

588:                                              ; preds = %577
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  %589 = load ptr, ptr %34, align 8, !tbaa !5
  %590 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %589, i32 0, i32 1
  %591 = load i8, ptr %590, align 1, !tbaa !54, !range !39, !noundef !40
  %592 = trunc i8 %591 to i1
  br i1 %592, label %593, label %605

593:                                              ; preds = %588
  %594 = load ptr, ptr %34, align 8, !tbaa !5
  %595 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %594, i32 0, i32 2
  %596 = load i8, ptr %595, align 2, !tbaa !59, !range !39, !noundef !40
  %597 = trunc i8 %596 to i1
  br i1 %597, label %598, label %605

598:                                              ; preds = %593
  %599 = load ptr, ptr %34, align 8, !tbaa !5
  %600 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %599, i32 0, i32 3
  %601 = load i32, ptr %600, align 4, !tbaa !60
  store i32 %601, ptr %35, align 4, !tbaa !9
  %602 = load ptr, ptr %34, align 8, !tbaa !5
  %603 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %602, i32 0, i32 4
  %604 = load i32, ptr %603, align 4, !tbaa !61
  store i32 %604, ptr %37, align 4, !tbaa !9
  call void @_ZN9NCompress5NLZMA6CState9UpdateRepEv(ptr noundef nonnull align 1 dereferenceable(1) %36)
  br label %614

605:                                              ; preds = %593, %588
  %606 = load ptr, ptr %34, align 8, !tbaa !5
  %607 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %606, i32 0, i32 7
  %608 = load i32, ptr %607, align 4, !tbaa !37
  store i32 %608, ptr %37, align 4, !tbaa !9
  %609 = load i32, ptr %37, align 4, !tbaa !9
  %610 = icmp ult i32 %609, 4
  br i1 %610, label %611, label %612

611:                                              ; preds = %605
  call void @_ZN9NCompress5NLZMA6CState9UpdateRepEv(ptr noundef nonnull align 1 dereferenceable(1) %36)
  br label %613

612:                                              ; preds = %605
  call void @_ZN9NCompress5NLZMA6CState11UpdateMatchEv(ptr noundef nonnull align 1 dereferenceable(1) %36)
  br label %613

613:                                              ; preds = %612, %611
  br label %614

614:                                              ; preds = %613, %598
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  %615 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %616 = load i32, ptr %35, align 4, !tbaa !9
  %617 = zext i32 %616 to i64
  %618 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %615, i64 0, i64 %617
  store ptr %618, ptr %38, align 8, !tbaa !5
  %619 = load i32, ptr %37, align 4, !tbaa !9
  %620 = icmp ult i32 %619, 4
  br i1 %620, label %621, label %665

621:                                              ; preds = %614
  %622 = load ptr, ptr %38, align 8, !tbaa !5
  %623 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %622, i32 0, i32 8
  %624 = load i32, ptr %37, align 4, !tbaa !9
  %625 = zext i32 %624 to i64
  %626 = getelementptr inbounds [4 x i32], ptr %623, i64 0, i64 %625
  %627 = load i32, ptr %626, align 4, !tbaa !9
  %628 = getelementptr inbounds [4 x i32], ptr %14, i64 0, i64 0
  store i32 %627, ptr %628, align 16, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  store i32 1, ptr %39, align 4, !tbaa !9
  br label %629

629:                                              ; preds = %644, %621
  %630 = load i32, ptr %39, align 4, !tbaa !9
  %631 = load i32, ptr %37, align 4, !tbaa !9
  %632 = icmp ule i32 %630, %631
  br i1 %632, label %633, label %647

633:                                              ; preds = %629
  %634 = load ptr, ptr %38, align 8, !tbaa !5
  %635 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %634, i32 0, i32 8
  %636 = load i32, ptr %39, align 4, !tbaa !9
  %637 = sub i32 %636, 1
  %638 = zext i32 %637 to i64
  %639 = getelementptr inbounds [4 x i32], ptr %635, i64 0, i64 %638
  %640 = load i32, ptr %639, align 4, !tbaa !9
  %641 = load i32, ptr %39, align 4, !tbaa !9
  %642 = zext i32 %641 to i64
  %643 = getelementptr inbounds [4 x i32], ptr %14, i64 0, i64 %642
  store i32 %640, ptr %643, align 4, !tbaa !9
  br label %644

644:                                              ; preds = %633
  %645 = load i32, ptr %39, align 4, !tbaa !9
  %646 = add i32 %645, 1
  store i32 %646, ptr %39, align 4, !tbaa !9
  br label %629, !llvm.loop !62

647:                                              ; preds = %629
  br label %648

648:                                              ; preds = %661, %647
  %649 = load i32, ptr %39, align 4, !tbaa !9
  %650 = icmp ult i32 %649, 4
  br i1 %650, label %651, label %664

651:                                              ; preds = %648
  %652 = load ptr, ptr %38, align 8, !tbaa !5
  %653 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %652, i32 0, i32 8
  %654 = load i32, ptr %39, align 4, !tbaa !9
  %655 = zext i32 %654 to i64
  %656 = getelementptr inbounds [4 x i32], ptr %653, i64 0, i64 %655
  %657 = load i32, ptr %656, align 4, !tbaa !9
  %658 = load i32, ptr %39, align 4, !tbaa !9
  %659 = zext i32 %658 to i64
  %660 = getelementptr inbounds [4 x i32], ptr %14, i64 0, i64 %659
  store i32 %657, ptr %660, align 4, !tbaa !9
  br label %661

661:                                              ; preds = %651
  %662 = load i32, ptr %39, align 4, !tbaa !9
  %663 = add i32 %662, 1
  store i32 %663, ptr %39, align 4, !tbaa !9
  br label %648, !llvm.loop !63

664:                                              ; preds = %648
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  br label %688

665:                                              ; preds = %614
  %666 = load i32, ptr %37, align 4, !tbaa !9
  %667 = sub i32 %666, 4
  %668 = getelementptr inbounds [4 x i32], ptr %14, i64 0, i64 0
  store i32 %667, ptr %668, align 16, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #5
  store i32 1, ptr %40, align 4, !tbaa !9
  br label %669

669:                                              ; preds = %684, %665
  %670 = load i32, ptr %40, align 4, !tbaa !9
  %671 = icmp ult i32 %670, 4
  br i1 %671, label %673, label %672

672:                                              ; preds = %669
  store i32 28, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  br label %687

673:                                              ; preds = %669
  %674 = load ptr, ptr %38, align 8, !tbaa !5
  %675 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %674, i32 0, i32 8
  %676 = load i32, ptr %40, align 4, !tbaa !9
  %677 = sub i32 %676, 1
  %678 = zext i32 %677 to i64
  %679 = getelementptr inbounds [4 x i32], ptr %675, i64 0, i64 %678
  %680 = load i32, ptr %679, align 4, !tbaa !9
  %681 = load i32, ptr %40, align 4, !tbaa !9
  %682 = zext i32 %681 to i64
  %683 = getelementptr inbounds [4 x i32], ptr %14, i64 0, i64 %682
  store i32 %680, ptr %683, align 4, !tbaa !9
  br label %684

684:                                              ; preds = %673
  %685 = load i32, ptr %40, align 4, !tbaa !9
  %686 = add i32 %685, 1
  store i32 %686, ptr %40, align 4, !tbaa !9
  br label %669, !llvm.loop !64

687:                                              ; preds = %672
  br label %688

688:                                              ; preds = %687, %664
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  br label %689

689:                                              ; preds = %688, %587
  %690 = load ptr, ptr %34, align 8, !tbaa !5
  %691 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %690, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %691, ptr align 1 %36, i64 1, i1 false), !tbaa.struct !48
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %692

692:                                              ; preds = %706, %689
  %693 = load i32, ptr %41, align 4, !tbaa !9
  %694 = icmp ult i32 %693, 4
  br i1 %694, label %696, label %695

695:                                              ; preds = %692
  store i32 31, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  br label %709

696:                                              ; preds = %692
  %697 = load i32, ptr %41, align 4, !tbaa !9
  %698 = zext i32 %697 to i64
  %699 = getelementptr inbounds [4 x i32], ptr %14, i64 0, i64 %698
  %700 = load i32, ptr %699, align 4, !tbaa !9
  %701 = load ptr, ptr %34, align 8, !tbaa !5
  %702 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %701, i32 0, i32 8
  %703 = load i32, ptr %41, align 4, !tbaa !9
  %704 = zext i32 %703 to i64
  %705 = getelementptr inbounds [4 x i32], ptr %702, i64 0, i64 %704
  store i32 %700, ptr %705, align 4, !tbaa !9
  br label %706

706:                                              ; preds = %696
  %707 = load i32, ptr %41, align 4, !tbaa !9
  %708 = add i32 %707, 1
  store i32 %708, ptr %41, align 4, !tbaa !9
  br label %692, !llvm.loop !65

709:                                              ; preds = %695
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  %710 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder18ReadMatchDistancesERj(ptr noundef nonnull align 8 dereferenceable(210678) %103, ptr noundef nonnull align 4 dereferenceable(4) %42)
  store i32 %710, ptr %43, align 4, !tbaa !9
  %711 = load i32, ptr %43, align 4, !tbaa !9
  %712 = icmp ne i32 %711, 0
  br i1 %712, label %713, label %715

713:                                              ; preds = %709
  %714 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %714, ptr %5, align 4
  store i32 1, ptr %13, align 4
  br label %716

715:                                              ; preds = %709
  store i32 0, ptr %13, align 4
  br label %716

716:                                              ; preds = %715, %713
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  %717 = load i32, ptr %13, align 4
  switch i32 %717, label %1579 [
    i32 0, label %718
  ]

718:                                              ; preds = %716
  %719 = load i32, ptr %42, align 4, !tbaa !9
  %720 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 25
  %721 = load i32, ptr %720, align 4, !tbaa !46
  %722 = icmp uge i32 %719, %721
  br i1 %722, label %723, label %731

723:                                              ; preds = %718
  %724 = load i32, ptr %42, align 4, !tbaa !9
  %725 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 26
  store i32 %724, ptr %725, align 8, !tbaa !41
  %726 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 30
  store i8 1, ptr %726, align 8, !tbaa !38
  %727 = load ptr, ptr %8, align 8, !tbaa !5
  %728 = load i32, ptr %32, align 4, !tbaa !9
  %729 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder8BackwardERjj(ptr noundef nonnull align 8 dereferenceable(210678) %103, ptr noundef nonnull align 4 dereferenceable(4) %727, i32 noundef %728)
  %730 = load ptr, ptr %9, align 8, !tbaa !5
  store i32 %729, ptr %730, align 4, !tbaa !9
  store i32 0, ptr %5, align 4
  store i32 1, ptr %13, align 4
  br label %1579

731:                                              ; preds = %718
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  %732 = load ptr, ptr %34, align 8, !tbaa !5
  %733 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %732, i32 0, i32 5
  %734 = load i32, ptr %733, align 4, !tbaa !52
  store i32 %734, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %735 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 7
  %736 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %735)
  %737 = load ptr, ptr %736, align 8, !tbaa !42
  %738 = getelementptr inbounds ptr, ptr %737, i64 9
  %739 = load ptr, ptr %738, align 8
  %740 = call noundef ptr %739(ptr noundef nonnull align 8 dereferenceable(8) %736)
  %741 = getelementptr inbounds i8, ptr %740, i64 -1
  store ptr %741, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #5
  %742 = load ptr, ptr %45, align 8, !tbaa !5
  %743 = load i8, ptr %742, align 1, !tbaa !47
  store i8 %743, ptr %46, align 1, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 1, ptr %47) #5
  %744 = load ptr, ptr %45, align 8, !tbaa !5
  %745 = getelementptr inbounds [4 x i32], ptr %14, i64 0, i64 0
  %746 = load i32, ptr %745, align 16, !tbaa !9
  %747 = zext i32 %746 to i64
  %748 = sub i64 0, %747
  %749 = sub i64 %748, 1
  %750 = getelementptr inbounds i8, ptr %744, i64 %749
  %751 = load i8, ptr %750, align 1, !tbaa !47
  store i8 %751, ptr %47, align 1, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #5
  %752 = load i32, ptr %7, align 4, !tbaa !9
  %753 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 38
  %754 = load i32, ptr %753, align 8, !tbaa !49
  %755 = and i32 %752, %754
  store i32 %755, ptr %48, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #5
  %756 = load i32, ptr %44, align 4, !tbaa !9
  %757 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 9
  %758 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %36, i32 0, i32 0
  %759 = load i8, ptr %758, align 1, !tbaa !66
  %760 = zext i8 %759 to i64
  %761 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %757, i64 0, i64 %760
  %762 = load i32, ptr %48, align 4, !tbaa !9
  %763 = zext i32 %762 to i64
  %764 = getelementptr inbounds [16 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %761, i64 0, i64 %763
  %765 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice0Ev(ptr noundef nonnull align 4 dereferenceable(4) %764)
  %766 = add i32 %756, %765
  %767 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 20
  %768 = load i32, ptr %7, align 4, !tbaa !9
  %769 = load ptr, ptr %45, align 8, !tbaa !5
  %770 = getelementptr inbounds i8, ptr %769, i64 -1
  %771 = load i8, ptr %770, align 1, !tbaa !47
  %772 = call noundef zeroext i1 @_ZNK9NCompress5NLZMA6CState11IsCharStateEv(ptr noundef nonnull align 1 dereferenceable(1) %36)
  %773 = xor i1 %772, true
  %774 = load i8, ptr %47, align 1, !tbaa !47
  %775 = load i8, ptr %46, align 1, !tbaa !47
  %776 = call noundef i32 @_ZNK9NCompress5NLZMA15CLiteralEncoder8GetPriceEjhbhh(ptr noundef nonnull align 8 dereferenceable(20) %767, i32 noundef %768, i8 noundef zeroext %771, i1 noundef zeroext %773, i8 noundef zeroext %774, i8 noundef zeroext %775)
  %777 = add i32 %766, %776
  store i32 %777, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #5
  %778 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %779 = load i32, ptr %32, align 4, !tbaa !9
  %780 = add i32 %779, 1
  %781 = zext i32 %780 to i64
  %782 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %778, i64 0, i64 %781
  store ptr %782, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %51) #5
  store i8 0, ptr %51, align 1, !tbaa !67
  %783 = load i32, ptr %49, align 4, !tbaa !9
  %784 = load ptr, ptr %50, align 8, !tbaa !5
  %785 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %784, i32 0, i32 5
  %786 = load i32, ptr %785, align 4, !tbaa !52
  %787 = icmp ult i32 %783, %786
  br i1 %787, label %788, label %796

788:                                              ; preds = %731
  %789 = load i32, ptr %49, align 4, !tbaa !9
  %790 = load ptr, ptr %50, align 8, !tbaa !5
  %791 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %790, i32 0, i32 5
  store i32 %789, ptr %791, align 4, !tbaa !52
  %792 = load i32, ptr %32, align 4, !tbaa !9
  %793 = load ptr, ptr %50, align 8, !tbaa !5
  %794 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %793, i32 0, i32 6
  store i32 %792, ptr %794, align 4, !tbaa !35
  %795 = load ptr, ptr %50, align 8, !tbaa !5
  call void @_ZN9NCompress5NLZMA8COptimal10MakeAsCharEv(ptr noundef nonnull align 4 dereferenceable(40) %795)
  store i8 1, ptr %51, align 1, !tbaa !67
  br label %796

796:                                              ; preds = %788, %731
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #5
  %797 = load i32, ptr %44, align 4, !tbaa !9
  %798 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 9
  %799 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %36, i32 0, i32 0
  %800 = load i8, ptr %799, align 1, !tbaa !66
  %801 = zext i8 %800 to i64
  %802 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %798, i64 0, i64 %801
  %803 = load i32, ptr %48, align 4, !tbaa !9
  %804 = zext i32 %803 to i64
  %805 = getelementptr inbounds [16 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %802, i64 0, i64 %804
  %806 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %805)
  %807 = add i32 %797, %806
  store i32 %807, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #5
  %808 = load i32, ptr %52, align 4, !tbaa !9
  %809 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 10
  %810 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %36, i32 0, i32 0
  %811 = load i8, ptr %810, align 1, !tbaa !66
  %812 = zext i8 %811 to i64
  %813 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %809, i64 0, i64 %812
  %814 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %813)
  %815 = add i32 %808, %814
  store i32 %815, ptr %53, align 4, !tbaa !9
  %816 = load i8, ptr %47, align 1, !tbaa !47
  %817 = zext i8 %816 to i32
  %818 = load i8, ptr %46, align 1, !tbaa !47
  %819 = zext i8 %818 to i32
  %820 = icmp eq i32 %817, %819
  br i1 %820, label %821, label %853

821:                                              ; preds = %796
  %822 = load ptr, ptr %50, align 8, !tbaa !5
  %823 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %822, i32 0, i32 6
  %824 = load i32, ptr %823, align 4, !tbaa !35
  %825 = load i32, ptr %32, align 4, !tbaa !9
  %826 = icmp ult i32 %824, %825
  br i1 %826, label %827, label %832

827:                                              ; preds = %821
  %828 = load ptr, ptr %50, align 8, !tbaa !5
  %829 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %828, i32 0, i32 7
  %830 = load i32, ptr %829, align 4, !tbaa !37
  %831 = icmp eq i32 %830, 0
  br i1 %831, label %853, label %832

832:                                              ; preds = %827, %821
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #5
  %833 = load i32, ptr %53, align 4, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %55, ptr align 1 %36, i64 1, i1 false), !tbaa.struct !48
  %834 = load i32, ptr %48, align 4, !tbaa !9
  %835 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %55, i32 0, i32 0
  %836 = load i8, ptr %835, align 1
  %837 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder15GetRepLen1PriceENS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %103, i8 %836, i32 noundef %834)
  %838 = add i32 %833, %837
  store i32 %838, ptr %54, align 4, !tbaa !9
  %839 = load i32, ptr %54, align 4, !tbaa !9
  %840 = load ptr, ptr %50, align 8, !tbaa !5
  %841 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %840, i32 0, i32 5
  %842 = load i32, ptr %841, align 4, !tbaa !52
  %843 = icmp ule i32 %839, %842
  br i1 %843, label %844, label %852

844:                                              ; preds = %832
  %845 = load i32, ptr %54, align 4, !tbaa !9
  %846 = load ptr, ptr %50, align 8, !tbaa !5
  %847 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %846, i32 0, i32 5
  store i32 %845, ptr %847, align 4, !tbaa !52
  %848 = load i32, ptr %32, align 4, !tbaa !9
  %849 = load ptr, ptr %50, align 8, !tbaa !5
  %850 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %849, i32 0, i32 6
  store i32 %848, ptr %850, align 4, !tbaa !35
  %851 = load ptr, ptr %50, align 8, !tbaa !5
  call void @_ZN9NCompress5NLZMA8COptimal14MakeAsShortRepEv(ptr noundef nonnull align 4 dereferenceable(40) %851)
  br label %852

852:                                              ; preds = %844, %832
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #5
  br label %853

853:                                              ; preds = %852, %827, %796
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #5
  %854 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 7
  %855 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %854)
  %856 = load ptr, ptr %855, align 8, !tbaa !42
  %857 = getelementptr inbounds ptr, ptr %856, i64 8
  %858 = load ptr, ptr %857, align 8
  %859 = call noundef i32 %858(ptr noundef nonnull align 8 dereferenceable(8) %855)
  %860 = add i32 %859, 1
  store i32 %860, ptr %56, align 4, !tbaa !9
  %861 = load i32, ptr %32, align 4, !tbaa !9
  %862 = sub i32 4095, %861
  %863 = load i32, ptr %56, align 4, !tbaa !9
  %864 = call noundef i32 @_Z5MyMinIjET_S0_S0_(i32 noundef %862, i32 noundef %863)
  store i32 %864, ptr %56, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #5
  %865 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %865, ptr %57, align 4, !tbaa !9
  %866 = load i32, ptr %57, align 4, !tbaa !9
  %867 = icmp ult i32 %866, 2
  br i1 %867, label %868, label %869

868:                                              ; preds = %853
  store i32 20, ptr %13, align 4
  br label %1578, !llvm.loop !68

869:                                              ; preds = %853
  %870 = load i32, ptr %57, align 4, !tbaa !9
  %871 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 25
  %872 = load i32, ptr %871, align 4, !tbaa !46
  %873 = icmp ugt i32 %870, %872
  br i1 %873, label %874, label %877

874:                                              ; preds = %869
  %875 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 25
  %876 = load i32, ptr %875, align 4, !tbaa !46
  store i32 %876, ptr %57, align 4, !tbaa !9
  br label %877

877:                                              ; preds = %874, %869
  %878 = load i32, ptr %57, align 4, !tbaa !9
  %879 = icmp uge i32 %878, 3
  br i1 %879, label %880, label %992

880:                                              ; preds = %877
  %881 = load i8, ptr %51, align 1, !tbaa !67, !range !39, !noundef !40
  %882 = trunc i8 %881 to i1
  br i1 %882, label %992, label %883

883:                                              ; preds = %880
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #5
  %884 = getelementptr inbounds [4 x i32], ptr %14, i64 0, i64 0
  %885 = load i32, ptr %884, align 16, !tbaa !9
  %886 = add i32 %885, 1
  store i32 %886, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #5
  store i32 1, ptr %59, align 4, !tbaa !9
  br label %887

887:                                              ; preds = %910, %883
  %888 = load i32, ptr %59, align 4, !tbaa !9
  %889 = load i32, ptr %57, align 4, !tbaa !9
  %890 = icmp ult i32 %888, %889
  br i1 %890, label %891, label %913

891:                                              ; preds = %887
  %892 = load ptr, ptr %45, align 8, !tbaa !5
  %893 = load i32, ptr %59, align 4, !tbaa !9
  %894 = zext i32 %893 to i64
  %895 = getelementptr inbounds i8, ptr %892, i64 %894
  %896 = load i8, ptr %895, align 1, !tbaa !47
  %897 = zext i8 %896 to i32
  %898 = load ptr, ptr %45, align 8, !tbaa !5
  %899 = load i32, ptr %59, align 4, !tbaa !9
  %900 = zext i32 %899 to i64
  %901 = load i32, ptr %58, align 4, !tbaa !9
  %902 = zext i32 %901 to i64
  %903 = sub i64 %900, %902
  %904 = getelementptr inbounds i8, ptr %898, i64 %903
  %905 = load i8, ptr %904, align 1, !tbaa !47
  %906 = zext i8 %905 to i32
  %907 = icmp ne i32 %897, %906
  br i1 %907, label %908, label %909

908:                                              ; preds = %891
  br label %913

909:                                              ; preds = %891
  br label %910

910:                                              ; preds = %909
  %911 = load i32, ptr %59, align 4, !tbaa !9
  %912 = add i32 %911, 1
  store i32 %912, ptr %59, align 4, !tbaa !9
  br label %887, !llvm.loop !69

913:                                              ; preds = %908, %887
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #5
  %914 = load i32, ptr %59, align 4, !tbaa !9
  %915 = sub i32 %914, 1
  store i32 %915, ptr %60, align 4, !tbaa !9
  %916 = load i32, ptr %60, align 4, !tbaa !9
  %917 = icmp uge i32 %916, 2
  br i1 %917, label %918, label %991

918:                                              ; preds = %913
  call void @llvm.lifetime.start.p0(i64 1, ptr %61) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %61, ptr align 1 %36, i64 1, i1 false), !tbaa.struct !48
  call void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1) %61)
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #5
  %919 = load i32, ptr %7, align 4, !tbaa !9
  %920 = add i32 %919, 1
  %921 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 38
  %922 = load i32, ptr %921, align 8, !tbaa !49
  %923 = and i32 %920, %922
  store i32 %923, ptr %62, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #5
  %924 = load i32, ptr %49, align 4, !tbaa !9
  %925 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 9
  %926 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %61, i32 0, i32 0
  %927 = load i8, ptr %926, align 1, !tbaa !66
  %928 = zext i8 %927 to i64
  %929 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %925, i64 0, i64 %928
  %930 = load i32, ptr %62, align 4, !tbaa !9
  %931 = zext i32 %930 to i64
  %932 = getelementptr inbounds [16 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %929, i64 0, i64 %931
  %933 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %932)
  %934 = add i32 %924, %933
  %935 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 10
  %936 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %61, i32 0, i32 0
  %937 = load i8, ptr %936, align 1, !tbaa !66
  %938 = zext i8 %937 to i64
  %939 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %935, i64 0, i64 %938
  %940 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %939)
  %941 = add i32 %934, %940
  store i32 %941, ptr %63, align 4, !tbaa !9
  br label %942

942:                                              ; preds = %949, %918
  %943 = load i32, ptr %33, align 4, !tbaa !9
  %944 = load i32, ptr %32, align 4, !tbaa !9
  %945 = add i32 %944, 1
  %946 = load i32, ptr %60, align 4, !tbaa !9
  %947 = add i32 %945, %946
  %948 = icmp ult i32 %943, %947
  br i1 %948, label %949, label %956

949:                                              ; preds = %942
  %950 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %951 = load i32, ptr %33, align 4, !tbaa !9
  %952 = add i32 %951, 1
  store i32 %952, ptr %33, align 4, !tbaa !9
  %953 = zext i32 %952 to i64
  %954 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %950, i64 0, i64 %953
  %955 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %954, i32 0, i32 5
  store i32 268435455, ptr %955, align 4, !tbaa !52
  br label %942, !llvm.loop !70

956:                                              ; preds = %942
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #5
  %957 = load i32, ptr %63, align 4, !tbaa !9
  %958 = load i32, ptr %60, align 4, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %65, ptr align 1 %61, i64 1, i1 false), !tbaa.struct !48
  %959 = load i32, ptr %62, align 4, !tbaa !9
  %960 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %65, i32 0, i32 0
  %961 = load i8, ptr %960, align 1
  %962 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %103, i32 noundef 0, i32 noundef %958, i8 %961, i32 noundef %959)
  %963 = add i32 %957, %962
  store i32 %963, ptr %64, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #5
  %964 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %965 = load i32, ptr %32, align 4, !tbaa !9
  %966 = add i32 %965, 1
  %967 = load i32, ptr %60, align 4, !tbaa !9
  %968 = add i32 %966, %967
  %969 = zext i32 %968 to i64
  %970 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %964, i64 0, i64 %969
  store ptr %970, ptr %66, align 8, !tbaa !5
  %971 = load i32, ptr %64, align 4, !tbaa !9
  %972 = load ptr, ptr %66, align 8, !tbaa !5
  %973 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %972, i32 0, i32 5
  %974 = load i32, ptr %973, align 4, !tbaa !52
  %975 = icmp ult i32 %971, %974
  br i1 %975, label %976, label %990

976:                                              ; preds = %956
  %977 = load i32, ptr %64, align 4, !tbaa !9
  %978 = load ptr, ptr %66, align 8, !tbaa !5
  %979 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %978, i32 0, i32 5
  store i32 %977, ptr %979, align 4, !tbaa !52
  %980 = load i32, ptr %32, align 4, !tbaa !9
  %981 = add i32 %980, 1
  %982 = load ptr, ptr %66, align 8, !tbaa !5
  %983 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %982, i32 0, i32 6
  store i32 %981, ptr %983, align 4, !tbaa !35
  %984 = load ptr, ptr %66, align 8, !tbaa !5
  %985 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %984, i32 0, i32 7
  store i32 0, ptr %985, align 4, !tbaa !37
  %986 = load ptr, ptr %66, align 8, !tbaa !5
  %987 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %986, i32 0, i32 1
  store i8 1, ptr %987, align 1, !tbaa !54
  %988 = load ptr, ptr %66, align 8, !tbaa !5
  %989 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %988, i32 0, i32 2
  store i8 0, ptr %989, align 2, !tbaa !59
  br label %990

990:                                              ; preds = %976, %956
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #5
  br label %991

991:                                              ; preds = %990, %913
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #5
  br label %992

992:                                              ; preds = %991, %880, %877
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #5
  store i32 0, ptr %67, align 4, !tbaa !9
  br label %993

993:                                              ; preds = %1296, %992
  %994 = load i32, ptr %67, align 4, !tbaa !9
  %995 = icmp ult i32 %994, 4
  br i1 %995, label %997, label %996

996:                                              ; preds = %993
  store i32 39, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #5
  br label %1299

997:                                              ; preds = %993
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #5
  %998 = load i32, ptr %67, align 4, !tbaa !9
  %999 = zext i32 %998 to i64
  %1000 = getelementptr inbounds [4 x i32], ptr %14, i64 0, i64 %999
  %1001 = load i32, ptr %1000, align 4, !tbaa !9
  %1002 = add i32 %1001, 1
  store i32 %1002, ptr %68, align 4, !tbaa !9
  %1003 = load ptr, ptr %45, align 8, !tbaa !5
  %1004 = getelementptr inbounds i8, ptr %1003, i64 0
  %1005 = load i8, ptr %1004, align 1, !tbaa !47
  %1006 = zext i8 %1005 to i32
  %1007 = load ptr, ptr %45, align 8, !tbaa !5
  %1008 = load i32, ptr %68, align 4, !tbaa !9
  %1009 = zext i32 %1008 to i64
  %1010 = sub i64 0, %1009
  %1011 = getelementptr inbounds i8, ptr %1007, i64 %1010
  %1012 = load i8, ptr %1011, align 1, !tbaa !47
  %1013 = zext i8 %1012 to i32
  %1014 = icmp ne i32 %1006, %1013
  br i1 %1014, label %1028, label %1015

1015:                                             ; preds = %997
  %1016 = load ptr, ptr %45, align 8, !tbaa !5
  %1017 = getelementptr inbounds i8, ptr %1016, i64 1
  %1018 = load i8, ptr %1017, align 1, !tbaa !47
  %1019 = zext i8 %1018 to i32
  %1020 = load ptr, ptr %45, align 8, !tbaa !5
  %1021 = load i32, ptr %68, align 4, !tbaa !9
  %1022 = zext i32 %1021 to i64
  %1023 = sub i64 1, %1022
  %1024 = getelementptr inbounds i8, ptr %1020, i64 %1023
  %1025 = load i8, ptr %1024, align 1, !tbaa !47
  %1026 = zext i8 %1025 to i32
  %1027 = icmp ne i32 %1019, %1026
  br i1 %1027, label %1028, label %1029

1028:                                             ; preds = %1015, %997
  store i32 41, ptr %13, align 4
  br label %1293

1029:                                             ; preds = %1015
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #5
  store i32 2, ptr %69, align 4, !tbaa !9
  br label %1030

1030:                                             ; preds = %1053, %1029
  %1031 = load i32, ptr %69, align 4, !tbaa !9
  %1032 = load i32, ptr %57, align 4, !tbaa !9
  %1033 = icmp ult i32 %1031, %1032
  br i1 %1033, label %1034, label %1056

1034:                                             ; preds = %1030
  %1035 = load ptr, ptr %45, align 8, !tbaa !5
  %1036 = load i32, ptr %69, align 4, !tbaa !9
  %1037 = zext i32 %1036 to i64
  %1038 = getelementptr inbounds i8, ptr %1035, i64 %1037
  %1039 = load i8, ptr %1038, align 1, !tbaa !47
  %1040 = zext i8 %1039 to i32
  %1041 = load ptr, ptr %45, align 8, !tbaa !5
  %1042 = load i32, ptr %69, align 4, !tbaa !9
  %1043 = zext i32 %1042 to i64
  %1044 = load i32, ptr %68, align 4, !tbaa !9
  %1045 = zext i32 %1044 to i64
  %1046 = sub i64 %1043, %1045
  %1047 = getelementptr inbounds i8, ptr %1041, i64 %1046
  %1048 = load i8, ptr %1047, align 1, !tbaa !47
  %1049 = zext i8 %1048 to i32
  %1050 = icmp ne i32 %1040, %1049
  br i1 %1050, label %1051, label %1052

1051:                                             ; preds = %1034
  br label %1056

1052:                                             ; preds = %1034
  br label %1053

1053:                                             ; preds = %1052
  %1054 = load i32, ptr %69, align 4, !tbaa !9
  %1055 = add i32 %1054, 1
  store i32 %1055, ptr %69, align 4, !tbaa !9
  br label %1030, !llvm.loop !71

1056:                                             ; preds = %1051, %1030
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #5
  %1057 = load i32, ptr %69, align 4, !tbaa !9
  store i32 %1057, ptr %70, align 4, !tbaa !9
  br label %1058

1058:                                             ; preds = %1105, %1056
  br label %1059

1059:                                             ; preds = %1065, %1058
  %1060 = load i32, ptr %33, align 4, !tbaa !9
  %1061 = load i32, ptr %32, align 4, !tbaa !9
  %1062 = load i32, ptr %69, align 4, !tbaa !9
  %1063 = add i32 %1061, %1062
  %1064 = icmp ult i32 %1060, %1063
  br i1 %1064, label %1065, label %1072

1065:                                             ; preds = %1059
  %1066 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %1067 = load i32, ptr %33, align 4, !tbaa !9
  %1068 = add i32 %1067, 1
  store i32 %1068, ptr %33, align 4, !tbaa !9
  %1069 = zext i32 %1068 to i64
  %1070 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %1066, i64 0, i64 %1069
  %1071 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1070, i32 0, i32 5
  store i32 268435455, ptr %1071, align 4, !tbaa !52
  br label %1059, !llvm.loop !72

1072:                                             ; preds = %1059
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #5
  %1073 = load i32, ptr %53, align 4, !tbaa !9
  %1074 = load i32, ptr %67, align 4, !tbaa !9
  %1075 = load i32, ptr %69, align 4, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %72, ptr align 1 %36, i64 1, i1 false), !tbaa.struct !48
  %1076 = load i32, ptr %48, align 4, !tbaa !9
  %1077 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %72, i32 0, i32 0
  %1078 = load i8, ptr %1077, align 1
  %1079 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %103, i32 noundef %1074, i32 noundef %1075, i8 %1078, i32 noundef %1076)
  %1080 = add i32 %1073, %1079
  store i32 %1080, ptr %71, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #5
  %1081 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %1082 = load i32, ptr %32, align 4, !tbaa !9
  %1083 = load i32, ptr %69, align 4, !tbaa !9
  %1084 = add i32 %1082, %1083
  %1085 = zext i32 %1084 to i64
  %1086 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %1081, i64 0, i64 %1085
  store ptr %1086, ptr %73, align 8, !tbaa !5
  %1087 = load i32, ptr %71, align 4, !tbaa !9
  %1088 = load ptr, ptr %73, align 8, !tbaa !5
  %1089 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1088, i32 0, i32 5
  %1090 = load i32, ptr %1089, align 4, !tbaa !52
  %1091 = icmp ult i32 %1087, %1090
  br i1 %1091, label %1092, label %1104

1092:                                             ; preds = %1072
  %1093 = load i32, ptr %71, align 4, !tbaa !9
  %1094 = load ptr, ptr %73, align 8, !tbaa !5
  %1095 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1094, i32 0, i32 5
  store i32 %1093, ptr %1095, align 4, !tbaa !52
  %1096 = load i32, ptr %32, align 4, !tbaa !9
  %1097 = load ptr, ptr %73, align 8, !tbaa !5
  %1098 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1097, i32 0, i32 6
  store i32 %1096, ptr %1098, align 4, !tbaa !35
  %1099 = load i32, ptr %67, align 4, !tbaa !9
  %1100 = load ptr, ptr %73, align 8, !tbaa !5
  %1101 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1100, i32 0, i32 7
  store i32 %1099, ptr %1101, align 4, !tbaa !37
  %1102 = load ptr, ptr %73, align 8, !tbaa !5
  %1103 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1102, i32 0, i32 1
  store i8 0, ptr %1103, align 1, !tbaa !54
  br label %1104

1104:                                             ; preds = %1092, %1072
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #5
  br label %1105

1105:                                             ; preds = %1104
  %1106 = load i32, ptr %69, align 4, !tbaa !9
  %1107 = add i32 %1106, -1
  store i32 %1107, ptr %69, align 4, !tbaa !9
  %1108 = icmp uge i32 %1107, 2
  br i1 %1108, label %1058, label %1109, !llvm.loop !73

1109:                                             ; preds = %1105
  %1110 = load i32, ptr %70, align 4, !tbaa !9
  store i32 %1110, ptr %69, align 4, !tbaa !9
  %1111 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 23
  %1112 = load i8, ptr %1111, align 1, !tbaa !74, !range !39, !noundef !40
  %1113 = trunc i8 %1112 to i1
  br i1 %1113, label %1114, label %1292

1114:                                             ; preds = %1109
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #5
  %1115 = load i32, ptr %69, align 4, !tbaa !9
  %1116 = add i32 %1115, 1
  store i32 %1116, ptr %74, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #5
  %1117 = load i32, ptr %56, align 4, !tbaa !9
  %1118 = load i32, ptr %74, align 4, !tbaa !9
  %1119 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 25
  %1120 = load i32, ptr %1119, align 4, !tbaa !46
  %1121 = add i32 %1118, %1120
  %1122 = call noundef i32 @_Z5MyMinIjET_S0_S0_(i32 noundef %1117, i32 noundef %1121)
  store i32 %1122, ptr %75, align 4, !tbaa !9
  br label %1123

1123:                                             ; preds = %1146, %1114
  %1124 = load i32, ptr %74, align 4, !tbaa !9
  %1125 = load i32, ptr %75, align 4, !tbaa !9
  %1126 = icmp ult i32 %1124, %1125
  br i1 %1126, label %1127, label %1149

1127:                                             ; preds = %1123
  %1128 = load ptr, ptr %45, align 8, !tbaa !5
  %1129 = load i32, ptr %74, align 4, !tbaa !9
  %1130 = zext i32 %1129 to i64
  %1131 = getelementptr inbounds i8, ptr %1128, i64 %1130
  %1132 = load i8, ptr %1131, align 1, !tbaa !47
  %1133 = zext i8 %1132 to i32
  %1134 = load ptr, ptr %45, align 8, !tbaa !5
  %1135 = load i32, ptr %74, align 4, !tbaa !9
  %1136 = zext i32 %1135 to i64
  %1137 = load i32, ptr %68, align 4, !tbaa !9
  %1138 = zext i32 %1137 to i64
  %1139 = sub i64 %1136, %1138
  %1140 = getelementptr inbounds i8, ptr %1134, i64 %1139
  %1141 = load i8, ptr %1140, align 1, !tbaa !47
  %1142 = zext i8 %1141 to i32
  %1143 = icmp ne i32 %1133, %1142
  br i1 %1143, label %1144, label %1145

1144:                                             ; preds = %1127
  br label %1149

1145:                                             ; preds = %1127
  br label %1146

1146:                                             ; preds = %1145
  %1147 = load i32, ptr %74, align 4, !tbaa !9
  %1148 = add i32 %1147, 1
  store i32 %1148, ptr %74, align 4, !tbaa !9
  br label %1123, !llvm.loop !75

1149:                                             ; preds = %1144, %1123
  %1150 = load i32, ptr %69, align 4, !tbaa !9
  %1151 = add i32 %1150, 1
  %1152 = load i32, ptr %74, align 4, !tbaa !9
  %1153 = sub i32 %1152, %1151
  store i32 %1153, ptr %74, align 4, !tbaa !9
  %1154 = load i32, ptr %74, align 4, !tbaa !9
  %1155 = icmp uge i32 %1154, 2
  br i1 %1155, label %1156, label %1291

1156:                                             ; preds = %1149
  call void @llvm.lifetime.start.p0(i64 1, ptr %76) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %76, ptr align 1 %36, i64 1, i1 false), !tbaa.struct !48
  call void @_ZN9NCompress5NLZMA6CState9UpdateRepEv(ptr noundef nonnull align 1 dereferenceable(1) %76)
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #5
  %1157 = load i32, ptr %7, align 4, !tbaa !9
  %1158 = load i32, ptr %69, align 4, !tbaa !9
  %1159 = add i32 %1157, %1158
  %1160 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 38
  %1161 = load i32, ptr %1160, align 8, !tbaa !49
  %1162 = and i32 %1159, %1161
  store i32 %1162, ptr %77, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #5
  %1163 = load i32, ptr %53, align 4, !tbaa !9
  %1164 = load i32, ptr %67, align 4, !tbaa !9
  %1165 = load i32, ptr %69, align 4, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %79, ptr align 1 %36, i64 1, i1 false), !tbaa.struct !48
  %1166 = load i32, ptr %48, align 4, !tbaa !9
  %1167 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %79, i32 0, i32 0
  %1168 = load i8, ptr %1167, align 1
  %1169 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %103, i32 noundef %1164, i32 noundef %1165, i8 %1168, i32 noundef %1166)
  %1170 = add i32 %1163, %1169
  %1171 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 9
  %1172 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %76, i32 0, i32 0
  %1173 = load i8, ptr %1172, align 1, !tbaa !66
  %1174 = zext i8 %1173 to i64
  %1175 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %1171, i64 0, i64 %1174
  %1176 = load i32, ptr %77, align 4, !tbaa !9
  %1177 = zext i32 %1176 to i64
  %1178 = getelementptr inbounds [16 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %1175, i64 0, i64 %1177
  %1179 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice0Ev(ptr noundef nonnull align 4 dereferenceable(4) %1178)
  %1180 = add i32 %1170, %1179
  %1181 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 20
  %1182 = load i32, ptr %7, align 4, !tbaa !9
  %1183 = load i32, ptr %69, align 4, !tbaa !9
  %1184 = add i32 %1182, %1183
  %1185 = load ptr, ptr %45, align 8, !tbaa !5
  %1186 = load i32, ptr %69, align 4, !tbaa !9
  %1187 = zext i32 %1186 to i64
  %1188 = sub i64 %1187, 1
  %1189 = getelementptr inbounds i8, ptr %1185, i64 %1188
  %1190 = load i8, ptr %1189, align 1, !tbaa !47
  %1191 = load ptr, ptr %45, align 8, !tbaa !5
  %1192 = load i32, ptr %69, align 4, !tbaa !9
  %1193 = zext i32 %1192 to i64
  %1194 = load i32, ptr %68, align 4, !tbaa !9
  %1195 = zext i32 %1194 to i64
  %1196 = sub i64 %1193, %1195
  %1197 = getelementptr inbounds i8, ptr %1191, i64 %1196
  %1198 = load i8, ptr %1197, align 1, !tbaa !47
  %1199 = load ptr, ptr %45, align 8, !tbaa !5
  %1200 = load i32, ptr %69, align 4, !tbaa !9
  %1201 = zext i32 %1200 to i64
  %1202 = getelementptr inbounds i8, ptr %1199, i64 %1201
  %1203 = load i8, ptr %1202, align 1, !tbaa !47
  %1204 = call noundef i32 @_ZNK9NCompress5NLZMA15CLiteralEncoder8GetPriceEjhbhh(ptr noundef nonnull align 8 dereferenceable(20) %1181, i32 noundef %1184, i8 noundef zeroext %1190, i1 noundef zeroext true, i8 noundef zeroext %1198, i8 noundef zeroext %1203)
  %1205 = add i32 %1180, %1204
  store i32 %1205, ptr %78, align 4, !tbaa !9
  call void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1) %76)
  %1206 = load i32, ptr %7, align 4, !tbaa !9
  %1207 = load i32, ptr %69, align 4, !tbaa !9
  %1208 = add i32 %1206, %1207
  %1209 = add i32 %1208, 1
  %1210 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 38
  %1211 = load i32, ptr %1210, align 8, !tbaa !49
  %1212 = and i32 %1209, %1211
  store i32 %1212, ptr %77, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #5
  %1213 = load i32, ptr %78, align 4, !tbaa !9
  %1214 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 9
  %1215 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %76, i32 0, i32 0
  %1216 = load i8, ptr %1215, align 1, !tbaa !66
  %1217 = zext i8 %1216 to i64
  %1218 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %1214, i64 0, i64 %1217
  %1219 = load i32, ptr %77, align 4, !tbaa !9
  %1220 = zext i32 %1219 to i64
  %1221 = getelementptr inbounds [16 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %1218, i64 0, i64 %1220
  %1222 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %1221)
  %1223 = add i32 %1213, %1222
  store i32 %1223, ptr %80, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #5
  %1224 = load i32, ptr %80, align 4, !tbaa !9
  %1225 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 10
  %1226 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %76, i32 0, i32 0
  %1227 = load i8, ptr %1226, align 1, !tbaa !66
  %1228 = zext i8 %1227 to i64
  %1229 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %1225, i64 0, i64 %1228
  %1230 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %1229)
  %1231 = add i32 %1224, %1230
  store i32 %1231, ptr %81, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #5
  %1232 = load i32, ptr %69, align 4, !tbaa !9
  %1233 = add i32 %1232, 1
  %1234 = load i32, ptr %74, align 4, !tbaa !9
  %1235 = add i32 %1233, %1234
  store i32 %1235, ptr %82, align 4, !tbaa !9
  br label %1236

1236:                                             ; preds = %1242, %1156
  %1237 = load i32, ptr %33, align 4, !tbaa !9
  %1238 = load i32, ptr %32, align 4, !tbaa !9
  %1239 = load i32, ptr %82, align 4, !tbaa !9
  %1240 = add i32 %1238, %1239
  %1241 = icmp ult i32 %1237, %1240
  br i1 %1241, label %1242, label %1249

1242:                                             ; preds = %1236
  %1243 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %1244 = load i32, ptr %33, align 4, !tbaa !9
  %1245 = add i32 %1244, 1
  store i32 %1245, ptr %33, align 4, !tbaa !9
  %1246 = zext i32 %1245 to i64
  %1247 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %1243, i64 0, i64 %1246
  %1248 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1247, i32 0, i32 5
  store i32 268435455, ptr %1248, align 4, !tbaa !52
  br label %1236, !llvm.loop !76

1249:                                             ; preds = %1236
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #5
  %1250 = load i32, ptr %81, align 4, !tbaa !9
  %1251 = load i32, ptr %74, align 4, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %84, ptr align 1 %76, i64 1, i1 false), !tbaa.struct !48
  %1252 = load i32, ptr %77, align 4, !tbaa !9
  %1253 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %84, i32 0, i32 0
  %1254 = load i8, ptr %1253, align 1
  %1255 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %103, i32 noundef 0, i32 noundef %1251, i8 %1254, i32 noundef %1252)
  %1256 = add i32 %1250, %1255
  store i32 %1256, ptr %83, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #5
  %1257 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %1258 = load i32, ptr %32, align 4, !tbaa !9
  %1259 = load i32, ptr %82, align 4, !tbaa !9
  %1260 = add i32 %1258, %1259
  %1261 = zext i32 %1260 to i64
  %1262 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %1257, i64 0, i64 %1261
  store ptr %1262, ptr %85, align 8, !tbaa !5
  %1263 = load i32, ptr %83, align 4, !tbaa !9
  %1264 = load ptr, ptr %85, align 8, !tbaa !5
  %1265 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1264, i32 0, i32 5
  %1266 = load i32, ptr %1265, align 4, !tbaa !52
  %1267 = icmp ult i32 %1263, %1266
  br i1 %1267, label %1268, label %1290

1268:                                             ; preds = %1249
  %1269 = load i32, ptr %83, align 4, !tbaa !9
  %1270 = load ptr, ptr %85, align 8, !tbaa !5
  %1271 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1270, i32 0, i32 5
  store i32 %1269, ptr %1271, align 4, !tbaa !52
  %1272 = load i32, ptr %32, align 4, !tbaa !9
  %1273 = load i32, ptr %69, align 4, !tbaa !9
  %1274 = add i32 %1272, %1273
  %1275 = add i32 %1274, 1
  %1276 = load ptr, ptr %85, align 8, !tbaa !5
  %1277 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1276, i32 0, i32 6
  store i32 %1275, ptr %1277, align 4, !tbaa !35
  %1278 = load ptr, ptr %85, align 8, !tbaa !5
  %1279 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1278, i32 0, i32 7
  store i32 0, ptr %1279, align 4, !tbaa !37
  %1280 = load ptr, ptr %85, align 8, !tbaa !5
  %1281 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1280, i32 0, i32 1
  store i8 1, ptr %1281, align 1, !tbaa !54
  %1282 = load ptr, ptr %85, align 8, !tbaa !5
  %1283 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1282, i32 0, i32 2
  store i8 1, ptr %1283, align 2, !tbaa !59
  %1284 = load i32, ptr %32, align 4, !tbaa !9
  %1285 = load ptr, ptr %85, align 8, !tbaa !5
  %1286 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1285, i32 0, i32 3
  store i32 %1284, ptr %1286, align 4, !tbaa !60
  %1287 = load i32, ptr %67, align 4, !tbaa !9
  %1288 = load ptr, ptr %85, align 8, !tbaa !5
  %1289 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1288, i32 0, i32 4
  store i32 %1287, ptr %1289, align 4, !tbaa !61
  br label %1290

1290:                                             ; preds = %1268, %1249
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %76) #5
  br label %1291

1291:                                             ; preds = %1290, %1149
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #5
  br label %1292

1292:                                             ; preds = %1291, %1109
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #5
  store i32 0, ptr %13, align 4
  br label %1293

1293:                                             ; preds = %1292, %1028
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #5
  %1294 = load i32, ptr %13, align 4
  switch i32 %1294, label %1588 [
    i32 0, label %1295
    i32 41, label %1296
  ]

1295:                                             ; preds = %1293
  br label %1296

1296:                                             ; preds = %1295, %1293
  %1297 = load i32, ptr %67, align 4, !tbaa !9
  %1298 = add i32 %1297, 1
  store i32 %1298, ptr %67, align 4, !tbaa !9
  br label %993, !llvm.loop !77

1299:                                             ; preds = %996
  %1300 = load i32, ptr %42, align 4, !tbaa !9
  %1301 = load i32, ptr %57, align 4, !tbaa !9
  %1302 = icmp ugt i32 %1300, %1301
  br i1 %1302, label %1303, label %1305

1303:                                             ; preds = %1299
  %1304 = load i32, ptr %57, align 4, !tbaa !9
  store i32 %1304, ptr %42, align 4, !tbaa !9
  br label %1305

1305:                                             ; preds = %1303, %1299
  %1306 = load i32, ptr %42, align 4, !tbaa !9
  %1307 = icmp uge i32 %1306, 2
  br i1 %1307, label %1308, label %1577

1308:                                             ; preds = %1305
  %1309 = load i32, ptr %42, align 4, !tbaa !9
  %1310 = icmp eq i32 %1309, 2
  br i1 %1310, label %1311, label %1317

1311:                                             ; preds = %1308
  %1312 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 21
  %1313 = getelementptr inbounds [274 x i32], ptr %1312, i64 0, i64 2
  %1314 = load i32, ptr %1313, align 8, !tbaa !9
  %1315 = icmp uge i32 %1314, 128
  br i1 %1315, label %1316, label %1317

1316:                                             ; preds = %1311
  store i32 20, ptr %13, align 4
  br label %1578, !llvm.loop !68

1317:                                             ; preds = %1311, %1308
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #5
  %1318 = load i32, ptr %52, align 4, !tbaa !9
  %1319 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 10
  %1320 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %36, i32 0, i32 0
  %1321 = load i8, ptr %1320, align 1, !tbaa !66
  %1322 = zext i8 %1321 to i64
  %1323 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %1319, i64 0, i64 %1322
  %1324 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice0Ev(ptr noundef nonnull align 4 dereferenceable(4) %1323)
  %1325 = add i32 %1318, %1324
  store i32 %1325, ptr %86, align 4, !tbaa !9
  br label %1326

1326:                                             ; preds = %1332, %1317
  %1327 = load i32, ptr %33, align 4, !tbaa !9
  %1328 = load i32, ptr %32, align 4, !tbaa !9
  %1329 = load i32, ptr %42, align 4, !tbaa !9
  %1330 = add i32 %1328, %1329
  %1331 = icmp ult i32 %1327, %1330
  br i1 %1331, label %1332, label %1339

1332:                                             ; preds = %1326
  %1333 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %1334 = load i32, ptr %33, align 4, !tbaa !9
  %1335 = add i32 %1334, 1
  store i32 %1335, ptr %33, align 4, !tbaa !9
  %1336 = zext i32 %1335 to i64
  %1337 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %1333, i64 0, i64 %1336
  %1338 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1337, i32 0, i32 5
  store i32 268435455, ptr %1338, align 4, !tbaa !52
  br label %1326, !llvm.loop !78

1339:                                             ; preds = %1326
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #5
  %1340 = load i32, ptr %42, align 4, !tbaa !9
  store i32 %1340, ptr %87, align 4, !tbaa !9
  br label %1341

1341:                                             ; preds = %1573, %1339
  %1342 = load i32, ptr %87, align 4, !tbaa !9
  %1343 = icmp uge i32 %1342, 2
  br i1 %1343, label %1345, label %1344

1344:                                             ; preds = %1341
  store i32 56, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #5
  br label %1576

1345:                                             ; preds = %1341
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #5
  %1346 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 21
  %1347 = load i32, ptr %87, align 4, !tbaa !9
  %1348 = zext i32 %1347 to i64
  %1349 = getelementptr inbounds [274 x i32], ptr %1346, i64 0, i64 %1348
  %1350 = load i32, ptr %1349, align 4, !tbaa !9
  store i32 %1350, ptr %88, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #5
  %1351 = load i32, ptr %86, align 4, !tbaa !9
  %1352 = load i32, ptr %88, align 4, !tbaa !9
  %1353 = load i32, ptr %87, align 4, !tbaa !9
  %1354 = load i32, ptr %48, align 4, !tbaa !9
  %1355 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder14GetPosLenPriceEjjj(ptr noundef nonnull align 8 dereferenceable(210678) %103, i32 noundef %1352, i32 noundef %1353, i32 noundef %1354)
  %1356 = add i32 %1351, %1355
  store i32 %1356, ptr %89, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #5
  %1357 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %1358 = load i32, ptr %32, align 4, !tbaa !9
  %1359 = load i32, ptr %87, align 4, !tbaa !9
  %1360 = add i32 %1358, %1359
  %1361 = zext i32 %1360 to i64
  %1362 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %1357, i64 0, i64 %1361
  store ptr %1362, ptr %90, align 8, !tbaa !5
  %1363 = load i32, ptr %89, align 4, !tbaa !9
  %1364 = load ptr, ptr %90, align 8, !tbaa !5
  %1365 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1364, i32 0, i32 5
  %1366 = load i32, ptr %1365, align 4, !tbaa !52
  %1367 = icmp ult i32 %1363, %1366
  br i1 %1367, label %1368, label %1381

1368:                                             ; preds = %1345
  %1369 = load i32, ptr %89, align 4, !tbaa !9
  %1370 = load ptr, ptr %90, align 8, !tbaa !5
  %1371 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1370, i32 0, i32 5
  store i32 %1369, ptr %1371, align 4, !tbaa !52
  %1372 = load i32, ptr %32, align 4, !tbaa !9
  %1373 = load ptr, ptr %90, align 8, !tbaa !5
  %1374 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1373, i32 0, i32 6
  store i32 %1372, ptr %1374, align 4, !tbaa !35
  %1375 = load i32, ptr %88, align 4, !tbaa !9
  %1376 = add i32 %1375, 4
  %1377 = load ptr, ptr %90, align 8, !tbaa !5
  %1378 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1377, i32 0, i32 7
  store i32 %1376, ptr %1378, align 4, !tbaa !37
  %1379 = load ptr, ptr %90, align 8, !tbaa !5
  %1380 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1379, i32 0, i32 1
  store i8 0, ptr %1380, align 1, !tbaa !54
  br label %1381

1381:                                             ; preds = %1368, %1345
  %1382 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 23
  %1383 = load i8, ptr %1382, align 1, !tbaa !74, !range !39, !noundef !40
  %1384 = trunc i8 %1383 to i1
  br i1 %1384, label %1385, label %1572

1385:                                             ; preds = %1381
  %1386 = load i32, ptr %87, align 4, !tbaa !9
  %1387 = load i32, ptr %42, align 4, !tbaa !9
  %1388 = icmp eq i32 %1386, %1387
  br i1 %1388, label %1398, label %1389

1389:                                             ; preds = %1385
  %1390 = load i32, ptr %88, align 4, !tbaa !9
  %1391 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 21
  %1392 = load i32, ptr %87, align 4, !tbaa !9
  %1393 = add i32 %1392, 1
  %1394 = zext i32 %1393 to i64
  %1395 = getelementptr inbounds [274 x i32], ptr %1391, i64 0, i64 %1394
  %1396 = load i32, ptr %1395, align 4, !tbaa !9
  %1397 = icmp ne i32 %1390, %1396
  br i1 %1397, label %1398, label %1572

1398:                                             ; preds = %1389, %1385
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #5
  %1399 = load i32, ptr %88, align 4, !tbaa !9
  %1400 = add i32 %1399, 1
  store i32 %1400, ptr %91, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #5
  %1401 = load i32, ptr %87, align 4, !tbaa !9
  %1402 = add i32 %1401, 1
  store i32 %1402, ptr %92, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #5
  %1403 = load i32, ptr %56, align 4, !tbaa !9
  %1404 = load i32, ptr %92, align 4, !tbaa !9
  %1405 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 25
  %1406 = load i32, ptr %1405, align 4, !tbaa !46
  %1407 = add i32 %1404, %1406
  %1408 = call noundef i32 @_Z5MyMinIjET_S0_S0_(i32 noundef %1403, i32 noundef %1407)
  store i32 %1408, ptr %93, align 4, !tbaa !9
  br label %1409

1409:                                             ; preds = %1432, %1398
  %1410 = load i32, ptr %92, align 4, !tbaa !9
  %1411 = load i32, ptr %93, align 4, !tbaa !9
  %1412 = icmp ult i32 %1410, %1411
  br i1 %1412, label %1413, label %1435

1413:                                             ; preds = %1409
  %1414 = load ptr, ptr %45, align 8, !tbaa !5
  %1415 = load i32, ptr %92, align 4, !tbaa !9
  %1416 = zext i32 %1415 to i64
  %1417 = getelementptr inbounds i8, ptr %1414, i64 %1416
  %1418 = load i8, ptr %1417, align 1, !tbaa !47
  %1419 = zext i8 %1418 to i32
  %1420 = load ptr, ptr %45, align 8, !tbaa !5
  %1421 = load i32, ptr %92, align 4, !tbaa !9
  %1422 = zext i32 %1421 to i64
  %1423 = load i32, ptr %91, align 4, !tbaa !9
  %1424 = zext i32 %1423 to i64
  %1425 = sub i64 %1422, %1424
  %1426 = getelementptr inbounds i8, ptr %1420, i64 %1425
  %1427 = load i8, ptr %1426, align 1, !tbaa !47
  %1428 = zext i8 %1427 to i32
  %1429 = icmp ne i32 %1419, %1428
  br i1 %1429, label %1430, label %1431

1430:                                             ; preds = %1413
  br label %1435

1431:                                             ; preds = %1413
  br label %1432

1432:                                             ; preds = %1431
  %1433 = load i32, ptr %92, align 4, !tbaa !9
  %1434 = add i32 %1433, 1
  store i32 %1434, ptr %92, align 4, !tbaa !9
  br label %1409, !llvm.loop !79

1435:                                             ; preds = %1430, %1409
  %1436 = load i32, ptr %87, align 4, !tbaa !9
  %1437 = add i32 %1436, 1
  %1438 = load i32, ptr %92, align 4, !tbaa !9
  %1439 = sub i32 %1438, %1437
  store i32 %1439, ptr %92, align 4, !tbaa !9
  %1440 = load i32, ptr %92, align 4, !tbaa !9
  %1441 = icmp uge i32 %1440, 2
  br i1 %1441, label %1442, label %1571

1442:                                             ; preds = %1435
  call void @llvm.lifetime.start.p0(i64 1, ptr %94) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %94, ptr align 1 %36, i64 1, i1 false), !tbaa.struct !48
  call void @_ZN9NCompress5NLZMA6CState11UpdateMatchEv(ptr noundef nonnull align 1 dereferenceable(1) %94)
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #5
  %1443 = load i32, ptr %7, align 4, !tbaa !9
  %1444 = load i32, ptr %87, align 4, !tbaa !9
  %1445 = add i32 %1443, %1444
  %1446 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 38
  %1447 = load i32, ptr %1446, align 8, !tbaa !49
  %1448 = and i32 %1445, %1447
  store i32 %1448, ptr %95, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #5
  %1449 = load i32, ptr %89, align 4, !tbaa !9
  %1450 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 9
  %1451 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %94, i32 0, i32 0
  %1452 = load i8, ptr %1451, align 1, !tbaa !66
  %1453 = zext i8 %1452 to i64
  %1454 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %1450, i64 0, i64 %1453
  %1455 = load i32, ptr %95, align 4, !tbaa !9
  %1456 = zext i32 %1455 to i64
  %1457 = getelementptr inbounds [16 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %1454, i64 0, i64 %1456
  %1458 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice0Ev(ptr noundef nonnull align 4 dereferenceable(4) %1457)
  %1459 = add i32 %1449, %1458
  %1460 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 20
  %1461 = load i32, ptr %7, align 4, !tbaa !9
  %1462 = load i32, ptr %87, align 4, !tbaa !9
  %1463 = add i32 %1461, %1462
  %1464 = load ptr, ptr %45, align 8, !tbaa !5
  %1465 = load i32, ptr %87, align 4, !tbaa !9
  %1466 = zext i32 %1465 to i64
  %1467 = sub i64 %1466, 1
  %1468 = getelementptr inbounds i8, ptr %1464, i64 %1467
  %1469 = load i8, ptr %1468, align 1, !tbaa !47
  %1470 = load ptr, ptr %45, align 8, !tbaa !5
  %1471 = load i32, ptr %87, align 4, !tbaa !9
  %1472 = zext i32 %1471 to i64
  %1473 = load i32, ptr %91, align 4, !tbaa !9
  %1474 = zext i32 %1473 to i64
  %1475 = sub i64 %1472, %1474
  %1476 = getelementptr inbounds i8, ptr %1470, i64 %1475
  %1477 = load i8, ptr %1476, align 1, !tbaa !47
  %1478 = load ptr, ptr %45, align 8, !tbaa !5
  %1479 = load i32, ptr %87, align 4, !tbaa !9
  %1480 = zext i32 %1479 to i64
  %1481 = getelementptr inbounds i8, ptr %1478, i64 %1480
  %1482 = load i8, ptr %1481, align 1, !tbaa !47
  %1483 = call noundef i32 @_ZNK9NCompress5NLZMA15CLiteralEncoder8GetPriceEjhbhh(ptr noundef nonnull align 8 dereferenceable(20) %1460, i32 noundef %1463, i8 noundef zeroext %1469, i1 noundef zeroext true, i8 noundef zeroext %1477, i8 noundef zeroext %1482)
  %1484 = add i32 %1459, %1483
  store i32 %1484, ptr %96, align 4, !tbaa !9
  call void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1) %94)
  %1485 = load i32, ptr %7, align 4, !tbaa !9
  %1486 = load i32, ptr %87, align 4, !tbaa !9
  %1487 = add i32 %1485, %1486
  %1488 = add i32 %1487, 1
  %1489 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 38
  %1490 = load i32, ptr %1489, align 8, !tbaa !49
  %1491 = and i32 %1488, %1490
  store i32 %1491, ptr %95, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #5
  %1492 = load i32, ptr %96, align 4, !tbaa !9
  %1493 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 9
  %1494 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %94, i32 0, i32 0
  %1495 = load i8, ptr %1494, align 1, !tbaa !66
  %1496 = zext i8 %1495 to i64
  %1497 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %1493, i64 0, i64 %1496
  %1498 = load i32, ptr %95, align 4, !tbaa !9
  %1499 = zext i32 %1498 to i64
  %1500 = getelementptr inbounds [16 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %1497, i64 0, i64 %1499
  %1501 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %1500)
  %1502 = add i32 %1492, %1501
  store i32 %1502, ptr %97, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #5
  %1503 = load i32, ptr %97, align 4, !tbaa !9
  %1504 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 10
  %1505 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %94, i32 0, i32 0
  %1506 = load i8, ptr %1505, align 1, !tbaa !66
  %1507 = zext i8 %1506 to i64
  %1508 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %1504, i64 0, i64 %1507
  %1509 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %1508)
  %1510 = add i32 %1503, %1509
  store i32 %1510, ptr %98, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #5
  %1511 = load i32, ptr %87, align 4, !tbaa !9
  %1512 = add i32 %1511, 1
  %1513 = load i32, ptr %92, align 4, !tbaa !9
  %1514 = add i32 %1512, %1513
  store i32 %1514, ptr %99, align 4, !tbaa !9
  br label %1515

1515:                                             ; preds = %1521, %1442
  %1516 = load i32, ptr %33, align 4, !tbaa !9
  %1517 = load i32, ptr %32, align 4, !tbaa !9
  %1518 = load i32, ptr %99, align 4, !tbaa !9
  %1519 = add i32 %1517, %1518
  %1520 = icmp ult i32 %1516, %1519
  br i1 %1520, label %1521, label %1528

1521:                                             ; preds = %1515
  %1522 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %1523 = load i32, ptr %33, align 4, !tbaa !9
  %1524 = add i32 %1523, 1
  store i32 %1524, ptr %33, align 4, !tbaa !9
  %1525 = zext i32 %1524 to i64
  %1526 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %1522, i64 0, i64 %1525
  %1527 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1526, i32 0, i32 5
  store i32 268435455, ptr %1527, align 4, !tbaa !52
  br label %1515, !llvm.loop !80

1528:                                             ; preds = %1515
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #5
  %1529 = load i32, ptr %98, align 4, !tbaa !9
  %1530 = load i32, ptr %92, align 4, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %101, ptr align 1 %94, i64 1, i1 false), !tbaa.struct !48
  %1531 = load i32, ptr %95, align 4, !tbaa !9
  %1532 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %101, i32 0, i32 0
  %1533 = load i8, ptr %1532, align 1
  %1534 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %103, i32 noundef 0, i32 noundef %1530, i8 %1533, i32 noundef %1531)
  %1535 = add i32 %1529, %1534
  store i32 %1535, ptr %100, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #5
  %1536 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %103, i32 0, i32 6
  %1537 = load i32, ptr %32, align 4, !tbaa !9
  %1538 = load i32, ptr %99, align 4, !tbaa !9
  %1539 = add i32 %1537, %1538
  %1540 = zext i32 %1539 to i64
  %1541 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %1536, i64 0, i64 %1540
  store ptr %1541, ptr %102, align 8, !tbaa !5
  %1542 = load i32, ptr %100, align 4, !tbaa !9
  %1543 = load ptr, ptr %102, align 8, !tbaa !5
  %1544 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1543, i32 0, i32 5
  %1545 = load i32, ptr %1544, align 4, !tbaa !52
  %1546 = icmp ult i32 %1542, %1545
  br i1 %1546, label %1547, label %1570

1547:                                             ; preds = %1528
  %1548 = load i32, ptr %100, align 4, !tbaa !9
  %1549 = load ptr, ptr %102, align 8, !tbaa !5
  %1550 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1549, i32 0, i32 5
  store i32 %1548, ptr %1550, align 4, !tbaa !52
  %1551 = load i32, ptr %32, align 4, !tbaa !9
  %1552 = load i32, ptr %87, align 4, !tbaa !9
  %1553 = add i32 %1551, %1552
  %1554 = add i32 %1553, 1
  %1555 = load ptr, ptr %102, align 8, !tbaa !5
  %1556 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1555, i32 0, i32 6
  store i32 %1554, ptr %1556, align 4, !tbaa !35
  %1557 = load ptr, ptr %102, align 8, !tbaa !5
  %1558 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1557, i32 0, i32 7
  store i32 0, ptr %1558, align 4, !tbaa !37
  %1559 = load ptr, ptr %102, align 8, !tbaa !5
  %1560 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1559, i32 0, i32 1
  store i8 1, ptr %1560, align 1, !tbaa !54
  %1561 = load ptr, ptr %102, align 8, !tbaa !5
  %1562 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1561, i32 0, i32 2
  store i8 1, ptr %1562, align 2, !tbaa !59
  %1563 = load i32, ptr %32, align 4, !tbaa !9
  %1564 = load ptr, ptr %102, align 8, !tbaa !5
  %1565 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1564, i32 0, i32 3
  store i32 %1563, ptr %1565, align 4, !tbaa !60
  %1566 = load i32, ptr %88, align 4, !tbaa !9
  %1567 = add i32 %1566, 4
  %1568 = load ptr, ptr %102, align 8, !tbaa !5
  %1569 = getelementptr inbounds %"struct.NCompress::NLZMA::COptimal", ptr %1568, i32 0, i32 4
  store i32 %1567, ptr %1569, align 4, !tbaa !61
  br label %1570

1570:                                             ; preds = %1547, %1528
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %94) #5
  br label %1571

1571:                                             ; preds = %1570, %1435
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #5
  br label %1572

1572:                                             ; preds = %1571, %1389, %1381
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #5
  br label %1573

1573:                                             ; preds = %1572
  %1574 = load i32, ptr %87, align 4, !tbaa !9
  %1575 = add i32 %1574, -1
  store i32 %1575, ptr %87, align 4, !tbaa !9
  br label %1341, !llvm.loop !81

1576:                                             ; preds = %1344
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #5
  br label %1577

1577:                                             ; preds = %1576, %1305
  store i32 0, ptr %13, align 4
  br label %1578

1578:                                             ; preds = %1577, %1316, %868
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  br label %1579

1579:                                             ; preds = %1578, %723, %716
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  %1580 = load i32, ptr %13, align 4
  switch i32 %1580, label %1582 [
    i32 0, label %1581
    i32 20, label %516
  ]

1581:                                             ; preds = %1579
  br label %516, !llvm.loop !68

1582:                                             ; preds = %1579, %523
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  br label %1583

1583:                                             ; preds = %1582, %365
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #5
  br label %1584

1584:                                             ; preds = %1583, %220, %203
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #5
  br label %1585

1585:                                             ; preds = %1584, %143
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  br label %1586

1586:                                             ; preds = %1585, %109
  %1587 = load i32, ptr %5, align 4
  ret i32 %1587

1588:                                             ; preds = %1293
  unreachable
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN9NCompress5NLZMA8CEncoder18ReadMatchDistancesERj(ptr noundef nonnull align 8 dereferenceable(210678), ptr noundef nonnull align 4 dereferenceable(4)) #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK9NCompress5NLZMA15CLiteralEncoder8GetPriceEjhbhh(ptr noundef nonnull align 8 dereferenceable(20), i32 noundef, i8 noundef zeroext, i1 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK9NCompress5NLZMA6CState11IsCharStateEv(ptr noundef nonnull align 1 dereferenceable(1)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK9NCompress5NLZMA8CEncoder15GetRepLen1PriceENS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678), i8, i32 noundef) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9NCompress5NLZMA8COptimal14MakeAsShortRepEv(ptr noundef nonnull align 4 dereferenceable(40)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK9NCompress5NLZMA8CEncoder14GetPosLenPriceEjjj(ptr noundef nonnull align 8 dereferenceable(210678), i32 noundef, i32 noundef, i32 noundef) #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678), i32 noundef, i32 noundef, i8, i32 noundef) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9NCompress5NLZMA6CState9UpdateRepEv(ptr noundef nonnull align 1 dereferenceable(1)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9NCompress5NLZMA6CState11UpdateMatchEv(ptr noundef nonnull align 1 dereferenceable(1)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9NCompress5NLZMA8COptimal10IsShortRepEv(ptr noundef nonnull align 4 dereferenceable(40)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9NCompress5NLZMA6CState14UpdateShortRepEv(ptr noundef nonnull align 1 dereferenceable(1)) #3 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress 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 #4 = { mustprogress 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 #5 = { 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++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 207456}
!12 = !{!"_ZTSN9NCompress5NLZMA8CEncoderE", !13, i64 0, !15, i64 8, !16, i64 16, !17, i64 24, !18, i64 32, !20, i64 52, !7, i64 56, !21, i64 163896, !22, i64 163904, !7, i64 163984, !7, i64 164752, !7, i64 164800, !7, i64 164848, !7, i64 164896, !7, i64 164944, !7, i64 165712, !7, i64 166736, !27, i64 167192, !28, i64 167256, !28, i64 186788, !33, i64 206320, !7, i64 206344, !26, i64 207440, !26, i64 207441, !10, i64 207444, !10, i64 207448, !10, i64 207452, !10, i64 207456, !10, i64 207460, !26, i64 207464, !7, i64 207468, !7, i64 208492, !7, i64 210540, !10, i64 210604, !10, i64 210608, !10, i64 210612, !10, i64 210616, !10, i64 210620, !10, i64 210624, !10, i64 210628, !10, i64 210632, !10, i64 210636, !23, i64 210640, !23, i64 210648, !26, i64 210656, !6, i64 210664, !10, i64 210672, !26, i64 210676, !26, i64 210677}
!13 = !{!"_ZTS14ICompressCoder", !14, i64 0}
!14 = !{!"_ZTS8IUnknown"}
!15 = !{!"_ZTS21ICompressSetOutStream", !14, i64 0}
!16 = !{!"_ZTS27ICompressSetCoderProperties", !14, i64 0}
!17 = !{!"_ZTS29ICompressWriteCoderProperties", !14, i64 0}
!18 = !{!"_ZTSN9NCompress5NLZMA10CBaseStateE", !19, i64 0, !7, i64 1, !7, i64 4}
!19 = !{!"_ZTSN9NCompress5NLZMA6CStateE", !7, i64 0}
!20 = !{!"_ZTS13CMyUnknownImp", !10, i64 0}
!21 = !{!"_ZTS9CMyComPtrI12IMatchFinderE", !6, i64 0}
!22 = !{!"_ZTSN9NCompress11NRangeCoder8CEncoderE", !10, i64 0, !7, i64 4, !23, i64 8, !10, i64 16, !24, i64 24}
!23 = !{!"long long", !7, i64 0}
!24 = !{!"_ZTS10COutBuffer", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !25, i64 24, !23, i64 32, !6, i64 40, !26, i64 48}
!25 = !{!"_ZTS9CMyComPtrI20ISequentialOutStreamE", !6, i64 0}
!26 = !{!"bool", !7, i64 0}
!27 = !{!"_ZTSN9NCompress11NRangeCoder15CBitTreeEncoderILi5ELi4EEE", !7, i64 0}
!28 = !{!"_ZTSN9NCompress5NLZMA7NLength18CPriceTableEncoderE", !29, i64 0, !7, i64 2056, !10, i64 19464, !7, i64 19468}
!29 = !{!"_ZTSN9NCompress5NLZMA7NLength8CEncoderE", !30, i64 0, !30, i64 4, !7, i64 8, !7, i64 520, !32, i64 1032}
!30 = !{!"_ZTSN9NCompress11NRangeCoder11CBitEncoderILi5EEE", !31, i64 0}
!31 = !{!"_ZTSN9NCompress11NRangeCoder9CBitModelILi5EEE", !10, i64 0}
!32 = !{!"_ZTSN9NCompress11NRangeCoder15CBitTreeEncoderILi5ELi8EEE", !7, i64 0}
!33 = !{!"_ZTSN9NCompress5NLZMA15CLiteralEncoderE", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16}
!34 = !{!12, !10, i64 207460}
!35 = !{!36, !10, i64 16}
!36 = !{!"_ZTSN9NCompress5NLZMA8COptimalE", !19, i64 0, !26, i64 1, !26, i64 2, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !7, i64 24}
!37 = !{!36, !10, i64 20}
!38 = !{!12, !26, i64 207464}
!39 = !{i8 0, i8 2}
!40 = !{}
!41 = !{!12, !10, i64 207448}
!42 = !{!43, !43, i64 0}
!43 = !{!"vtable pointer", !8, i64 0}
!44 = distinct !{!44, !45}
!45 = !{!"llvm.loop.mustprogress"}
!46 = !{!12, !10, i64 207444}
!47 = !{!7, !7, i64 0}
!48 = !{i64 0, i64 1, !47}
!49 = !{!12, !10, i64 210616}
!50 = !{!18, !7, i64 0}
!51 = !{!18, !7, i64 1}
!52 = !{!36, !10, i64 12}
!53 = distinct !{!53, !45}
!54 = !{!36, !26, i64 1}
!55 = distinct !{!55, !45}
!56 = distinct !{!56, !45}
!57 = distinct !{!57, !45}
!58 = distinct !{!58, !45}
!59 = !{!36, !26, i64 2}
!60 = !{!36, !10, i64 4}
!61 = !{!36, !10, i64 8}
!62 = distinct !{!62, !45}
!63 = distinct !{!63, !45}
!64 = distinct !{!64, !45}
!65 = distinct !{!65, !45}
!66 = !{!19, !7, i64 0}
!67 = !{!26, !26, i64 0}
!68 = distinct !{!68, !45}
!69 = distinct !{!69, !45}
!70 = distinct !{!70, !45}
!71 = distinct !{!71, !45}
!72 = distinct !{!72, !45}
!73 = distinct !{!73, !45}
!74 = !{!12, !26, i64 207441}
!75 = distinct !{!75, !45}
!76 = distinct !{!76, !45}
!77 = distinct !{!77, !45}
!78 = distinct !{!78, !45}
!79 = distinct !{!79, !45}
!80 = distinct !{!80, !45}
!81 = distinct !{!81, !45}


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

%"class.NCompress::NLZMA::CState" = type { i8 }
%"struct.NCompress::NLZMA::COptimal" = type { %"class.NCompress::NLZMA::CState", i8, i8, i32, i32, i32, i32, i32, [4 x i32] }
%"class.NCompress::NRangeCoder::CBitEncoder" = type { %"class.NCompress::NRangeCoder::CBitModel" }
%"class.NCompress::NRangeCoder::CBitModel" = type { i32 }

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z5MyMinIjET_S0_S0_(i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice0Ev(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN9NCompress5NLZMA8CEncoder7MovePosEj(ptr noundef nonnull align 8 dereferenceable(210678), i32 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN9NCompress5NLZMA8CEncoder8BackwardERjj(ptr noundef nonnull align 8 dereferenceable(210678), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9NCompress5NLZMA8COptimal10MakeAsCharEv(ptr noundef nonnull align 4 dereferenceable(40)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN9NCompress5NLZMA8CEncoder10GetOptimumEjRjS2_(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef %1, ptr noundef nonnull align 4 dereferenceable(4) %2, ptr nocapture noundef nonnull writeonly align 4 dereferenceable(4) %3) local_unnamed_addr #4 align 2 {
  %5 = alloca i32, align 4
  %6 = alloca [4 x i32], align 16
  %7 = alloca [4 x i32], align 16
  %8 = alloca %"class.NCompress::NLZMA::CState", align 1
  %9 = alloca i32, align 4
  %10 = alloca %"class.NCompress::NLZMA::CState", align 1
  %11 = alloca %"class.NCompress::NLZMA::CState", align 1
  %12 = alloca %"class.NCompress::NLZMA::CState", align 1
  %13 = getelementptr inbounds i8, ptr %0, i64 207456
  %14 = load i32, ptr %13, align 8, !tbaa !5
  %15 = getelementptr inbounds i8, ptr %0, i64 207460
  %16 = load i32, ptr %15, align 4, !tbaa !32
  %.not = icmp eq i32 %14, %16
  br i1 %.not, label %27, label %17

17:                                               ; preds = %4
  %18 = getelementptr inbounds i8, ptr %0, i64 56
  %19 = zext i32 %16 to i64
  %20 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %18, i64 0, i64 %19
  %21 = getelementptr inbounds i8, ptr %20, i64 16
  %22 = load i32, ptr %21, align 8, !tbaa !33
  %23 = sub i32 %22, %16
  store i32 %23, ptr %3, align 4, !tbaa !35
  %24 = getelementptr inbounds i8, ptr %20, i64 20
  %25 = load i32, ptr %24, align 4, !tbaa !36
  store i32 %25, ptr %2, align 4, !tbaa !35
  %26 = load i32, ptr %21, align 8, !tbaa !33
  store i32 %26, ptr %15, align 4, !tbaa !32
  br label %748

27:                                               ; preds = %4
  store i32 0, ptr %15, align 4, !tbaa !32
  store i32 0, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #6
  %28 = getelementptr inbounds i8, ptr %0, i64 207464
  %29 = load i8, ptr %28, align 8, !tbaa !37, !range !38, !noundef !39
  %30 = trunc nuw i8 %29 to i1
  br i1 %30, label %33, label %31

31:                                               ; preds = %27
  %32 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder18ReadMatchDistancesERj(ptr noundef nonnull align 8 dereferenceable(210678) %0, ptr noundef nonnull align 4 dereferenceable(4) %5)
  %.not476 = icmp eq i32 %32, 0
  br i1 %.not476, label %36, label %747

33:                                               ; preds = %27
  %34 = getelementptr inbounds i8, ptr %0, i64 207448
  %35 = load i32, ptr %34, align 8, !tbaa !40
  store i32 %35, ptr %5, align 4, !tbaa !35
  store i8 0, ptr %28, align 8, !tbaa !37
  br label %36

36:                                               ; preds = %33, %31
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #6
  %37 = getelementptr inbounds i8, ptr %0, i64 36
  %38 = getelementptr inbounds i8, ptr %0, i64 163896
  %39 = getelementptr inbounds i8, ptr %0, i64 40
  %40 = getelementptr inbounds i8, ptr %6, i64 4
  %41 = getelementptr inbounds i8, ptr %7, i64 4
  %42 = getelementptr inbounds i8, ptr %0, i64 44
  %43 = getelementptr inbounds i8, ptr %7, i64 8
  %44 = getelementptr inbounds i8, ptr %0, i64 48
  %45 = load i32, ptr %37, align 4, !tbaa !35
  %46 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %38)
  %47 = load ptr, ptr %46, align 8, !tbaa !41
  %48 = getelementptr inbounds i8, ptr %47, i64 56
  %49 = load ptr, ptr %48, align 8
  %50 = call noundef i32 %49(ptr noundef nonnull align 8 dereferenceable(8) %46, i32 noundef -1, i32 noundef %45, i32 noundef 273)
  store i32 %50, ptr %7, align 16, !tbaa !35
  %51 = load i32, ptr %39, align 8, !tbaa !35
  %52 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %38)
  %53 = load ptr, ptr %52, align 8, !tbaa !41
  %54 = getelementptr inbounds i8, ptr %53, i64 56
  %55 = load ptr, ptr %54, align 8
  %56 = call noundef i32 %55(ptr noundef nonnull align 8 dereferenceable(8) %52, i32 noundef -1, i32 noundef %51, i32 noundef 273)
  store i32 %56, ptr %41, align 4, !tbaa !35
  %57 = icmp ugt i32 %56, %50
  %spec.select729 = zext i1 %57 to i32
  %58 = load i32, ptr %42, align 4, !tbaa !35
  %59 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %38)
  %60 = load ptr, ptr %59, align 8, !tbaa !41
  %61 = getelementptr inbounds i8, ptr %60, i64 56
  %62 = load ptr, ptr %61, align 8
  %63 = call noundef i32 %62(ptr noundef nonnull align 8 dereferenceable(8) %59, i32 noundef -1, i32 noundef %58, i32 noundef 273)
  store i32 %63, ptr %43, align 8, !tbaa !35
  %64 = zext i1 %57 to i64
  %65 = getelementptr inbounds [4 x i32], ptr %7, i64 0, i64 %64
  %66 = load i32, ptr %65, align 4, !tbaa !35
  %67 = icmp ugt i32 %63, %66
  %.1413.2 = select i1 %67, i32 2, i32 %spec.select729
  %68 = load i32, ptr %44, align 8, !tbaa !35
  %69 = insertelement <4 x i32> poison, i32 %45, i64 0
  %70 = insertelement <4 x i32> %69, i32 %51, i64 1
  %71 = insertelement <4 x i32> %70, i32 %58, i64 2
  %72 = insertelement <4 x i32> %71, i32 %68, i64 3
  store <4 x i32> %72, ptr %6, align 16, !tbaa !35
  %73 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %38)
  %74 = load ptr, ptr %73, align 8, !tbaa !41
  %75 = getelementptr inbounds i8, ptr %74, i64 56
  %76 = load ptr, ptr %75, align 8
  %77 = call noundef i32 %76(ptr noundef nonnull align 8 dereferenceable(8) %73, i32 noundef -1, i32 noundef %68, i32 noundef 273)
  %78 = getelementptr inbounds i8, ptr %7, i64 12
  store i32 %77, ptr %78, align 4, !tbaa !35
  %79 = zext nneg i32 %.1413.2 to i64
  %80 = getelementptr inbounds [4 x i32], ptr %7, i64 0, i64 %79
  %81 = load i32, ptr %80, align 4, !tbaa !35
  %82 = call i32 @llvm.umax.i32(i32 %77, i32 %81)
  %83 = getelementptr inbounds i8, ptr %0, i64 207444
  %84 = load i32, ptr %83, align 4, !tbaa !43
  %.not477 = icmp ult i32 %82, %84
  br i1 %.not477, label %89, label %85

85:                                               ; preds = %36
  %86 = icmp ugt i32 %77, %81
  %.1413.3 = select i1 %86, i32 3, i32 %.1413.2
  store i32 %.1413.3, ptr %2, align 4, !tbaa !35
  store i32 %82, ptr %3, align 4, !tbaa !35
  %87 = add i32 %82, -1
  %88 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder7MovePosEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef %87)
  br label %746

89:                                               ; preds = %36
  %90 = load i32, ptr %5, align 4, !tbaa !35
  %.not478 = icmp ult i32 %90, %84
  br i1 %.not478, label %99, label %91

91:                                               ; preds = %89
  %92 = getelementptr inbounds i8, ptr %0, i64 206344
  %93 = zext i32 %84 to i64
  %94 = getelementptr inbounds [274 x i32], ptr %92, i64 0, i64 %93
  %95 = load i32, ptr %94, align 4, !tbaa !35
  %96 = add i32 %95, 4
  store i32 %96, ptr %2, align 4, !tbaa !35
  store i32 %90, ptr %3, align 4, !tbaa !35
  %97 = add i32 %90, -1
  %98 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder7MovePosEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef %97)
  br label %746

99:                                               ; preds = %89
  %100 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %38)
  %101 = load ptr, ptr %100, align 8, !tbaa !41
  %102 = getelementptr inbounds i8, ptr %101, i64 48
  %103 = load ptr, ptr %102, align 8
  %104 = call noundef zeroext i8 %103(ptr noundef nonnull align 8 dereferenceable(8) %100, i32 noundef -1)
  %105 = getelementptr inbounds i8, ptr %0, i64 32
  %106 = getelementptr inbounds i8, ptr %0, i64 56
  %107 = load i8, ptr %105, align 8, !tbaa !44
  store i8 %107, ptr %106, align 8, !tbaa !44
  %108 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %38)
  %109 = load i32, ptr %37, align 4, !tbaa !35
  %110 = sub i32 -2, %109
  %111 = load ptr, ptr %108, align 8, !tbaa !41
  %112 = getelementptr inbounds i8, ptr %111, i64 48
  %113 = load ptr, ptr %112, align 8
  %114 = call noundef zeroext i8 %113(ptr noundef nonnull align 8 dereferenceable(8) %108, i32 noundef %110)
  %115 = getelementptr inbounds i8, ptr %0, i64 210616
  %116 = load i32, ptr %115, align 8, !tbaa !45
  %117 = and i32 %116, %1
  %118 = getelementptr inbounds i8, ptr %0, i64 163984
  %119 = load i8, ptr %105, align 8, !tbaa !46
  %120 = zext i8 %119 to i64
  %121 = zext i32 %117 to i64
  %122 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %118, i64 0, i64 %120, i64 %121
  %123 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice0Ev(ptr noundef nonnull align 4 dereferenceable(4) %122)
  %124 = getelementptr inbounds i8, ptr %0, i64 206320
  %125 = getelementptr inbounds i8, ptr %0, i64 33
  %126 = load i8, ptr %125, align 1, !tbaa !47
  %127 = call noundef zeroext i1 @_ZNK9NCompress5NLZMA6CState11IsCharStateEv(ptr noundef nonnull align 1 dereferenceable(1) %105)
  %128 = xor i1 %127, true
  %129 = call noundef i32 @_ZNK9NCompress5NLZMA15CLiteralEncoder8GetPriceEjhbhh(ptr noundef nonnull align 8 dereferenceable(20) %124, i32 noundef %1, i8 noundef zeroext %126, i1 noundef zeroext %128, i8 noundef zeroext %114, i8 noundef zeroext %104)
  %130 = add i32 %129, %123
  %131 = getelementptr inbounds i8, ptr %0, i64 96
  %132 = getelementptr inbounds i8, ptr %0, i64 108
  store i32 %130, ptr %132, align 4, !tbaa !48
  call void @_ZN9NCompress5NLZMA8COptimal10MakeAsCharEv(ptr noundef nonnull align 4 dereferenceable(40) %131)
  %133 = getelementptr inbounds i8, ptr %0, i64 112
  store i32 0, ptr %133, align 8, !tbaa !33
  %134 = getelementptr inbounds i8, ptr %0, i64 80
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %134, ptr noundef nonnull align 16 dereferenceable(16) %6, i64 16, i1 false), !tbaa !35
  %135 = load i8, ptr %105, align 8, !tbaa !46
  %136 = zext i8 %135 to i64
  %137 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %118, i64 0, i64 %136, i64 %121
  %138 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %137)
  %139 = getelementptr inbounds i8, ptr %0, i64 164752
  %140 = load i8, ptr %105, align 8, !tbaa !46
  %141 = zext i8 %140 to i64
  %142 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %139, i64 0, i64 %141
  %143 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %142)
  %144 = add i32 %143, %138
  %145 = icmp eq i8 %114, %104
  br i1 %145, label %146, label %152

146:                                              ; preds = %99
  %.sroa.0331.0.copyload = load i8, ptr %105, align 8, !tbaa !44
  %147 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder15GetRepLen1PriceENS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i8 %.sroa.0331.0.copyload, i32 noundef %117)
  %148 = add i32 %147, %144
  %149 = load i32, ptr %132, align 4, !tbaa !48
  %150 = icmp ult i32 %148, %149
  br i1 %150, label %151, label %152

151:                                              ; preds = %146
  store i32 %148, ptr %132, align 4, !tbaa !48
  call void @_ZN9NCompress5NLZMA8COptimal14MakeAsShortRepEv(ptr noundef nonnull align 4 dereferenceable(40) %131)
  br label %152

152:                                              ; preds = %146, %151, %99
  %153 = load i32, ptr %5, align 4, !tbaa !35
  %154 = icmp ult i32 %153, 2
  br i1 %154, label %155, label %158

155:                                              ; preds = %152
  %156 = getelementptr inbounds i8, ptr %0, i64 116
  %157 = load i32, ptr %156, align 4, !tbaa !36
  store i32 %157, ptr %2, align 4, !tbaa !35
  store i32 1, ptr %3, align 4, !tbaa !35
  br label %746

158:                                              ; preds = %152
  %159 = load i8, ptr %105, align 8, !tbaa !46
  %160 = zext i8 %159 to i64
  %161 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %139, i64 0, i64 %160
  %162 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice0Ev(ptr noundef nonnull align 4 dereferenceable(4) %161)
  %163 = add i32 %162, %138
  %164 = load i32, ptr %5, align 4, !tbaa !35
  %.not479 = icmp ugt i32 %164, %82
  br i1 %.not479, label %165, label %.thread707

.thread707:                                       ; preds = %158
  store i32 0, ptr %5, align 4, !tbaa !35
  br label %._crit_edge

165:                                              ; preds = %158
  %.not480527 = icmp ult i32 %164, 2
  br i1 %.not480527, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %165
  %166 = getelementptr inbounds i8, ptr %0, i64 206344
  br label %167

167:                                              ; preds = %.lr.ph, %167
  %.0417528 = phi i32 [ 2, %.lr.ph ], [ %180, %167 ]
  %168 = zext i32 %.0417528 to i64
  %169 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %168
  %170 = getelementptr inbounds i8, ptr %169, i64 16
  store i32 0, ptr %170, align 8, !tbaa !33
  %171 = getelementptr inbounds [274 x i32], ptr %166, i64 0, i64 %168
  %172 = load i32, ptr %171, align 4, !tbaa !35
  %173 = add i32 %172, 4
  %174 = getelementptr inbounds i8, ptr %169, i64 20
  store i32 %173, ptr %174, align 4, !tbaa !36
  %175 = load i32, ptr %171, align 4, !tbaa !35
  %176 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder14GetPosLenPriceEjjj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef %175, i32 noundef %.0417528, i32 noundef %117)
  %177 = add i32 %163, %176
  %178 = getelementptr inbounds i8, ptr %169, i64 12
  store i32 %177, ptr %178, align 4, !tbaa !48
  %179 = getelementptr inbounds i8, ptr %169, i64 1
  store i8 0, ptr %179, align 1, !tbaa !49
  %180 = add i32 %.0417528, 1
  %181 = load i32, ptr %5, align 4, !tbaa !35
  %.not480 = icmp ugt i32 %180, %181
  br i1 %.not480, label %._crit_edge, label %167, !llvm.loop !50

._crit_edge:                                      ; preds = %167, %.thread707, %165
  %.0417.lcssa = phi i32 [ 2, %165 ], [ 2, %.thread707 ], [ %180, %167 ]
  %.lcssa523 = phi i32 [ 1, %165 ], [ 0, %.thread707 ], [ %181, %167 ]
  %182 = icmp ult i32 %.lcssa523, %82
  br i1 %182, label %183, label %184

183:                                              ; preds = %._crit_edge
  store i32 %82, ptr %5, align 4, !tbaa !35
  br label %184

184:                                              ; preds = %183, %._crit_edge
  %185 = phi i32 [ %82, %183 ], [ %.lcssa523, %._crit_edge ]
  %.not481530 = icmp ugt i32 %.0417.lcssa, %185
  br i1 %.not481530, label %.preheader512, label %.lr.ph533

.preheader512:                                    ; preds = %.lr.ph533, %184
  %.not493534 = icmp ult i32 %50, 2
  br i1 %.not493534, label %._crit_edge538, label %.lr.ph537

.lr.ph533:                                        ; preds = %184, %.lr.ph533
  %.1418531 = phi i32 [ %188, %.lr.ph533 ], [ %.0417.lcssa, %184 ]
  %186 = zext i32 %.1418531 to i64
  %187 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %186, i32 5
  store i32 268435455, ptr %187, align 4, !tbaa !48
  %188 = add i32 %.1418531, 1
  %.not481 = icmp ugt i32 %188, %185
  br i1 %.not481, label %.preheader512, label %.lr.ph533, !llvm.loop !52

._crit_edge538:                                   ; preds = %241, %.preheader512
  %.not493534.1 = icmp ult i32 %56, 2
  br i1 %.not493534.1, label %._crit_edge538.1, label %.lr.ph537.1

.lr.ph537.1:                                      ; preds = %._crit_edge538, %200
  %.0419535.1 = phi i32 [ %201, %200 ], [ 2, %._crit_edge538 ]
  %.sroa.0310.0.copyload.1 = load i8, ptr %105, align 8, !tbaa !44
  %189 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef 1, i32 noundef %.0419535.1, i8 %.sroa.0310.0.copyload.1, i32 noundef %117)
  %190 = add i32 %189, %144
  %191 = zext i32 %.0419535.1 to i64
  %192 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %191
  %193 = getelementptr inbounds i8, ptr %192, i64 12
  %194 = load i32, ptr %193, align 4, !tbaa !48
  %195 = icmp ult i32 %190, %194
  br i1 %195, label %196, label %200

196:                                              ; preds = %.lr.ph537.1
  store i32 %190, ptr %193, align 4, !tbaa !48
  %197 = getelementptr inbounds i8, ptr %192, i64 16
  store i32 0, ptr %197, align 8, !tbaa !33
  %198 = getelementptr inbounds i8, ptr %192, i64 20
  store i32 1, ptr %198, align 4, !tbaa !36
  %199 = getelementptr inbounds i8, ptr %192, i64 1
  store i8 0, ptr %199, align 1, !tbaa !49
  br label %200

200:                                              ; preds = %196, %.lr.ph537.1
  %201 = add i32 %.0419535.1, 1
  %.not493.1 = icmp ugt i32 %201, %56
  br i1 %.not493.1, label %._crit_edge538.1, label %.lr.ph537.1, !llvm.loop !53

._crit_edge538.1:                                 ; preds = %200, %._crit_edge538
  %.not493534.2 = icmp ult i32 %63, 2
  br i1 %.not493534.2, label %._crit_edge538.2, label %.lr.ph537.2

.lr.ph537.2:                                      ; preds = %._crit_edge538.1, %213
  %.0419535.2 = phi i32 [ %214, %213 ], [ 2, %._crit_edge538.1 ]
  %.sroa.0310.0.copyload.2 = load i8, ptr %105, align 8, !tbaa !44
  %202 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef 2, i32 noundef %.0419535.2, i8 %.sroa.0310.0.copyload.2, i32 noundef %117)
  %203 = add i32 %202, %144
  %204 = zext i32 %.0419535.2 to i64
  %205 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %204
  %206 = getelementptr inbounds i8, ptr %205, i64 12
  %207 = load i32, ptr %206, align 4, !tbaa !48
  %208 = icmp ult i32 %203, %207
  br i1 %208, label %209, label %213

209:                                              ; preds = %.lr.ph537.2
  store i32 %203, ptr %206, align 4, !tbaa !48
  %210 = getelementptr inbounds i8, ptr %205, i64 16
  store i32 0, ptr %210, align 8, !tbaa !33
  %211 = getelementptr inbounds i8, ptr %205, i64 20
  store i32 2, ptr %211, align 4, !tbaa !36
  %212 = getelementptr inbounds i8, ptr %205, i64 1
  store i8 0, ptr %212, align 1, !tbaa !49
  br label %213

213:                                              ; preds = %209, %.lr.ph537.2
  %214 = add i32 %.0419535.2, 1
  %.not493.2 = icmp ugt i32 %214, %63
  br i1 %.not493.2, label %._crit_edge538.2, label %.lr.ph537.2, !llvm.loop !53

._crit_edge538.2:                                 ; preds = %213, %._crit_edge538.1
  %.not493534.3 = icmp ult i32 %77, 2
  br i1 %.not493534.3, label %._crit_edge538.3, label %.lr.ph537.3

.lr.ph537.3:                                      ; preds = %._crit_edge538.2, %226
  %.0419535.3 = phi i32 [ %227, %226 ], [ 2, %._crit_edge538.2 ]
  %.sroa.0310.0.copyload.3 = load i8, ptr %105, align 8, !tbaa !44
  %215 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef 3, i32 noundef %.0419535.3, i8 %.sroa.0310.0.copyload.3, i32 noundef %117)
  %216 = add i32 %215, %144
  %217 = zext i32 %.0419535.3 to i64
  %218 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %217
  %219 = getelementptr inbounds i8, ptr %218, i64 12
  %220 = load i32, ptr %219, align 4, !tbaa !48
  %221 = icmp ult i32 %216, %220
  br i1 %221, label %222, label %226

222:                                              ; preds = %.lr.ph537.3
  store i32 %216, ptr %219, align 4, !tbaa !48
  %223 = getelementptr inbounds i8, ptr %218, i64 16
  store i32 0, ptr %223, align 8, !tbaa !33
  %224 = getelementptr inbounds i8, ptr %218, i64 20
  store i32 3, ptr %224, align 4, !tbaa !36
  %225 = getelementptr inbounds i8, ptr %218, i64 1
  store i8 0, ptr %225, align 1, !tbaa !49
  br label %226

226:                                              ; preds = %222, %.lr.ph537.3
  %227 = add i32 %.0419535.3, 1
  %.not493.3 = icmp ugt i32 %227, %77
  br i1 %.not493.3, label %._crit_edge538.3, label %.lr.ph537.3, !llvm.loop !53

._crit_edge538.3:                                 ; preds = %226, %._crit_edge538.2
  %228 = load i32, ptr %5, align 4, !tbaa !35
  %229 = icmp eq i32 %228, 1
  br i1 %229, label %._crit_edge611, label %.lr.ph610

.lr.ph537:                                        ; preds = %.preheader512, %241
  %.0419535 = phi i32 [ %242, %241 ], [ 2, %.preheader512 ]
  %.sroa.0310.0.copyload = load i8, ptr %105, align 8, !tbaa !44
  %230 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef 0, i32 noundef %.0419535, i8 %.sroa.0310.0.copyload, i32 noundef %117)
  %231 = add i32 %230, %144
  %232 = zext i32 %.0419535 to i64
  %233 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %232
  %234 = getelementptr inbounds i8, ptr %233, i64 12
  %235 = load i32, ptr %234, align 4, !tbaa !48
  %236 = icmp ult i32 %231, %235
  br i1 %236, label %237, label %241

237:                                              ; preds = %.lr.ph537
  store i32 %231, ptr %234, align 4, !tbaa !48
  %238 = getelementptr inbounds i8, ptr %233, i64 16
  store i32 0, ptr %238, align 8, !tbaa !33
  %239 = getelementptr inbounds i8, ptr %233, i64 20
  store i32 0, ptr %239, align 4, !tbaa !36
  %240 = getelementptr inbounds i8, ptr %233, i64 1
  store i8 0, ptr %240, align 1, !tbaa !49
  br label %241

241:                                              ; preds = %237, %.lr.ph537
  %242 = add i32 %.0419535, 1
  %.not493 = icmp ugt i32 %242, %50
  br i1 %.not493, label %._crit_edge538, label %.lr.ph537, !llvm.loop !53

.lr.ph610:                                        ; preds = %._crit_edge538.3
  %243 = getelementptr inbounds i8, ptr %0, i64 207441
  %244 = getelementptr inbounds i8, ptr %0, i64 206352
  %245 = getelementptr inbounds i8, ptr %0, i64 206344
  br label %247

._crit_edge611:                                   ; preds = %.loopexit, %._crit_edge538.3
  %.lcssa517 = phi i32 [ 1, %._crit_edge538.3 ], [ %.pre-phi, %.loopexit ]
  %246 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder8BackwardERjj(ptr noundef nonnull align 8 dereferenceable(210678) %0, ptr noundef nonnull align 4 dereferenceable(4) %2, i32 noundef %.lcssa517)
  store i32 %246, ptr %3, align 4, !tbaa !35
  br label %746

247:                                              ; preds = %.lr.ph610, %.loopexit
  %248 = phi i32 [ 1, %.lr.ph610 ], [ %.pre-phi, %.loopexit ]
  %.0407607 = phi i32 [ %1, %.lr.ph610 ], [ %251, %.loopexit ]
  %.0420606 = phi i32 [ 0, %.lr.ph610 ], [ %248, %.loopexit ]
  %.0422605 = phi i32 [ %228, %.lr.ph610 ], [ %.18, %.loopexit ]
  %249 = zext i32 %248 to i64
  %250 = mul nuw nsw i64 %249, 40
  %scevgep644 = getelementptr i8, ptr %134, i64 %250
  %251 = add i32 %.0407607, 1
  %252 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %249
  %253 = getelementptr inbounds i8, ptr %252, i64 16
  %254 = load i32, ptr %253, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #6
  %255 = getelementptr inbounds i8, ptr %252, i64 1
  %256 = load i8, ptr %255, align 1, !tbaa !49, !range !38, !noundef !39
  %257 = trunc nuw i8 %256 to i1
  br i1 %257, label %258, label %279

258:                                              ; preds = %247
  %259 = add i32 %254, -1
  %260 = getelementptr inbounds i8, ptr %252, i64 2
  %261 = load i8, ptr %260, align 2, !tbaa !54, !range !38, !noundef !39
  %262 = trunc nuw i8 %261 to i1
  br i1 %262, label %263, label %274

263:                                              ; preds = %258
  %264 = getelementptr inbounds i8, ptr %252, i64 4
  %265 = load i32, ptr %264, align 4, !tbaa !55
  %266 = zext i32 %265 to i64
  %267 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %266
  %268 = load i8, ptr %267, align 8, !tbaa !44
  store i8 %268, ptr %8, align 1, !tbaa !44
  %269 = getelementptr inbounds i8, ptr %252, i64 8
  %270 = load i32, ptr %269, align 8, !tbaa !56
  %271 = icmp ult i32 %270, 4
  br i1 %271, label %272, label %273

272:                                              ; preds = %263
  call void @_ZN9NCompress5NLZMA6CState9UpdateRepEv(ptr noundef nonnull align 1 dereferenceable(1) %8)
  br label %278

273:                                              ; preds = %263
  call void @_ZN9NCompress5NLZMA6CState11UpdateMatchEv(ptr noundef nonnull align 1 dereferenceable(1) %8)
  br label %278

274:                                              ; preds = %258
  %275 = zext i32 %259 to i64
  %276 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %275
  %277 = load i8, ptr %276, align 8, !tbaa !44
  store i8 %277, ptr %8, align 1, !tbaa !44
  br label %278

278:                                              ; preds = %272, %273, %274
  call void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1) %8)
  br label %283

279:                                              ; preds = %247
  %280 = zext i32 %254 to i64
  %281 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %280
  %282 = load i8, ptr %281, align 8, !tbaa !44
  store i8 %282, ptr %8, align 1, !tbaa !44
  br label %283

283:                                              ; preds = %279, %278
  %.0432 = phi i32 [ %259, %278 ], [ %254, %279 ]
  %284 = icmp eq i32 %.0432, %.0420606
  br i1 %284, label %285, label %289

285:                                              ; preds = %283
  %286 = call noundef zeroext i1 @_ZN9NCompress5NLZMA8COptimal10IsShortRepEv(ptr noundef nonnull align 4 dereferenceable(40) %252)
  br i1 %286, label %287, label %288

287:                                              ; preds = %285
  call void @_ZN9NCompress5NLZMA6CState14UpdateShortRepEv(ptr noundef nonnull align 1 dereferenceable(1) %8)
  br label %.loopexit510

288:                                              ; preds = %285
  call void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1) %8)
  br label %.loopexit510

289:                                              ; preds = %283
  %290 = load i8, ptr %255, align 1, !tbaa !49, !range !38, !noundef !39
  %291 = trunc nuw i8 %290 to i1
  br i1 %291, label %292, label %296

292:                                              ; preds = %289
  %293 = getelementptr inbounds i8, ptr %252, i64 2
  %294 = load i8, ptr %293, align 2, !tbaa !54, !range !38, !noundef !39
  %295 = trunc nuw i8 %294 to i1
  br i1 %295, label %301, label %296

296:                                              ; preds = %292, %289
  %297 = getelementptr inbounds i8, ptr %252, i64 20
  %298 = load i32, ptr %297, align 4, !tbaa !36
  %299 = icmp ult i32 %298, 4
  %300 = zext i32 %.0432 to i64
  br i1 %299, label %.thread, label %.thread500

.thread:                                          ; preds = %296
  call void @_ZN9NCompress5NLZMA6CState9UpdateRepEv(ptr noundef nonnull align 1 dereferenceable(1) %8)
  br label %308

.thread500:                                       ; preds = %296
  call void @_ZN9NCompress5NLZMA6CState11UpdateMatchEv(ptr noundef nonnull align 1 dereferenceable(1) %8)
  br label %.loopexit510.loopexit613

301:                                              ; preds = %292
  %302 = getelementptr inbounds i8, ptr %252, i64 4
  %303 = load i32, ptr %302, align 4, !tbaa !55
  %304 = getelementptr inbounds i8, ptr %252, i64 8
  %305 = load i32, ptr %304, align 8, !tbaa !56
  call void @_ZN9NCompress5NLZMA6CState9UpdateRepEv(ptr noundef nonnull align 1 dereferenceable(1) %8)
  %306 = zext i32 %303 to i64
  %307 = icmp ult i32 %305, 4
  br i1 %307, label %308, label %.loopexit510.loopexit613

308:                                              ; preds = %.thread, %301
  %.pn = phi i64 [ %300, %.thread ], [ %306, %301 ]
  %.0434499 = phi i32 [ %298, %.thread ], [ %305, %301 ]
  %309 = zext nneg i32 %.0434499 to i64
  %310 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %.pn, i32 8, i64 %309
  %311 = load i32, ptr %310, align 4, !tbaa !35
  store i32 %311, ptr %6, align 16, !tbaa !35
  %.not482541 = icmp eq i32 %.0434499, 0
  br i1 %.not482541, label %.lr.ph547.preheader, label %.preheader509

.preheader509:                                    ; preds = %308
  %312 = mul nuw nsw i64 %.pn, 40
  %scevgep637 = getelementptr i8, ptr %134, i64 %312
  %313 = shl nuw nsw i64 %309, 2
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %40, ptr align 8 %scevgep637, i64 %313, i1 false), !tbaa !35
  %314 = add nuw nsw i32 %.0434499, 1
  %315 = icmp ult i32 %.0434499, 3
  br i1 %315, label %.lr.ph547.preheader, label %.loopexit510

.lr.ph547.preheader:                              ; preds = %308, %.preheader509
  %.0435.lcssa710 = phi i32 [ %314, %.preheader509 ], [ 1, %308 ]
  %316 = shl nuw nsw i32 %.0435.lcssa710, 2
  %317 = zext nneg i32 %316 to i64
  %scevgep639 = getelementptr i8, ptr %6, i64 %317
  %318 = mul nuw nsw i64 %.pn, 40
  %319 = getelementptr i8, ptr %134, i64 %318
  %scevgep641 = getelementptr i8, ptr %319, i64 %317
  %320 = shl nuw nsw i32 %.0434499, 2
  %321 = sub nsw i32 8, %320
  %322 = zext i32 %321 to i64
  %323 = add nuw nsw i64 %322, 4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %scevgep639, ptr noundef nonnull align 4 dereferenceable(1) %scevgep641, i64 %323, i1 false), !tbaa !35
  br label %.loopexit510

.loopexit510.loopexit613:                         ; preds = %.thread500, %301
  %324 = phi i64 [ %300, %.thread500 ], [ %306, %301 ]
  %.0434503 = phi i32 [ %298, %.thread500 ], [ %305, %301 ]
  %325 = add i32 %.0434503, -4
  store i32 %325, ptr %6, align 16, !tbaa !35
  %326 = mul nuw nsw i64 %324, 40
  %scevgep634 = getelementptr i8, ptr %134, i64 %326
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %40, ptr noundef nonnull align 8 dereferenceable(12) %scevgep634, i64 12, i1 false), !tbaa !35
  br label %.loopexit510

.loopexit510:                                     ; preds = %.loopexit510.loopexit613, %.lr.ph547.preheader, %.preheader509, %287, %288
  %327 = load i8, ptr %8, align 1, !tbaa !44
  store i8 %327, ptr %252, align 8, !tbaa !44
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %scevgep644, ptr noundef nonnull align 16 dereferenceable(16) %6, i64 16, i1 false), !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #6
  %328 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder18ReadMatchDistancesERj(ptr noundef nonnull align 8 dereferenceable(210678) %0, ptr noundef nonnull align 4 dereferenceable(4) %9)
  %.not483 = icmp eq i32 %328, 0
  br i1 %.not483, label %329, label %.thread504

329:                                              ; preds = %.loopexit510
  %330 = load i32, ptr %9, align 4, !tbaa !35
  %331 = load i32, ptr %83, align 4, !tbaa !43
  %.not484 = icmp ult i32 %330, %331
  br i1 %.not484, label %335, label %332

332:                                              ; preds = %329
  %333 = getelementptr inbounds i8, ptr %0, i64 207448
  store i32 %330, ptr %333, align 8, !tbaa !40
  store i8 1, ptr %28, align 8, !tbaa !37
  %334 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder8BackwardERjj(ptr noundef nonnull align 8 dereferenceable(210678) %0, ptr noundef nonnull align 4 dereferenceable(4) %2, i32 noundef %248)
  store i32 %334, ptr %3, align 4, !tbaa !35
  br label %.thread504

335:                                              ; preds = %329
  %336 = getelementptr inbounds i8, ptr %252, i64 12
  %337 = load i32, ptr %336, align 4, !tbaa !48
  %338 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %38)
  %339 = load ptr, ptr %338, align 8, !tbaa !41
  %340 = getelementptr inbounds i8, ptr %339, i64 72
  %341 = load ptr, ptr %340, align 8
  %342 = call noundef ptr %341(ptr noundef nonnull align 8 dereferenceable(8) %338)
  %343 = getelementptr inbounds i8, ptr %342, i64 -1
  %344 = load i8, ptr %343, align 1, !tbaa !44
  %345 = load i32, ptr %6, align 16, !tbaa !35
  %346 = zext i32 %345 to i64
  %347 = xor i64 %346, -1
  %348 = getelementptr inbounds i8, ptr %343, i64 %347
  %349 = load i8, ptr %348, align 1, !tbaa !44
  %350 = load i32, ptr %115, align 8, !tbaa !45
  %351 = and i32 %350, %251
  %352 = load i8, ptr %8, align 1, !tbaa !57
  %353 = zext i8 %352 to i64
  %354 = zext i32 %351 to i64
  %355 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %118, i64 0, i64 %353, i64 %354
  %356 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice0Ev(ptr noundef nonnull align 4 dereferenceable(4) %355)
  %357 = add i32 %356, %337
  %358 = getelementptr inbounds i8, ptr %342, i64 -2
  %359 = load i8, ptr %358, align 1, !tbaa !44
  %360 = call noundef zeroext i1 @_ZNK9NCompress5NLZMA6CState11IsCharStateEv(ptr noundef nonnull align 1 dereferenceable(1) %8)
  %361 = xor i1 %360, true
  %362 = call noundef i32 @_ZNK9NCompress5NLZMA15CLiteralEncoder8GetPriceEjhbhh(ptr noundef nonnull align 8 dereferenceable(20) %124, i32 noundef %251, i8 noundef zeroext %359, i1 noundef zeroext %361, i8 noundef zeroext %349, i8 noundef zeroext %344)
  %363 = add i32 %357, %362
  %364 = add i32 %.0420606, 2
  %365 = zext i32 %364 to i64
  %366 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %365
  %367 = getelementptr inbounds i8, ptr %366, i64 12
  %368 = load i32, ptr %367, align 4, !tbaa !48
  %369 = icmp ult i32 %363, %368
  br i1 %369, label %370, label %372

370:                                              ; preds = %335
  store i32 %363, ptr %367, align 4, !tbaa !48
  %371 = getelementptr inbounds i8, ptr %366, i64 16
  store i32 %248, ptr %371, align 8, !tbaa !33
  call void @_ZN9NCompress5NLZMA8COptimal10MakeAsCharEv(ptr noundef nonnull align 4 dereferenceable(40) %366)
  br label %372

372:                                              ; preds = %370, %335
  %373 = load i8, ptr %8, align 1, !tbaa !57
  %374 = zext i8 %373 to i64
  %375 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %118, i64 0, i64 %374, i64 %354
  %376 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %375)
  %377 = add i32 %376, %337
  %378 = load i8, ptr %8, align 1, !tbaa !57
  %379 = zext i8 %378 to i64
  %380 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %139, i64 0, i64 %379
  %381 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %380)
  %382 = add i32 %381, %377
  %383 = icmp eq i8 %349, %344
  br i1 %383, label %384, label %397

384:                                              ; preds = %372
  %385 = getelementptr inbounds i8, ptr %366, i64 16
  %386 = load i32, ptr %385, align 8, !tbaa !33
  %387 = icmp ult i32 %386, %248
  br i1 %387, label %388, label %392

388:                                              ; preds = %384
  %389 = getelementptr inbounds i8, ptr %366, i64 20
  %390 = load i32, ptr %389, align 4, !tbaa !36
  %391 = icmp eq i32 %390, 0
  br i1 %391, label %397, label %392

392:                                              ; preds = %388, %384
  %.sroa.0165.0.copyload = load i8, ptr %8, align 1, !tbaa !44
  %393 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder15GetRepLen1PriceENS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i8 %.sroa.0165.0.copyload, i32 noundef %351)
  %394 = add i32 %393, %382
  %395 = load i32, ptr %367, align 4, !tbaa !48
  %.not485 = icmp ugt i32 %394, %395
  br i1 %.not485, label %397, label %396

396:                                              ; preds = %392
  store i32 %394, ptr %367, align 4, !tbaa !48
  store i32 %248, ptr %385, align 8, !tbaa !33
  call void @_ZN9NCompress5NLZMA8COptimal14MakeAsShortRepEv(ptr noundef nonnull align 4 dereferenceable(40) %366)
  br label %397

397:                                              ; preds = %392, %396, %388, %372
  %398 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %38)
  %399 = load ptr, ptr %398, align 8, !tbaa !41
  %400 = getelementptr inbounds i8, ptr %399, i64 64
  %401 = load ptr, ptr %400, align 8
  %402 = call noundef i32 %401(ptr noundef nonnull align 8 dereferenceable(8) %398)
  %403 = add i32 %402, 1
  %404 = sub i32 4094, %.0420606
  %405 = call noundef i32 @_Z5MyMinIjET_S0_S0_(i32 noundef %404, i32 noundef %403)
  %406 = icmp ult i32 %405, 2
  br i1 %406, label %..loopexit_crit_edge, label %407, !llvm.loop !58

..loopexit_crit_edge:                             ; preds = %397
  %.pre = add i32 %248, 1
  br label %.loopexit

407:                                              ; preds = %397
  %408 = load i32, ptr %83, align 4, !tbaa !43
  %spec.select = call i32 @llvm.umin.i32(i32 %405, i32 %408)
  %409 = icmp ult i32 %spec.select, 3
  %brmerge = or i1 %369, %409
  br i1 %brmerge, label %464, label %410

410:                                              ; preds = %407
  %411 = add i32 %345, 1
  %412 = zext i32 %411 to i64
  %wide.trip.count647 = zext i32 %spec.select to i64
  br label %413

413:                                              ; preds = %410, %419
  %indvars.iv = phi i64 [ 1, %410 ], [ %indvars.iv.next, %419 ]
  %414 = getelementptr inbounds i8, ptr %343, i64 %indvars.iv
  %415 = load i8, ptr %414, align 1, !tbaa !44
  %416 = sub nsw i64 %indvars.iv, %412
  %417 = getelementptr inbounds i8, ptr %343, i64 %416
  %418 = load i8, ptr %417, align 1, !tbaa !44
  %.not486 = icmp eq i8 %415, %418
  br i1 %.not486, label %419, label %.split.loop.exit

419:                                              ; preds = %413
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count647
  br i1 %exitcond.not, label %.split.loop.exit721, label %413, !llvm.loop !59

.split.loop.exit:                                 ; preds = %413
  %420 = trunc nuw i64 %indvars.iv to i32
  br label %.split.loop.exit721

.split.loop.exit721:                              ; preds = %419, %.split.loop.exit
  %.0442.lcssa = phi i32 [ %420, %.split.loop.exit ], [ %spec.select, %419 ]
  %421 = add i32 %.0442.lcssa, -1
  %422 = icmp ugt i32 %421, 1
  br i1 %422, label %423, label %464

423:                                              ; preds = %.split.loop.exit721
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #6
  %424 = load i8, ptr %8, align 1, !tbaa !44
  store i8 %424, ptr %10, align 1, !tbaa !44
  call void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1) %10)
  %425 = add i32 %.0407607, 2
  %426 = load i32, ptr %115, align 8, !tbaa !45
  %427 = and i32 %426, %425
  %428 = load i8, ptr %10, align 1, !tbaa !57
  %429 = zext i8 %428 to i64
  %430 = zext i32 %427 to i64
  %431 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %118, i64 0, i64 %429, i64 %430
  %432 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %431)
  %433 = add i32 %432, %363
  %434 = load i8, ptr %10, align 1, !tbaa !57
  %435 = zext i8 %434 to i64
  %436 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %139, i64 0, i64 %435
  %437 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %436)
  %438 = add i32 %433, %437
  %439 = add i32 %421, %364
  %440 = icmp ult i32 %.0422605, %439
  br i1 %440, label %.lr.ph552.preheader, label %._crit_edge553

.lr.ph552.preheader:                              ; preds = %423
  %441 = zext i32 %.0422605 to i64
  %442 = add i32 %.0442.lcssa, %248
  %wide.trip.count651 = zext i32 %442 to i64
  %443 = sub nsw i64 %wide.trip.count651, %441
  %xtraiter = and i64 %443, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph552.prol.loopexit, label %.lr.ph552.prol

.lr.ph552.prol:                                   ; preds = %.lr.ph552.preheader, %.lr.ph552.prol
  %indvars.iv648.prol = phi i64 [ %indvars.iv.next649.prol, %.lr.ph552.prol ], [ %441, %.lr.ph552.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph552.prol ], [ 0, %.lr.ph552.preheader ]
  %indvars.iv.next649.prol = add nuw nsw i64 %indvars.iv648.prol, 1
  %444 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next649.prol, i32 5
  store i32 268435455, ptr %444, align 4, !tbaa !48
  %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.ph552.prol.loopexit, label %.lr.ph552.prol, !llvm.loop !60

.lr.ph552.prol.loopexit:                          ; preds = %.lr.ph552.prol, %.lr.ph552.preheader
  %indvars.iv648.unr = phi i64 [ %441, %.lr.ph552.preheader ], [ %indvars.iv.next649.prol, %.lr.ph552.prol ]
  %445 = sub nsw i64 %441, %wide.trip.count651
  %446 = icmp ugt i64 %445, -4
  br i1 %446, label %._crit_edge553, label %.lr.ph552

.lr.ph552:                                        ; preds = %.lr.ph552.prol.loopexit, %.lr.ph552
  %indvars.iv648 = phi i64 [ %indvars.iv.next649.3, %.lr.ph552 ], [ %indvars.iv648.unr, %.lr.ph552.prol.loopexit ]
  %indvars.iv.next649 = add nuw nsw i64 %indvars.iv648, 1
  %447 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next649, i32 5
  store i32 268435455, ptr %447, align 4, !tbaa !48
  %indvars.iv.next649.1 = add nuw nsw i64 %indvars.iv648, 2
  %448 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next649.1, i32 5
  store i32 268435455, ptr %448, align 4, !tbaa !48
  %indvars.iv.next649.2 = add nuw nsw i64 %indvars.iv648, 3
  %449 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next649.2, i32 5
  store i32 268435455, ptr %449, align 4, !tbaa !48
  %indvars.iv.next649.3 = add nuw nsw i64 %indvars.iv648, 4
  %450 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next649.3, i32 5
  store i32 268435455, ptr %450, align 4, !tbaa !48
  %exitcond652.not.3 = icmp eq i64 %indvars.iv.next649.3, %wide.trip.count651
  br i1 %exitcond652.not.3, label %._crit_edge553, label %.lr.ph552, !llvm.loop !62

._crit_edge553:                                   ; preds = %.lr.ph552.prol.loopexit, %.lr.ph552, %423
  %.1423.lcssa = phi i32 [ %.0422605, %423 ], [ %442, %.lr.ph552 ], [ %442, %.lr.ph552.prol.loopexit ]
  %.sroa.0138.0.copyload = load i8, ptr %10, align 1, !tbaa !44
  %451 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef 0, i32 noundef %421, i8 %.sroa.0138.0.copyload, i32 noundef %427)
  %452 = add i32 %438, %451
  %453 = zext i32 %439 to i64
  %454 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %453
  %455 = getelementptr inbounds i8, ptr %454, i64 12
  %456 = load i32, ptr %455, align 4, !tbaa !48
  %457 = icmp ult i32 %452, %456
  br i1 %457, label %458, label %463

458:                                              ; preds = %._crit_edge553
  store i32 %452, ptr %455, align 4, !tbaa !48
  %459 = getelementptr inbounds i8, ptr %454, i64 16
  store i32 %364, ptr %459, align 8, !tbaa !33
  %460 = getelementptr inbounds i8, ptr %454, i64 20
  store i32 0, ptr %460, align 4, !tbaa !36
  %461 = getelementptr inbounds i8, ptr %454, i64 1
  store i8 1, ptr %461, align 1, !tbaa !49
  %462 = getelementptr inbounds i8, ptr %454, i64 2
  store i8 0, ptr %462, align 2, !tbaa !54
  br label %463

463:                                              ; preds = %458, %._crit_edge553
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #6
  br label %464

464:                                              ; preds = %.split.loop.exit721, %463, %407
  %.3425 = phi i32 [ %.0422605, %407 ], [ %.1423.lcssa, %463 ], [ %.0422605, %.split.loop.exit721 ]
  %465 = icmp ugt i32 %spec.select, 2
  %466 = add i32 %248, 1
  %wide.trip.count656 = zext i32 %spec.select to i64
  br label %470

467:                                              ; preds = %605
  %468 = load i32, ptr %9, align 4, !tbaa !35
  %469 = icmp ugt i32 %468, %spec.select
  br i1 %469, label %606, label %607

470:                                              ; preds = %464, %605
  %indvars.iv670 = phi i64 [ 0, %464 ], [ %indvars.iv.next671, %605 ]
  %.4426582 = phi i32 [ %.3425, %464 ], [ %.10, %605 ]
  %471 = getelementptr inbounds [4 x i32], ptr %6, i64 0, i64 %indvars.iv670
  %472 = load i32, ptr %471, align 4, !tbaa !35
  %473 = add i32 %472, 1
  %474 = load i8, ptr %343, align 1, !tbaa !44
  %475 = zext i32 %473 to i64
  %476 = sub nsw i64 0, %475
  %477 = getelementptr inbounds i8, ptr %343, i64 %476
  %478 = load i8, ptr %477, align 1, !tbaa !44
  %.not489 = icmp eq i8 %474, %478
  br i1 %.not489, label %479, label %605

479:                                              ; preds = %470
  %480 = load i8, ptr %342, align 1, !tbaa !44
  %481 = sub nsw i64 1, %475
  %482 = getelementptr inbounds i8, ptr %343, i64 %481
  %483 = load i8, ptr %482, align 1, !tbaa !44
  %.not490 = icmp eq i8 %480, %483
  br i1 %.not490, label %.preheader, label %605

.preheader:                                       ; preds = %479
  br i1 %465, label %.lr.ph557, label %._crit_edge558

.lr.ph557:                                        ; preds = %.preheader, %489
  %indvars.iv653 = phi i64 [ %indvars.iv.next654, %489 ], [ 2, %.preheader ]
  %484 = getelementptr inbounds i8, ptr %343, i64 %indvars.iv653
  %485 = load i8, ptr %484, align 1, !tbaa !44
  %486 = sub nsw i64 %indvars.iv653, %475
  %487 = getelementptr inbounds i8, ptr %343, i64 %486
  %488 = load i8, ptr %487, align 1, !tbaa !44
  %.not491 = icmp eq i8 %485, %488
  br i1 %.not491, label %489, label %._crit_edge558.loopexit.split.loop.exit

489:                                              ; preds = %.lr.ph557
  %indvars.iv.next654 = add nuw nsw i64 %indvars.iv653, 1
  %exitcond657.not = icmp eq i64 %indvars.iv.next654, %wide.trip.count656
  br i1 %exitcond657.not, label %._crit_edge558, label %.lr.ph557, !llvm.loop !63

._crit_edge558.loopexit.split.loop.exit:          ; preds = %.lr.ph557
  %490 = trunc nuw i64 %indvars.iv653 to i32
  br label %._crit_edge558

._crit_edge558:                                   ; preds = %489, %._crit_edge558.loopexit.split.loop.exit, %.preheader
  %.0444.lcssa = phi i32 [ 2, %.preheader ], [ %490, %._crit_edge558.loopexit.split.loop.exit ], [ %spec.select, %489 ]
  %491 = trunc nuw nsw i64 %indvars.iv670 to i32
  %492 = add i32 %248, %.0444.lcssa
  br label %493

493:                                              ; preds = %520, %._crit_edge558
  %indvar = phi i32 [ %indvar.next, %520 ], [ 0, %._crit_edge558 ]
  %.1445 = phi i32 [ %521, %520 ], [ %.0444.lcssa, %._crit_edge558 ]
  %.5427 = phi i32 [ %.6428.lcssa, %520 ], [ %.4426582, %._crit_edge558 ]
  %494 = add i32 %.1445, %248
  %495 = icmp ult i32 %.5427, %494
  br i1 %495, label %.lr.ph564.preheader, label %.._crit_edge565_crit_edge

.._crit_edge565_crit_edge:                        ; preds = %493
  %.pre698 = zext i32 %494 to i64
  br label %._crit_edge565

.lr.ph564.preheader:                              ; preds = %493
  %496 = sub i32 %492, %indvar
  %497 = zext i32 %496 to i64
  %498 = zext i32 %.5427 to i64
  %499 = zext i32 %494 to i64
  %500 = sub nsw i64 %497, %498
  %xtraiter754 = and i64 %500, 3
  %lcmp.mod755.not = icmp eq i64 %xtraiter754, 0
  br i1 %lcmp.mod755.not, label %.lr.ph564.prol.loopexit, label %.lr.ph564.prol

.lr.ph564.prol:                                   ; preds = %.lr.ph564.preheader, %.lr.ph564.prol
  %indvars.iv658.prol = phi i64 [ %indvars.iv.next659.prol, %.lr.ph564.prol ], [ %498, %.lr.ph564.preheader ]
  %prol.iter756 = phi i64 [ %prol.iter756.next, %.lr.ph564.prol ], [ 0, %.lr.ph564.preheader ]
  %indvars.iv.next659.prol = add nuw nsw i64 %indvars.iv658.prol, 1
  %501 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next659.prol, i32 5
  store i32 268435455, ptr %501, align 4, !tbaa !48
  %prol.iter756.next = add i64 %prol.iter756, 1
  %prol.iter756.cmp.not = icmp eq i64 %prol.iter756.next, %xtraiter754
  br i1 %prol.iter756.cmp.not, label %.lr.ph564.prol.loopexit, label %.lr.ph564.prol, !llvm.loop !64

.lr.ph564.prol.loopexit:                          ; preds = %.lr.ph564.prol, %.lr.ph564.preheader
  %indvars.iv658.unr = phi i64 [ %498, %.lr.ph564.preheader ], [ %indvars.iv.next659.prol, %.lr.ph564.prol ]
  %indvars.iv.next659.lcssa.unr = phi i64 [ poison, %.lr.ph564.preheader ], [ %indvars.iv.next659.prol, %.lr.ph564.prol ]
  %502 = sub nsw i64 %498, %497
  %503 = icmp ugt i64 %502, -4
  br i1 %503, label %._crit_edge565.loopexit, label %.lr.ph564

.lr.ph564:                                        ; preds = %.lr.ph564.prol.loopexit, %.lr.ph564
  %indvars.iv658 = phi i64 [ %indvars.iv.next659.3, %.lr.ph564 ], [ %indvars.iv658.unr, %.lr.ph564.prol.loopexit ]
  %indvars.iv.next659 = add nuw nsw i64 %indvars.iv658, 1
  %504 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next659, i32 5
  store i32 268435455, ptr %504, align 4, !tbaa !48
  %indvars.iv.next659.1 = add nuw nsw i64 %indvars.iv658, 2
  %505 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next659.1, i32 5
  store i32 268435455, ptr %505, align 4, !tbaa !48
  %indvars.iv.next659.2 = add nuw nsw i64 %indvars.iv658, 3
  %506 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next659.2, i32 5
  store i32 268435455, ptr %506, align 4, !tbaa !48
  %indvars.iv.next659.3 = add nuw nsw i64 %indvars.iv658, 4
  %507 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next659.3, i32 5
  store i32 268435455, ptr %507, align 4, !tbaa !48
  %508 = icmp ult i64 %indvars.iv.next659.3, %499
  br i1 %508, label %.lr.ph564, label %._crit_edge565.loopexit, !llvm.loop !65

._crit_edge565.loopexit:                          ; preds = %.lr.ph564, %.lr.ph564.prol.loopexit
  %indvars.iv.next659.lcssa = phi i64 [ %indvars.iv.next659.lcssa.unr, %.lr.ph564.prol.loopexit ], [ %indvars.iv.next659.3, %.lr.ph564 ]
  %509 = trunc nuw i64 %indvars.iv.next659.lcssa to i32
  br label %._crit_edge565

._crit_edge565:                                   ; preds = %.._crit_edge565_crit_edge, %._crit_edge565.loopexit
  %.pre-phi699 = phi i64 [ %.pre698, %.._crit_edge565_crit_edge ], [ %499, %._crit_edge565.loopexit ]
  %.6428.lcssa = phi i32 [ %.5427, %.._crit_edge565_crit_edge ], [ %509, %._crit_edge565.loopexit ]
  %.sroa.096.0.copyload = load i8, ptr %8, align 1, !tbaa !44
  %510 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef %491, i32 noundef %.1445, i8 %.sroa.096.0.copyload, i32 noundef %351)
  %511 = add i32 %510, %382
  %512 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %.pre-phi699
  %513 = getelementptr inbounds i8, ptr %512, i64 12
  %514 = load i32, ptr %513, align 4, !tbaa !48
  %515 = icmp ult i32 %511, %514
  br i1 %515, label %516, label %520

516:                                              ; preds = %._crit_edge565
  store i32 %511, ptr %513, align 4, !tbaa !48
  %517 = getelementptr inbounds i8, ptr %512, i64 16
  store i32 %248, ptr %517, align 8, !tbaa !33
  %518 = getelementptr inbounds i8, ptr %512, i64 20
  store i32 %491, ptr %518, align 4, !tbaa !36
  %519 = getelementptr inbounds i8, ptr %512, i64 1
  store i8 0, ptr %519, align 1, !tbaa !49
  br label %520

520:                                              ; preds = %516, %._crit_edge565
  %521 = add i32 %.1445, -1
  %522 = icmp ugt i32 %521, 1
  %indvar.next = add i32 %indvar, 1
  br i1 %522, label %493, label %523, !llvm.loop !66

523:                                              ; preds = %520
  %524 = load i8, ptr %243, align 1, !tbaa !67, !range !38, !noundef !39
  %525 = trunc nuw i8 %524 to i1
  br i1 %525, label %526, label %605

526:                                              ; preds = %523
  %527 = add i32 %.0444.lcssa, 1
  %528 = load i32, ptr %83, align 4, !tbaa !43
  %529 = add i32 %528, %527
  %530 = call noundef i32 @_Z5MyMinIjET_S0_S0_(i32 noundef %405, i32 noundef %529)
  %531 = icmp ult i32 %527, %530
  br i1 %531, label %.lr.ph570.preheader, label %._crit_edge571

.lr.ph570.preheader:                              ; preds = %526
  %532 = zext i32 %527 to i64
  br label %.lr.ph570

.lr.ph570:                                        ; preds = %.lr.ph570.preheader, %538
  %indvars.iv661 = phi i64 [ %532, %.lr.ph570.preheader ], [ %indvars.iv.next662, %538 ]
  %533 = getelementptr inbounds i8, ptr %343, i64 %indvars.iv661
  %534 = load i8, ptr %533, align 1, !tbaa !44
  %535 = sub nsw i64 %indvars.iv661, %475
  %536 = getelementptr inbounds i8, ptr %343, i64 %535
  %537 = load i8, ptr %536, align 1, !tbaa !44
  %.not492 = icmp eq i8 %534, %537
  br i1 %.not492, label %538, label %._crit_edge571.loopexit.split.loop.exit

538:                                              ; preds = %.lr.ph570
  %indvars.iv.next662 = add nuw nsw i64 %indvars.iv661, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next662 to i32
  %exitcond664.not = icmp eq i32 %530, %lftr.wideiv
  br i1 %exitcond664.not, label %._crit_edge571, label %.lr.ph570, !llvm.loop !68

._crit_edge571.loopexit.split.loop.exit:          ; preds = %.lr.ph570
  %539 = trunc nuw i64 %indvars.iv661 to i32
  br label %._crit_edge571

._crit_edge571:                                   ; preds = %538, %._crit_edge571.loopexit.split.loop.exit, %526
  %.0446.lcssa = phi i32 [ %527, %526 ], [ %539, %._crit_edge571.loopexit.split.loop.exit ], [ %530, %538 ]
  %540 = sub i32 %.0446.lcssa, %527
  %541 = icmp ugt i32 %540, 1
  br i1 %541, label %542, label %605

542:                                              ; preds = %._crit_edge571
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #6
  %543 = load i8, ptr %8, align 1, !tbaa !44
  store i8 %543, ptr %11, align 1, !tbaa !44
  call void @_ZN9NCompress5NLZMA6CState9UpdateRepEv(ptr noundef nonnull align 1 dereferenceable(1) %11)
  %544 = add i32 %.0444.lcssa, %251
  %545 = load i32, ptr %115, align 8, !tbaa !45
  %546 = and i32 %545, %544
  %.sroa.076.0.copyload = load i8, ptr %8, align 1, !tbaa !44
  %547 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef %491, i32 noundef %.0444.lcssa, i8 %.sroa.076.0.copyload, i32 noundef %351)
  %548 = add i32 %547, %382
  %549 = load i8, ptr %11, align 1, !tbaa !57
  %550 = zext i8 %549 to i64
  %551 = zext i32 %546 to i64
  %552 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %118, i64 0, i64 %550, i64 %551
  %553 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice0Ev(ptr noundef nonnull align 4 dereferenceable(4) %552)
  %554 = add i32 %548, %553
  %555 = zext i32 %.0444.lcssa to i64
  %556 = getelementptr i8, ptr %343, i64 %555
  %557 = getelementptr i8, ptr %556, i64 -1
  %558 = load i8, ptr %557, align 1, !tbaa !44
  %559 = sub nsw i64 %555, %475
  %560 = getelementptr inbounds i8, ptr %343, i64 %559
  %561 = load i8, ptr %560, align 1, !tbaa !44
  %562 = load i8, ptr %556, align 1, !tbaa !44
  %563 = call noundef i32 @_ZNK9NCompress5NLZMA15CLiteralEncoder8GetPriceEjhbhh(ptr noundef nonnull align 8 dereferenceable(20) %124, i32 noundef %544, i8 noundef zeroext %558, i1 noundef zeroext true, i8 noundef zeroext %561, i8 noundef zeroext %562)
  %564 = add i32 %554, %563
  call void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1) %11)
  %565 = add i32 %544, 1
  %566 = load i32, ptr %115, align 8, !tbaa !45
  %567 = and i32 %566, %565
  %568 = load i8, ptr %11, align 1, !tbaa !57
  %569 = zext i8 %568 to i64
  %570 = zext i32 %567 to i64
  %571 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %118, i64 0, i64 %569, i64 %570
  %572 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %571)
  %573 = add i32 %564, %572
  %574 = load i8, ptr %11, align 1, !tbaa !57
  %575 = zext i8 %574 to i64
  %576 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %139, i64 0, i64 %575
  %577 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %576)
  %578 = add i32 %573, %577
  %579 = add i32 %.0446.lcssa, %248
  %580 = icmp ult i32 %.6428.lcssa, %579
  br i1 %580, label %.lr.ph577.preheader, label %.._crit_edge578_crit_edge

.._crit_edge578_crit_edge:                        ; preds = %542
  %.pre700 = zext i32 %579 to i64
  br label %._crit_edge578

.lr.ph577.preheader:                              ; preds = %542
  %581 = zext i32 %.6428.lcssa to i64
  %wide.trip.count668 = zext i32 %579 to i64
  %582 = sub nsw i64 %wide.trip.count668, %581
  %xtraiter757 = and i64 %582, 3
  %lcmp.mod758.not = icmp eq i64 %xtraiter757, 0
  br i1 %lcmp.mod758.not, label %.lr.ph577.prol.loopexit, label %.lr.ph577.prol

.lr.ph577.prol:                                   ; preds = %.lr.ph577.preheader, %.lr.ph577.prol
  %indvars.iv665.prol = phi i64 [ %indvars.iv.next666.prol, %.lr.ph577.prol ], [ %581, %.lr.ph577.preheader ]
  %prol.iter759 = phi i64 [ %prol.iter759.next, %.lr.ph577.prol ], [ 0, %.lr.ph577.preheader ]
  %indvars.iv.next666.prol = add nuw nsw i64 %indvars.iv665.prol, 1
  %583 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next666.prol, i32 5
  store i32 268435455, ptr %583, align 4, !tbaa !48
  %prol.iter759.next = add i64 %prol.iter759, 1
  %prol.iter759.cmp.not = icmp eq i64 %prol.iter759.next, %xtraiter757
  br i1 %prol.iter759.cmp.not, label %.lr.ph577.prol.loopexit, label %.lr.ph577.prol, !llvm.loop !69

.lr.ph577.prol.loopexit:                          ; preds = %.lr.ph577.prol, %.lr.ph577.preheader
  %indvars.iv665.unr = phi i64 [ %581, %.lr.ph577.preheader ], [ %indvars.iv.next666.prol, %.lr.ph577.prol ]
  %584 = sub nsw i64 %581, %wide.trip.count668
  %585 = icmp ugt i64 %584, -4
  br i1 %585, label %._crit_edge578, label %.lr.ph577

.lr.ph577:                                        ; preds = %.lr.ph577.prol.loopexit, %.lr.ph577
  %indvars.iv665 = phi i64 [ %indvars.iv.next666.3, %.lr.ph577 ], [ %indvars.iv665.unr, %.lr.ph577.prol.loopexit ]
  %indvars.iv.next666 = add nuw nsw i64 %indvars.iv665, 1
  %586 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next666, i32 5
  store i32 268435455, ptr %586, align 4, !tbaa !48
  %indvars.iv.next666.1 = add nuw nsw i64 %indvars.iv665, 2
  %587 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next666.1, i32 5
  store i32 268435455, ptr %587, align 4, !tbaa !48
  %indvars.iv.next666.2 = add nuw nsw i64 %indvars.iv665, 3
  %588 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next666.2, i32 5
  store i32 268435455, ptr %588, align 4, !tbaa !48
  %indvars.iv.next666.3 = add nuw nsw i64 %indvars.iv665, 4
  %589 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next666.3, i32 5
  store i32 268435455, ptr %589, align 4, !tbaa !48
  %exitcond669.not.3 = icmp eq i64 %indvars.iv.next666.3, %wide.trip.count668
  br i1 %exitcond669.not.3, label %._crit_edge578, label %.lr.ph577, !llvm.loop !70

._crit_edge578:                                   ; preds = %.lr.ph577.prol.loopexit, %.lr.ph577, %.._crit_edge578_crit_edge
  %.pre-phi701 = phi i64 [ %.pre700, %.._crit_edge578_crit_edge ], [ %wide.trip.count668, %.lr.ph577 ], [ %wide.trip.count668, %.lr.ph577.prol.loopexit ]
  %.7429.lcssa = phi i32 [ %.6428.lcssa, %.._crit_edge578_crit_edge ], [ %579, %.lr.ph577 ], [ %579, %.lr.ph577.prol.loopexit ]
  %.sroa.069.0.copyload = load i8, ptr %11, align 1, !tbaa !44
  %590 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef 0, i32 noundef %540, i8 %.sroa.069.0.copyload, i32 noundef %567)
  %591 = add i32 %578, %590
  %592 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %.pre-phi701
  %593 = getelementptr inbounds i8, ptr %592, i64 12
  %594 = load i32, ptr %593, align 4, !tbaa !48
  %595 = icmp ult i32 %591, %594
  br i1 %595, label %596, label %604

596:                                              ; preds = %._crit_edge578
  store i32 %591, ptr %593, align 4, !tbaa !48
  %597 = add i32 %466, %.0444.lcssa
  %598 = getelementptr inbounds i8, ptr %592, i64 16
  store i32 %597, ptr %598, align 8, !tbaa !33
  %599 = getelementptr inbounds i8, ptr %592, i64 20
  store i32 0, ptr %599, align 4, !tbaa !36
  %600 = getelementptr inbounds i8, ptr %592, i64 1
  store i8 1, ptr %600, align 1, !tbaa !49
  %601 = getelementptr inbounds i8, ptr %592, i64 2
  store i8 1, ptr %601, align 2, !tbaa !54
  %602 = getelementptr inbounds i8, ptr %592, i64 4
  store i32 %248, ptr %602, align 4, !tbaa !55
  %603 = getelementptr inbounds i8, ptr %592, i64 8
  store i32 %491, ptr %603, align 8, !tbaa !56
  br label %604

604:                                              ; preds = %596, %._crit_edge578
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #6
  br label %605

605:                                              ; preds = %523, %604, %._crit_edge571, %470, %479
  %.10 = phi i32 [ %.4426582, %479 ], [ %.4426582, %470 ], [ %.6428.lcssa, %523 ], [ %.7429.lcssa, %604 ], [ %.6428.lcssa, %._crit_edge571 ]
  %indvars.iv.next671 = add nuw nsw i64 %indvars.iv670, 1
  %exitcond673.not = icmp eq i64 %indvars.iv.next671, 4
  br i1 %exitcond673.not, label %467, label %470, !llvm.loop !71

606:                                              ; preds = %467
  store i32 %spec.select, ptr %9, align 4, !tbaa !35
  br label %607

607:                                              ; preds = %606, %467
  %608 = phi i32 [ %spec.select, %606 ], [ %468, %467 ]
  %609 = icmp ugt i32 %608, 1
  br i1 %609, label %610, label %.loopexit

610:                                              ; preds = %607
  %611 = icmp eq i32 %608, 2
  %612 = load i32, ptr %244, align 8
  %613 = icmp ugt i32 %612, 127
  %or.cond = select i1 %611, i1 %613, i1 false
  br i1 %or.cond, label %.loopexit, label %614, !llvm.loop !58

614:                                              ; preds = %610
  %615 = load i8, ptr %8, align 1, !tbaa !57
  %616 = zext i8 %615 to i64
  %617 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %139, i64 0, i64 %616
  %618 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice0Ev(ptr noundef nonnull align 4 dereferenceable(4) %617)
  %619 = add i32 %618, %377
  %620 = load i32, ptr %9, align 4, !tbaa !35
  %621 = add i32 %620, %248
  %622 = icmp ult i32 %.10, %621
  br i1 %622, label %.lr.ph585.preheader, label %.preheader508

.lr.ph585.preheader:                              ; preds = %614
  %623 = zext i32 %.10 to i64
  %wide.trip.count677 = zext i32 %621 to i64
  %624 = sub nsw i64 %wide.trip.count677, %623
  %xtraiter760 = and i64 %624, 3
  %lcmp.mod761.not = icmp eq i64 %xtraiter760, 0
  br i1 %lcmp.mod761.not, label %.lr.ph585.prol.loopexit, label %.lr.ph585.prol

.lr.ph585.prol:                                   ; preds = %.lr.ph585.preheader, %.lr.ph585.prol
  %indvars.iv674.prol = phi i64 [ %indvars.iv.next675.prol, %.lr.ph585.prol ], [ %623, %.lr.ph585.preheader ]
  %prol.iter762 = phi i64 [ %prol.iter762.next, %.lr.ph585.prol ], [ 0, %.lr.ph585.preheader ]
  %indvars.iv.next675.prol = add nuw nsw i64 %indvars.iv674.prol, 1
  %625 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next675.prol, i32 5
  store i32 268435455, ptr %625, align 4, !tbaa !48
  %prol.iter762.next = add i64 %prol.iter762, 1
  %prol.iter762.cmp.not = icmp eq i64 %prol.iter762.next, %xtraiter760
  br i1 %prol.iter762.cmp.not, label %.lr.ph585.prol.loopexit, label %.lr.ph585.prol, !llvm.loop !72

.lr.ph585.prol.loopexit:                          ; preds = %.lr.ph585.prol, %.lr.ph585.preheader
  %indvars.iv674.unr = phi i64 [ %623, %.lr.ph585.preheader ], [ %indvars.iv.next675.prol, %.lr.ph585.prol ]
  %626 = sub nsw i64 %623, %wide.trip.count677
  %627 = icmp ugt i64 %626, -4
  br i1 %627, label %.preheader508, label %.lr.ph585

.preheader508:                                    ; preds = %.lr.ph585.prol.loopexit, %.lr.ph585, %614
  %.11.lcssa = phi i32 [ %.10, %614 ], [ %621, %.lr.ph585 ], [ %621, %.lr.ph585.prol.loopexit ]
  %628 = icmp ugt i32 %620, 1
  br i1 %628, label %.lr.ph603.preheader, label %.loopexit

.lr.ph603.preheader:                              ; preds = %.preheader508
  %629 = add i32 %620, 1
  %630 = zext i32 %620 to i64
  br label %.lr.ph603

.lr.ph585:                                        ; preds = %.lr.ph585.prol.loopexit, %.lr.ph585
  %indvars.iv674 = phi i64 [ %indvars.iv.next675.3, %.lr.ph585 ], [ %indvars.iv674.unr, %.lr.ph585.prol.loopexit ]
  %indvars.iv.next675 = add nuw nsw i64 %indvars.iv674, 1
  %631 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next675, i32 5
  store i32 268435455, ptr %631, align 4, !tbaa !48
  %indvars.iv.next675.1 = add nuw nsw i64 %indvars.iv674, 2
  %632 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next675.1, i32 5
  store i32 268435455, ptr %632, align 4, !tbaa !48
  %indvars.iv.next675.2 = add nuw nsw i64 %indvars.iv674, 3
  %633 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next675.2, i32 5
  store i32 268435455, ptr %633, align 4, !tbaa !48
  %indvars.iv.next675.3 = add nuw nsw i64 %indvars.iv674, 4
  %634 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next675.3, i32 5
  store i32 268435455, ptr %634, align 4, !tbaa !48
  %exitcond678.not.3 = icmp eq i64 %indvars.iv.next675.3, %wide.trip.count677
  br i1 %exitcond678.not.3, label %.preheader508, label %.lr.ph585, !llvm.loop !73

.lr.ph603:                                        ; preds = %.lr.ph603.preheader, %743
  %indvars.iv689 = phi i64 [ %630, %.lr.ph603.preheader ], [ %indvars.iv.next690, %743 ]
  %indvars.iv679 = phi i32 [ %629, %.lr.ph603.preheader ], [ %indvars.iv.next680, %743 ]
  %.12602 = phi i32 [ %.11.lcssa, %.lr.ph603.preheader ], [ %.15, %743 ]
  %635 = zext i32 %indvars.iv679 to i64
  %636 = getelementptr inbounds [274 x i32], ptr %245, i64 0, i64 %indvars.iv689
  %637 = load i32, ptr %636, align 4, !tbaa !35
  %638 = trunc nuw i64 %indvars.iv689 to i32
  %639 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder14GetPosLenPriceEjjj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef %637, i32 noundef %638, i32 noundef %351)
  %640 = add i32 %619, %639
  %641 = add i32 %248, %638
  %642 = zext i32 %641 to i64
  %643 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %642
  %644 = getelementptr inbounds i8, ptr %643, i64 12
  %645 = load i32, ptr %644, align 4, !tbaa !48
  %646 = icmp ult i32 %640, %645
  br i1 %646, label %647, label %652

647:                                              ; preds = %.lr.ph603
  store i32 %640, ptr %644, align 4, !tbaa !48
  %648 = getelementptr inbounds i8, ptr %643, i64 16
  store i32 %248, ptr %648, align 8, !tbaa !33
  %649 = add i32 %637, 4
  %650 = getelementptr inbounds i8, ptr %643, i64 20
  store i32 %649, ptr %650, align 4, !tbaa !36
  %651 = getelementptr inbounds i8, ptr %643, i64 1
  store i8 0, ptr %651, align 1, !tbaa !49
  br label %652

652:                                              ; preds = %647, %.lr.ph603
  %653 = load i8, ptr %243, align 1, !tbaa !67, !range !38, !noundef !39
  %654 = trunc nuw i8 %653 to i1
  br i1 %654, label %655, label %743

655:                                              ; preds = %652
  %656 = load i32, ptr %9, align 4, !tbaa !35
  %657 = zext i32 %656 to i64
  %658 = icmp eq i64 %indvars.iv689, %657
  %.pre702 = add i32 %638, 1
  br i1 %658, label %._crit_edge697, label %659

659:                                              ; preds = %655
  %660 = zext i32 %.pre702 to i64
  %661 = getelementptr inbounds [274 x i32], ptr %245, i64 0, i64 %660
  %662 = load i32, ptr %661, align 4, !tbaa !35
  %.not487 = icmp eq i32 %637, %662
  br i1 %.not487, label %743, label %._crit_edge697

._crit_edge697:                                   ; preds = %655, %659
  %663 = add i32 %637, 1
  %664 = load i32, ptr %83, align 4, !tbaa !43
  %665 = add i32 %664, %.pre702
  %666 = call noundef i32 @_Z5MyMinIjET_S0_S0_(i32 noundef %405, i32 noundef %665)
  %667 = icmp ult i32 %.pre702, %666
  br i1 %667, label %.lr.ph590, label %._crit_edge591

.lr.ph590:                                        ; preds = %._crit_edge697
  %668 = zext i32 %663 to i64
  %669 = zext i32 %666 to i64
  br label %670

670:                                              ; preds = %.lr.ph590, %676
  %indvars.iv681 = phi i64 [ %635, %.lr.ph590 ], [ %indvars.iv.next682, %676 ]
  %671 = getelementptr inbounds i8, ptr %343, i64 %indvars.iv681
  %672 = load i8, ptr %671, align 1, !tbaa !44
  %673 = sub nsw i64 %indvars.iv681, %668
  %674 = getelementptr inbounds i8, ptr %343, i64 %673
  %675 = load i8, ptr %674, align 1, !tbaa !44
  %.not488 = icmp eq i8 %672, %675
  br i1 %.not488, label %676, label %._crit_edge591.loopexit.split.loop.exit

676:                                              ; preds = %670
  %indvars.iv.next682 = add nuw nsw i64 %indvars.iv681, 1
  %677 = icmp ult i64 %indvars.iv.next682, %669
  br i1 %677, label %670, label %._crit_edge591, !llvm.loop !74

._crit_edge591.loopexit.split.loop.exit:          ; preds = %670
  %678 = trunc nuw i64 %indvars.iv681 to i32
  br label %._crit_edge591

._crit_edge591:                                   ; preds = %676, %._crit_edge591.loopexit.split.loop.exit, %._crit_edge697
  %.0421.lcssa = phi i32 [ %.pre702, %._crit_edge697 ], [ %678, %._crit_edge591.loopexit.split.loop.exit ], [ %666, %676 ]
  %679 = sub i32 %.0421.lcssa, %.pre702
  %680 = icmp ugt i32 %679, 1
  br i1 %680, label %681, label %743

681:                                              ; preds = %._crit_edge591
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #6
  %682 = load i8, ptr %8, align 1, !tbaa !44
  store i8 %682, ptr %12, align 1, !tbaa !44
  call void @_ZN9NCompress5NLZMA6CState11UpdateMatchEv(ptr noundef nonnull align 1 dereferenceable(1) %12)
  %683 = add i32 %251, %638
  %684 = load i32, ptr %115, align 8, !tbaa !45
  %685 = and i32 %684, %683
  %686 = load i8, ptr %12, align 1, !tbaa !57
  %687 = zext i8 %686 to i64
  %688 = zext i32 %685 to i64
  %689 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %118, i64 0, i64 %687, i64 %688
  %690 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice0Ev(ptr noundef nonnull align 4 dereferenceable(4) %689)
  %691 = add i32 %690, %640
  %692 = getelementptr i8, ptr %343, i64 %indvars.iv689
  %693 = getelementptr i8, ptr %692, i64 -1
  %694 = load i8, ptr %693, align 1, !tbaa !44
  %695 = zext i32 %663 to i64
  %696 = sub nsw i64 %indvars.iv689, %695
  %697 = getelementptr inbounds i8, ptr %343, i64 %696
  %698 = load i8, ptr %697, align 1, !tbaa !44
  %699 = load i8, ptr %692, align 1, !tbaa !44
  %700 = call noundef i32 @_ZNK9NCompress5NLZMA15CLiteralEncoder8GetPriceEjhbhh(ptr noundef nonnull align 8 dereferenceable(20) %124, i32 noundef %683, i8 noundef zeroext %694, i1 noundef zeroext true, i8 noundef zeroext %698, i8 noundef zeroext %699)
  %701 = add i32 %691, %700
  call void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1) %12)
  %702 = add i32 %683, 1
  %703 = load i32, ptr %115, align 8, !tbaa !45
  %704 = and i32 %703, %702
  %705 = load i8, ptr %12, align 1, !tbaa !57
  %706 = zext i8 %705 to i64
  %707 = zext i32 %704 to i64
  %708 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %118, i64 0, i64 %706, i64 %707
  %709 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %708)
  %710 = add i32 %701, %709
  %711 = load i8, ptr %12, align 1, !tbaa !57
  %712 = zext i8 %711 to i64
  %713 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %139, i64 0, i64 %712
  %714 = call noundef i32 @_ZNK9NCompress11NRangeCoder11CBitEncoderILi5EE9GetPrice1Ev(ptr noundef nonnull align 4 dereferenceable(4) %713)
  %715 = add i32 %710, %714
  %716 = add i32 %.0421.lcssa, %248
  %717 = icmp ult i32 %.12602, %716
  br i1 %717, label %.lr.ph597.preheader, label %.._crit_edge598_crit_edge

.._crit_edge598_crit_edge:                        ; preds = %681
  %.pre704 = zext i32 %716 to i64
  br label %._crit_edge598

.lr.ph597.preheader:                              ; preds = %681
  %718 = zext i32 %.12602 to i64
  %wide.trip.count687 = zext i32 %716 to i64
  %719 = sub nsw i64 %wide.trip.count687, %718
  %xtraiter763 = and i64 %719, 3
  %lcmp.mod764.not = icmp eq i64 %xtraiter763, 0
  br i1 %lcmp.mod764.not, label %.lr.ph597.prol.loopexit, label %.lr.ph597.prol

.lr.ph597.prol:                                   ; preds = %.lr.ph597.preheader, %.lr.ph597.prol
  %indvars.iv684.prol = phi i64 [ %indvars.iv.next685.prol, %.lr.ph597.prol ], [ %718, %.lr.ph597.preheader ]
  %prol.iter765 = phi i64 [ %prol.iter765.next, %.lr.ph597.prol ], [ 0, %.lr.ph597.preheader ]
  %indvars.iv.next685.prol = add nuw nsw i64 %indvars.iv684.prol, 1
  %720 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next685.prol, i32 5
  store i32 268435455, ptr %720, align 4, !tbaa !48
  %prol.iter765.next = add i64 %prol.iter765, 1
  %prol.iter765.cmp.not = icmp eq i64 %prol.iter765.next, %xtraiter763
  br i1 %prol.iter765.cmp.not, label %.lr.ph597.prol.loopexit, label %.lr.ph597.prol, !llvm.loop !75

.lr.ph597.prol.loopexit:                          ; preds = %.lr.ph597.prol, %.lr.ph597.preheader
  %indvars.iv684.unr = phi i64 [ %718, %.lr.ph597.preheader ], [ %indvars.iv.next685.prol, %.lr.ph597.prol ]
  %721 = sub nsw i64 %718, %wide.trip.count687
  %722 = icmp ugt i64 %721, -4
  br i1 %722, label %._crit_edge598, label %.lr.ph597

.lr.ph597:                                        ; preds = %.lr.ph597.prol.loopexit, %.lr.ph597
  %indvars.iv684 = phi i64 [ %indvars.iv.next685.3, %.lr.ph597 ], [ %indvars.iv684.unr, %.lr.ph597.prol.loopexit ]
  %indvars.iv.next685 = add nuw nsw i64 %indvars.iv684, 1
  %723 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next685, i32 5
  store i32 268435455, ptr %723, align 4, !tbaa !48
  %indvars.iv.next685.1 = add nuw nsw i64 %indvars.iv684, 2
  %724 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next685.1, i32 5
  store i32 268435455, ptr %724, align 4, !tbaa !48
  %indvars.iv.next685.2 = add nuw nsw i64 %indvars.iv684, 3
  %725 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next685.2, i32 5
  store i32 268435455, ptr %725, align 4, !tbaa !48
  %indvars.iv.next685.3 = add nuw nsw i64 %indvars.iv684, 4
  %726 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %indvars.iv.next685.3, i32 5
  store i32 268435455, ptr %726, align 4, !tbaa !48
  %exitcond688.not.3 = icmp eq i64 %indvars.iv.next685.3, %wide.trip.count687
  br i1 %exitcond688.not.3, label %._crit_edge598, label %.lr.ph597, !llvm.loop !76

._crit_edge598:                                   ; preds = %.lr.ph597.prol.loopexit, %.lr.ph597, %.._crit_edge598_crit_edge
  %.pre-phi705 = phi i64 [ %.pre704, %.._crit_edge598_crit_edge ], [ %wide.trip.count687, %.lr.ph597 ], [ %wide.trip.count687, %.lr.ph597.prol.loopexit ]
  %.13.lcssa = phi i32 [ %.12602, %.._crit_edge598_crit_edge ], [ %716, %.lr.ph597 ], [ %716, %.lr.ph597.prol.loopexit ]
  %.sroa.0.0.copyload = load i8, ptr %12, align 1, !tbaa !44
  %727 = call noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef 0, i32 noundef %679, i8 %.sroa.0.0.copyload, i32 noundef %704)
  %728 = add i32 %715, %727
  %729 = getelementptr inbounds [4096 x %"struct.NCompress::NLZMA::COptimal"], ptr %106, i64 0, i64 %.pre-phi705
  %730 = getelementptr inbounds i8, ptr %729, i64 12
  %731 = load i32, ptr %730, align 4, !tbaa !48
  %732 = icmp ult i32 %728, %731
  br i1 %732, label %733, label %742

733:                                              ; preds = %._crit_edge598
  store i32 %728, ptr %730, align 4, !tbaa !48
  %734 = add i32 %641, 1
  %735 = getelementptr inbounds i8, ptr %729, i64 16
  store i32 %734, ptr %735, align 8, !tbaa !33
  %736 = getelementptr inbounds i8, ptr %729, i64 20
  store i32 0, ptr %736, align 4, !tbaa !36
  %737 = getelementptr inbounds i8, ptr %729, i64 1
  store i8 1, ptr %737, align 1, !tbaa !49
  %738 = getelementptr inbounds i8, ptr %729, i64 2
  store i8 1, ptr %738, align 2, !tbaa !54
  %739 = getelementptr inbounds i8, ptr %729, i64 4
  store i32 %248, ptr %739, align 4, !tbaa !55
  %740 = add i32 %637, 4
  %741 = getelementptr inbounds i8, ptr %729, i64 8
  store i32 %740, ptr %741, align 8, !tbaa !56
  br label %742

742:                                              ; preds = %733, %._crit_edge598
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #6
  br label %743

743:                                              ; preds = %._crit_edge591, %742, %659, %652
  %.15 = phi i32 [ %.12602, %659 ], [ %.12602, %652 ], [ %.13.lcssa, %742 ], [ %.12602, %._crit_edge591 ]
  %indvars.iv.next690 = add nsw i64 %indvars.iv689, -1
  %744 = and i64 %indvars.iv.next690, 4294967294
  %.not706 = icmp eq i64 %744, 0
  %indvars.iv.next680 = add i32 %indvars.iv679, -1
  br i1 %.not706, label %.loopexit, label %.lr.ph603, !llvm.loop !77

.thread504:                                       ; preds = %.loopexit510, %332
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  br label %746

.loopexit:                                        ; preds = %743, %..loopexit_crit_edge, %.preheader508, %610, %607
  %.pre-phi = phi i32 [ %.pre, %..loopexit_crit_edge ], [ %466, %.preheader508 ], [ %466, %610 ], [ %466, %607 ], [ %466, %743 ]
  %.18 = phi i32 [ %.0422605, %..loopexit_crit_edge ], [ %.11.lcssa, %.preheader508 ], [ %.10, %610 ], [ %.10, %607 ], [ %.15, %743 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  %745 = icmp eq i32 %.pre-phi, %.18
  br i1 %745, label %._crit_edge611, label %247

746:                                              ; preds = %.thread504, %155, %._crit_edge611, %91, %85
  %.7 = phi i32 [ %88, %85 ], [ %98, %91 ], [ 0, %155 ], [ 0, %._crit_edge611 ], [ %328, %.thread504 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #6
  br label %747

747:                                              ; preds = %31, %746
  %.8 = phi i32 [ %.7, %746 ], [ %32, %31 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #6
  br label %748

748:                                              ; preds = %747, %17
  %.9 = phi i32 [ 0, %17 ], [ %.8, %747 ]
  ret i32 %.9
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN9NCompress5NLZMA8CEncoder18ReadMatchDistancesERj(ptr noundef nonnull align 8 dereferenceable(210678), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK9NCompress5NLZMA15CLiteralEncoder8GetPriceEjhbhh(ptr noundef nonnull align 8 dereferenceable(20), i32 noundef, i8 noundef zeroext, i1 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK9NCompress5NLZMA6CState11IsCharStateEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK9NCompress5NLZMA8CEncoder15GetRepLen1PriceENS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678), i8, i32 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9NCompress5NLZMA8COptimal14MakeAsShortRepEv(ptr noundef nonnull align 4 dereferenceable(40)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK9NCompress5NLZMA8CEncoder14GetPosLenPriceEjjj(ptr noundef nonnull align 8 dereferenceable(210678), i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK9NCompress5NLZMA8CEncoder11GetRepPriceEjjNS0_6CStateEj(ptr noundef nonnull align 8 dereferenceable(210678), i32 noundef, i32 noundef, i8, i32 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9NCompress5NLZMA6CState9UpdateRepEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9NCompress5NLZMA6CState11UpdateMatchEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9NCompress5NLZMA8COptimal10IsShortRepEv(ptr noundef nonnull align 4 dereferenceable(40)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9NCompress5NLZMA6CState14UpdateShortRepEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #3 align 2

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress 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 #4 = { mustprogress 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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, !17, i64 207456}
!6 = !{!"_ZTSN9NCompress5NLZMA8CEncoderE", !7, i64 0, !9, i64 8, !10, i64 16, !11, i64 24, !12, i64 32, !16, i64 52, !14, i64 56, !18, i64 163896, !20, i64 163904, !14, i64 163984, !14, i64 164752, !14, i64 164800, !14, i64 164848, !14, i64 164896, !14, i64 164944, !14, i64 165712, !14, i64 166736, !25, i64 167192, !26, i64 167256, !26, i64 186788, !31, i64 206320, !14, i64 206344, !24, i64 207440, !24, i64 207441, !17, i64 207444, !17, i64 207448, !17, i64 207452, !17, i64 207456, !17, i64 207460, !24, i64 207464, !14, i64 207468, !14, i64 208492, !14, i64 210540, !17, i64 210604, !17, i64 210608, !17, i64 210612, !17, i64 210616, !17, i64 210620, !17, i64 210624, !17, i64 210628, !17, i64 210632, !17, i64 210636, !21, i64 210640, !21, i64 210648, !24, i64 210656, !19, i64 210664, !17, i64 210672, !24, i64 210676, !24, i64 210677}
!7 = !{!"_ZTS14ICompressCoder", !8, i64 0}
!8 = !{!"_ZTS8IUnknown"}
!9 = !{!"_ZTS21ICompressSetOutStream", !8, i64 0}
!10 = !{!"_ZTS27ICompressSetCoderProperties", !8, i64 0}
!11 = !{!"_ZTS29ICompressWriteCoderProperties", !8, i64 0}
!12 = !{!"_ZTSN9NCompress5NLZMA10CBaseStateE", !13, i64 0, !14, i64 1, !14, i64 4}
!13 = !{!"_ZTSN9NCompress5NLZMA6CStateE", !14, i64 0}
!14 = !{!"omnipotent char", !15, i64 0}
!15 = !{!"Simple C++ TBAA"}
!16 = !{!"_ZTS13CMyUnknownImp", !17, i64 0}
!17 = !{!"int", !14, i64 0}
!18 = !{!"_ZTS9CMyComPtrI12IMatchFinderE", !19, i64 0}
!19 = !{!"any pointer", !14, i64 0}
!20 = !{!"_ZTSN9NCompress11NRangeCoder8CEncoderE", !17, i64 0, !14, i64 4, !21, i64 8, !17, i64 16, !22, i64 24}
!21 = !{!"long long", !14, i64 0}
!22 = !{!"_ZTS10COutBuffer", !19, i64 0, !17, i64 8, !17, i64 12, !17, i64 16, !17, i64 20, !23, i64 24, !21, i64 32, !19, i64 40, !24, i64 48}
!23 = !{!"_ZTS9CMyComPtrI20ISequentialOutStreamE", !19, i64 0}
!24 = !{!"bool", !14, i64 0}
!25 = !{!"_ZTSN9NCompress11NRangeCoder15CBitTreeEncoderILi5ELi4EEE", !14, i64 0}
!26 = !{!"_ZTSN9NCompress5NLZMA7NLength18CPriceTableEncoderE", !27, i64 0, !14, i64 2056, !17, i64 19464, !14, i64 19468}
!27 = !{!"_ZTSN9NCompress5NLZMA7NLength8CEncoderE", !28, i64 0, !28, i64 4, !14, i64 8, !14, i64 520, !30, i64 1032}
!28 = !{!"_ZTSN9NCompress11NRangeCoder11CBitEncoderILi5EEE", !29, i64 0}
!29 = !{!"_ZTSN9NCompress11NRangeCoder9CBitModelILi5EEE", !17, i64 0}
!30 = !{!"_ZTSN9NCompress11NRangeCoder15CBitTreeEncoderILi5ELi8EEE", !14, i64 0}
!31 = !{!"_ZTSN9NCompress5NLZMA15CLiteralEncoderE", !19, i64 0, !17, i64 8, !17, i64 12, !17, i64 16}
!32 = !{!6, !17, i64 207460}
!33 = !{!34, !17, i64 16}
!34 = !{!"_ZTSN9NCompress5NLZMA8COptimalE", !13, i64 0, !24, i64 1, !24, i64 2, !17, i64 4, !17, i64 8, !17, i64 12, !17, i64 16, !17, i64 20, !14, i64 24}
!35 = !{!17, !17, i64 0}
!36 = !{!34, !17, i64 20}
!37 = !{!6, !24, i64 207464}
!38 = !{i8 0, i8 2}
!39 = !{}
!40 = !{!6, !17, i64 207448}
!41 = !{!42, !42, i64 0}
!42 = !{!"vtable pointer", !15, i64 0}
!43 = !{!6, !17, i64 207444}
!44 = !{!14, !14, i64 0}
!45 = !{!6, !17, i64 210616}
!46 = !{!12, !14, i64 0}
!47 = !{!12, !14, i64 1}
!48 = !{!34, !17, i64 12}
!49 = !{!34, !24, i64 1}
!50 = distinct !{!50, !51}
!51 = !{!"llvm.loop.mustprogress"}
!52 = distinct !{!52, !51}
!53 = distinct !{!53, !51}
!54 = !{!34, !24, i64 2}
!55 = !{!34, !17, i64 4}
!56 = !{!34, !17, i64 8}
!57 = !{!13, !14, i64 0}
!58 = distinct !{!58, !51}
!59 = distinct !{!59, !51}
!60 = distinct !{!60, !61}
!61 = !{!"llvm.loop.unroll.disable"}
!62 = distinct !{!62, !51}
!63 = distinct !{!63, !51}
!64 = distinct !{!64, !61}
!65 = distinct !{!65, !51}
!66 = distinct !{!66, !51}
!67 = !{!6, !24, i64 207441}
!68 = distinct !{!68, !51}
!69 = distinct !{!69, !61}
!70 = distinct !{!70, !51}
!71 = distinct !{!71, !51}
!72 = distinct !{!72, !61}
!73 = distinct !{!73, !51}
!74 = distinct !{!74, !51}
!75 = distinct !{!75, !61}
!76 = distinct !{!76, !51}
!77 = distinct !{!77, !51}


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