; 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::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.NCompress::NLZMA::CState" = type { i8 }
%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: mustprogress uwtable
declare dso_local void @_ZN9NCompress5NLZMA16CLiteralEncoder26EncodeEPNS_11NRangeCoder8CEncoderEh(ptr noundef nonnull align 4 dereferenceable(3072), ptr noundef, i8 noundef zeroext) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef, i32 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress5NLZMA16CLiteralEncoder213EncodeMatchedEPNS_11NRangeCoder8CEncoderEhh(ptr noundef nonnull align 4 dereferenceable(3072), ptr noundef, i8 noundef zeroext, i8 noundef zeroext) #1 align 2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress5NLZMA7NLength18CPriceTableEncoder6EncodeEPNS_11NRangeCoder8CEncoderEjj(ptr noundef nonnull align 4 dereferenceable(19532), ptr noundef, i32 noundef, i32 noundef) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN9NCompress5NLZMA16GetLenToPosStateEj(i32 noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress11NRangeCoder15CBitTreeEncoderILi5ELi6EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(256), ptr noundef, i32 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress11NRangeCoder8CEncoder16EncodeDirectBitsEji(ptr noundef nonnull align 8 dereferenceable(80), i32 noundef, i32 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress11NRangeCoder15CBitTreeEncoderILi5ELi4EE13ReverseEncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(64), ptr noundef, i32 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN9NCompress5NLZMA8CEncoder12CodeOneBlockEPyS2_Pi(ptr noundef nonnull align 8 dereferenceable(210678) %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #1 align 2 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i64, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i8, align 1
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i8, align 1
  %23 = alloca ptr, align 8
  %24 = alloca i8, 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 i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  %34 = load ptr, ptr %6, align 8
  %35 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 48
  %36 = load ptr, ptr %35, align 8, !tbaa !9
  %37 = icmp ne ptr %36, null
  br i1 %37, label %38, label %57

38:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  %39 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 7
  %40 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %39)
  %41 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 48
  %42 = load ptr, ptr %41, align 8, !tbaa !9
  %43 = load ptr, ptr %40, align 8, !tbaa !33
  %44 = getelementptr inbounds ptr, ptr %43, i64 3
  %45 = load ptr, ptr %44, align 8
  %46 = call noundef i32 %45(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef %42)
  store i32 %46, ptr %10, align 4, !tbaa !35
  %47 = load i32, ptr %10, align 4, !tbaa !35
  %48 = icmp ne i32 %47, 0
  br i1 %48, label %49, label %51

49:                                               ; preds = %38
  %50 = load i32, ptr %10, align 4, !tbaa !35
  store i32 %50, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %52

51:                                               ; preds = %38
  store i32 0, ptr %11, align 4
  br label %52

52:                                               ; preds = %51, %49
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  %53 = load i32, ptr %11, align 4
  switch i32 %53, label %593 [
    i32 0, label %54
    i32 1, label %591
  ]

54:                                               ; preds = %52
  %55 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 51
  store i8 1, ptr %55, align 1, !tbaa !36
  %56 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 48
  store ptr null, ptr %56, align 8, !tbaa !9
  br label %57

57:                                               ; preds = %54, %4
  %58 = load ptr, ptr %9, align 8, !tbaa !5
  store i32 1, ptr %58, align 4, !tbaa !35
  %59 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 46
  %60 = load i8, ptr %59, align 8, !tbaa !37, !range !38, !noundef !39
  %61 = trunc i8 %60 to i1
  br i1 %61, label %62, label %63

62:                                               ; preds = %57
  store i32 0, ptr %5, align 4
  br label %591

63:                                               ; preds = %57
  %64 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 46
  store i8 1, ptr %64, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  %65 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %66 = load i64, ptr %65, align 8, !tbaa !40
  store i64 %66, ptr %12, align 8, !tbaa !41
  %67 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %68 = load i64, ptr %67, align 8, !tbaa !40
  %69 = icmp eq i64 %68, 0
  br i1 %69, label %70, label %143

70:                                               ; preds = %63
  %71 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 7
  %72 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %71)
  %73 = load ptr, ptr %72, align 8, !tbaa !33
  %74 = getelementptr inbounds ptr, ptr %73, i64 8
  %75 = load ptr, ptr %74, align 8
  %76 = call noundef i32 %75(ptr noundef nonnull align 8 dereferenceable(8) %72)
  %77 = icmp eq i32 %76, 0
  br i1 %77, label %78, label %83

78:                                               ; preds = %70
  %79 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %80 = load i64, ptr %79, align 8, !tbaa !40
  %81 = trunc i64 %80 to i32
  %82 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder5FlushEj(ptr noundef nonnull align 8 dereferenceable(210678) %34, i32 noundef %81)
  store i32 %82, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %590

83:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  %84 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder18ReadMatchDistancesERj(ptr noundef nonnull align 8 dereferenceable(210678) %34, ptr noundef nonnull align 4 dereferenceable(4) %13)
  store i32 %84, ptr %14, align 4, !tbaa !35
  %85 = load i32, ptr %14, align 4, !tbaa !35
  %86 = icmp ne i32 %85, 0
  br i1 %86, label %87, label %89

87:                                               ; preds = %83
  %88 = load i32, ptr %14, align 4, !tbaa !35
  store i32 %88, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %90

89:                                               ; preds = %83
  store i32 0, ptr %11, align 4
  br label %90

90:                                               ; preds = %89, %87
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  %91 = load i32, ptr %11, align 4
  switch i32 %91, label %140 [
    i32 0, label %92
  ]

92:                                               ; preds = %90
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  %93 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %94 = load i64, ptr %93, align 8, !tbaa !40
  %95 = trunc i64 %94 to i32
  %96 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 38
  %97 = load i32, ptr %96, align 8, !tbaa !42
  %98 = and i32 %95, %97
  store i32 %98, ptr %15, align 4, !tbaa !35
  %99 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 9
  %100 = getelementptr inbounds i8, ptr %34, i64 32
  %101 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %100, i32 0, i32 0
  %102 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %101, i32 0, i32 0
  %103 = load i8, ptr %102, align 8, !tbaa !43
  %104 = zext i8 %103 to i64
  %105 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %99, i64 0, i64 %104
  %106 = load i32, ptr %15, align 4, !tbaa !35
  %107 = zext i32 %106 to i64
  %108 = getelementptr inbounds [16 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %105, i64 0, i64 %107
  %109 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %108, ptr noundef %109, i32 noundef 0)
  %110 = getelementptr inbounds i8, ptr %34, i64 32
  %111 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %110, i32 0, i32 0
  call void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1) %111)
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #4
  %112 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 7
  %113 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %112)
  %114 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 27
  %115 = load i32, ptr %114, align 4, !tbaa !44
  %116 = sub i32 0, %115
  %117 = load ptr, ptr %113, align 8, !tbaa !33
  %118 = getelementptr inbounds ptr, ptr %117, i64 6
  %119 = load ptr, ptr %118, align 8
  %120 = call noundef zeroext i8 %119(ptr noundef nonnull align 8 dereferenceable(8) %113, i32 noundef %116)
  store i8 %120, ptr %16, align 1, !tbaa !45
  %121 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 20
  %122 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %123 = load i64, ptr %122, align 8, !tbaa !40
  %124 = trunc i64 %123 to i32
  %125 = getelementptr inbounds i8, ptr %34, i64 32
  %126 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %125, i32 0, i32 1
  %127 = load i8, ptr %126, align 1, !tbaa !46
  %128 = call noundef ptr @_ZN9NCompress5NLZMA15CLiteralEncoder11GetSubCoderEjh(ptr noundef nonnull align 8 dereferenceable(20) %121, i32 noundef %124, i8 noundef zeroext %127)
  %129 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  %130 = load i8, ptr %16, align 1, !tbaa !45
  call void @_ZN9NCompress5NLZMA16CLiteralEncoder26EncodeEPNS_11NRangeCoder8CEncoderEh(ptr noundef nonnull align 4 dereferenceable(3072) %128, ptr noundef %129, i8 noundef zeroext %130)
  %131 = load i8, ptr %16, align 1, !tbaa !45
  %132 = getelementptr inbounds i8, ptr %34, i64 32
  %133 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %132, i32 0, i32 1
  store i8 %131, ptr %133, align 1, !tbaa !46
  %134 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 27
  %135 = load i32, ptr %134, align 4, !tbaa !44
  %136 = add i32 %135, -1
  store i32 %136, ptr %134, align 4, !tbaa !44
  %137 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %138 = load i64, ptr %137, align 8, !tbaa !40
  %139 = add i64 %138, 1
  store i64 %139, ptr %137, align 8, !tbaa !40
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  store i32 0, ptr %11, align 4
  br label %140

140:                                              ; preds = %92, %90
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  %141 = load i32, ptr %11, align 4
  switch i32 %141, label %590 [
    i32 0, label %142
  ]

142:                                              ; preds = %140
  br label %143

143:                                              ; preds = %142, %63
  %144 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 7
  %145 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %144)
  %146 = load ptr, ptr %145, align 8, !tbaa !33
  %147 = getelementptr inbounds ptr, ptr %146, i64 8
  %148 = load ptr, ptr %147, align 8
  %149 = call noundef i32 %148(ptr noundef nonnull align 8 dereferenceable(8) %145)
  %150 = icmp eq i32 %149, 0
  br i1 %150, label %151, label %156

151:                                              ; preds = %143
  %152 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %153 = load i64, ptr %152, align 8, !tbaa !40
  %154 = trunc i64 %153 to i32
  %155 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder5FlushEj(ptr noundef nonnull align 8 dereferenceable(210678) %34, i32 noundef %154)
  store i32 %155, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %590

