; LLVM IR from SSBMTonberry/pocketlzma :: pocketlzma_program.ll (ZN3plz1c12LzmaEnc_InitEPNS0_8CLzmaEncE)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"struct.plz::c::CLzmaEnc" = type { ptr, %"struct.plz::c::_IMatchFinder", i32, i32, i32, i32, i32, i32, i32, i32, [4 x i32], i32, i32, ptr, %"struct.plz::c::CRangeEnc", i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i32, i32, i32, i32, i32, %"struct.plz::c::_CMatchFinder", [128 x i32], [549 x i32], [16 x i32], [4 x [64 x i32]], [4 x [128 x i32]], [16 x i16], [12 x i16], [12 x i16], [12 x i16], [12 x i16], [12 x [16 x i16]], [12 x [16 x i16]], [4 x [64 x i16]], [128 x i16], %"struct.plz::c::CLenEnc", %"struct.plz::c::CLenEnc", [8192 x i8], %"struct.plz::c::CLenPriceEnc", %"struct.plz::c::CLenPriceEnc", [2048 x %"struct.plz::c::COptimal"], %"struct.plz::c::CSaveState" }
%"struct.plz::c::_IMatchFinder" = type { ptr, ptr, ptr, ptr, ptr }
%"struct.plz::c::CRangeEnc" = type { i32, i32, i64, i64, ptr, ptr, ptr, ptr, i64, i32 }
%"struct.plz::c::_CMatchFinder" = type { ptr, i32, i32, i32, i32, i32, i32, i8, i8, i8, i8, i32, ptr, ptr, i32, i32, ptr, ptr, i32, i32, i32, i32, i64, i32, i32, i32, i32, [256 x i32], i64, i64 }
%"struct.plz::c::CLenEnc" = type { [256 x i16], [256 x i16] }
%"struct.plz::c::CLenPriceEnc" = type { i32, [16 x [272 x i32]] }
%"struct.plz::c::COptimal" = type { i32, i16, i16, i32, i32, [4 x i32] }
%"struct.plz::c::CSaveState" = type { ptr, i32, [4 x i32], [16 x i16], [12 x i16], [12 x i16], [12 x i16], [12 x i16], [12 x [16 x i16]], [12 x [16 x i16]], [4 x [64 x i16]], [128 x i16], %"struct.plz::c::CLenEnc", %"struct.plz::c::CLenEnc" }

; 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
define dso_local void @_ZN3plz1c12LzmaEnc_InitEPNS0_8CLzmaEncE(ptr noundef %0) #1 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #3
  %10 = load ptr, ptr %2, align 8, !tbaa !5
  %11 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %10, i32 0, i32 7
  store i32 0, ptr %11, align 4, !tbaa !9
  %12 = load ptr, ptr %2, align 8, !tbaa !5
  %13 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %12, i32 0, i32 10
  %14 = getelementptr inbounds [4 x i32], ptr %13, i64 0, i64 3
  store i32 1, ptr %14, align 4, !tbaa !20
  %15 = load ptr, ptr %2, align 8, !tbaa !5
  %16 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %15, i32 0, i32 10
  %17 = getelementptr inbounds [4 x i32], ptr %16, i64 0, i64 2
  store i32 1, ptr %17, align 8, !tbaa !20
  %18 = load ptr, ptr %2, align 8, !tbaa !5
  %19 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %18, i32 0, i32 10
  %20 = getelementptr inbounds [4 x i32], ptr %19, i64 0, i64 1
  store i32 1, ptr %20, align 4, !tbaa !20
  %21 = load ptr, ptr %2, align 8, !tbaa !5
  %22 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %21, i32 0, i32 10
  %23 = getelementptr inbounds [4 x i32], ptr %22, i64 0, i64 0
  store i32 1, ptr %23, align 8, !tbaa !20
  %24 = load ptr, ptr %2, align 8, !tbaa !5
  %25 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %24, i32 0, i32 14
  call void @_ZN3plz1cL13RangeEnc_InitEPNS0_9CRangeEncE(ptr noundef %25)
  store i32 0, ptr %3, align 4, !tbaa !20
  br label %26

26:                                               ; preds = %35, %1
  %27 = load i32, ptr %3, align 4, !tbaa !20
  %28 = icmp ult i32 %27, 16
  br i1 %28, label %29, label %38

29:                                               ; preds = %26
  %30 = load ptr, ptr %2, align 8, !tbaa !5
  %31 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %30, i32 0, i32 37
  %32 = load i32, ptr %3, align 4, !tbaa !20
  %33 = zext i32 %32 to i64
  %34 = getelementptr inbounds [16 x i16], ptr %31, i64 0, i64 %33
  store i16 1024, ptr %34, align 2, !tbaa !21
  br label %35

35:                                               ; preds = %29
  %36 = load i32, ptr %3, align 4, !tbaa !20
  %37 = add i32 %36, 1
  store i32 %37, ptr %3, align 4, !tbaa !20
  br label %26, !llvm.loop !23

38:                                               ; preds = %26
  store i32 0, ptr %3, align 4, !tbaa !20
  br label %39

39:                                               ; preds = %87, %38
  %40 = load i32, ptr %3, align 4, !tbaa !20
  %41 = icmp ult i32 %40, 12
  br i1 %41, label %42, label %90

42:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #3
  store i32 0, ptr %4, align 4, !tbaa !20
  br label %43

43:                                               ; preds = %63, %42
  %44 = load i32, ptr %4, align 4, !tbaa !20
  %45 = icmp ult i32 %44, 16
  br i1 %45, label %46, label %66