156:                                              ; preds = %143
  br label %157

157:                                              ; preds = %589, %156
  br label %158

158:                                              ; preds = %157
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  %159 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %160 = load i64, ptr %159, align 8, !tbaa !40
  %161 = trunc i64 %160 to i32
  %162 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 38
  %163 = load i32, ptr %162, align 8, !tbaa !42
  %164 = and i32 %161, %163
  store i32 %164, ptr %18, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  %165 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 22
  %166 = load i8, ptr %165, align 8, !tbaa !47, !range !38, !noundef !39
  %167 = trunc i8 %166 to i1
  br i1 %167, label %168, label %173

168:                                              ; preds = %158
  %169 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %170 = load i64, ptr %169, align 8, !tbaa !40
  %171 = trunc i64 %170 to i32
  %172 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder14GetOptimumFastEjRjS2_(ptr noundef nonnull align 8 dereferenceable(210678) %34, i32 noundef %171, ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %19)
  store i32 %172, ptr %20, align 4, !tbaa !35
  br label %178

173:                                              ; preds = %158
  %174 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %175 = load i64, ptr %174, align 8, !tbaa !40
  %176 = trunc i64 %175 to i32
  %177 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder10GetOptimumEjRjS2_(ptr noundef nonnull align 8 dereferenceable(210678) %34, i32 noundef %176, ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %19)
  store i32 %177, ptr %20, align 4, !tbaa !35
  br label %178

178:                                              ; preds = %173, %168
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %179 = load i32, ptr %20, align 4, !tbaa !35
  store i32 %179, ptr %21, align 4, !tbaa !35
  %180 = load i32, ptr %21, align 4, !tbaa !35
  %181 = icmp ne i32 %180, 0
  br i1 %181, label %182, label %184

182:                                              ; preds = %178
  %183 = load i32, ptr %21, align 4, !tbaa !35
  store i32 %183, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %185

184:                                              ; preds = %178
  store i32 0, ptr %11, align 4
  br label %185

185:                                              ; preds = %184, %182
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  %186 = load i32, ptr %11, align 4
  switch i32 %186, label %587 [
    i32 0, label %187
  ]

187:                                              ; preds = %185
  %188 = load i32, ptr %19, align 4, !tbaa !35
  %189 = icmp eq i32 %188, 1
  br i1 %189, label %190, label %255

190:                                              ; preds = %187
  %191 = load i32, ptr %17, align 4, !tbaa !35
  %192 = icmp eq i32 %191, -1
  br i1 %192, label %193, label %255

193:                                              ; preds = %190
  %194 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 9
  %195 = getelementptr inbounds i8, ptr %34, i64 32
  %196 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %195, i32 0, i32 0
  %197 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %196, i32 0, i32 0
  %198 = load i8, ptr %197, align 8, !tbaa !43
  %199 = zext i8 %198 to i64
  %200 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %194, i64 0, i64 %199
  %201 = load i32, ptr %18, align 4, !tbaa !35
  %202 = zext i32 %201 to i64
  %203 = getelementptr inbounds [16 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %200, i64 0, i64 %202
  %204 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %203, ptr noundef %204, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #4
  %205 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 7
  %206 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %205)
  %207 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 27
  %208 = load i32, ptr %207, align 4, !tbaa !44
  %209 = sub i32 0, %208
  %210 = load ptr, ptr %206, align 8, !tbaa !33
  %211 = getelementptr inbounds ptr, ptr %210, i64 6
  %212 = load ptr, ptr %211, align 8
  %213 = call noundef zeroext i8 %212(ptr noundef nonnull align 8 dereferenceable(8) %206, i32 noundef %209)
  store i8 %213, ptr %22, align 1, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  %214 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 20
  %215 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %216 = load i64, ptr %215, align 8, !tbaa !40
  %217 = trunc i64 %216 to i32
  %218 = getelementptr inbounds i8, ptr %34, i64 32
  %219 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %218, i32 0, i32 1
  %220 = load i8, ptr %219, align 1, !tbaa !46
  %221 = call noundef ptr @_ZN9NCompress5NLZMA15CLiteralEncoder11GetSubCoderEjh(ptr noundef nonnull align 8 dereferenceable(20) %214, i32 noundef %217, i8 noundef zeroext %220)
  store ptr %221, ptr %23, align 8, !tbaa !5
  %222 = getelementptr inbounds i8, ptr %34, i64 32
  %223 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %222, i32 0, i32 0
  %224 = call noundef zeroext i1 @_ZNK9NCompress5NLZMA6CState11IsCharStateEv(ptr noundef nonnull align 1 dereferenceable(1) %223)
  br i1 %224, label %245, label %225

225:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #4
  %226 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 7
  %227 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %226)
  %228 = getelementptr inbounds i8, ptr %34, i64 32
  %229 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %228, i32 0, i32 2
  %230 = getelementptr inbounds [4 x i32], ptr %229, i64 0, i64 0
  %231 = load i32, ptr %230, align 4, !tbaa !35
  %232 = sub i32 0, %231
  %233 = sub i32 %232, 1
  %234 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 27
  %235 = load i32, ptr %234, align 4, !tbaa !44
  %236 = sub i32 %233, %235
  %237 = load ptr, ptr %227, align 8, !tbaa !33
  %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) %227, i32 noundef %236)
  store i8 %240, ptr %24, align 1, !tbaa !45
  %241 = load ptr, ptr %23, align 8, !tbaa !5
  %242 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  %243 = load i8, ptr %24, align 1, !tbaa !45
  %244 = load i8, ptr %22, align 1, !tbaa !45
  call void @_ZN9NCompress5NLZMA16CLiteralEncoder213EncodeMatchedEPNS_11NRangeCoder8CEncoderEhh(ptr noundef nonnull align 4 dereferenceable(3072) %241, ptr noundef %242, i8 noundef zeroext %243, i8 noundef zeroext %244)
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #4
  br label %249

245:                                              ; preds = %193
  %246 = load ptr, ptr %23, align 8, !tbaa !5
  %247 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  %248 = load i8, ptr %22, align 1, !tbaa !45
  call void @_ZN9NCompress5NLZMA16CLiteralEncoder26EncodeEPNS_11NRangeCoder8CEncoderEh(ptr noundef nonnull align 4 dereferenceable(3072) %246, ptr noundef %247, i8 noundef zeroext %248)
  br label %249

249:                                              ; preds = %245, %225
  %250 = getelementptr inbounds i8, ptr %34, i64 32
  %251 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %250, i32 0, i32 0
  call void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1) %251)
  %252 = load i8, ptr %22, align 1, !tbaa !45
  %253 = getelementptr inbounds i8, ptr %34, i64 32
  %254 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %253, i32 0, i32 1
  store i8 %252, ptr %254, align 1, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #4
  br label %528

255:                                              ; preds = %190, %187
  %256 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 9
  %257 = getelementptr inbounds i8, ptr %34, i64 32
  %258 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %257, i32 0, i32 0
  %259 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %258, i32 0, i32 0
  %260 = load i8, ptr %259, align 8, !tbaa !43
  %261 = zext i8 %260 to i64
  %262 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %256, i64 0, i64 %261
  %263 = load i32, ptr %18, align 4, !tbaa !35
  %264 = zext i32 %263 to i64
  %265 = getelementptr inbounds [16 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %262, i64 0, i64 %264
  %266 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %265, ptr noundef %266, i32 noundef 1)
  %267 = load i32, ptr %17, align 4, !tbaa !35
  %268 = icmp ult i32 %267, 4
  br i1 %268, label %269, label %407

269:                                              ; preds = %255
  %270 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 10
  %271 = getelementptr inbounds i8, ptr %34, i64 32
  %272 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %271, i32 0, i32 0
  %273 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %272, i32 0, i32 0
  %274 = load i8, ptr %273, align 8, !tbaa !43
  %275 = zext i8 %274 to i64
  %276 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %270, i64 0, i64 %275
  %277 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %276, ptr noundef %277, i32 noundef 1)
  %278 = load i32, ptr %17, align 4, !tbaa !35
  %279 = icmp eq i32 %278, 0
  br i1 %279, label %280, label %316

280:                                              ; preds = %269
  %281 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 11
  %282 = getelementptr inbounds i8, ptr %34, i64 32
  %283 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %282, i32 0, i32 0
  %284 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %283, i32 0, i32 0
  %285 = load i8, ptr %284, align 8, !tbaa !43
  %286 = zext i8 %285 to i64
  %287 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %281, i64 0, i64 %286
  %288 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %287, ptr noundef %288, i32 noundef 0)
  %289 = load i32, ptr %19, align 4, !tbaa !35
  %290 = icmp eq i32 %289, 1
  br i1 %290, label %291, label %303

291:                                              ; preds = %280
  %292 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 14
  %293 = getelementptr inbounds i8, ptr %34, i64 32
  %294 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %293, i32 0, i32 0
  %295 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %294, i32 0, i32 0
  %296 = load i8, ptr %295, align 8, !tbaa !43
  %297 = zext i8 %296 to i64
  %298 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %292, i64 0, i64 %297
  %299 = load i32, ptr %18, align 4, !tbaa !35
  %300 = zext i32 %299 to i64
  %301 = getelementptr inbounds [16 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %298, i64 0, i64 %300
  %302 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %301, ptr noundef %302, i32 noundef 0)
  br label %315

303:                                              ; preds = %280
  %304 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 14
  %305 = getelementptr inbounds i8, ptr %34, i64 32
  %306 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %305, i32 0, i32 0
  %307 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %306, i32 0, i32 0
  %308 = load i8, ptr %307, align 8, !tbaa !43
  %309 = zext i8 %308 to i64
  %310 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %304, i64 0, i64 %309
  %311 = load i32, ptr %18, align 4, !tbaa !35
  %312 = zext i32 %311 to i64
  %313 = getelementptr inbounds [16 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %310, i64 0, i64 %312
  %314 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %313, ptr noundef %314, i32 noundef 1)
  br label %315

315:                                              ; preds = %303, %291
  br label %356

316:                                              ; preds = %269
  %317 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 11
  %318 = getelementptr inbounds i8, ptr %34, i64 32
  %319 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %318, i32 0, i32 0
  %320 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %319, i32 0, i32 0
  %321 = load i8, ptr %320, align 8, !tbaa !43
  %322 = zext i8 %321 to i64
  %323 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %317, i64 0, i64 %322
  %324 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %323, ptr noundef %324, i32 noundef 1)
  %325 = load i32, ptr %17, align 4, !tbaa !35
  %326 = icmp eq i32 %325, 1
  br i1 %326, label %327, label %336

327:                                              ; preds = %316
  %328 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 12
  %329 = getelementptr inbounds i8, ptr %34, i64 32
  %330 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %329, i32 0, i32 0
  %331 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %330, i32 0, i32 0
  %332 = load i8, ptr %331, align 8, !tbaa !43
  %333 = zext i8 %332 to i64
  %334 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %328, i64 0, i64 %333
  %335 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %334, ptr noundef %335, i32 noundef 0)
  br label %355

336:                                              ; preds = %316
  %337 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 12
  %338 = getelementptr inbounds i8, ptr %34, i64 32
  %339 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %338, i32 0, i32 0
  %340 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %339, i32 0, i32 0
  %341 = load i8, ptr %340, align 8, !tbaa !43
  %342 = zext i8 %341 to i64
  %343 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %337, i64 0, i64 %342
  %344 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %343, ptr noundef %344, i32 noundef 1)
  %345 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 13
  %346 = getelementptr inbounds i8, ptr %34, i64 32
  %347 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %346, i32 0, i32 0
  %348 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %347, i32 0, i32 0
  %349 = load i8, ptr %348, align 8, !tbaa !43
  %350 = zext i8 %349 to i64
  %351 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %345, i64 0, i64 %350
  %352 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  %353 = load i32, ptr %17, align 4, !tbaa !35
  %354 = sub i32 %353, 2
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %351, ptr noundef %352, i32 noundef %354)
  br label %355

355:                                              ; preds = %336, %327
  br label %356

356:                                              ; preds = %355, %315
  %357 = load i32, ptr %19, align 4, !tbaa !35
  %358 = icmp eq i32 %357, 1
  br i1 %358, label %359, label %362

359:                                              ; preds = %356
  %360 = getelementptr inbounds i8, ptr %34, i64 32
  %361 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %360, i32 0, i32 0
  call void @_ZN9NCompress5NLZMA6CState14UpdateShortRepEv(ptr noundef nonnull align 1 dereferenceable(1) %361)
  br label %370

362:                                              ; preds = %356
  %363 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 19
  %364 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  %365 = load i32, ptr %19, align 4, !tbaa !35
  %366 = sub i32 %365, 2
  %367 = load i32, ptr %18, align 4, !tbaa !35
  call void @_ZN9NCompress5NLZMA7NLength18CPriceTableEncoder6EncodeEPNS_11NRangeCoder8CEncoderEjj(ptr noundef nonnull align 4 dereferenceable(19532) %363, ptr noundef %364, i32 noundef %366, i32 noundef %367)
  %368 = getelementptr inbounds i8, ptr %34, i64 32
  %369 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %368, i32 0, i32 0
  call void @_ZN9NCompress5NLZMA6CState9UpdateRepEv(ptr noundef nonnull align 1 dereferenceable(1) %369)
  br label %370

370:                                              ; preds = %362, %359
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  %371 = getelementptr inbounds i8, ptr %34, i64 32
  %372 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %371, i32 0, i32 2
  %373 = load i32, ptr %17, align 4, !tbaa !35
  %374 = zext i32 %373 to i64
  %375 = getelementptr inbounds [4 x i32], ptr %372, i64 0, i64 %374
  %376 = load i32, ptr %375, align 4, !tbaa !35
  store i32 %376, ptr %25, align 4, !tbaa !35
  %377 = load i32, ptr %17, align 4, !tbaa !35
  %378 = icmp ne i32 %377, 0
  br i1 %378, label %379, label %406

379:                                              ; preds = %370
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %380 = load i32, ptr %17, align 4, !tbaa !35
  store i32 %380, ptr %26, align 4, !tbaa !35
  br label %381

381:                                              ; preds = %398, %379
  %382 = load i32, ptr %26, align 4, !tbaa !35
  %383 = icmp uge i32 %382, 1
  br i1 %383, label %385, label %384

384:                                              ; preds = %381
  store i32 4, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  br label %401

385:                                              ; preds = %381
  %386 = getelementptr inbounds i8, ptr %34, i64 32
  %387 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %386, i32 0, i32 2
  %388 = load i32, ptr %26, align 4, !tbaa !35
  %389 = sub i32 %388, 1
  %390 = zext i32 %389 to i64
  %391 = getelementptr inbounds [4 x i32], ptr %387, i64 0, i64 %390
  %392 = load i32, ptr %391, align 4, !tbaa !35
  %393 = getelementptr inbounds i8, ptr %34, i64 32
  %394 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %393, i32 0, i32 2
  %395 = load i32, ptr %26, align 4, !tbaa !35
  %396 = zext i32 %395 to i64
  %397 = getelementptr inbounds [4 x i32], ptr %394, i64 0, i64 %396
  store i32 %392, ptr %397, align 4, !tbaa !35
  br label %398

398:                                              ; preds = %385
  %399 = load i32, ptr %26, align 4, !tbaa !35
  %400 = add i32 %399, -1
  store i32 %400, ptr %26, align 4, !tbaa !35
  br label %381, !llvm.loop !48

401:                                              ; preds = %384
  %402 = load i32, ptr %25, align 4, !tbaa !35
  %403 = getelementptr inbounds i8, ptr %34, i64 32
  %404 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %403, i32 0, i32 2
  %405 = getelementptr inbounds [4 x i32], ptr %404, i64 0, i64 0
  store i32 %402, ptr %405, align 4, !tbaa !35
  br label %406

406:                                              ; preds = %401, %370
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  br label %514

407:                                              ; preds = %255
  %408 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 10
  %409 = getelementptr inbounds i8, ptr %34, i64 32
  %410 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %409, i32 0, i32 0
  %411 = getelementptr inbounds %"class.NCompress::NLZMA::CState", ptr %410, i32 0, i32 0
  %412 = load i8, ptr %411, align 8, !tbaa !43
  %413 = zext i8 %412 to i64
  %414 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %408, i64 0, i64 %413
  %415 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %414, ptr noundef %415, i32 noundef 0)
  %416 = getelementptr inbounds i8, ptr %34, i64 32
  %417 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %416, i32 0, i32 0
  call void @_ZN9NCompress5NLZMA6CState11UpdateMatchEv(ptr noundef nonnull align 1 dereferenceable(1) %417)
  %418 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 18
  %419 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  %420 = load i32, ptr %19, align 4, !tbaa !35
  %421 = sub i32 %420, 2
  %422 = load i32, ptr %18, align 4, !tbaa !35
  call void @_ZN9NCompress5NLZMA7NLength18CPriceTableEncoder6EncodeEPNS_11NRangeCoder8CEncoderEjj(ptr noundef nonnull align 4 dereferenceable(19532) %418, ptr noundef %419, i32 noundef %421, i32 noundef %422)
  %423 = load i32, ptr %17, align 4, !tbaa !35
  %424 = sub i32 %423, 4
  store i32 %424, ptr %17, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %425 = load i32, ptr %17, align 4, !tbaa !35
  %426 = call noundef i32 @_ZN9NCompress5NLZMA10GetPosSlotEj(i32 noundef %425)
  store i32 %426, ptr %27, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %427 = load i32, ptr %19, align 4, !tbaa !35
  %428 = call noundef i32 @_ZN9NCompress5NLZMA16GetLenToPosStateEj(i32 noundef %427)
  store i32 %428, ptr %28, align 4, !tbaa !35
  %429 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 15
  %430 = load i32, ptr %28, align 4, !tbaa !35
  %431 = zext i32 %430 to i64
  %432 = getelementptr inbounds [4 x %"class.NCompress::NRangeCoder::CBitTreeEncoder.7"], ptr %429, i64 0, i64 %431
  %433 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  %434 = load i32, ptr %27, align 4, !tbaa !35
  call void @_ZN9NCompress11NRangeCoder15CBitTreeEncoderILi5ELi6EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(256) %432, ptr noundef %433, i32 noundef %434)
  %435 = load i32, ptr %27, align 4, !tbaa !35
  %436 = icmp uge i32 %435, 4
  br i1 %436, label %437, label %487