46:                                               ; preds = %43
  %47 = load ptr, ptr %2, align 8, !tbaa !5
  %48 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %47, i32 0, i32 42
  %49 = load i32, ptr %3, align 4, !tbaa !20
  %50 = zext i32 %49 to i64
  %51 = getelementptr inbounds [12 x [16 x i16]], ptr %48, i64 0, i64 %50
  %52 = load i32, ptr %4, align 4, !tbaa !20
  %53 = zext i32 %52 to i64
  %54 = getelementptr inbounds [16 x i16], ptr %51, i64 0, i64 %53
  store i16 1024, ptr %54, align 2, !tbaa !21
  %55 = load ptr, ptr %2, align 8, !tbaa !5
  %56 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %55, i32 0, i32 43
  %57 = load i32, ptr %3, align 4, !tbaa !20
  %58 = zext i32 %57 to i64
  %59 = getelementptr inbounds [12 x [16 x i16]], ptr %56, i64 0, i64 %58
  %60 = load i32, ptr %4, align 4, !tbaa !20
  %61 = zext i32 %60 to i64
  %62 = getelementptr inbounds [16 x i16], ptr %59, i64 0, i64 %61
  store i16 1024, ptr %62, align 2, !tbaa !21
  br label %63

63:                                               ; preds = %46
  %64 = load i32, ptr %4, align 4, !tbaa !20
  %65 = add i32 %64, 1
  store i32 %65, ptr %4, align 4, !tbaa !20
  br label %43, !llvm.loop !25

66:                                               ; preds = %43
  %67 = load ptr, ptr %2, align 8, !tbaa !5
  %68 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %67, i32 0, i32 38
  %69 = load i32, ptr %3, align 4, !tbaa !20
  %70 = zext i32 %69 to i64
  %71 = getelementptr inbounds [12 x i16], ptr %68, i64 0, i64 %70
  store i16 1024, ptr %71, align 2, !tbaa !21
  %72 = load ptr, ptr %2, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %72, i32 0, i32 39
  %74 = load i32, ptr %3, align 4, !tbaa !20
  %75 = zext i32 %74 to i64
  %76 = getelementptr inbounds [12 x i16], ptr %73, i64 0, i64 %75
  store i16 1024, ptr %76, align 2, !tbaa !21
  %77 = load ptr, ptr %2, align 8, !tbaa !5
  %78 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %77, i32 0, i32 40
  %79 = load i32, ptr %3, align 4, !tbaa !20
  %80 = zext i32 %79 to i64
  %81 = getelementptr inbounds [12 x i16], ptr %78, i64 0, i64 %80
  store i16 1024, ptr %81, align 2, !tbaa !21
  %82 = load ptr, ptr %2, align 8, !tbaa !5
  %83 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %82, i32 0, i32 41
  %84 = load i32, ptr %3, align 4, !tbaa !20
  %85 = zext i32 %84 to i64
  %86 = getelementptr inbounds [12 x i16], ptr %83, i64 0, i64 %85
  store i16 1024, ptr %86, align 2, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #3
  br label %87

87:                                               ; preds = %66
  %88 = load i32, ptr %3, align 4, !tbaa !20
  %89 = add i32 %88, 1
  store i32 %89, ptr %3, align 4, !tbaa !20
  br label %39, !llvm.loop !26

90:                                               ; preds = %39
  store i32 0, ptr %3, align 4, !tbaa !20
  br label %91

91:                                               ; preds = %113, %90
  %92 = load i32, ptr %3, align 4, !tbaa !20
  %93 = icmp ult i32 %92, 4
  br i1 %93, label %94, label %116

94:                                               ; preds = %91
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #3
  %95 = load ptr, ptr %2, align 8, !tbaa !5
  %96 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %95, i32 0, i32 44
  %97 = load i32, ptr %3, align 4, !tbaa !20
  %98 = zext i32 %97 to i64
  %99 = getelementptr inbounds [4 x [64 x i16]], ptr %96, i64 0, i64 %98
  %100 = getelementptr inbounds [64 x i16], ptr %99, i64 0, i64 0
  store ptr %100, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  store i32 0, ptr %6, align 4, !tbaa !20
  br label %101

101:                                              ; preds = %109, %94
  %102 = load i32, ptr %6, align 4, !tbaa !20
  %103 = icmp ult i32 %102, 64
  br i1 %103, label %104, label %112

104:                                              ; preds = %101
  %105 = load ptr, ptr %5, align 8, !tbaa !5
  %106 = load i32, ptr %6, align 4, !tbaa !20
  %107 = zext i32 %106 to i64
  %108 = getelementptr inbounds i16, ptr %105, i64 %107
  store i16 1024, ptr %108, align 2, !tbaa !21
  br label %109

109:                                              ; preds = %104
  %110 = load i32, ptr %6, align 4, !tbaa !20
  %111 = add i32 %110, 1
  store i32 %111, ptr %6, align 4, !tbaa !20
  br label %101, !llvm.loop !27

112:                                              ; preds = %101
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #3
  br label %113

113:                                              ; preds = %112
  %114 = load i32, ptr %3, align 4, !tbaa !20
  %115 = add i32 %114, 1
  store i32 %115, ptr %3, align 4, !tbaa !20
  br label %91, !llvm.loop !28

116:                                              ; preds = %91
  store i32 0, ptr %3, align 4, !tbaa !20
  br label %117

117:                                              ; preds = %126, %116
  %118 = load i32, ptr %3, align 4, !tbaa !20
  %119 = icmp ult i32 %118, 128
  br i1 %119, label %120, label %129

120:                                              ; preds = %117
  %121 = load ptr, ptr %2, align 8, !tbaa !5
  %122 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %121, i32 0, i32 45
  %123 = load i32, ptr %3, align 4, !tbaa !20
  %124 = zext i32 %123 to i64
  %125 = getelementptr inbounds [128 x i16], ptr %122, i64 0, i64 %124
  store i16 1024, ptr %125, align 2, !tbaa !21
  br label %126

126:                                              ; preds = %120
  %127 = load i32, ptr %3, align 4, !tbaa !20
  %128 = add i32 %127, 1
  store i32 %128, ptr %3, align 4, !tbaa !20
  br label %117, !llvm.loop !29

129:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  %130 = load ptr, ptr %2, align 8, !tbaa !5
  %131 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %130, i32 0, i32 17
  %132 = load i32, ptr %131, align 8, !tbaa !30
  %133 = load ptr, ptr %2, align 8, !tbaa !5
  %134 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %133, i32 0, i32 16
  %135 = load i32, ptr %134, align 4, !tbaa !31
  %136 = add i32 %132, %135
  %137 = shl i32 768, %136
  store i32 %137, ptr %7, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  %138 = load ptr, ptr %2, align 8, !tbaa !5
  %139 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %138, i32 0, i32 13
  %140 = load ptr, ptr %139, align 8, !tbaa !32
  store ptr %140, ptr %9, align 8, !tbaa !5
  store i32 0, ptr %8, align 4, !tbaa !20
  br label %141

141:                                              ; preds = %150, %129
  %142 = load i32, ptr %8, align 4, !tbaa !20
  %143 = load i32, ptr %7, align 4, !tbaa !20
  %144 = icmp ult i32 %142, %143
  br i1 %144, label %145, label %153

145:                                              ; preds = %141
  %146 = load ptr, ptr %9, align 8, !tbaa !5
  %147 = load i32, ptr %8, align 4, !tbaa !20
  %148 = zext i32 %147 to i64
  %149 = getelementptr inbounds i16, ptr %146, i64 %148
  store i16 1024, ptr %149, align 2, !tbaa !21
  br label %150

150:                                              ; preds = %145
  %151 = load i32, ptr %8, align 4, !tbaa !20
  %152 = add i32 %151, 1
  store i32 %152, ptr %8, align 4, !tbaa !20
  br label %141, !llvm.loop !33

153:                                              ; preds = %141
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  %154 = load ptr, ptr %2, align 8, !tbaa !5
  %155 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %154, i32 0, i32 46
  call void @_ZN3plz1cL11LenEnc_InitEPNS0_7CLenEncE(ptr noundef %155)
  %156 = load ptr, ptr %2, align 8, !tbaa !5
  %157 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %156, i32 0, i32 47
  call void @_ZN3plz1cL11LenEnc_InitEPNS0_7CLenEncE(ptr noundef %157)
  %158 = load ptr, ptr %2, align 8, !tbaa !5
  %159 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %158, i32 0, i32 3
  store i32 0, ptr %159, align 4, !tbaa !34
  %160 = load ptr, ptr %2, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %160, i32 0, i32 2
  store i32 0, ptr %161, align 8, !tbaa !35
  store i32 0, ptr %3, align 4, !tbaa !20
  br label %162

162:                                              ; preds = %172, %153
  %163 = load i32, ptr %3, align 4, !tbaa !20
  %164 = icmp ult i32 %163, 2048
  br i1 %164, label %165, label %175

165:                                              ; preds = %162
  %166 = load ptr, ptr %2, align 8, !tbaa !5
  %167 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %166, i32 0, i32 51
  %168 = load i32, ptr %3, align 4, !tbaa !20
  %169 = zext i32 %168 to i64
  %170 = getelementptr inbounds [2048 x %"struct.plz::c::COptimal"], ptr %167, i64 0, i64 %169
  %171 = getelementptr inbounds %"struct.plz::c::COptimal", ptr %170, i32 0, i32 0
  store i32 1073741824, ptr %171, align 4, !tbaa !36
  br label %172

172:                                              ; preds = %165
  %173 = load i32, ptr %3, align 4, !tbaa !20
  %174 = add i32 %173, 1
  store i32 %174, ptr %3, align 4, !tbaa !20
  br label %162, !llvm.loop !38