437:                                              ; preds = %407
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %438 = load i32, ptr %27, align 4, !tbaa !35
  %439 = lshr i32 %438, 1
  %440 = sub i32 %439, 1
  store i32 %440, ptr %29, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %441 = load i32, ptr %27, align 4, !tbaa !35
  %442 = and i32 %441, 1
  %443 = or i32 2, %442
  %444 = load i32, ptr %29, align 4, !tbaa !35
  %445 = shl i32 %443, %444
  store i32 %445, ptr %30, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %446 = load i32, ptr %17, align 4, !tbaa !35
  %447 = load i32, ptr %30, align 4, !tbaa !35
  %448 = sub i32 %446, %447
  store i32 %448, ptr %31, align 4, !tbaa !35
  %449 = load i32, ptr %27, align 4, !tbaa !35
  %450 = icmp ult i32 %449, 14
  br i1 %450, label %451, label %465

451:                                              ; preds = %437
  %452 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 16
  %453 = getelementptr inbounds [114 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %452, i64 0, i64 0
  %454 = load i32, ptr %30, align 4, !tbaa !35
  %455 = zext i32 %454 to i64
  %456 = getelementptr inbounds %"class.NCompress::NRangeCoder::CBitEncoder", ptr %453, i64 %455
  %457 = load i32, ptr %27, align 4, !tbaa !35
  %458 = zext i32 %457 to i64
  %459 = sub i64 0, %458
  %460 = getelementptr inbounds %"class.NCompress::NRangeCoder::CBitEncoder", ptr %456, i64 %459
  %461 = getelementptr inbounds %"class.NCompress::NRangeCoder::CBitEncoder", ptr %460, i64 -1
  %462 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  %463 = load i32, ptr %29, align 4, !tbaa !35
  %464 = load i32, ptr %31, align 4, !tbaa !35
  call void @_ZN9NCompress11NRangeCoder20ReverseBitTreeEncodeILi5EEEvPNS0_11CBitEncoderIXT_EEEPNS0_8CEncoderEij(ptr noundef %461, ptr noundef %462, i32 noundef %463, i32 noundef %464)
  br label %486

465:                                              ; preds = %437
  %466 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  %467 = load i32, ptr %31, align 4, !tbaa !35
  %468 = lshr i32 %467, 4
  %469 = load i32, ptr %29, align 4, !tbaa !35
  %470 = sub i32 %469, 4
  call void @_ZN9NCompress11NRangeCoder8CEncoder16EncodeDirectBitsEji(ptr noundef nonnull align 8 dereferenceable(80) %466, i32 noundef %468, i32 noundef %470)
  %471 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 17
  %472 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  %473 = load i32, ptr %31, align 4, !tbaa !35
  %474 = and i32 %473, 15
  call void @_ZN9NCompress11NRangeCoder15CBitTreeEncoderILi5ELi4EE13ReverseEncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(64) %471, ptr noundef %472, i32 noundef %474)
  %475 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 22
  %476 = load i8, ptr %475, align 8, !tbaa !47, !range !38, !noundef !39
  %477 = trunc i8 %476 to i1
  br i1 %477, label %485, label %478

478:                                              ; preds = %465
  %479 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 35
  %480 = load i32, ptr %479, align 4, !tbaa !50
  %481 = add i32 %480, -1
  store i32 %481, ptr %479, align 4, !tbaa !50
  %482 = icmp eq i32 %481, 0
  br i1 %482, label %483, label %484

483:                                              ; preds = %478
  call void @_ZN9NCompress5NLZMA8CEncoder15FillAlignPricesEv(ptr noundef nonnull align 8 dereferenceable(210678) %34)
  br label %484

484:                                              ; preds = %483, %478
  br label %485

485:                                              ; preds = %484, %465
  br label %486

486:                                              ; preds = %485, %451
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %487

487:                                              ; preds = %486, %407
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %488 = load i32, ptr %17, align 4, !tbaa !35
  store i32 %488, ptr %32, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  store i32 3, ptr %33, align 4, !tbaa !35
  br label %489

489:                                              ; preds = %506, %487
  %490 = load i32, ptr %33, align 4, !tbaa !35
  %491 = icmp uge i32 %490, 1
  br i1 %491, label %493, label %492

492:                                              ; preds = %489
  store i32 7, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  br label %509

493:                                              ; preds = %489
  %494 = getelementptr inbounds i8, ptr %34, i64 32
  %495 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %494, i32 0, i32 2
  %496 = load i32, ptr %33, align 4, !tbaa !35
  %497 = sub i32 %496, 1
  %498 = zext i32 %497 to i64
  %499 = getelementptr inbounds [4 x i32], ptr %495, i64 0, i64 %498
  %500 = load i32, ptr %499, align 4, !tbaa !35
  %501 = getelementptr inbounds i8, ptr %34, i64 32
  %502 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %501, i32 0, i32 2
  %503 = load i32, ptr %33, align 4, !tbaa !35
  %504 = zext i32 %503 to i64
  %505 = getelementptr inbounds [4 x i32], ptr %502, i64 0, i64 %504
  store i32 %500, ptr %505, align 4, !tbaa !35
  br label %506

506:                                              ; preds = %493
  %507 = load i32, ptr %33, align 4, !tbaa !35
  %508 = add i32 %507, -1
  store i32 %508, ptr %33, align 4, !tbaa !35
  br label %489, !llvm.loop !51

509:                                              ; preds = %492
  %510 = load i32, ptr %32, align 4, !tbaa !35
  %511 = getelementptr inbounds i8, ptr %34, i64 32
  %512 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %511, i32 0, i32 2
  %513 = getelementptr inbounds [4 x i32], ptr %512, i64 0, i64 0
  store i32 %510, ptr %513, align 4, !tbaa !35
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  br label %514

514:                                              ; preds = %509, %406
  %515 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 7
  %516 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %515)
  %517 = load i32, ptr %19, align 4, !tbaa !35
  %518 = sub i32 %517, 1
  %519 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 27
  %520 = load i32, ptr %519, align 4, !tbaa !44
  %521 = sub i32 %518, %520
  %522 = load ptr, ptr %516, align 8, !tbaa !33
  %523 = getelementptr inbounds ptr, ptr %522, i64 6
  %524 = load ptr, ptr %523, align 8
  %525 = call noundef zeroext i8 %524(ptr noundef nonnull align 8 dereferenceable(8) %516, i32 noundef %521)
  %526 = getelementptr inbounds i8, ptr %34, i64 32
  %527 = getelementptr inbounds %"class.NCompress::NLZMA::CBaseState", ptr %526, i32 0, i32 1
  store i8 %525, ptr %527, align 1, !tbaa !46
  br label %528

528:                                              ; preds = %514, %249
  %529 = load i32, ptr %19, align 4, !tbaa !35
  %530 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 27
  %531 = load i32, ptr %530, align 4, !tbaa !44
  %532 = sub i32 %531, %529
  store i32 %532, ptr %530, align 4, !tbaa !44
  %533 = load i32, ptr %19, align 4, !tbaa !35
  %534 = zext i32 %533 to i64
  %535 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %536 = load i64, ptr %535, align 8, !tbaa !40
  %537 = add i64 %536, %534
  store i64 %537, ptr %535, align 8, !tbaa !40
  %538 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 22
  %539 = load i8, ptr %538, align 8, !tbaa !47, !range !38, !noundef !39
  %540 = trunc i8 %539 to i1
  br i1 %540, label %553, label %541

541:                                              ; preds = %528
  %542 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %543 = load i64, ptr %542, align 8, !tbaa !40
  %544 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 44
  %545 = load i64, ptr %544, align 8, !tbaa !52
  %546 = sub i64 %543, %545
  %547 = icmp uge i64 %546, 512
  br i1 %547, label %548, label %552

548:                                              ; preds = %541
  call void @_ZN9NCompress5NLZMA8CEncoder17FillPosSlotPricesEv(ptr noundef nonnull align 8 dereferenceable(210678) %34)
  call void @_ZN9NCompress5NLZMA8CEncoder19FillDistancesPricesEv(ptr noundef nonnull align 8 dereferenceable(210678) %34)
  %549 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %550 = load i64, ptr %549, align 8, !tbaa !40
  %551 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 44
  store i64 %550, ptr %551, align 8, !tbaa !52
  br label %552

552:                                              ; preds = %548, %541
  br label %553

553:                                              ; preds = %552, %528
  %554 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 27
  %555 = load i32, ptr %554, align 4, !tbaa !44
  %556 = icmp eq i32 %555, 0
  br i1 %556, label %557, label %586

557:                                              ; preds = %553
  %558 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %559 = load i64, ptr %558, align 8, !tbaa !40
  %560 = load ptr, ptr %7, align 8, !tbaa !5
  store i64 %559, ptr %560, align 8, !tbaa !41
  %561 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 8
  %562 = call noundef i64 @_ZN9NCompress11NRangeCoder8CEncoder16GetProcessedSizeEv(ptr noundef nonnull align 8 dereferenceable(80) %561)
  %563 = load ptr, ptr %8, align 8, !tbaa !5
  store i64 %562, ptr %563, align 8, !tbaa !41
  %564 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 7
  %565 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %564)
  %566 = load ptr, ptr %565, align 8, !tbaa !33
  %567 = getelementptr inbounds ptr, ptr %566, i64 8
  %568 = load ptr, ptr %567, align 8
  %569 = call noundef i32 %568(ptr noundef nonnull align 8 dereferenceable(8) %565)
  %570 = icmp eq i32 %569, 0
  br i1 %570, label %571, label %576

571:                                              ; preds = %557
  %572 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %573 = load i64, ptr %572, align 8, !tbaa !40
  %574 = trunc i64 %573 to i32
  %575 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder5FlushEj(ptr noundef nonnull align 8 dereferenceable(210678) %34, i32 noundef %574)
  store i32 %575, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %587

576:                                              ; preds = %557
  %577 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 45
  %578 = load i64, ptr %577, align 8, !tbaa !40
  %579 = load i64, ptr %12, align 8, !tbaa !41
  %580 = sub i64 %578, %579
  %581 = icmp uge i64 %580, 4096
  br i1 %581, label %582, label %585

582:                                              ; preds = %576
  %583 = getelementptr inbounds %"class.NCompress::NLZMA::CEncoder", ptr %34, i32 0, i32 46
  store i8 0, ptr %583, align 8, !tbaa !37
  %584 = load ptr, ptr %9, align 8, !tbaa !5
  store i32 0, ptr %584, align 4, !tbaa !35
  store i32 0, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %587

585:                                              ; preds = %576
  br label %586

586:                                              ; preds = %585, %553
  store i32 0, ptr %11, align 4
  br label %587

587:                                              ; preds = %586, %582, %571, %185
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  %588 = load i32, ptr %11, align 4
  switch i32 %588, label %590 [
    i32 0, label %589
  ]

589:                                              ; preds = %587
  br label %157, !llvm.loop !53

590:                                              ; preds = %587, %151, %140, %78
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  br label %591

591:                                              ; preds = %590, %62, %52
  %592 = load i32, ptr %5, align 4
  ret i32 %592

593:                                              ; preds = %52
  unreachable
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress5NLZMA8CEncoder17FillPosSlotPricesEv(ptr noundef nonnull align 8 dereferenceable(210678)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress5NLZMA8CEncoder19FillDistancesPricesEv(ptr noundef nonnull align 8 dereferenceable(210678)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress5NLZMA8CEncoder15FillAlignPricesEv(ptr noundef nonnull align 8 dereferenceable(210678)) #1 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN9NCompress5NLZMA10GetPosSlotEj(i32 noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress11NRangeCoder20ReverseBitTreeEncodeILi5EEEvPNS0_11CBitEncoderIXT_EEEPNS0_8CEncoderEij(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZN9NCompress11NRangeCoder8CEncoder16GetProcessedSizeEv(ptr noundef nonnull align 8 dereferenceable(80)) #1 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 210664}
!10 = !{!"_ZTSN9NCompress5NLZMA8CEncoderE", !11, i64 0, !13, i64 8, !14, i64 16, !15, i64 24, !16, i64 32, !18, i64 52, !7, i64 56, !20, i64 163896, !21, 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, !26, i64 167192, !27, i64 167256, !27, i64 186788, !32, i64 206320, !7, i64 206344, !25, i64 207440, !25, i64 207441, !19, i64 207444, !19, i64 207448, !19, i64 207452, !19, i64 207456, !19, i64 207460, !25, i64 207464, !7, i64 207468, !7, i64 208492, !7, i64 210540, !19, i64 210604, !19, i64 210608, !19, i64 210612, !19, i64 210616, !19, i64 210620, !19, i64 210624, !19, i64 210628, !19, i64 210632, !19, i64 210636, !22, i64 210640, !22, i64 210648, !25, i64 210656, !6, i64 210664, !19, i64 210672, !25, i64 210676, !25, i64 210677}
!11 = !{!"_ZTS14ICompressCoder", !12, i64 0}
!12 = !{!"_ZTS8IUnknown"}
!13 = !{!"_ZTS21ICompressSetOutStream", !12, i64 0}
!14 = !{!"_ZTS27ICompressSetCoderProperties", !12, i64 0}
!15 = !{!"_ZTS29ICompressWriteCoderProperties", !12, i64 0}
!16 = !{!"_ZTSN9NCompress5NLZMA10CBaseStateE", !17, i64 0, !7, i64 1, !7, i64 4}
!17 = !{!"_ZTSN9NCompress5NLZMA6CStateE", !7, i64 0}
!18 = !{!"_ZTS13CMyUnknownImp", !19, i64 0}
!19 = !{!"int", !7, i64 0}
!20 = !{!"_ZTS9CMyComPtrI12IMatchFinderE", !6, i64 0}
!21 = !{!"_ZTSN9NCompress11NRangeCoder8CEncoderE", !19, i64 0, !7, i64 4, !22, i64 8, !19, i64 16, !23, i64 24}
!22 = !{!"long long", !7, i64 0}
!23 = !{!"_ZTS10COutBuffer", !6, i64 0, !19, i64 8, !19, i64 12, !19, i64 16, !19, i64 20, !24, i64 24, !22, i64 32, !6, i64 40, !25, i64 48}
!24 = !{!"_ZTS9CMyComPtrI20ISequentialOutStreamE", !6, i64 0}
!25 = !{!"bool", !7, i64 0}
!26 = !{!"_ZTSN9NCompress11NRangeCoder15CBitTreeEncoderILi5ELi4EEE", !7, i64 0}
!27 = !{!"_ZTSN9NCompress5NLZMA7NLength18CPriceTableEncoderE", !28, i64 0, !7, i64 2056, !19, i64 19464, !7, i64 19468}
!28 = !{!"_ZTSN9NCompress5NLZMA7NLength8CEncoderE", !29, i64 0, !29, i64 4, !7, i64 8, !7, i64 520, !31, i64 1032}
!29 = !{!"_ZTSN9NCompress11NRangeCoder11CBitEncoderILi5EEE", !30, i64 0}
!30 = !{!"_ZTSN9NCompress11NRangeCoder9CBitModelILi5EEE", !19, i64 0}
!31 = !{!"_ZTSN9NCompress11NRangeCoder15CBitTreeEncoderILi5ELi8EEE", !7, i64 0}
!32 = !{!"_ZTSN9NCompress5NLZMA15CLiteralEncoderE", !6, i64 0, !19, i64 8, !19, i64 12, !19, i64 16}
!33 = !{!34, !34, i64 0}
!34 = !{!"vtable pointer", !8, i64 0}
!35 = !{!19, !19, i64 0}
!36 = !{!10, !25, i64 210677}
!37 = !{!10, !25, i64 210656}
!38 = !{i8 0, i8 2}
!39 = !{}
!40 = !{!10, !22, i64 210648}
!41 = !{!22, !22, i64 0}
!42 = !{!10, !19, i64 210616}
!43 = !{!16, !7, i64 0}
!44 = !{!10, !19, i64 207452}
!45 = !{!7, !7, i64 0}
!46 = !{!16, !7, i64 1}
!47 = !{!10, !25, i64 207440}
!48 = distinct !{!48, !49}
!49 = !{!"llvm.loop.mustprogress"}
!50 = !{!10, !19, i64 210604}
!51 = distinct !{!51, !49}
!52 = !{!10, !22, i64 210640}
!53 = distinct !{!53, !49}


; 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::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"] }

; 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: mustprogress uwtable
declare dso_local void @_ZN9NCompress5NLZMA16CLiteralEncoder26EncodeEPNS_11NRangeCoder8CEncoderEh(ptr noundef nonnull align 4 dereferenceable(3072), ptr noundef, i8 noundef zeroext) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef, i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress5NLZMA16CLiteralEncoder213EncodeMatchedEPNS_11NRangeCoder8CEncoderEhh(ptr noundef nonnull align 4 dereferenceable(3072), ptr noundef, i8 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #1 align 2

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

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

; 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 #1 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress5NLZMA7NLength18CPriceTableEncoder6EncodeEPNS_11NRangeCoder8CEncoderEjj(ptr noundef nonnull align 4 dereferenceable(19532), ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN9NCompress5NLZMA16GetLenToPosStateEj(i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress11NRangeCoder15CBitTreeEncoderILi5ELi6EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(256), ptr noundef, i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress11NRangeCoder8CEncoder16EncodeDirectBitsEji(ptr noundef nonnull align 8 dereferenceable(80), i32 noundef, i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress11NRangeCoder15CBitTreeEncoderILi5ELi4EE13ReverseEncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(64), ptr noundef, i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN9NCompress5NLZMA8CEncoder12CodeOneBlockEPyS2_Pi(ptr noundef nonnull align 8 dereferenceable(210678) %0, ptr nocapture noundef writeonly %1, ptr nocapture noundef writeonly %2, ptr nocapture noundef writeonly %3) local_unnamed_addr #1 align 2 {
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = getelementptr inbounds i8, ptr %0, i64 210664
  %9 = load ptr, ptr %8, align 8, !tbaa !5
  %.not = icmp eq ptr %9, null
  br i1 %.not, label %20, label %10

10:                                               ; preds = %4
  %11 = getelementptr inbounds i8, ptr %0, i64 163896
  %12 = tail call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %11)
  %13 = load ptr, ptr %8, align 8, !tbaa !5
  %14 = load ptr, ptr %12, align 8, !tbaa !32
  %15 = getelementptr inbounds i8, ptr %14, i64 24
  %16 = load ptr, ptr %15, align 8
  %17 = tail call noundef i32 %16(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef %13)
  %.not74.not = icmp eq i32 %17, 0
  br i1 %.not74.not, label %18, label %295

18:                                               ; preds = %10
  %19 = getelementptr inbounds i8, ptr %0, i64 210677
  store i8 1, ptr %19, align 1, !tbaa !34
  store ptr null, ptr %8, align 8, !tbaa !5
  br label %20

20:                                               ; preds = %18, %4
  store i32 1, ptr %3, align 4, !tbaa !35
  %21 = getelementptr inbounds i8, ptr %0, i64 210656
  %22 = load i8, ptr %21, align 8, !tbaa !36, !range !37, !noundef !38
  %23 = trunc nuw i8 %22 to i1
  br i1 %23, label %295, label %24

24:                                               ; preds = %20
  store i8 1, ptr %21, align 8, !tbaa !36
  %25 = getelementptr inbounds i8, ptr %0, i64 210648
  %26 = load i64, ptr %25, align 8, !tbaa !39
  %27 = icmp eq i64 %26, 0
  br i1 %27, label %28, label %73

28:                                               ; preds = %24
  %29 = getelementptr inbounds i8, ptr %0, i64 163896
  %30 = tail call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %29)
  %31 = load ptr, ptr %30, align 8, !tbaa !32
  %32 = getelementptr inbounds i8, ptr %31, i64 64
  %33 = load ptr, ptr %32, align 8
  %34 = tail call noundef i32 %33(ptr noundef nonnull align 8 dereferenceable(8) %30)
  %35 = icmp eq i32 %34, 0
  br i1 %35, label %36, label %40

36:                                               ; preds = %28
  %37 = load i64, ptr %25, align 8, !tbaa !39
  %38 = trunc i64 %37 to i32
  %39 = tail call noundef i32 @_ZN9NCompress5NLZMA8CEncoder5FlushEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef %38)
  br label %295