175:                                              ; preds = %162
  %176 = load ptr, ptr %2, align 8, !tbaa !5
  %177 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %176, i32 0, i32 9
  store i32 0, ptr %177, align 4, !tbaa !39
  %178 = load ptr, ptr %2, align 8, !tbaa !5
  %179 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %178, i32 0, i32 18
  %180 = load i32, ptr %179, align 4, !tbaa !40
  %181 = shl i32 1, %180
  %182 = sub nsw i32 %181, 1
  %183 = load ptr, ptr %2, align 8, !tbaa !5
  %184 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %183, i32 0, i32 12
  store i32 %182, ptr %184, align 4, !tbaa !41
  %185 = load ptr, ptr %2, align 8, !tbaa !5
  %186 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %185, i32 0, i32 17
  %187 = load i32, ptr %186, align 8, !tbaa !30
  %188 = shl i32 256, %187
  %189 = load ptr, ptr %2, align 8, !tbaa !5
  %190 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %189, i32 0, i32 16
  %191 = load i32, ptr %190, align 4, !tbaa !31
  %192 = lshr i32 256, %191
  %193 = sub i32 %188, %192
  %194 = load ptr, ptr %2, align 8, !tbaa !5
  %195 = getelementptr inbounds %"struct.plz::c::CLzmaEnc", ptr %194, i32 0, i32 11
  store i32 %193, ptr %195, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #3
  ret void
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN3plz1cL13RangeEnc_InitEPNS0_9CRangeEncE(ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN3plz1cL11LenEnc_InitEPNS0_7CLenEncE(ptr noundef) #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 = { 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, !12, i64 68}
!10 = !{!"_ZTSN3plz1c8CLzmaEncE", !6, i64 0, !11, i64 8, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !7, i64 80, !12, i64 96, !12, i64 100, !6, i64 104, !13, i64 112, !12, i64 184, !12, i64 188, !12, i64 192, !12, i64 196, !12, i64 200, !12, i64 204, !12, i64 208, !12, i64 212, !12, i64 216, !12, i64 220, !14, i64 224, !12, i64 232, !12, i64 236, !12, i64 240, !12, i64 244, !12, i64 248, !15, i64 256, !7, i64 1416, !7, i64 1928, !7, i64 4124, !7, i64 4188, !7, i64 5212, !7, i64 7260, !7, i64 7292, !7, i64 7316, !7, i64 7340, !7, i64 7364, !7, i64 7388, !7, i64 7772, !7, i64 8156, !7, i64 8668, !17, i64 8924, !17, i64 9948, !7, i64 10972, !18, i64 19164, !18, i64 36576, !7, i64 53988, !19, i64 119528}
!11 = !{!"_ZTSN3plz1c13_IMatchFinderE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!12 = !{!"int", !7, i64 0}
!13 = !{!"_ZTSN3plz1c9CRangeEncE", !12, i64 0, !12, i64 4, !14, i64 8, !14, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !14, i64 56, !12, i64 64}
!14 = !{!"long long", !7, i64 0}
!15 = !{!"_ZTSN3plz1c13_CMatchFinderE", !6, i64 0, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !7, i64 32, !7, i64 33, !7, i64 34, !7, i64 35, !12, i64 36, !6, i64 40, !6, i64 48, !12, i64 56, !12, i64 60, !6, i64 64, !6, i64 72, !12, i64 80, !12, i64 84, !12, i64 88, !12, i64 92, !16, i64 96, !12, i64 104, !12, i64 108, !12, i64 112, !12, i64 116, !7, i64 120, !16, i64 1144, !14, i64 1152}
!16 = !{!"long", !7, i64 0}
!17 = !{!"_ZTSN3plz1c7CLenEncE", !7, i64 0, !7, i64 512}
!18 = !{!"_ZTSN3plz1c12CLenPriceEncE", !12, i64 0, !7, i64 4}
!19 = !{!"_ZTSN3plz1c10CSaveStateE", !6, i64 0, !12, i64 8, !7, i64 12, !7, i64 28, !7, i64 60, !7, i64 84, !7, i64 108, !7, i64 132, !7, i64 156, !7, i64 540, !7, i64 924, !7, i64 1436, !17, i64 1692, !17, i64 2716}
!20 = !{!12, !12, i64 0}
!21 = !{!22, !22, i64 0}
!22 = !{!"short", !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = distinct !{!26, !24}
!27 = distinct !{!27, !24}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = !{!10, !12, i64 192}
!31 = !{!10, !12, i64 188}
!32 = !{!10, !6, i64 104}
!33 = distinct !{!33, !24}
!34 = !{!10, !12, i64 52}
!35 = !{!10, !12, i64 48}
!36 = !{!37, !12, i64 0}
!37 = !{!"_ZTSN3plz1c8COptimalE", !12, i64 0, !22, i64 4, !22, i64 6, !12, i64 8, !12, i64 12, !7, i64 16}
!38 = distinct !{!38, !24}
!39 = !{!10, !12, i64 76}
!40 = !{!10, !12, i64 196}
!41 = !{!10, !12, i64 100}
!42 = !{!10, !12, i64 96}


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

%"struct.plz::c::COptimal" = type { i32, i16, i16, i32, i32, [4 x i32] }

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_ZN3plz1c12LzmaEnc_InitEPNS0_8CLzmaEncE(ptr noundef %0) local_unnamed_addr #0 {
.preheader66:
  %1 = getelementptr inbounds i8, ptr %0, i64 68
  store i32 0, ptr %1, align 4, !tbaa !5
  %2 = getelementptr inbounds i8, ptr %0, i64 80
  store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %2, align 8, !tbaa !19
  %3 = getelementptr inbounds i8, ptr %0, i64 112
  tail call void @_ZN3plz1cL13RangeEnc_InitEPNS0_9CRangeEncE(ptr noundef nonnull %3)
  %4 = getelementptr inbounds i8, ptr %0, i64 7260
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %4, align 2, !tbaa !20
  %5 = getelementptr inbounds i8, ptr %0, i64 7276
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %5, align 2, !tbaa !20
  %6 = getelementptr inbounds i8, ptr %0, i64 7364
  %7 = getelementptr inbounds i8, ptr %0, i64 7340
  %8 = getelementptr inbounds i8, ptr %0, i64 7316
  %9 = getelementptr inbounds i8, ptr %0, i64 7292
  %10 = getelementptr inbounds i8, ptr %0, i64 7772
  %11 = getelementptr inbounds i8, ptr %0, i64 7388
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %11, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %10, align 2, !tbaa !20
  %12 = getelementptr inbounds i8, ptr %0, i64 7404
  %13 = getelementptr inbounds i8, ptr %0, i64 7788
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %12, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %13, align 2, !tbaa !20
  store i16 1024, ptr %9, align 2, !tbaa !20
  store i16 1024, ptr %8, align 2, !tbaa !20
  store i16 1024, ptr %7, align 2, !tbaa !20
  store i16 1024, ptr %6, align 2, !tbaa !20
  %14 = getelementptr inbounds i8, ptr %0, i64 7420
  %15 = getelementptr inbounds i8, ptr %0, i64 7804
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %14, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %15, align 2, !tbaa !20
  %16 = getelementptr inbounds i8, ptr %0, i64 7436
  %17 = getelementptr inbounds i8, ptr %0, i64 7820
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %16, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %17, align 2, !tbaa !20
  %18 = getelementptr inbounds i8, ptr %0, i64 7294
  store i16 1024, ptr %18, align 2, !tbaa !20
  %19 = getelementptr inbounds i8, ptr %0, i64 7318
  store i16 1024, ptr %19, align 2, !tbaa !20
  %20 = getelementptr inbounds i8, ptr %0, i64 7342
  store i16 1024, ptr %20, align 2, !tbaa !20
  %21 = getelementptr inbounds i8, ptr %0, i64 7366
  store i16 1024, ptr %21, align 2, !tbaa !20
  %22 = getelementptr inbounds i8, ptr %0, i64 7452
  %23 = getelementptr inbounds i8, ptr %0, i64 7836
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %22, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %23, align 2, !tbaa !20
  %24 = getelementptr inbounds i8, ptr %0, i64 7468
  %25 = getelementptr inbounds i8, ptr %0, i64 7852
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %24, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %25, align 2, !tbaa !20
  %26 = getelementptr inbounds i8, ptr %0, i64 7296
  store i16 1024, ptr %26, align 2, !tbaa !20
  %27 = getelementptr inbounds i8, ptr %0, i64 7320
  store i16 1024, ptr %27, align 2, !tbaa !20
  %28 = getelementptr inbounds i8, ptr %0, i64 7344
  store i16 1024, ptr %28, align 2, !tbaa !20
  %29 = getelementptr inbounds i8, ptr %0, i64 7368
  store i16 1024, ptr %29, align 2, !tbaa !20
  %30 = getelementptr inbounds i8, ptr %0, i64 7484
  %31 = getelementptr inbounds i8, ptr %0, i64 7868
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %30, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %31, align 2, !tbaa !20
  %32 = getelementptr inbounds i8, ptr %0, i64 7500
  %33 = getelementptr inbounds i8, ptr %0, i64 7884
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %32, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %33, align 2, !tbaa !20
  %34 = getelementptr inbounds i8, ptr %0, i64 7298
  store i16 1024, ptr %34, align 2, !tbaa !20
  %35 = getelementptr inbounds i8, ptr %0, i64 7322
  store i16 1024, ptr %35, align 2, !tbaa !20
  %36 = getelementptr inbounds i8, ptr %0, i64 7346
  store i16 1024, ptr %36, align 2, !tbaa !20
  %37 = getelementptr inbounds i8, ptr %0, i64 7370
  store i16 1024, ptr %37, align 2, !tbaa !20
  %38 = getelementptr inbounds i8, ptr %0, i64 7516
  %39 = getelementptr inbounds i8, ptr %0, i64 7900
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %38, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %39, align 2, !tbaa !20
  %40 = getelementptr inbounds i8, ptr %0, i64 7532
  %41 = getelementptr inbounds i8, ptr %0, i64 7916
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %40, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %41, align 2, !tbaa !20
  %42 = getelementptr inbounds i8, ptr %0, i64 7300
  store i16 1024, ptr %42, align 2, !tbaa !20
  %43 = getelementptr inbounds i8, ptr %0, i64 7324
  store i16 1024, ptr %43, align 2, !tbaa !20
  %44 = getelementptr inbounds i8, ptr %0, i64 7348
  store i16 1024, ptr %44, align 2, !tbaa !20
  %45 = getelementptr inbounds i8, ptr %0, i64 7372
  store i16 1024, ptr %45, align 2, !tbaa !20
  %46 = getelementptr inbounds i8, ptr %0, i64 7548
  %47 = getelementptr inbounds i8, ptr %0, i64 7932
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %46, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %47, align 2, !tbaa !20
  %48 = getelementptr inbounds i8, ptr %0, i64 7564
  %49 = getelementptr inbounds i8, ptr %0, i64 7948
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %48, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %49, align 2, !tbaa !20
  %50 = getelementptr inbounds i8, ptr %0, i64 7302
  store i16 1024, ptr %50, align 2, !tbaa !20
  %51 = getelementptr inbounds i8, ptr %0, i64 7326
  store i16 1024, ptr %51, align 2, !tbaa !20
  %52 = getelementptr inbounds i8, ptr %0, i64 7350
  store i16 1024, ptr %52, align 2, !tbaa !20
  %53 = getelementptr inbounds i8, ptr %0, i64 7374
  store i16 1024, ptr %53, align 2, !tbaa !20
  %54 = getelementptr inbounds i8, ptr %0, i64 7580
  %55 = getelementptr inbounds i8, ptr %0, i64 7964
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %54, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %55, align 2, !tbaa !20
  %56 = getelementptr inbounds i8, ptr %0, i64 7596
  %57 = getelementptr inbounds i8, ptr %0, i64 7980
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %56, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %57, align 2, !tbaa !20
  %58 = getelementptr inbounds i8, ptr %0, i64 7304
  store i16 1024, ptr %58, align 2, !tbaa !20
  %59 = getelementptr inbounds i8, ptr %0, i64 7328
  store i16 1024, ptr %59, align 2, !tbaa !20
  %60 = getelementptr inbounds i8, ptr %0, i64 7352
  store i16 1024, ptr %60, align 2, !tbaa !20
  %61 = getelementptr inbounds i8, ptr %0, i64 7376
  store i16 1024, ptr %61, align 2, !tbaa !20
  %62 = getelementptr inbounds i8, ptr %0, i64 7612
  %63 = getelementptr inbounds i8, ptr %0, i64 7996
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %62, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %63, align 2, !tbaa !20
  %64 = getelementptr inbounds i8, ptr %0, i64 7628
  %65 = getelementptr inbounds i8, ptr %0, i64 8012
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %64, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %65, align 2, !tbaa !20
  %66 = getelementptr inbounds i8, ptr %0, i64 7306
  store i16 1024, ptr %66, align 2, !tbaa !20
  %67 = getelementptr inbounds i8, ptr %0, i64 7330
  store i16 1024, ptr %67, align 2, !tbaa !20
  %68 = getelementptr inbounds i8, ptr %0, i64 7354
  store i16 1024, ptr %68, align 2, !tbaa !20
  %69 = getelementptr inbounds i8, ptr %0, i64 7378
  store i16 1024, ptr %69, align 2, !tbaa !20
  %70 = getelementptr inbounds i8, ptr %0, i64 7644
  %71 = getelementptr inbounds i8, ptr %0, i64 8028
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %70, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %71, align 2, !tbaa !20
  %72 = getelementptr inbounds i8, ptr %0, i64 7660
  %73 = getelementptr inbounds i8, ptr %0, i64 8044
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %72, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %73, align 2, !tbaa !20
  %74 = getelementptr inbounds i8, ptr %0, i64 7308
  store i16 1024, ptr %74, align 2, !tbaa !20
  %75 = getelementptr inbounds i8, ptr %0, i64 7332
  store i16 1024, ptr %75, align 2, !tbaa !20
  %76 = getelementptr inbounds i8, ptr %0, i64 7356
  store i16 1024, ptr %76, align 2, !tbaa !20
  %77 = getelementptr inbounds i8, ptr %0, i64 7380
  store i16 1024, ptr %77, align 2, !tbaa !20
  %78 = getelementptr inbounds i8, ptr %0, i64 7676
  %79 = getelementptr inbounds i8, ptr %0, i64 8060
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %78, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %79, align 2, !tbaa !20
  %80 = getelementptr inbounds i8, ptr %0, i64 7692
  %81 = getelementptr inbounds i8, ptr %0, i64 8076
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %80, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %81, align 2, !tbaa !20
  %82 = getelementptr inbounds i8, ptr %0, i64 7310
  store i16 1024, ptr %82, align 2, !tbaa !20
  %83 = getelementptr inbounds i8, ptr %0, i64 7334
  store i16 1024, ptr %83, align 2, !tbaa !20
  %84 = getelementptr inbounds i8, ptr %0, i64 7358
  store i16 1024, ptr %84, align 2, !tbaa !20
  %85 = getelementptr inbounds i8, ptr %0, i64 7382
  store i16 1024, ptr %85, align 2, !tbaa !20
  %86 = getelementptr inbounds i8, ptr %0, i64 7708
  %87 = getelementptr inbounds i8, ptr %0, i64 8092
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %86, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %87, align 2, !tbaa !20
  %88 = getelementptr inbounds i8, ptr %0, i64 7724
  %89 = getelementptr inbounds i8, ptr %0, i64 8108
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %88, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %89, align 2, !tbaa !20
  %90 = getelementptr inbounds i8, ptr %0, i64 7312
  store i16 1024, ptr %90, align 2, !tbaa !20
  %91 = getelementptr inbounds i8, ptr %0, i64 7336
  store i16 1024, ptr %91, align 2, !tbaa !20
  %92 = getelementptr inbounds i8, ptr %0, i64 7360
  store i16 1024, ptr %92, align 2, !tbaa !20
  %93 = getelementptr inbounds i8, ptr %0, i64 7384
  store i16 1024, ptr %93, align 2, !tbaa !20
  %94 = getelementptr inbounds i8, ptr %0, i64 7740
  %95 = getelementptr inbounds i8, ptr %0, i64 8124
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %94, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %95, align 2, !tbaa !20
  %96 = getelementptr inbounds i8, ptr %0, i64 7756
  %97 = getelementptr inbounds i8, ptr %0, i64 8140
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %96, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %97, align 2, !tbaa !20
  %98 = getelementptr inbounds i8, ptr %0, i64 7314
  store i16 1024, ptr %98, align 2, !tbaa !20
  %99 = getelementptr inbounds i8, ptr %0, i64 7338
  store i16 1024, ptr %99, align 2, !tbaa !20
  %100 = getelementptr inbounds i8, ptr %0, i64 7362
  store i16 1024, ptr %100, align 2, !tbaa !20
  %101 = getelementptr inbounds i8, ptr %0, i64 7386
  store i16 1024, ptr %101, align 2, !tbaa !20
  %102 = getelementptr inbounds i8, ptr %0, i64 8156
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %102, align 2, !tbaa !20
  %103 = getelementptr inbounds i8, ptr %0, i64 8172
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %103, align 2, !tbaa !20
  %104 = getelementptr inbounds i8, ptr %0, i64 8188
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %104, align 2, !tbaa !20
  %105 = getelementptr inbounds i8, ptr %0, i64 8204
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %105, align 2, !tbaa !20
  %106 = getelementptr inbounds i8, ptr %0, i64 8220
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %106, align 2, !tbaa !20
  %107 = getelementptr inbounds i8, ptr %0, i64 8236
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %107, align 2, !tbaa !20
  %108 = getelementptr inbounds i8, ptr %0, i64 8252
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %108, align 2, !tbaa !20
  %109 = getelementptr inbounds i8, ptr %0, i64 8268
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %109, align 2, !tbaa !20
  %110 = getelementptr inbounds i8, ptr %0, i64 8284
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %110, align 2, !tbaa !20
  %111 = getelementptr inbounds i8, ptr %0, i64 8300
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %111, align 2, !tbaa !20
  %112 = getelementptr inbounds i8, ptr %0, i64 8316
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %112, align 2, !tbaa !20
  %113 = getelementptr inbounds i8, ptr %0, i64 8332
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %113, align 2, !tbaa !20
  %114 = getelementptr inbounds i8, ptr %0, i64 8348
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %114, align 2, !tbaa !20
  %115 = getelementptr inbounds i8, ptr %0, i64 8364
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %115, align 2, !tbaa !20
  %116 = getelementptr inbounds i8, ptr %0, i64 8380
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %116, align 2, !tbaa !20
  %117 = getelementptr inbounds i8, ptr %0, i64 8396
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %117, align 2, !tbaa !20
  %118 = getelementptr inbounds i8, ptr %0, i64 8412
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %118, align 2, !tbaa !20
  %119 = getelementptr inbounds i8, ptr %0, i64 8428
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %119, align 2, !tbaa !20
  %120 = getelementptr inbounds i8, ptr %0, i64 8444
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %120, align 2, !tbaa !20
  %121 = getelementptr inbounds i8, ptr %0, i64 8460
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %121, align 2, !tbaa !20
  %122 = getelementptr inbounds i8, ptr %0, i64 8476
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %122, align 2, !tbaa !20
  %123 = getelementptr inbounds i8, ptr %0, i64 8492
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %123, align 2, !tbaa !20
  %124 = getelementptr inbounds i8, ptr %0, i64 8508
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %124, align 2, !tbaa !20
  %125 = getelementptr inbounds i8, ptr %0, i64 8524
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %125, align 2, !tbaa !20
  %126 = getelementptr inbounds i8, ptr %0, i64 8540
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %126, align 2, !tbaa !20
  %127 = getelementptr inbounds i8, ptr %0, i64 8556
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %127, align 2, !tbaa !20
  %128 = getelementptr inbounds i8, ptr %0, i64 8572
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %128, align 2, !tbaa !20
  %129 = getelementptr inbounds i8, ptr %0, i64 8588
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %129, align 2, !tbaa !20
  %130 = getelementptr inbounds i8, ptr %0, i64 8604
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %130, align 2, !tbaa !20
  %131 = getelementptr inbounds i8, ptr %0, i64 8620
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %131, align 2, !tbaa !20
  %132 = getelementptr inbounds i8, ptr %0, i64 8636
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %132, align 2, !tbaa !20
  %133 = getelementptr inbounds i8, ptr %0, i64 8652
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %133, align 2, !tbaa !20
  %134 = getelementptr inbounds i8, ptr %0, i64 8668
  %135 = getelementptr inbounds i8, ptr %0, i64 8684
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %134, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %135, align 2, !tbaa !20
  %136 = getelementptr inbounds i8, ptr %0, i64 8700
  %137 = getelementptr inbounds i8, ptr %0, i64 8716
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %136, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %137, align 2, !tbaa !20
  %138 = getelementptr inbounds i8, ptr %0, i64 8732
  %139 = getelementptr inbounds i8, ptr %0, i64 8748
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %138, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %139, align 2, !tbaa !20
  %140 = getelementptr inbounds i8, ptr %0, i64 8764
  %141 = getelementptr inbounds i8, ptr %0, i64 8780
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %140, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %141, align 2, !tbaa !20
  %142 = getelementptr inbounds i8, ptr %0, i64 8796
  %143 = getelementptr inbounds i8, ptr %0, i64 8812
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %142, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %143, align 2, !tbaa !20
  %144 = getelementptr inbounds i8, ptr %0, i64 8828
  %145 = getelementptr inbounds i8, ptr %0, i64 8844
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %144, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %145, align 2, !tbaa !20
  %146 = getelementptr inbounds i8, ptr %0, i64 8860
  %147 = getelementptr inbounds i8, ptr %0, i64 8876
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %146, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %147, align 2, !tbaa !20
  %148 = getelementptr inbounds i8, ptr %0, i64 8892
  %149 = getelementptr inbounds i8, ptr %0, i64 8908
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %148, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %149, align 2, !tbaa !20
  %150 = getelementptr inbounds i8, ptr %0, i64 192
  %151 = load i32, ptr %150, align 8, !tbaa !22
  %152 = getelementptr inbounds i8, ptr %0, i64 188
  %153 = load i32, ptr %152, align 4, !tbaa !23
  %154 = add i32 %153, %151
  %155 = getelementptr inbounds i8, ptr %0, i64 104
  %156 = load ptr, ptr %155, align 8, !tbaa !24
  %.not = icmp ugt i32 %154, 23
  br i1 %.not, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader66
  %157 = shl i32 768, %154
  %umax = tail call i32 @llvm.umax.i32(i32 %157, i32 1)
  %wide.trip.count = zext i32 %umax to i64
  %n.vec = and i64 %wide.trip.count, 4294967040
  br label %vector.body102

vector.body102:                                   ; preds = %vector.body102, %.lr.ph.preheader
  %index103 = phi i64 [ 0, %.lr.ph.preheader ], [ %index.next104, %vector.body102 ]
  %158 = getelementptr inbounds i16, ptr %156, i64 %index103
  %159 = getelementptr inbounds i8, ptr %158, i64 16
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %158, align 2, !tbaa !20
  store <8 x i16> <i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024, i16 1024>, ptr %159, align 2, !tbaa !20
  %index.next104 = add nuw i64 %index103, 16
  %160 = icmp eq i64 %index.next104, %n.vec
  br i1 %160, label %middle.block98, label %vector.body102, !llvm.loop !25

middle.block98:                                   ; preds = %vector.body102
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %middle.block98, %.lr.ph
  %indvars.iv90 = phi i64 [ %indvars.iv.next91, %.lr.ph ], [ %n.vec, %middle.block98 ]
  %161 = getelementptr inbounds i16, ptr %156, i64 %indvars.iv90
  store i16 1024, ptr %161, align 2, !tbaa !20
  %indvars.iv.next91 = add nuw nsw i64 %indvars.iv90, 1
  %exitcond93.not = icmp eq i64 %indvars.iv.next91, %wide.trip.count
  br i1 %exitcond93.not, label %._crit_edge, label %.lr.ph, !llvm.loop !29

._crit_edge:                                      ; preds = %.lr.ph, %middle.block98, %.preheader66
  %162 = getelementptr inbounds i8, ptr %0, i64 8924
  tail call void @_ZN3plz1cL11LenEnc_InitEPNS0_7CLenEncE(ptr noundef nonnull %162)
  %163 = getelementptr inbounds i8, ptr %0, i64 9948
  tail call void @_ZN3plz1cL11LenEnc_InitEPNS0_7CLenEncE(ptr noundef nonnull %163)
  %164 = getelementptr inbounds i8, ptr %0, i64 52
  store i32 0, ptr %164, align 4, !tbaa !30
  %165 = getelementptr inbounds i8, ptr %0, i64 48
  store i32 0, ptr %165, align 8, !tbaa !31
  %166 = getelementptr inbounds i8, ptr %0, i64 53988
  br label %167

167:                                              ; preds = %167, %._crit_edge
  %indvars.iv94 = phi i64 [ 0, %._crit_edge ], [ %indvars.iv.next95.3, %167 ]
  %168 = getelementptr inbounds [2048 x %"struct.plz::c::COptimal"], ptr %166, i64 0, i64 %indvars.iv94
  store i32 1073741824, ptr %168, align 4, !tbaa !32
  %indvars.iv.next95 = or disjoint i64 %indvars.iv94, 1
  %169 = getelementptr inbounds [2048 x %"struct.plz::c::COptimal"], ptr %166, i64 0, i64 %indvars.iv.next95
  store i32 1073741824, ptr %169, align 4, !tbaa !32
  %indvars.iv.next95.1 = or disjoint i64 %indvars.iv94, 2
  %170 = getelementptr inbounds [2048 x %"struct.plz::c::COptimal"], ptr %166, i64 0, i64 %indvars.iv.next95.1
  store i32 1073741824, ptr %170, align 4, !tbaa !32
  %indvars.iv.next95.2 = or disjoint i64 %indvars.iv94, 3
  %171 = getelementptr inbounds [2048 x %"struct.plz::c::COptimal"], ptr %166, i64 0, i64 %indvars.iv.next95.2
  store i32 1073741824, ptr %171, align 4, !tbaa !32
  %indvars.iv.next95.3 = add nuw nsw i64 %indvars.iv94, 4
  %exitcond97.not.3 = icmp eq i64 %indvars.iv.next95.3, 2048
  br i1 %exitcond97.not.3, label %172, label %167, !llvm.loop !34

172:                                              ; preds = %167
  %173 = getelementptr inbounds i8, ptr %0, i64 76
  store i32 0, ptr %173, align 4, !tbaa !35
  %174 = getelementptr inbounds i8, ptr %0, i64 196
  %175 = load i32, ptr %174, align 4, !tbaa !36
  %notmask = shl nsw i32 -1, %175
  %176 = xor i32 %notmask, -1
  %177 = getelementptr inbounds i8, ptr %0, i64 100
  store i32 %176, ptr %177, align 4, !tbaa !37
  %178 = load i32, ptr %150, align 8, !tbaa !22
  %179 = shl i32 256, %178
  %180 = load i32, ptr %152, align 4, !tbaa !23
  %181 = lshr i32 256, %180
  %182 = sub i32 %179, %181
  %183 = getelementptr inbounds i8, ptr %0, i64 96
  store i32 %182, ptr %183, align 8, !tbaa !38
  ret void
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN3plz1cL13RangeEnc_InitEPNS0_9CRangeEncE(ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN3plz1cL11LenEnc_InitEPNS0_7CLenEncE(ptr noundef) local_unnamed_addr #0

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!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, !11, i64 68}
!6 = !{!"_ZTSN3plz1c8CLzmaEncE", !7, i64 0, !10, i64 8, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !8, i64 80, !11, i64 96, !11, i64 100, !7, i64 104, !12, i64 112, !11, i64 184, !11, i64 188, !11, i64 192, !11, i64 196, !11, i64 200, !11, i64 204, !11, i64 208, !11, i64 212, !11, i64 216, !11, i64 220, !13, i64 224, !11, i64 232, !11, i64 236, !11, i64 240, !11, i64 244, !11, i64 248, !14, i64 256, !8, i64 1416, !8, i64 1928, !8, i64 4124, !8, i64 4188, !8, i64 5212, !8, i64 7260, !8, i64 7292, !8, i64 7316, !8, i64 7340, !8, i64 7364, !8, i64 7388, !8, i64 7772, !8, i64 8156, !8, i64 8668, !16, i64 8924, !16, i64 9948, !8, i64 10972, !17, i64 19164, !17, i64 36576, !8, i64 53988, !18, i64 119528}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN3plz1c13_IMatchFinderE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32}
!11 = !{!"int", !8, i64 0}
!12 = !{!"_ZTSN3plz1c9CRangeEncE", !11, i64 0, !11, i64 4, !13, i64 8, !13, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !13, i64 56, !11, i64 64}
!13 = !{!"long long", !8, i64 0}
!14 = !{!"_ZTSN3plz1c13_CMatchFinderE", !7, i64 0, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !8, i64 32, !8, i64 33, !8, i64 34, !8, i64 35, !11, i64 36, !7, i64 40, !7, i64 48, !11, i64 56, !11, i64 60, !7, i64 64, !7, i64 72, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !15, i64 96, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !8, i64 120, !15, i64 1144, !13, i64 1152}
!15 = !{!"long", !8, i64 0}
!16 = !{!"_ZTSN3plz1c7CLenEncE", !8, i64 0, !8, i64 512}
!17 = !{!"_ZTSN3plz1c12CLenPriceEncE", !11, i64 0, !8, i64 4}
!18 = !{!"_ZTSN3plz1c10CSaveStateE", !7, i64 0, !11, i64 8, !8, i64 12, !8, i64 28, !8, i64 60, !8, i64 84, !8, i64 108, !8, i64 132, !8, i64 156, !8, i64 540, !8, i64 924, !8, i64 1436, !16, i64 1692, !16, i64 2716}
!19 = !{!11, !11, i64 0}
!20 = !{!21, !21, i64 0}
!21 = !{!"short", !8, i64 0}
!22 = !{!6, !11, i64 192}
!23 = !{!6, !11, i64 188}
!24 = !{!6, !7, i64 104}
!25 = distinct !{!25, !26, !27, !28}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!"llvm.loop.isvectorized", i32 1}
!28 = !{!"llvm.loop.unroll.runtime.disable"}
!29 = distinct !{!29, !26, !28, !27}
!30 = !{!6, !11, i64 52}
!31 = !{!6, !11, i64 48}
!32 = !{!33, !11, i64 0}
!33 = !{!"_ZTSN3plz1c8COptimalE", !11, i64 0, !21, i64 4, !21, i64 6, !11, i64 8, !11, i64 12, !8, i64 16}
!34 = distinct !{!34, !26}
!35 = !{!6, !11, i64 76}
!36 = !{!6, !11, i64 196}
!37 = !{!6, !11, i64 100}
!38 = !{!6, !11, i64 96}


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