40:                                               ; preds = %28
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #5
  %41 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder18ReadMatchDistancesERj(ptr noundef nonnull align 8 dereferenceable(210678) %0, ptr noundef nonnull align 4 dereferenceable(4) %5)
  %.not75 = icmp eq i32 %41, 0
  br i1 %.not75, label %42, label %.critedge

42:                                               ; preds = %40
  %43 = load i64, ptr %25, align 8, !tbaa !39
  %44 = trunc i64 %43 to i32
  %45 = getelementptr inbounds i8, ptr %0, i64 210616
  %46 = load i32, ptr %45, align 8, !tbaa !40
  %47 = and i32 %46, %44
  %48 = getelementptr inbounds i8, ptr %0, i64 163984
  %49 = getelementptr inbounds i8, ptr %0, i64 32
  %50 = load i8, ptr %49, align 8, !tbaa !41
  %51 = zext i8 %50 to i64
  %52 = zext i32 %47 to i64
  %53 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %48, i64 0, i64 %51, i64 %52
  %54 = getelementptr inbounds i8, ptr %0, i64 163904
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %53, ptr noundef nonnull %54, i32 noundef 0)
  call void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1) %49)
  %55 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %29)
  %56 = getelementptr inbounds i8, ptr %0, i64 207452
  %57 = load i32, ptr %56, align 4, !tbaa !42
  %58 = sub i32 0, %57
  %59 = load ptr, ptr %55, align 8, !tbaa !32
  %60 = getelementptr inbounds i8, ptr %59, i64 48
  %61 = load ptr, ptr %60, align 8
  %62 = call noundef zeroext i8 %61(ptr noundef nonnull align 8 dereferenceable(8) %55, i32 noundef %58)
  %63 = getelementptr inbounds i8, ptr %0, i64 206320
  %64 = load i64, ptr %25, align 8, !tbaa !39
  %65 = trunc i64 %64 to i32
  %66 = getelementptr inbounds i8, ptr %0, i64 33
  %67 = load i8, ptr %66, align 1, !tbaa !43
  %68 = call noundef ptr @_ZN9NCompress5NLZMA15CLiteralEncoder11GetSubCoderEjh(ptr noundef nonnull align 8 dereferenceable(20) %63, i32 noundef %65, i8 noundef zeroext %67)
  call void @_ZN9NCompress5NLZMA16CLiteralEncoder26EncodeEPNS_11NRangeCoder8CEncoderEh(ptr noundef nonnull align 4 dereferenceable(3072) %68, ptr noundef nonnull %54, i8 noundef zeroext %62)
  store i8 %62, ptr %66, align 1, !tbaa !43
  %69 = load i32, ptr %56, align 4, !tbaa !42
  %70 = add i32 %69, -1
  store i32 %70, ptr %56, align 4, !tbaa !42
  %71 = load i64, ptr %25, align 8, !tbaa !39
  %72 = add i64 %71, 1
  store i64 %72, ptr %25, align 8, !tbaa !39
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #5
  br label %73

73:                                               ; preds = %42, %24
  %74 = getelementptr inbounds i8, ptr %0, i64 163896
  %75 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %74)
  %76 = load ptr, ptr %75, align 8, !tbaa !32
  %77 = getelementptr inbounds i8, ptr %76, i64 64
  %78 = load ptr, ptr %77, align 8
  %79 = call noundef i32 %78(ptr noundef nonnull align 8 dereferenceable(8) %75)
  %80 = icmp eq i32 %79, 0
  br i1 %80, label %102, label %.preheader82

.preheader82:                                     ; preds = %73
  %81 = getelementptr inbounds i8, ptr %0, i64 210616
  %82 = getelementptr inbounds i8, ptr %0, i64 207440
  %83 = getelementptr inbounds i8, ptr %0, i64 163984
  %84 = getelementptr inbounds i8, ptr %0, i64 32
  %85 = getelementptr inbounds i8, ptr %0, i64 163904
  %86 = getelementptr inbounds i8, ptr %0, i64 164752
  %87 = getelementptr inbounds i8, ptr %0, i64 167256
  %88 = getelementptr inbounds i8, ptr %0, i64 165712
  %89 = getelementptr inbounds i8, ptr %0, i64 167192
  %90 = getelementptr inbounds i8, ptr %0, i64 210604
  %91 = getelementptr inbounds i8, ptr %0, i64 166736
  %92 = getelementptr inbounds i8, ptr %0, i64 36
  %93 = getelementptr inbounds i8, ptr %0, i64 164800
  %94 = getelementptr inbounds i8, ptr %0, i64 164848
  %95 = getelementptr inbounds i8, ptr %0, i64 164896
  %96 = getelementptr inbounds i8, ptr %0, i64 164944
  %97 = getelementptr inbounds i8, ptr %0, i64 186788
  %98 = getelementptr inbounds i8, ptr %0, i64 207452
  %99 = getelementptr inbounds i8, ptr %0, i64 33
  %100 = getelementptr inbounds i8, ptr %0, i64 206320
  %101 = getelementptr inbounds i8, ptr %0, i64 210640
  %scevgep = getelementptr inbounds i8, ptr %0, i64 40
  %.pre = load i64, ptr %25, align 8, !tbaa !39
  br label %106

102:                                              ; preds = %73
  %103 = load i64, ptr %25, align 8, !tbaa !39
  %104 = trunc i64 %103 to i32
  %105 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder5FlushEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef %104)
  br label %295

106:                                              ; preds = %.preheader82, %293
  %107 = phi i64 [ %.pre, %.preheader82 ], [ %294, %293 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #5
  %108 = trunc i64 %107 to i32
  %109 = load i32, ptr %81, align 8, !tbaa !40
  %110 = and i32 %109, %108
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #5
  %111 = load i8, ptr %82, align 8, !tbaa !44, !range !37, !noundef !38
  %112 = trunc nuw i8 %111 to i1
  br i1 %112, label %113, label %115

113:                                              ; preds = %106
  %114 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder14GetOptimumFastEjRjS2_(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef %108, ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %7)
  br label %117

115:                                              ; preds = %106
  %116 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder10GetOptimumEjRjS2_(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef %108, ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %7)
  br label %117

117:                                              ; preds = %115, %113
  %.068 = phi i32 [ %114, %113 ], [ %116, %115 ]
  %.not76 = icmp eq i32 %.068, 0
  br i1 %.not76, label %118, label %.thread

118:                                              ; preds = %117
  %119 = load i32, ptr %7, align 4, !tbaa !35
  %120 = icmp eq i32 %119, 1
  %121 = load i32, ptr %6, align 4
  %122 = icmp eq i32 %121, -1
  %or.cond = select i1 %120, i1 %122, i1 false
  %123 = load i8, ptr %84, align 8, !tbaa !41
  %124 = zext i8 %123 to i64
  %125 = zext i32 %110 to i64
  %126 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %83, i64 0, i64 %124, i64 %125
  br i1 %or.cond, label %127, label %152

127:                                              ; preds = %118
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %126, ptr noundef nonnull %85, i32 noundef 0)
  %128 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %74)
  %129 = load i32, ptr %98, align 4, !tbaa !42
  %130 = sub i32 0, %129
  %131 = load ptr, ptr %128, align 8, !tbaa !32
  %132 = getelementptr inbounds i8, ptr %131, i64 48
  %133 = load ptr, ptr %132, align 8
  %134 = call noundef zeroext i8 %133(ptr noundef nonnull align 8 dereferenceable(8) %128, i32 noundef %130)
  %135 = load i64, ptr %25, align 8, !tbaa !39
  %136 = trunc i64 %135 to i32
  %137 = load i8, ptr %99, align 1, !tbaa !43
  %138 = call noundef ptr @_ZN9NCompress5NLZMA15CLiteralEncoder11GetSubCoderEjh(ptr noundef nonnull align 8 dereferenceable(20) %100, i32 noundef %136, i8 noundef zeroext %137)
  %139 = call noundef zeroext i1 @_ZNK9NCompress5NLZMA6CState11IsCharStateEv(ptr noundef nonnull align 1 dereferenceable(1) %84)
  br i1 %139, label %150, label %140

140:                                              ; preds = %127
  %141 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %74)
  %142 = load i32, ptr %92, align 4, !tbaa !35
  %143 = xor i32 %142, -1
  %144 = load i32, ptr %98, align 4, !tbaa !42
  %145 = sub i32 %143, %144
  %146 = load ptr, ptr %141, align 8, !tbaa !32
  %147 = getelementptr inbounds i8, ptr %146, i64 48
  %148 = load ptr, ptr %147, align 8
  %149 = call noundef zeroext i8 %148(ptr noundef nonnull align 8 dereferenceable(8) %141, i32 noundef %145)
  call void @_ZN9NCompress5NLZMA16CLiteralEncoder213EncodeMatchedEPNS_11NRangeCoder8CEncoderEhh(ptr noundef nonnull align 4 dereferenceable(3072) %138, ptr noundef nonnull %85, i8 noundef zeroext %149, i8 noundef zeroext %134)
  br label %151

150:                                              ; preds = %127
  call void @_ZN9NCompress5NLZMA16CLiteralEncoder26EncodeEPNS_11NRangeCoder8CEncoderEh(ptr noundef nonnull align 4 dereferenceable(3072) %138, ptr noundef nonnull %85, i8 noundef zeroext %134)
  br label %151

151:                                              ; preds = %150, %140
  call void @_ZN9NCompress5NLZMA6CState10UpdateCharEv(ptr noundef nonnull align 1 dereferenceable(1) %84)
  br label %258

152:                                              ; preds = %118
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %126, ptr noundef nonnull %85, i32 noundef 1)
  %153 = load i32, ptr %6, align 4, !tbaa !35
  %154 = icmp ult i32 %153, 4
  %155 = load i8, ptr %84, align 8, !tbaa !41
  %156 = zext i8 %155 to i64
  %157 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %86, i64 0, i64 %156
  br i1 %154, label %158, label %208

158:                                              ; preds = %152
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %157, ptr noundef nonnull %85, i32 noundef 1)
  %159 = load i32, ptr %6, align 4, !tbaa !35
  %160 = icmp eq i32 %159, 0
  %161 = load i8, ptr %84, align 8, !tbaa !41
  %162 = zext i8 %161 to i64
  %163 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %93, i64 0, i64 %162
  br i1 %160, label %164, label %172

164:                                              ; preds = %158
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %163, ptr noundef nonnull %85, i32 noundef 0)
  %165 = load i32, ptr %7, align 4, !tbaa !35
  %166 = icmp eq i32 %165, 1
  %167 = load i8, ptr %84, align 8, !tbaa !41
  %168 = zext i8 %167 to i64
  %169 = getelementptr inbounds [12 x [16 x %"class.NCompress::NRangeCoder::CBitEncoder"]], ptr %96, i64 0, i64 %168, i64 %125
  br i1 %166, label %170, label %171

170:                                              ; preds = %164
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %169, ptr noundef nonnull %85, i32 noundef 0)
  br label %185

171:                                              ; preds = %164
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %169, ptr noundef nonnull %85, i32 noundef 1)
  br label %185

172:                                              ; preds = %158
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %163, ptr noundef nonnull %85, i32 noundef 1)
  %173 = load i32, ptr %6, align 4, !tbaa !35
  %174 = icmp eq i32 %173, 1
  %175 = load i8, ptr %84, align 8, !tbaa !41
  %176 = zext i8 %175 to i64
  %177 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %94, i64 0, i64 %176
  br i1 %174, label %178, label %179

178:                                              ; preds = %172
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %177, ptr noundef nonnull %85, i32 noundef 0)
  br label %185

179:                                              ; preds = %172
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %177, ptr noundef nonnull %85, i32 noundef 1)
  %180 = load i8, ptr %84, align 8, !tbaa !41
  %181 = zext i8 %180 to i64
  %182 = getelementptr inbounds [12 x %"class.NCompress::NRangeCoder::CBitEncoder"], ptr %95, i64 0, i64 %181
  %183 = load i32, ptr %6, align 4, !tbaa !35
  %184 = add i32 %183, -2
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %182, ptr noundef nonnull %85, i32 noundef %184)
  br label %185

185:                                              ; preds = %178, %179, %170, %171
  %186 = load i32, ptr %7, align 4, !tbaa !35
  %187 = icmp eq i32 %186, 1
  br i1 %187, label %188, label %189

188:                                              ; preds = %185
  call void @_ZN9NCompress5NLZMA6CState14UpdateShortRepEv(ptr noundef nonnull align 1 dereferenceable(1) %84)
  br label %191

189:                                              ; preds = %185
  %190 = add i32 %186, -2
  call void @_ZN9NCompress5NLZMA7NLength18CPriceTableEncoder6EncodeEPNS_11NRangeCoder8CEncoderEjj(ptr noundef nonnull align 4 dereferenceable(19532) %97, ptr noundef nonnull %85, i32 noundef %190, i32 noundef %110)
  call void @_ZN9NCompress5NLZMA6CState9UpdateRepEv(ptr noundef nonnull align 1 dereferenceable(1) %84)
  br label %191

191:                                              ; preds = %189, %188
  %192 = load i32, ptr %6, align 4, !tbaa !35
  %193 = zext i32 %192 to i64
  %194 = getelementptr inbounds [4 x i32], ptr %92, i64 0, i64 %193
  %195 = load i32, ptr %194, align 4, !tbaa !35
  %.not78 = icmp eq i32 %192, 0
  br i1 %.not78, label %248, label %.preheader.preheader

.preheader.preheader:                             ; preds = %191
  %min.iters.check = icmp ult i32 %192, 8
  br i1 %min.iters.check, label %.preheader.preheader103, label %vector.ph

vector.ph:                                        ; preds = %.preheader.preheader
  %n.vec = and i64 %193, 4294967288
  %ind.end = and i64 %193, 7
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = sub i64 %193, %index
  %196 = add nsw i64 %offset.idx, -1
  %197 = getelementptr inbounds [4 x i32], ptr %92, i64 0, i64 %196
  %198 = getelementptr inbounds i8, ptr %197, i64 -12
  %199 = getelementptr inbounds i8, ptr %197, i64 -28
  %wide.load = load <4 x i32>, ptr %198, align 4, !tbaa !35
  %wide.load99 = load <4 x i32>, ptr %199, align 4, !tbaa !35
  %200 = getelementptr inbounds [4 x i32], ptr %92, i64 0, i64 %offset.idx
  %201 = getelementptr inbounds i8, ptr %200, i64 -12
  %202 = getelementptr inbounds i8, ptr %200, i64 -28
  store <4 x i32> %wide.load, ptr %201, align 4, !tbaa !35
  store <4 x i32> %wide.load99, ptr %202, align 4, !tbaa !35
  %index.next = add nuw i64 %index, 8
  %203 = icmp eq i64 %index.next, %n.vec
  br i1 %203, label %middle.block, label %vector.body, !llvm.loop !45

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %193
  br i1 %cmp.n, label %.sink.split, label %.preheader.preheader103

.preheader.preheader103:                          ; preds = %middle.block, %.preheader.preheader
  %indvars.iv.ph = phi i64 [ %193, %.preheader.preheader ], [ %ind.end, %middle.block ]
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader103, %.preheader
  %indvars.iv = phi i64 [ %204, %.preheader ], [ %indvars.iv.ph, %.preheader.preheader103 ]
  %204 = add nsw i64 %indvars.iv, -1
  %205 = getelementptr inbounds [4 x i32], ptr %92, i64 0, i64 %204
  %206 = load i32, ptr %205, align 4, !tbaa !35
  %207 = getelementptr inbounds [4 x i32], ptr %92, i64 0, i64 %indvars.iv
  store i32 %206, ptr %207, align 4, !tbaa !35
  %.not79.wide = icmp eq i64 %204, 0
  br i1 %.not79.wide, label %.sink.split, label %.preheader, !llvm.loop !49

208:                                              ; preds = %152
  call void @_ZN9NCompress11NRangeCoder11CBitEncoderILi5EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(4) %157, ptr noundef nonnull %85, i32 noundef 0)
  call void @_ZN9NCompress5NLZMA6CState11UpdateMatchEv(ptr noundef nonnull align 1 dereferenceable(1) %84)
  %209 = load i32, ptr %7, align 4, !tbaa !35
  %210 = add i32 %209, -2
  call void @_ZN9NCompress5NLZMA7NLength18CPriceTableEncoder6EncodeEPNS_11NRangeCoder8CEncoderEjj(ptr noundef nonnull align 4 dereferenceable(19532) %87, ptr noundef nonnull %85, i32 noundef %210, i32 noundef %110)
  %211 = load i32, ptr %6, align 4, !tbaa !35
  %212 = add i32 %211, -4
  store i32 %212, ptr %6, align 4, !tbaa !35
  %213 = call noundef i32 @_ZN9NCompress5NLZMA10GetPosSlotEj(i32 noundef %212)
  %214 = load i32, ptr %7, align 4, !tbaa !35
  %215 = call noundef i32 @_ZN9NCompress5NLZMA16GetLenToPosStateEj(i32 noundef %214)
  %216 = zext i32 %215 to i64
  %217 = getelementptr inbounds [4 x %"class.NCompress::NRangeCoder::CBitTreeEncoder.7"], ptr %88, i64 0, i64 %216
  call void @_ZN9NCompress11NRangeCoder15CBitTreeEncoderILi5ELi6EE6EncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(256) %217, ptr noundef nonnull %85, i32 noundef %213)
  %218 = icmp ugt i32 %213, 3
  br i1 %218, label %219, label %246

219:                                              ; preds = %208
  %220 = lshr i32 %213, 1
  %221 = add nsw i32 %220, -1
  %222 = and i32 %213, 1
  %223 = or disjoint i32 %222, 2
  %224 = shl i32 %223, %221
  %225 = load i32, ptr %6, align 4, !tbaa !35
  %226 = sub i32 %225, %224
  %227 = icmp ult i32 %213, 14
  br i1 %227, label %228, label %235

228:                                              ; preds = %219
  %229 = zext i32 %224 to i64
  %230 = getelementptr inbounds %"class.NCompress::NRangeCoder::CBitEncoder", ptr %91, i64 %229
  %231 = zext nneg i32 %213 to i64
  %232 = sub nsw i64 0, %231
  %233 = getelementptr inbounds %"class.NCompress::NRangeCoder::CBitEncoder", ptr %230, i64 %232
  %234 = getelementptr inbounds i8, ptr %233, i64 -4
  call void @_ZN9NCompress11NRangeCoder20ReverseBitTreeEncodeILi5EEEvPNS0_11CBitEncoderIXT_EEEPNS0_8CEncoderEij(ptr noundef nonnull %234, ptr noundef nonnull %85, i32 noundef %221, i32 noundef %226)
  br label %246

235:                                              ; preds = %219
  %236 = lshr i32 %226, 4
  %237 = add nsw i32 %220, -5
  call void @_ZN9NCompress11NRangeCoder8CEncoder16EncodeDirectBitsEji(ptr noundef nonnull align 8 dereferenceable(80) %85, i32 noundef %236, i32 noundef %237)
  %238 = and i32 %226, 15
  call void @_ZN9NCompress11NRangeCoder15CBitTreeEncoderILi5ELi4EE13ReverseEncodeEPNS0_8CEncoderEj(ptr noundef nonnull align 4 dereferenceable(64) %89, ptr noundef nonnull %85, i32 noundef %238)
  %239 = load i8, ptr %82, align 8, !tbaa !44, !range !37, !noundef !38
  %240 = trunc nuw i8 %239 to i1
  br i1 %240, label %246, label %241

241:                                              ; preds = %235
  %242 = load i32, ptr %90, align 4, !tbaa !50
  %243 = add i32 %242, -1
  store i32 %243, ptr %90, align 4, !tbaa !50
  %244 = icmp eq i32 %243, 0
  br i1 %244, label %245, label %246

245:                                              ; preds = %241
  call void @_ZN9NCompress5NLZMA8CEncoder15FillAlignPricesEv(ptr noundef nonnull align 8 dereferenceable(210678) %0)
  br label %246

246:                                              ; preds = %228, %241, %245, %235, %208
  %247 = load i32, ptr %6, align 4, !tbaa !35
  call void @llvm.memmove.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(12) %scevgep, ptr noundef nonnull align 4 dereferenceable(12) %92, i64 12, i1 false), !tbaa !35
  br label %.sink.split

.sink.split:                                      ; preds = %.preheader, %middle.block, %246
  %.sink = phi i32 [ %247, %246 ], [ %195, %middle.block ], [ %195, %.preheader ]
  store i32 %.sink, ptr %92, align 4, !tbaa !35
  br label %248

248:                                              ; preds = %.sink.split, %191
  %249 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %74)
  %250 = load i32, ptr %7, align 4, !tbaa !35
  %251 = load i32, ptr %98, align 4, !tbaa !42
  %252 = xor i32 %251, -1
  %253 = add i32 %250, %252
  %254 = load ptr, ptr %249, align 8, !tbaa !32
  %255 = getelementptr inbounds i8, ptr %254, i64 48
  %256 = load ptr, ptr %255, align 8
  %257 = call noundef zeroext i8 %256(ptr noundef nonnull align 8 dereferenceable(8) %249, i32 noundef %253)
  br label %258

258:                                              ; preds = %248, %151
  %storemerge = phi i8 [ %257, %248 ], [ %134, %151 ]
  store i8 %storemerge, ptr %99, align 1, !tbaa !43
  %259 = load i32, ptr %7, align 4, !tbaa !35
  %260 = load i32, ptr %98, align 4, !tbaa !42
  %261 = sub i32 %260, %259
  store i32 %261, ptr %98, align 4, !tbaa !42
  %262 = zext i32 %259 to i64
  %263 = load i64, ptr %25, align 8, !tbaa !39
  %264 = add i64 %263, %262
  store i64 %264, ptr %25, align 8, !tbaa !39
  %265 = load i8, ptr %82, align 8, !tbaa !44, !range !37, !noundef !38
  %266 = trunc nuw i8 %265 to i1
  br i1 %266, label %273, label %267

267:                                              ; preds = %258
  %268 = load i64, ptr %101, align 8, !tbaa !51
  %269 = sub i64 %264, %268
  %270 = icmp ugt i64 %269, 511
  br i1 %270, label %271, label %273

271:                                              ; preds = %267
  call void @_ZN9NCompress5NLZMA8CEncoder17FillPosSlotPricesEv(ptr noundef nonnull align 8 dereferenceable(210678) %0)
  call void @_ZN9NCompress5NLZMA8CEncoder19FillDistancesPricesEv(ptr noundef nonnull align 8 dereferenceable(210678) %0)
  %272 = load i64, ptr %25, align 8, !tbaa !39
  store i64 %272, ptr %101, align 8, !tbaa !51
  %.pre93 = load i32, ptr %98, align 4, !tbaa !42
  br label %273

273:                                              ; preds = %267, %271, %258
  %274 = phi i32 [ %261, %267 ], [ %.pre93, %271 ], [ %261, %258 ]
  %275 = phi i64 [ %264, %267 ], [ %272, %271 ], [ %264, %258 ]
  %276 = icmp eq i32 %274, 0
  br i1 %276, label %277, label %293

277:                                              ; preds = %273
  store i64 %275, ptr %1, align 8, !tbaa !52
  %278 = call noundef i64 @_ZN9NCompress11NRangeCoder8CEncoder16GetProcessedSizeEv(ptr noundef nonnull align 8 dereferenceable(80) %85)
  store i64 %278, ptr %2, align 8, !tbaa !52
  %279 = call noundef ptr @_ZNK9CMyComPtrI12IMatchFinderEptEv(ptr noundef nonnull align 8 dereferenceable(8) %74)
  %280 = load ptr, ptr %279, align 8, !tbaa !32
  %281 = getelementptr inbounds i8, ptr %280, i64 64
  %282 = load ptr, ptr %281, align 8
  %283 = call noundef i32 %282(ptr noundef nonnull align 8 dereferenceable(8) %279)
  %284 = icmp eq i32 %283, 0
  %285 = load i64, ptr %25, align 8, !tbaa !39
  br i1 %284, label %286, label %289

286:                                              ; preds = %277
  %287 = trunc i64 %285 to i32
  %288 = call noundef i32 @_ZN9NCompress5NLZMA8CEncoder5FlushEj(ptr noundef nonnull align 8 dereferenceable(210678) %0, i32 noundef %287)
  br label %.thread

289:                                              ; preds = %277
  %290 = sub i64 %285, %26
  %291 = icmp ugt i64 %290, 4095
  br i1 %291, label %292, label %293

292:                                              ; preds = %289
  store i8 0, ptr %21, align 8, !tbaa !36
  store i32 0, ptr %3, align 4, !tbaa !35
  br label %.thread

.thread:                                          ; preds = %117, %286, %292
  %.6.ph = phi i32 [ 0, %292 ], [ %288, %286 ], [ %.068, %117 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #5
  br label %295

293:                                              ; preds = %273, %289
  %294 = phi i64 [ %275, %273 ], [ %285, %289 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #5
  br label %106, !llvm.loop !53

.critedge:                                        ; preds = %40
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #5
  br label %295

295:                                              ; preds = %.thread, %10, %36, %102, %.critedge, %20
  %.8 = phi i32 [ %17, %10 ], [ 0, %20 ], [ %39, %36 ], [ %105, %102 ], [ %41, %.critedge ], [ %.6.ph, %.thread ]
  ret i32 %.8
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress5NLZMA8CEncoder17FillPosSlotPricesEv(ptr noundef nonnull align 8 dereferenceable(210678)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress5NLZMA8CEncoder19FillDistancesPricesEv(ptr noundef nonnull align 8 dereferenceable(210678)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress5NLZMA8CEncoder15FillAlignPricesEv(ptr noundef nonnull align 8 dereferenceable(210678)) local_unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN9NCompress5NLZMA10GetPosSlotEj(i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9NCompress11NRangeCoder20ReverseBitTreeEncodeILi5EEEvPNS0_11CBitEncoderIXT_EEEPNS0_8CEncoderEij(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZN9NCompress11NRangeCoder8CEncoder16GetProcessedSizeEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #1 align 2

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { 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 #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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, !19, i64 210664}
!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 = !{!33, !33, i64 0}
!33 = !{!"vtable pointer", !15, i64 0}
!34 = !{!6, !24, i64 210677}
!35 = !{!17, !17, i64 0}
!36 = !{!6, !24, i64 210656}
!37 = !{i8 0, i8 2}
!38 = !{}
!39 = !{!6, !21, i64 210648}
!40 = !{!6, !17, i64 210616}
!41 = !{!12, !14, i64 0}
!42 = !{!6, !17, i64 207452}
!43 = !{!12, !14, i64 1}
!44 = !{!6, !24, i64 207440}
!45 = distinct !{!45, !46, !47, !48}
!46 = !{!"llvm.loop.mustprogress"}
!47 = !{!"llvm.loop.isvectorized", i32 1}
!48 = !{!"llvm.loop.unroll.runtime.disable"}
!49 = distinct !{!49, !46, !48, !47}
!50 = !{!6, !17, i64 210604}
!51 = !{!6, !21, i64 210640}
!52 = !{!21, !21, i64 0}
!53 = distinct !{!53, !46}


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