; LLVM IR from fwip/fastqz :: libzpaq.ll (ZN7libzpaq9Predictor4initEv)

; 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.libzpaq::Predictor" = type <{ i32, i32, [256 x i32], [256 x i32], ptr, [256 x %"struct.libzpaq::Component"], [256 x i32], [1024 x i32], [4096 x i16], [32768 x i16], %"class.libzpaq::StateTable", ptr, i32, [4 x i8] }>
%"struct.libzpaq::Component" = type { i64, i64, i64, i64, i64, %"class.libzpaq::Array", %"class.libzpaq::Array.0", %"class.libzpaq::Array.2" }
%"class.libzpaq::Array" = type <{ ptr, i64, i32, [4 x i8] }>
%"class.libzpaq::Array.0" = type <{ ptr, i64, i32, [4 x i8] }>
%"class.libzpaq::Array.2" = type <{ ptr, i64, i32, [4 x i8] }>
%"class.libzpaq::StateTable" = type { [1024 x i8] }
%"class.libzpaq::ZPAQL" = type { ptr, ptr, %"class.libzpaq::Array.0", i32, i32, i32, [4 x i8], %"class.libzpaq::Array.0", %"class.libzpaq::Array", %"class.libzpaq::Array", %"class.libzpaq::Array.4", i32, i32, i32, i32, i32, i32, i32, i32, ptr }
%"class.libzpaq::Array.4" = type <{ ptr, i64, i32, [4 x i8] }>

@_ZN7libzpaq8compsizeE = external dso_local constant <{ [10 x i32], [246 x i32] }>, align 16
@.str.7 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [23 x i8], align 1

; 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 @_ZN7libzpaq6allocxERPhRii(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) #1

declare void @_ZN7libzpaq5errorEPKc(ptr noundef) #2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZN7libzpaq5ArrayIhEixEm(ptr noundef nonnull align 8 dereferenceable(20), i64 noundef) #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN7libzpaq5ArrayIjEixEm(ptr noundef nonnull align 8 dereferenceable(20), i64 noundef) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZN7libzpaq5ArrayIhEclEm(ptr noundef nonnull align 8 dereferenceable(20), i64 noundef) #3 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7libzpaq9Predictor4initEv(ptr noundef nonnull align 8 dereferenceable(110620) %0) #1 align 2 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i32, align 4
  %14 = alloca i64, align 8
  %15 = alloca i32, align 4
  %16 = alloca i64, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %17 = load ptr, ptr %2, align 8
  %18 = getelementptr inbounds %"class.libzpaq::Predictor", ptr %17, i32 0, i32 11
  %19 = getelementptr inbounds %"class.libzpaq::Predictor", ptr %17, i32 0, i32 12
  call void @_ZN7libzpaq6allocxERPhRii(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 4 dereferenceable(4) %19, i32 noundef 0)
  %20 = getelementptr inbounds %"class.libzpaq::Predictor", ptr %17, i32 0, i32 4
  %21 = load ptr, ptr %20, align 8, !tbaa !9
  call void @_ZN7libzpaq5ZPAQL5inithEv(ptr noundef nonnull align 8 dereferenceable(192) %21)
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #4
  store i32 0, ptr %3, align 4, !tbaa !13
  br label %22

22:                                               ; preds = %35, %1
  %23 = load i32, ptr %3, align 4, !tbaa !13
  %24 = icmp slt i32 %23, 256
  br i1 %24, label %26, label %25

25:                                               ; preds = %22
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #4
  br label %38

26:                                               ; preds = %22
  %27 = getelementptr inbounds %"class.libzpaq::Predictor", ptr %17, i32 0, i32 2
  %28 = load i32, ptr %3, align 4, !tbaa !13
  %29 = sext i32 %28 to i64
  %30 = getelementptr inbounds [256 x i32], ptr %27, i64 0, i64 %29
  store i32 0, ptr %30, align 4, !tbaa !13
  %31 = getelementptr inbounds %"class.libzpaq::Predictor", ptr %17, i32 0, i32 3
  %32 = load i32, ptr %3, align 4, !tbaa !13
  %33 = sext i32 %32 to i64
  %34 = getelementptr inbounds [256 x i32], ptr %31, i64 0, i64 %33
  store i32 0, ptr %34, align 4, !tbaa !13
  br label %35

35:                                               ; preds = %26
  %36 = load i32, ptr %3, align 4, !tbaa !13
  %37 = add nsw i32 %36, 1
  store i32 %37, ptr %3, align 4, !tbaa !13
  br label %22, !llvm.loop !14

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

39:                                               ; preds = %48, %38
  %40 = load i32, ptr %4, align 4, !tbaa !13
  %41 = icmp slt i32 %40, 256
  br i1 %41, label %43, label %42

42:                                               ; preds = %39
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  br label %51

43:                                               ; preds = %39
  %44 = getelementptr inbounds %"class.libzpaq::Predictor", ptr %17, i32 0, i32 5
  %45 = load i32, ptr %4, align 4, !tbaa !13
  %46 = sext i32 %45 to i64
  %47 = getelementptr inbounds [256 x %"struct.libzpaq::Component"], ptr %44, i64 0, i64 %46
  call void @_ZN7libzpaq9Component4initEv(ptr noundef nonnull align 8 dereferenceable(112) %47)
  br label %48

48:                                               ; preds = %43
  %49 = load i32, ptr %4, align 4, !tbaa !13
  %50 = add nsw i32 %49, 1
  store i32 %50, ptr %4, align 4, !tbaa !13
  br label %39, !llvm.loop !16

51:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #4
  %52 = getelementptr inbounds %"class.libzpaq::Predictor", ptr %17, i32 0, i32 4
  %53 = load ptr, ptr %52, align 8, !tbaa !9
  %54 = getelementptr inbounds %"class.libzpaq::ZPAQL", ptr %53, i32 0, i32 2
  %55 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN7libzpaq5ArrayIhEixEm(ptr noundef nonnull align 8 dereferenceable(20) %54, i64 noundef 6)
  %56 = load i8, ptr %55, align 1, !tbaa !17
  %57 = zext i8 %56 to i32
  store i32 %57, ptr %5, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  %58 = getelementptr inbounds %"class.libzpaq::Predictor", ptr %17, i32 0, i32 4
  %59 = load ptr, ptr %58, align 8, !tbaa !9
  %60 = getelementptr inbounds %"class.libzpaq::ZPAQL", ptr %59, i32 0, i32 2
  %61 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN7libzpaq5ArrayIhEixEm(ptr noundef nonnull align 8 dereferenceable(20) %60, i64 noundef 7)
  store ptr %61, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  store i32 0, ptr %7, align 4, !tbaa !13
  br label %62

62:                                               ; preds = %469, %51
  %63 = load i32, ptr %7, align 4, !tbaa !13
  %64 = load i32, ptr %5, align 4, !tbaa !13
  %65 = icmp slt i32 %63, %64
  br i1 %65, label %67, label %66

66:                                               ; preds = %62
  store i32 8, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  br label %472

67:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  %68 = getelementptr inbounds %"class.libzpaq::Predictor", ptr %17, i32 0, i32 5
  %69 = load i32, ptr %7, align 4, !tbaa !13
  %70 = sext i32 %69 to i64
  %71 = getelementptr inbounds [256 x %"struct.libzpaq::Component"], ptr %68, i64 0, i64 %70
  store ptr %71, ptr %9, align 8, !tbaa !5
  %72 = load ptr, ptr %6, align 8, !tbaa !5
  %73 = getelementptr inbounds i8, ptr %72, i64 0
  %74 = load i8, ptr %73, align 1, !tbaa !17
  %75 = zext i8 %74 to i32
  switch i32 %75, label %459 [
    i32 1, label %76
    i32 2, label %87
    i32 3, label %125
    i32 4, label %163
    i32 5, label %192
    i32 6, label %209
    i32 7, label %263
    i32 8, label %336
    i32 9, label %389
  ]

76:                                               ; preds = %67
  %77 = load ptr, ptr %6, align 8, !tbaa !5
  %78 = getelementptr inbounds i8, ptr %77, i64 1
  %79 = load i8, ptr %78, align 1, !tbaa !17
  %80 = zext i8 %79 to i32
  %81 = sub nsw i32 %80, 128
  %82 = mul nsw i32 %81, 4
  %83 = getelementptr inbounds %"class.libzpaq::Predictor", ptr %17, i32 0, i32 2
  %84 = load i32, ptr %7, align 4, !tbaa !13
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds [256 x i32], ptr %83, i64 0, i64 %85
  store i32 %82, ptr %86, align 4, !tbaa !13
  br label %460

87:                                               ; preds = %67
  %88 = load ptr, ptr %6, align 8, !tbaa !5
  %89 = getelementptr inbounds i8, ptr %88, i64 1
  %90 = load i8, ptr %89, align 1, !tbaa !17
  %91 = zext i8 %90 to i32
  %92 = icmp sgt i32 %91, 32
  br i1 %92, label %93, label %94

93:                                               ; preds = %87
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.7)
  br label %94

94:                                               ; preds = %93, %87
  %95 = load ptr, ptr %9, align 8, !tbaa !5
  %96 = getelementptr inbounds %"struct.libzpaq::Component", ptr %95, i32 0, i32 5
  %97 = load ptr, ptr %6, align 8, !tbaa !5
  %98 = getelementptr inbounds i8, ptr %97, i64 1
  %99 = load i8, ptr %98, align 1, !tbaa !17
  %100 = zext i8 %99 to i32
  call void @_ZN7libzpaq5ArrayIjE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %96, i64 noundef 1, i32 noundef %100)
  %101 = load ptr, ptr %6, align 8, !tbaa !5
  %102 = getelementptr inbounds i8, ptr %101, i64 2
  %103 = load i8, ptr %102, align 1, !tbaa !17
  %104 = zext i8 %103 to i32
  %105 = mul nsw i32 %104, 4
  %106 = sext i32 %105 to i64
  %107 = load ptr, ptr %9, align 8, !tbaa !5
  %108 = getelementptr inbounds %"struct.libzpaq::Component", ptr %107, i32 0, i32 0
  store i64 %106, ptr %108, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  store i64 0, ptr %10, align 8, !tbaa !24
  br label %109

109:                                              ; preds = %121, %94
  %110 = load i64, ptr %10, align 8, !tbaa !24
  %111 = load ptr, ptr %9, align 8, !tbaa !5
  %112 = getelementptr inbounds %"struct.libzpaq::Component", ptr %111, i32 0, i32 5
  %113 = call noundef i64 @_ZNK7libzpaq5ArrayIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %112)
  %114 = icmp ult i64 %110, %113
  br i1 %114, label %116, label %115

115:                                              ; preds = %109
  store i32 12, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  br label %124

116:                                              ; preds = %109
  %117 = load ptr, ptr %9, align 8, !tbaa !5
  %118 = getelementptr inbounds %"struct.libzpaq::Component", ptr %117, i32 0, i32 5
  %119 = load i64, ptr %10, align 8, !tbaa !24
  %120 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7libzpaq5ArrayIjEixEm(ptr noundef nonnull align 8 dereferenceable(20) %118, i64 noundef %119)
  store i32 -2147483648, ptr %120, align 4, !tbaa !13
  br label %121

121:                                              ; preds = %116
  %122 = load i64, ptr %10, align 8, !tbaa !24
  %123 = add i64 %122, 1
  store i64 %123, ptr %10, align 8, !tbaa !24
  br label %109, !llvm.loop !25

124:                                              ; preds = %115
  br label %460

125:                                              ; preds = %67
  %126 = load ptr, ptr %6, align 8, !tbaa !5
  %127 = getelementptr inbounds i8, ptr %126, i64 1
  %128 = load i8, ptr %127, align 1, !tbaa !17
  %129 = zext i8 %128 to i32
  %130 = icmp sgt i32 %129, 26
  br i1 %130, label %131, label %132

131:                                              ; preds = %125
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.8)
  br label %132

132:                                              ; preds = %131, %125
  %133 = load ptr, ptr %9, align 8, !tbaa !5
  %134 = getelementptr inbounds %"struct.libzpaq::Component", ptr %133, i32 0, i32 0
  store i64 1023, ptr %134, align 8, !tbaa !18
  %135 = load ptr, ptr %9, align 8, !tbaa !5
  %136 = getelementptr inbounds %"struct.libzpaq::Component", ptr %135, i32 0, i32 5
  call void @_ZN7libzpaq5ArrayIjE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %136, i64 noundef 256, i32 noundef 0)
  %137 = load ptr, ptr %9, align 8, !tbaa !5
  %138 = getelementptr inbounds %"struct.libzpaq::Component", ptr %137, i32 0, i32 6
  %139 = load ptr, ptr %6, align 8, !tbaa !5
  %140 = getelementptr inbounds i8, ptr %139, i64 1
  %141 = load i8, ptr %140, align 1, !tbaa !17
  %142 = zext i8 %141 to i32
  call void @_ZN7libzpaq5ArrayIhE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %138, i64 noundef 64, i32 noundef %142)
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  store i64 0, ptr %11, align 8, !tbaa !24
  br label %143

143:                                              ; preds = %159, %132
  %144 = load i64, ptr %11, align 8, !tbaa !24
  %145 = load ptr, ptr %9, align 8, !tbaa !5
  %146 = getelementptr inbounds %"struct.libzpaq::Component", ptr %145, i32 0, i32 5
  %147 = call noundef i64 @_ZNK7libzpaq5ArrayIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %146)
  %148 = icmp ult i64 %144, %147
  br i1 %148, label %150, label %149

149:                                              ; preds = %143
  store i32 15, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  br label %162

150:                                              ; preds = %143
  %151 = getelementptr inbounds %"class.libzpaq::Predictor", ptr %17, i32 0, i32 10
  %152 = load i64, ptr %11, align 8, !tbaa !24
  %153 = trunc i64 %152 to i32
  %154 = call noundef i32 @_ZN7libzpaq10StateTable6cminitEi(ptr noundef nonnull align 1 dereferenceable(1024) %151, i32 noundef %153)
  %155 = load ptr, ptr %9, align 8, !tbaa !5
  %156 = getelementptr inbounds %"struct.libzpaq::Component", ptr %155, i32 0, i32 5
  %157 = load i64, ptr %11, align 8, !tbaa !24
  %158 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7libzpaq5ArrayIjEixEm(ptr noundef nonnull align 8 dereferenceable(20) %156, i64 noundef %157)
  store i32 %154, ptr %158, align 4, !tbaa !13
  br label %159

159:                                              ; preds = %150
  %160 = load i64, ptr %11, align 8, !tbaa !24
  %161 = add i64 %160, 1
  store i64 %161, ptr %11, align 8, !tbaa !24
  br label %143, !llvm.loop !26

162:                                              ; preds = %149
  br label %460

163:                                              ; preds = %67
  %164 = load ptr, ptr %6, align 8, !tbaa !5
  %165 = getelementptr inbounds i8, ptr %164, i64 1
  %166 = load i8, ptr %165, align 1, !tbaa !17
  %167 = zext i8 %166 to i32
  %168 = icmp sgt i32 %167, 32
  br i1 %168, label %175, label %169

169:                                              ; preds = %163
  %170 = load ptr, ptr %6, align 8, !tbaa !5
  %171 = getelementptr inbounds i8, ptr %170, i64 2
  %172 = load i8, ptr %171, align 1, !tbaa !17
  %173 = zext i8 %172 to i32
  %174 = icmp sgt i32 %173, 32
  br i1 %174, label %175, label %176

175:                                              ; preds = %169, %163
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.9)
  br label %176

176:                                              ; preds = %175, %169
  %177 = load ptr, ptr %9, align 8, !tbaa !5
  %178 = getelementptr inbounds %"struct.libzpaq::Component", ptr %177, i32 0, i32 5
  %179 = load ptr, ptr %6, align 8, !tbaa !5
  %180 = getelementptr inbounds i8, ptr %179, i64 1
  %181 = load i8, ptr %180, align 1, !tbaa !17
  %182 = zext i8 %181 to i32
  call void @_ZN7libzpaq5ArrayIjE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %178, i64 noundef 1, i32 noundef %182)
  %183 = load ptr, ptr %9, align 8, !tbaa !5
  %184 = getelementptr inbounds %"struct.libzpaq::Component", ptr %183, i32 0, i32 6
  %185 = load ptr, ptr %6, align 8, !tbaa !5
  %186 = getelementptr inbounds i8, ptr %185, i64 2
  %187 = load i8, ptr %186, align 1, !tbaa !17
  %188 = zext i8 %187 to i32
  call void @_ZN7libzpaq5ArrayIhE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %184, i64 noundef 1, i32 noundef %188)
  %189 = load ptr, ptr %9, align 8, !tbaa !5
  %190 = getelementptr inbounds %"struct.libzpaq::Component", ptr %189, i32 0, i32 6
  %191 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN7libzpaq5ArrayIhEclEm(ptr noundef nonnull align 8 dereferenceable(20) %190, i64 noundef 0)
  store i8 1, ptr %191, align 1, !tbaa !17
  br label %460

192:                                              ; preds = %67
  %193 = load ptr, ptr %6, align 8, !tbaa !5
  %194 = getelementptr inbounds i8, ptr %193, i64 1
  %195 = load i8, ptr %194, align 1, !tbaa !17
  %196 = zext i8 %195 to i32
  %197 = load i32, ptr %7, align 4, !tbaa !13
  %198 = icmp sge i32 %196, %197
  br i1 %198, label %199, label %200

199:                                              ; preds = %192
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.10)
  br label %200

200:                                              ; preds = %199, %192
  %201 = load ptr, ptr %6, align 8, !tbaa !5
  %202 = getelementptr inbounds i8, ptr %201, i64 2
  %203 = load i8, ptr %202, align 1, !tbaa !17
  %204 = zext i8 %203 to i32
  %205 = load i32, ptr %7, align 4, !tbaa !13
  %206 = icmp sge i32 %204, %205
  br i1 %206, label %207, label %208

207:                                              ; preds = %200
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.11)
  br label %208

208:                                              ; preds = %207, %200
  br label %460

209:                                              ; preds = %67
  %210 = load ptr, ptr %6, align 8, !tbaa !5
  %211 = getelementptr inbounds i8, ptr %210, i64 1
  %212 = load i8, ptr %211, align 1, !tbaa !17
  %213 = zext i8 %212 to i32
  %214 = icmp sgt i32 %213, 32
  br i1 %214, label %215, label %216

215:                                              ; preds = %209
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.12)
  br label %216

216:                                              ; preds = %215, %209
  %217 = load ptr, ptr %6, align 8, !tbaa !5
  %218 = getelementptr inbounds i8, ptr %217, i64 3
  %219 = load i8, ptr %218, align 1, !tbaa !17
  %220 = zext i8 %219 to i32
  %221 = load i32, ptr %7, align 4, !tbaa !13
  %222 = icmp sge i32 %220, %221
  br i1 %222, label %223, label %224

223:                                              ; preds = %216
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.13)
  br label %224

224:                                              ; preds = %223, %216
  %225 = load ptr, ptr %6, align 8, !tbaa !5
  %226 = getelementptr inbounds i8, ptr %225, i64 2
  %227 = load i8, ptr %226, align 1, !tbaa !17
  %228 = zext i8 %227 to i32
  %229 = load i32, ptr %7, align 4, !tbaa !13
  %230 = icmp sge i32 %228, %229
  br i1 %230, label %231, label %232

231:                                              ; preds = %224
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.14)
  br label %232

232:                                              ; preds = %231, %224
  %233 = load ptr, ptr %6, align 8, !tbaa !5
  %234 = getelementptr inbounds i8, ptr %233, i64 1
  %235 = load i8, ptr %234, align 1, !tbaa !17
  %236 = zext i8 %235 to i32
  %237 = zext i32 %236 to i64
  %238 = shl i64 1, %237
  %239 = load ptr, ptr %9, align 8, !tbaa !5
  %240 = getelementptr inbounds %"struct.libzpaq::Component", ptr %239, i32 0, i32 4
  store i64 %238, ptr %240, align 8, !tbaa !27
  %241 = load ptr, ptr %9, align 8, !tbaa !5
  %242 = getelementptr inbounds %"struct.libzpaq::Component", ptr %241, i32 0, i32 7
  %243 = load ptr, ptr %6, align 8, !tbaa !5
  %244 = getelementptr inbounds i8, ptr %243, i64 1
  %245 = load i8, ptr %244, align 1, !tbaa !17
  %246 = zext i8 %245 to i32
  call void @_ZN7libzpaq5ArrayItE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %242, i64 noundef 1, i32 noundef %246)
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  store i64 0, ptr %12, align 8, !tbaa !24
  br label %247

247:                                              ; preds = %259, %232
  %248 = load i64, ptr %12, align 8, !tbaa !24
  %249 = load ptr, ptr %9, align 8, !tbaa !5
  %250 = getelementptr inbounds %"struct.libzpaq::Component", ptr %249, i32 0, i32 7
  %251 = call noundef i64 @_ZNK7libzpaq5ArrayItE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %250)
  %252 = icmp ult i64 %248, %251
  br i1 %252, label %254, label %253

253:                                              ; preds = %247
  store i32 18, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  br label %262

254:                                              ; preds = %247
  %255 = load ptr, ptr %9, align 8, !tbaa !5
  %256 = getelementptr inbounds %"struct.libzpaq::Component", ptr %255, i32 0, i32 7
  %257 = load i64, ptr %12, align 8, !tbaa !24
  %258 = call noundef nonnull align 2 dereferenceable(2) ptr @_ZN7libzpaq5ArrayItEixEm(ptr noundef nonnull align 8 dereferenceable(20) %256, i64 noundef %257)
  store i16 -32768, ptr %258, align 2, !tbaa !28
  br label %259

259:                                              ; preds = %254
  %260 = load i64, ptr %12, align 8, !tbaa !24
  %261 = add i64 %260, 1
  store i64 %261, ptr %12, align 8, !tbaa !24
  br label %247, !llvm.loop !30

262:                                              ; preds = %253
  br label %460

263:                                              ; preds = %67
  %264 = load ptr, ptr %6, align 8, !tbaa !5
  %265 = getelementptr inbounds i8, ptr %264, i64 1
  %266 = load i8, ptr %265, align 1, !tbaa !17
  %267 = zext i8 %266 to i32
  %268 = icmp sgt i32 %267, 32
  br i1 %268, label %269, label %270

269:                                              ; preds = %263
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.15)
  br label %270

270:                                              ; preds = %269, %263
  %271 = load ptr, ptr %6, align 8, !tbaa !5
  %272 = getelementptr inbounds i8, ptr %271, i64 2
  %273 = load i8, ptr %272, align 1, !tbaa !17
  %274 = zext i8 %273 to i32
  %275 = load i32, ptr %7, align 4, !tbaa !13
  %276 = icmp sge i32 %274, %275
  br i1 %276, label %277, label %278

277:                                              ; preds = %270
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.16)
  br label %278

278:                                              ; preds = %277, %270
  %279 = load ptr, ptr %6, align 8, !tbaa !5
  %280 = getelementptr inbounds i8, ptr %279, i64 3
  %281 = load i8, ptr %280, align 1, !tbaa !17
  %282 = zext i8 %281 to i32
  %283 = icmp slt i32 %282, 1
  br i1 %283, label %296, label %284

284:                                              ; preds = %278
  %285 = load ptr, ptr %6, align 8, !tbaa !5
  %286 = getelementptr inbounds i8, ptr %285, i64 3
  %287 = load i8, ptr %286, align 1, !tbaa !17
  %288 = zext i8 %287 to i32
  %289 = load i32, ptr %7, align 4, !tbaa !13
  %290 = load ptr, ptr %6, align 8, !tbaa !5
  %291 = getelementptr inbounds i8, ptr %290, i64 2
  %292 = load i8, ptr %291, align 1, !tbaa !17
  %293 = zext i8 %292 to i32
  %294 = sub nsw i32 %289, %293
  %295 = icmp sgt i32 %288, %294
  br i1 %295, label %296, label %297

296:                                              ; preds = %284, %278
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.17)
  br label %297

297:                                              ; preds = %296, %284
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  %298 = load ptr, ptr %6, align 8, !tbaa !5
  %299 = getelementptr inbounds i8, ptr %298, i64 3
  %300 = load i8, ptr %299, align 1, !tbaa !17
  %301 = zext i8 %300 to i32
  store i32 %301, ptr %13, align 4, !tbaa !13
  %302 = load ptr, ptr %6, align 8, !tbaa !5
  %303 = getelementptr inbounds i8, ptr %302, i64 1
  %304 = load i8, ptr %303, align 1, !tbaa !17
  %305 = zext i8 %304 to i32
  %306 = zext i32 %305 to i64
  %307 = shl i64 1, %306
  %308 = load ptr, ptr %9, align 8, !tbaa !5
  %309 = getelementptr inbounds %"struct.libzpaq::Component", ptr %308, i32 0, i32 4
  store i64 %307, ptr %309, align 8, !tbaa !27
  %310 = load ptr, ptr %9, align 8, !tbaa !5
  %311 = getelementptr inbounds %"struct.libzpaq::Component", ptr %310, i32 0, i32 5
  %312 = load i32, ptr %13, align 4, !tbaa !13
  %313 = sext i32 %312 to i64
  %314 = load ptr, ptr %6, align 8, !tbaa !5
  %315 = getelementptr inbounds i8, ptr %314, i64 1
  %316 = load i8, ptr %315, align 1, !tbaa !17
  %317 = zext i8 %316 to i32
  call void @_ZN7libzpaq5ArrayIjE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %311, i64 noundef %313, i32 noundef %317)
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  store i64 0, ptr %14, align 8, !tbaa !24
  br label %318

318:                                              ; preds = %332, %297
  %319 = load i64, ptr %14, align 8, !tbaa !24
  %320 = load ptr, ptr %9, align 8, !tbaa !5
  %321 = getelementptr inbounds %"struct.libzpaq::Component", ptr %320, i32 0, i32 5
  %322 = call noundef i64 @_ZNK7libzpaq5ArrayIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %321)
  %323 = icmp ult i64 %319, %322
  br i1 %323, label %325, label %324

324:                                              ; preds = %318
  store i32 21, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  br label %335

325:                                              ; preds = %318
  %326 = load i32, ptr %13, align 4, !tbaa !13
  %327 = sdiv i32 65536, %326
  %328 = load ptr, ptr %9, align 8, !tbaa !5
  %329 = getelementptr inbounds %"struct.libzpaq::Component", ptr %328, i32 0, i32 5
  %330 = load i64, ptr %14, align 8, !tbaa !24
  %331 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7libzpaq5ArrayIjEixEm(ptr noundef nonnull align 8 dereferenceable(20) %329, i64 noundef %330)
  store i32 %327, ptr %331, align 4, !tbaa !13
  br label %332

332:                                              ; preds = %325
  %333 = load i64, ptr %14, align 8, !tbaa !24
  %334 = add i64 %333, 1
  store i64 %334, ptr %14, align 8, !tbaa !24
  br label %318, !llvm.loop !31

335:                                              ; preds = %324
  store i32 11, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %460

336:                                              ; preds = %67
  %337 = load ptr, ptr %6, align 8, !tbaa !5
  %338 = getelementptr inbounds i8, ptr %337, i64 1
  %339 = load i8, ptr %338, align 1, !tbaa !17
  %340 = zext i8 %339 to i32
  %341 = icmp sgt i32 %340, 32
  br i1 %341, label %342, label %343

342:                                              ; preds = %336
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.18)
  br label %343

343:                                              ; preds = %342, %336
  %344 = load ptr, ptr %6, align 8, !tbaa !5
  %345 = getelementptr inbounds i8, ptr %344, i64 2
  %346 = load i8, ptr %345, align 1, !tbaa !17
  %347 = zext i8 %346 to i32
  %348 = load i32, ptr %7, align 4, !tbaa !13
  %349 = icmp sge i32 %347, %348
  br i1 %349, label %350, label %351

350:                                              ; preds = %343
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.19)
  br label %351

351:                                              ; preds = %350, %343
  %352 = load ptr, ptr %9, align 8, !tbaa !5
  %353 = getelementptr inbounds %"struct.libzpaq::Component", ptr %352, i32 0, i32 6
  %354 = load ptr, ptr %6, align 8, !tbaa !5
  %355 = getelementptr inbounds i8, ptr %354, i64 1
  %356 = load i8, ptr %355, align 1, !tbaa !17
  %357 = zext i8 %356 to i32
  call void @_ZN7libzpaq5ArrayIhE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %353, i64 noundef 64, i32 noundef %357)
  %358 = load ptr, ptr %9, align 8, !tbaa !5
  %359 = getelementptr inbounds %"struct.libzpaq::Component", ptr %358, i32 0, i32 5
  call void @_ZN7libzpaq5ArrayIjE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %359, i64 noundef 512, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  store i32 0, ptr %15, align 4, !tbaa !13
  br label %360

360:                                              ; preds = %385, %351
  %361 = load i32, ptr %15, align 4, !tbaa !13
  %362 = icmp slt i32 %361, 256
  br i1 %362, label %364, label %363

363:                                              ; preds = %360
  store i32 24, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  br label %388

364:                                              ; preds = %360
  %365 = load ptr, ptr %9, align 8, !tbaa !5
  %366 = getelementptr inbounds %"struct.libzpaq::Component", ptr %365, i32 0, i32 5
  %367 = load i32, ptr %15, align 4, !tbaa !13
  %368 = mul nsw i32 %367, 2
  %369 = sext i32 %368 to i64
  %370 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7libzpaq5ArrayIjEixEm(ptr noundef nonnull align 8 dereferenceable(20) %366, i64 noundef %369)
  store i32 32768, ptr %370, align 4, !tbaa !13
  %371 = getelementptr inbounds %"class.libzpaq::Predictor", ptr %17, i32 0, i32 10
  %372 = load i32, ptr %15, align 4, !tbaa !13
  %373 = call noundef i32 @_ZN7libzpaq10StateTable6cminitEi(ptr noundef nonnull align 1 dereferenceable(1024) %371, i32 noundef %372)
  %374 = ashr i32 %373, 8
  %375 = call noundef i32 @_ZN7libzpaq9Predictor7stretchEi(ptr noundef nonnull align 8 dereferenceable(110620) %17, i32 noundef %374)
  %376 = shl i32 %375, 10
  %377 = call noundef i32 @_ZN7libzpaq9Predictor9clamp512kEi(ptr noundef nonnull align 8 dereferenceable(110620) %17, i32 noundef %376)
  %378 = load ptr, ptr %9, align 8, !tbaa !5
  %379 = getelementptr inbounds %"struct.libzpaq::Component", ptr %378, i32 0, i32 5
  %380 = load i32, ptr %15, align 4, !tbaa !13
  %381 = mul nsw i32 %380, 2
  %382 = add nsw i32 %381, 1
  %383 = sext i32 %382 to i64
  %384 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7libzpaq5ArrayIjEixEm(ptr noundef nonnull align 8 dereferenceable(20) %379, i64 noundef %383)
  store i32 %377, ptr %384, align 4, !tbaa !13
  br label %385

385:                                              ; preds = %364
  %386 = load i32, ptr %15, align 4, !tbaa !13
  %387 = add nsw i32 %386, 1
  store i32 %387, ptr %15, align 4, !tbaa !13
  br label %360, !llvm.loop !32

388:                                              ; preds = %363
  br label %460

389:                                              ; preds = %67
  %390 = load ptr, ptr %6, align 8, !tbaa !5
  %391 = getelementptr inbounds i8, ptr %390, i64 1
  %392 = load i8, ptr %391, align 1, !tbaa !17
  %393 = zext i8 %392 to i32
  %394 = icmp sgt i32 %393, 32
  br i1 %394, label %395, label %396

395:                                              ; preds = %389
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.20)
  br label %396

396:                                              ; preds = %395, %389
  %397 = load ptr, ptr %6, align 8, !tbaa !5
  %398 = getelementptr inbounds i8, ptr %397, i64 2
  %399 = load i8, ptr %398, align 1, !tbaa !17
  %400 = zext i8 %399 to i32
  %401 = load i32, ptr %7, align 4, !tbaa !13
  %402 = icmp sge i32 %400, %401
  br i1 %402, label %403, label %404

403:                                              ; preds = %396
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.21)
  br label %404

404:                                              ; preds = %403, %396
  %405 = load ptr, ptr %6, align 8, !tbaa !5
  %406 = getelementptr inbounds i8, ptr %405, i64 3
  %407 = load i8, ptr %406, align 1, !tbaa !17
  %408 = zext i8 %407 to i32
  %409 = load ptr, ptr %6, align 8, !tbaa !5
  %410 = getelementptr inbounds i8, ptr %409, i64 4
  %411 = load i8, ptr %410, align 1, !tbaa !17
  %412 = zext i8 %411 to i32
  %413 = mul nsw i32 %412, 4
  %414 = icmp sgt i32 %408, %413
  br i1 %414, label %415, label %416

415:                                              ; preds = %404
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.22)
  br label %416

416:                                              ; preds = %415, %404
  %417 = load ptr, ptr %9, align 8, !tbaa !5
  %418 = getelementptr inbounds %"struct.libzpaq::Component", ptr %417, i32 0, i32 5
  %419 = load ptr, ptr %6, align 8, !tbaa !5
  %420 = getelementptr inbounds i8, ptr %419, i64 1
  %421 = load i8, ptr %420, align 1, !tbaa !17
  %422 = zext i8 %421 to i32
  call void @_ZN7libzpaq5ArrayIjE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %418, i64 noundef 32, i32 noundef %422)
  %423 = load ptr, ptr %6, align 8, !tbaa !5
  %424 = getelementptr inbounds i8, ptr %423, i64 4
  %425 = load i8, ptr %424, align 1, !tbaa !17
  %426 = zext i8 %425 to i32
  %427 = mul nsw i32 %426, 4
  %428 = sext i32 %427 to i64
  %429 = load ptr, ptr %9, align 8, !tbaa !5
  %430 = getelementptr inbounds %"struct.libzpaq::Component", ptr %429, i32 0, i32 0
  store i64 %428, ptr %430, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  store i64 0, ptr %16, align 8, !tbaa !24
  br label %431

431:                                              ; preds = %455, %416
  %432 = load i64, ptr %16, align 8, !tbaa !24
  %433 = load ptr, ptr %9, align 8, !tbaa !5
  %434 = getelementptr inbounds %"struct.libzpaq::Component", ptr %433, i32 0, i32 5
  %435 = call noundef i64 @_ZNK7libzpaq5ArrayIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %434)
  %436 = icmp ult i64 %432, %435
  br i1 %436, label %438, label %437

437:                                              ; preds = %431
  store i32 27, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  br label %458

438:                                              ; preds = %431
  %439 = load i64, ptr %16, align 8, !tbaa !24
  %440 = and i64 %439, 31
  %441 = mul i64 %440, 64
  %442 = sub i64 %441, 992
  %443 = trunc i64 %442 to i32
  %444 = call noundef i32 @_ZN7libzpaq9Predictor6squashEi(ptr noundef nonnull align 8 dereferenceable(110620) %17, i32 noundef %443)
  %445 = shl i32 %444, 17
  %446 = load ptr, ptr %6, align 8, !tbaa !5
  %447 = getelementptr inbounds i8, ptr %446, i64 3
  %448 = load i8, ptr %447, align 1, !tbaa !17
  %449 = zext i8 %448 to i32
  %450 = or i32 %445, %449
  %451 = load ptr, ptr %9, align 8, !tbaa !5
  %452 = getelementptr inbounds %"struct.libzpaq::Component", ptr %451, i32 0, i32 5
  %453 = load i64, ptr %16, align 8, !tbaa !24
  %454 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7libzpaq5ArrayIjEixEm(ptr noundef nonnull align 8 dereferenceable(20) %452, i64 noundef %453)
  store i32 %450, ptr %454, align 4, !tbaa !13
  br label %455

455:                                              ; preds = %438
  %456 = load i64, ptr %16, align 8, !tbaa !24
  %457 = add i64 %456, 1
  store i64 %457, ptr %16, align 8, !tbaa !24
  br label %431, !llvm.loop !33

458:                                              ; preds = %437
  br label %460

459:                                              ; preds = %67
  call void @_ZN7libzpaq5errorEPKc(ptr noundef @.str.23)
  br label %460

460:                                              ; preds = %459, %458, %388, %335, %262, %208, %176, %162, %124, %76
  %461 = load ptr, ptr %6, align 8, !tbaa !5
  %462 = load i8, ptr %461, align 1, !tbaa !17
  %463 = zext i8 %462 to i64
  %464 = getelementptr inbounds [256 x i32], ptr @_ZN7libzpaq8compsizeE, i64 0, i64 %463
  %465 = load i32, ptr %464, align 4, !tbaa !13
  %466 = load ptr, ptr %6, align 8, !tbaa !5
  %467 = sext i32 %465 to i64
  %468 = getelementptr inbounds i8, ptr %466, i64 %467
  store ptr %468, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  br label %469

469:                                              ; preds = %460
  %470 = load i32, ptr %7, align 4, !tbaa !13
  %471 = add nsw i32 %470, 1
  store i32 %471, ptr %7, align 4, !tbaa !13
  br label %62, !llvm.loop !34

472:                                              ; preds = %66
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  ret void
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7libzpaq10StateTable6cminitEi(ptr noundef nonnull align 1 dereferenceable(1024), i32 noundef) #3 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7libzpaq9Predictor9clamp512kEi(ptr noundef nonnull align 8 dereferenceable(110620), i32 noundef) #3 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 = { "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 = { 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 2056}
!10 = !{!"_ZTSN7libzpaq9PredictorE", !11, i64 0, !11, i64 4, !7, i64 8, !7, i64 1032, !6, i64 2056, !7, i64 2064, !7, i64 30736, !7, i64 31760, !7, i64 35856, !7, i64 44048, !12, i64 109584, !6, i64 110608, !11, i64 110616}
!11 = !{!"int", !7, i64 0}
!12 = !{!"_ZTSN7libzpaq10StateTableE", !7, i64 0}
!13 = !{!11, !11, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = !{!7, !7, i64 0}
!18 = !{!19, !20, i64 0}
!19 = !{!"_ZTSN7libzpaq9ComponentE", !20, i64 0, !20, i64 8, !20, i64 16, !20, i64 24, !20, i64 32, !21, i64 40, !22, i64 64, !23, i64 88}
!20 = !{!"long", !7, i64 0}
!21 = !{!"_ZTSN7libzpaq5ArrayIjEE", !6, i64 0, !20, i64 8, !11, i64 16}
!22 = !{!"_ZTSN7libzpaq5ArrayIhEE", !6, i64 0, !20, i64 8, !11, i64 16}
!23 = !{!"_ZTSN7libzpaq5ArrayItEE", !6, i64 0, !20, i64 8, !11, i64 16}
!24 = !{!20, !20, i64 0}
!25 = distinct !{!25, !15}
!26 = distinct !{!26, !15}
!27 = !{!19, !20, i64 32}
!28 = !{!29, !29, i64 0}
!29 = !{!"short", !7, i64 0}
!30 = distinct !{!30, !15}
!31 = distinct !{!31, !15}
!32 = distinct !{!32, !15}
!33 = distinct !{!33, !15}
!34 = distinct !{!34, !15}


; 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.libzpaq::Component" = type { i64, i64, i64, i64, i64, %"class.libzpaq::Array", %"class.libzpaq::Array.0", %"class.libzpaq::Array.2" }
%"class.libzpaq::Array" = type <{ ptr, i64, i32, [4 x i8] }>
%"class.libzpaq::Array.0" = type <{ ptr, i64, i32, [4 x i8] }>
%"class.libzpaq::Array.2" = type <{ ptr, i64, i32, [4 x i8] }>

@_ZN7libzpaq8compsizeE = external dso_local local_unnamed_addr constant <{ [10 x i32], [246 x i32] }>, align 16
@.str.7 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [23 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7libzpaq6allocxERPhRii(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) local_unnamed_addr #0

declare void @_ZN7libzpaq5errorEPKc(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7libzpaq9Component4initEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7libzpaq5ArrayIjE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20), i64 noundef, i32 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7libzpaq5ArrayIhE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20), i64 noundef, i32 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7libzpaq5ArrayItE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20), i64 noundef, i32 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZN7libzpaq5ArrayIhEixEm(ptr noundef nonnull align 8 dereferenceable(20), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7libzpaq5ZPAQL5inithEv(ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN7libzpaq5ArrayIjEixEm(ptr noundef nonnull align 8 dereferenceable(20), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZN7libzpaq5ArrayIhEclEm(ptr noundef nonnull align 8 dereferenceable(20), i64 noundef) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7libzpaq9Predictor4initEv(ptr noundef nonnull align 8 dereferenceable(110620) %0) local_unnamed_addr #0 align 2 {
.preheader:
  %1 = getelementptr inbounds i8, ptr %0, i64 110608
  %2 = getelementptr inbounds i8, ptr %0, i64 110616
  tail call void @_ZN7libzpaq6allocxERPhRii(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 4 dereferenceable(4) %2, i32 noundef 0)
  %3 = getelementptr inbounds i8, ptr %0, i64 2056
  %4 = load ptr, ptr %3, align 8, !tbaa !5
  tail call void @_ZN7libzpaq5ZPAQL5inithEv(ptr noundef nonnull align 8 dereferenceable(192) %4)
  %5 = getelementptr inbounds i8, ptr %0, i64 8
  %6 = getelementptr inbounds i8, ptr %0, i64 2064
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(2048) %5, i8 0, i64 2048, i1 false)
  br label %16

7:                                                ; preds = %16
  %8 = load ptr, ptr %3, align 8, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %8, i64 16
  %10 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZN7libzpaq5ArrayIhEixEm(ptr noundef nonnull align 8 dereferenceable(20) %9, i64 noundef 6)
  %11 = load i8, ptr %10, align 1, !tbaa !12
  %12 = load ptr, ptr %3, align 8, !tbaa !5
  %13 = getelementptr inbounds i8, ptr %12, i64 16
  %14 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZN7libzpaq5ArrayIhEixEm(ptr noundef nonnull align 8 dereferenceable(20) %13, i64 noundef 7)
  %.not148 = icmp eq i8 %11, 0
  br i1 %.not148, label %._crit_edge, label %.lr.ph147

.lr.ph147:                                        ; preds = %7
  %15 = getelementptr inbounds i8, ptr %0, i64 109584
  %wide.trip.count = zext i8 %11 to i64
  br label %18

16:                                               ; preds = %.preheader, %16
  %indvars.iv = phi i64 [ 0, %.preheader ], [ %indvars.iv.next, %16 ]
  %17 = getelementptr inbounds [256 x %"struct.libzpaq::Component"], ptr %6, i64 0, i64 %indvars.iv
  tail call void @_ZN7libzpaq9Component4initEv(ptr noundef nonnull align 8 dereferenceable(112) %17)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 256
  br i1 %exitcond.not, label %7, label %16, !llvm.loop !13

._crit_edge:                                      ; preds = %.loopexit, %7
  ret void

18:                                               ; preds = %.lr.ph147, %.loopexit
  %indvars.iv165 = phi i64 [ 0, %.lr.ph147 ], [ %indvars.iv.next166, %.loopexit ]
  %.0118143 = phi ptr [ %14, %.lr.ph147 ], [ %231, %.loopexit ]
  %19 = getelementptr inbounds [256 x %"struct.libzpaq::Component"], ptr %6, i64 0, i64 %indvars.iv165
  %20 = load i8, ptr %.0118143, align 1, !tbaa !12
  switch i8 %20, label %225 [
    i8 1, label %21
    i8 2, label %28
    i8 3, label %46
    i8 4, label %63
    i8 5, label %81
    i8 6, label %91
    i8 7, label %119
    i8 8, label %159
    i8 9, label %185
  ]

21:                                               ; preds = %18
  %22 = getelementptr inbounds i8, ptr %.0118143, i64 1
  %23 = load i8, ptr %22, align 1, !tbaa !12
  %24 = zext i8 %23 to i32
  %25 = shl nuw nsw i32 %24, 2
  %26 = add nsw i32 %25, -512
  %27 = getelementptr inbounds [256 x i32], ptr %5, i64 0, i64 %indvars.iv165
  store i32 %26, ptr %27, align 4, !tbaa !15
  br label %.loopexit

28:                                               ; preds = %18
  %29 = getelementptr inbounds i8, ptr %.0118143, i64 1
  %30 = load i8, ptr %29, align 1, !tbaa !12
  %31 = icmp ugt i8 %30, 32
  br i1 %31, label %32, label %33

32:                                               ; preds = %28
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.7)
  %.pre170 = load i8, ptr %29, align 1, !tbaa !12
  br label %33

33:                                               ; preds = %32, %28
  %34 = phi i8 [ %.pre170, %32 ], [ %30, %28 ]
  %35 = getelementptr inbounds i8, ptr %19, i64 40
  %36 = zext i8 %34 to i32
  tail call void @_ZN7libzpaq5ArrayIjE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %35, i64 noundef 1, i32 noundef %36)
  %37 = getelementptr inbounds i8, ptr %.0118143, i64 2
  %38 = load i8, ptr %37, align 1, !tbaa !12
  %39 = zext i8 %38 to i64
  %40 = shl nuw nsw i64 %39, 2
  store i64 %40, ptr %19, align 8, !tbaa !16
  %41 = tail call noundef i64 @_ZNK7libzpaq5ArrayIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %35)
  %.not153 = icmp eq i64 %41, 0
  br i1 %.not153, label %.loopexit, label %.lr.ph142

.lr.ph142:                                        ; preds = %33, %.lr.ph142
  %.0115141 = phi i64 [ %43, %.lr.ph142 ], [ 0, %33 ]
  %42 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7libzpaq5ArrayIjEixEm(ptr noundef nonnull align 8 dereferenceable(20) %35, i64 noundef %.0115141)
  store i32 -2147483648, ptr %42, align 4, !tbaa !15
  %43 = add nuw i64 %.0115141, 1
  %44 = tail call noundef i64 @_ZNK7libzpaq5ArrayIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %35)
  %45 = icmp ult i64 %43, %44
  br i1 %45, label %.lr.ph142, label %.loopexit, !llvm.loop !22

46:                                               ; preds = %18
  %47 = getelementptr inbounds i8, ptr %.0118143, i64 1
  %48 = load i8, ptr %47, align 1, !tbaa !12
  %49 = icmp ugt i8 %48, 26
  br i1 %49, label %50, label %51

50:                                               ; preds = %46
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.8)
  br label %51

51:                                               ; preds = %50, %46
  store i64 1023, ptr %19, align 8, !tbaa !16
  %52 = getelementptr inbounds i8, ptr %19, i64 40
  tail call void @_ZN7libzpaq5ArrayIjE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %52, i64 noundef 256, i32 noundef 0)
  %53 = getelementptr inbounds i8, ptr %19, i64 64
  %54 = load i8, ptr %47, align 1, !tbaa !12
  %55 = zext i8 %54 to i32
  tail call void @_ZN7libzpaq5ArrayIhE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %53, i64 noundef 64, i32 noundef %55)
  %56 = tail call noundef i64 @_ZNK7libzpaq5ArrayIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %52)
  %.not152 = icmp eq i64 %56, 0
  br i1 %.not152, label %.loopexit, label %.lr.ph140

.lr.ph140:                                        ; preds = %51, %.lr.ph140
  %.0114139 = phi i64 [ %60, %.lr.ph140 ], [ 0, %51 ]
  %57 = trunc i64 %.0114139 to i32
  %58 = tail call noundef i32 @_ZN7libzpaq10StateTable6cminitEi(ptr noundef nonnull align 1 dereferenceable(1024) %15, i32 noundef %57)
  %59 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7libzpaq5ArrayIjEixEm(ptr noundef nonnull align 8 dereferenceable(20) %52, i64 noundef %.0114139)
  store i32 %58, ptr %59, align 4, !tbaa !15
  %60 = add nuw i64 %.0114139, 1
  %61 = tail call noundef i64 @_ZNK7libzpaq5ArrayIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %52)
  %62 = icmp ult i64 %60, %61
  br i1 %62, label %.lr.ph140, label %.loopexit, !llvm.loop !23

63:                                               ; preds = %18
  %64 = getelementptr inbounds i8, ptr %.0118143, i64 1
  %65 = load i8, ptr %64, align 1, !tbaa !12
  %66 = icmp ugt i8 %65, 32
  br i1 %66, label %71, label %67

67:                                               ; preds = %63
  %68 = getelementptr inbounds i8, ptr %.0118143, i64 2
  %69 = load i8, ptr %68, align 1, !tbaa !12
  %70 = icmp ugt i8 %69, 32
  br i1 %70, label %71, label %72

71:                                               ; preds = %67, %63
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.9)
  %.pre169 = load i8, ptr %64, align 1, !tbaa !12
  br label %72

72:                                               ; preds = %71, %67
  %73 = phi i8 [ %.pre169, %71 ], [ %65, %67 ]
  %74 = getelementptr inbounds i8, ptr %19, i64 40
  %75 = zext i8 %73 to i32
  tail call void @_ZN7libzpaq5ArrayIjE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %74, i64 noundef 1, i32 noundef %75)
  %76 = getelementptr inbounds i8, ptr %19, i64 64
  %77 = getelementptr inbounds i8, ptr %.0118143, i64 2
  %78 = load i8, ptr %77, align 1, !tbaa !12
  %79 = zext i8 %78 to i32
  tail call void @_ZN7libzpaq5ArrayIhE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %76, i64 noundef 1, i32 noundef %79)
  %80 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZN7libzpaq5ArrayIhEclEm(ptr noundef nonnull align 8 dereferenceable(20) %76, i64 noundef 0)
  store i8 1, ptr %80, align 1, !tbaa !12
  br label %.loopexit

81:                                               ; preds = %18
  %82 = getelementptr inbounds i8, ptr %.0118143, i64 1
  %83 = load i8, ptr %82, align 1, !tbaa !12
  %84 = zext i8 %83 to i64
  %.not124 = icmp ugt i64 %indvars.iv165, %84
  br i1 %.not124, label %86, label %85

85:                                               ; preds = %81
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.10)
  br label %86

86:                                               ; preds = %85, %81
  %87 = getelementptr inbounds i8, ptr %.0118143, i64 2
  %88 = load i8, ptr %87, align 1, !tbaa !12
  %89 = zext i8 %88 to i64
  %.not125 = icmp ugt i64 %indvars.iv165, %89
  br i1 %.not125, label %.loopexit, label %90

90:                                               ; preds = %86
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.11)
  br label %.loopexit

91:                                               ; preds = %18
  %92 = getelementptr inbounds i8, ptr %.0118143, i64 1
  %93 = load i8, ptr %92, align 1, !tbaa !12
  %94 = icmp ugt i8 %93, 32
  br i1 %94, label %95, label %96

95:                                               ; preds = %91
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.12)
  br label %96

96:                                               ; preds = %95, %91
  %97 = getelementptr inbounds i8, ptr %.0118143, i64 3
  %98 = load i8, ptr %97, align 1, !tbaa !12
  %99 = zext i8 %98 to i64
  %.not122 = icmp ugt i64 %indvars.iv165, %99
  br i1 %.not122, label %101, label %100

100:                                              ; preds = %96
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.13)
  br label %101

101:                                              ; preds = %100, %96
  %102 = getelementptr inbounds i8, ptr %.0118143, i64 2
  %103 = load i8, ptr %102, align 1, !tbaa !12
  %104 = zext i8 %103 to i64
  %.not123 = icmp ugt i64 %indvars.iv165, %104
  br i1 %.not123, label %106, label %105

105:                                              ; preds = %101
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.14)
  br label %106

106:                                              ; preds = %105, %101
  %107 = load i8, ptr %92, align 1, !tbaa !12
  %108 = zext nneg i8 %107 to i64
  %109 = shl nuw i64 1, %108
  %110 = getelementptr inbounds i8, ptr %19, i64 32
  store i64 %109, ptr %110, align 8, !tbaa !24
  %111 = getelementptr inbounds i8, ptr %19, i64 88
  %112 = load i8, ptr %92, align 1, !tbaa !12
  %113 = zext i8 %112 to i32
  tail call void @_ZN7libzpaq5ArrayItE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %111, i64 noundef 1, i32 noundef %113)
  %114 = tail call noundef i64 @_ZNK7libzpaq5ArrayItE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %111)
  %.not151 = icmp eq i64 %114, 0
  br i1 %.not151, label %.loopexit, label %.lr.ph138

.lr.ph138:                                        ; preds = %106, %.lr.ph138
  %.0113137 = phi i64 [ %116, %.lr.ph138 ], [ 0, %106 ]
  %115 = tail call noundef nonnull align 2 dereferenceable(2) ptr @_ZN7libzpaq5ArrayItEixEm(ptr noundef nonnull align 8 dereferenceable(20) %111, i64 noundef %.0113137)
  store i16 -32768, ptr %115, align 2, !tbaa !25
  %116 = add nuw i64 %.0113137, 1
  %117 = tail call noundef i64 @_ZNK7libzpaq5ArrayItE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %111)
  %118 = icmp ult i64 %116, %117
  br i1 %118, label %.lr.ph138, label %.loopexit, !llvm.loop !27

119:                                              ; preds = %18
  %120 = getelementptr inbounds i8, ptr %.0118143, i64 1
  %121 = load i8, ptr %120, align 1, !tbaa !12
  %122 = icmp ugt i8 %121, 32
  br i1 %122, label %123, label %124

123:                                              ; preds = %119
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.15)
  br label %124

124:                                              ; preds = %123, %119
  %125 = getelementptr inbounds i8, ptr %.0118143, i64 2
  %126 = load i8, ptr %125, align 1, !tbaa !12
  %127 = zext i8 %126 to i64
  %.not121 = icmp ugt i64 %indvars.iv165, %127
  br i1 %.not121, label %129, label %128

128:                                              ; preds = %124
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.16)
  br label %129

129:                                              ; preds = %128, %124
  %130 = getelementptr inbounds i8, ptr %.0118143, i64 3
  %131 = load i8, ptr %130, align 1, !tbaa !12
  %132 = icmp eq i8 %131, 0
  br i1 %132, label %140, label %133

133:                                              ; preds = %129
  %134 = zext i8 %131 to i32
  %135 = load i8, ptr %125, align 1, !tbaa !12
  %136 = zext i8 %135 to i32
  %137 = trunc nuw nsw i64 %indvars.iv165 to i32
  %138 = sub nsw i32 %137, %136
  %139 = icmp slt i32 %138, %134
  br i1 %139, label %140, label %141

140:                                              ; preds = %133, %129
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.17)
  %.pre = load i8, ptr %130, align 1, !tbaa !12
  br label %141

141:                                              ; preds = %140, %133
  %142 = phi i8 [ %.pre, %140 ], [ %131, %133 ]
  %143 = load i8, ptr %120, align 1, !tbaa !12
  %144 = zext nneg i8 %143 to i64
  %145 = shl nuw i64 1, %144
  %146 = getelementptr inbounds i8, ptr %19, i64 32
  store i64 %145, ptr %146, align 8, !tbaa !24
  %147 = getelementptr inbounds i8, ptr %19, i64 40
  %148 = zext i8 %142 to i64
  %149 = load i8, ptr %120, align 1, !tbaa !12
  %150 = zext i8 %149 to i32
  tail call void @_ZN7libzpaq5ArrayIjE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %147, i64 noundef %148, i32 noundef %150)
  %151 = tail call noundef i64 @_ZNK7libzpaq5ArrayIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %147)
  %.not150 = icmp eq i64 %151, 0
  br i1 %.not150, label %.loopexit, label %.lr.ph136

.lr.ph136:                                        ; preds = %141
  %152 = zext i8 %142 to i32
  %153 = udiv i32 65536, %152
  br label %154

154:                                              ; preds = %.lr.ph136, %154
  %.0111135 = phi i64 [ 0, %.lr.ph136 ], [ %156, %154 ]
  %155 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7libzpaq5ArrayIjEixEm(ptr noundef nonnull align 8 dereferenceable(20) %147, i64 noundef %.0111135)
  store i32 %153, ptr %155, align 4, !tbaa !15
  %156 = add nuw i64 %.0111135, 1
  %157 = tail call noundef i64 @_ZNK7libzpaq5ArrayIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %147)
  %158 = icmp ult i64 %156, %157
  br i1 %158, label %154, label %.loopexit, !llvm.loop !28

159:                                              ; preds = %18
  %160 = getelementptr inbounds i8, ptr %.0118143, i64 1
  %161 = load i8, ptr %160, align 1, !tbaa !12
  %162 = icmp ugt i8 %161, 32
  br i1 %162, label %163, label %164

163:                                              ; preds = %159
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.18)
  br label %164

164:                                              ; preds = %163, %159
  %165 = getelementptr inbounds i8, ptr %.0118143, i64 2
  %166 = load i8, ptr %165, align 1, !tbaa !12
  %167 = zext i8 %166 to i64
  %.not120 = icmp ugt i64 %indvars.iv165, %167
  br i1 %.not120, label %169, label %168

168:                                              ; preds = %164
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.19)
  br label %169

169:                                              ; preds = %168, %164
  %170 = getelementptr inbounds i8, ptr %19, i64 64
  %171 = load i8, ptr %160, align 1, !tbaa !12
  %172 = zext i8 %171 to i32
  tail call void @_ZN7libzpaq5ArrayIhE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %170, i64 noundef 64, i32 noundef %172)
  %173 = getelementptr inbounds i8, ptr %19, i64 40
  tail call void @_ZN7libzpaq5ArrayIjE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %173, i64 noundef 512, i32 noundef 0)
  br label %174

174:                                              ; preds = %169, %174
  %indvars.iv161 = phi i64 [ 0, %169 ], [ %indvars.iv.next162, %174 ]
  %175 = shl nuw nsw i64 %indvars.iv161, 1
  %176 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7libzpaq5ArrayIjEixEm(ptr noundef nonnull align 8 dereferenceable(20) %173, i64 noundef %175)
  store i32 32768, ptr %176, align 4, !tbaa !15
  %177 = trunc nuw nsw i64 %indvars.iv161 to i32
  %178 = tail call noundef i32 @_ZN7libzpaq10StateTable6cminitEi(ptr noundef nonnull align 1 dereferenceable(1024) %15, i32 noundef %177)
  %179 = ashr i32 %178, 8
  %180 = tail call noundef i32 @_ZN7libzpaq9Predictor7stretchEi(ptr noundef nonnull align 8 dereferenceable(110620) %0, i32 noundef %179)
  %181 = shl i32 %180, 10
  %182 = tail call noundef i32 @_ZN7libzpaq9Predictor9clamp512kEi(ptr noundef nonnull align 8 dereferenceable(110620) %0, i32 noundef %181)
  %183 = or disjoint i64 %175, 1
  %184 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7libzpaq5ArrayIjEixEm(ptr noundef nonnull align 8 dereferenceable(20) %173, i64 noundef %183)
  store i32 %182, ptr %184, align 4, !tbaa !15
  %indvars.iv.next162 = add nuw nsw i64 %indvars.iv161, 1
  %exitcond164.not = icmp eq i64 %indvars.iv.next162, 256
  br i1 %exitcond164.not, label %.loopexit, label %174, !llvm.loop !29

185:                                              ; preds = %18
  %186 = getelementptr inbounds i8, ptr %.0118143, i64 1
  %187 = load i8, ptr %186, align 1, !tbaa !12
  %188 = icmp ugt i8 %187, 32
  br i1 %188, label %189, label %190

189:                                              ; preds = %185
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.20)
  br label %190

190:                                              ; preds = %189, %185
  %191 = getelementptr inbounds i8, ptr %.0118143, i64 2
  %192 = load i8, ptr %191, align 1, !tbaa !12
  %193 = zext i8 %192 to i64
  %.not = icmp ugt i64 %indvars.iv165, %193
  br i1 %.not, label %195, label %194

194:                                              ; preds = %190
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.21)
  br label %195

195:                                              ; preds = %194, %190
  %196 = getelementptr inbounds i8, ptr %.0118143, i64 3
  %197 = load i8, ptr %196, align 1, !tbaa !12
  %198 = zext i8 %197 to i32
  %199 = getelementptr inbounds i8, ptr %.0118143, i64 4
  %200 = load i8, ptr %199, align 1, !tbaa !12
  %201 = zext i8 %200 to i32
  %202 = shl nuw nsw i32 %201, 2
  %203 = icmp ult i32 %202, %198
  br i1 %203, label %204, label %205

204:                                              ; preds = %195
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.22)
  br label %205

205:                                              ; preds = %204, %195
  %206 = getelementptr inbounds i8, ptr %19, i64 40
  %207 = load i8, ptr %186, align 1, !tbaa !12
  %208 = zext i8 %207 to i32
  tail call void @_ZN7libzpaq5ArrayIjE6resizeEmi(ptr noundef nonnull align 8 dereferenceable(20) %206, i64 noundef 32, i32 noundef %208)
  %209 = load i8, ptr %199, align 1, !tbaa !12
  %210 = zext i8 %209 to i64
  %211 = shl nuw nsw i64 %210, 2
  store i64 %211, ptr %19, align 8, !tbaa !16
  %212 = tail call noundef i64 @_ZNK7libzpaq5ArrayIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %206)
  %.not149 = icmp eq i64 %212, 0
  br i1 %.not149, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %205, %.lr.ph
  %.0133 = phi i64 [ %222, %.lr.ph ], [ 0, %205 ]
  %.0.tr = trunc i64 %.0133 to i32
  %213 = shl i32 %.0.tr, 6
  %214 = and i32 %213, 1984
  %215 = add nsw i32 %214, -992
  %216 = tail call noundef i32 @_ZN7libzpaq9Predictor6squashEi(ptr noundef nonnull align 8 dereferenceable(110620) %0, i32 noundef %215)
  %217 = shl i32 %216, 17
  %218 = load i8, ptr %196, align 1, !tbaa !12
  %219 = zext i8 %218 to i32
  %220 = or disjoint i32 %217, %219
  %221 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7libzpaq5ArrayIjEixEm(ptr noundef nonnull align 8 dereferenceable(20) %206, i64 noundef %.0133)
  store i32 %220, ptr %221, align 4, !tbaa !15
  %222 = add nuw i64 %.0133, 1
  %223 = tail call noundef i64 @_ZNK7libzpaq5ArrayIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(20) %206)
  %224 = icmp ult i64 %222, %223
  br i1 %224, label %.lr.ph, label %.loopexit, !llvm.loop !30

225:                                              ; preds = %18
  tail call void @_ZN7libzpaq5errorEPKc(ptr noundef nonnull @.str.23)
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph, %174, %154, %.lr.ph138, %.lr.ph140, %.lr.ph142, %205, %141, %106, %51, %33, %86, %90, %225, %72, %21
  %226 = load i8, ptr %.0118143, align 1, !tbaa !12
  %227 = zext i8 %226 to i64
  %228 = getelementptr inbounds [256 x i32], ptr @_ZN7libzpaq8compsizeE, i64 0, i64 %227
  %229 = load i32, ptr %228, align 4, !tbaa !15
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds i8, ptr %.0118143, i64 %230
  %indvars.iv.next166 = add nuw nsw i64 %indvars.iv165, 1
  %exitcond168.not = icmp eq i64 %indvars.iv.next166, %wide.trip.count
  br i1 %exitcond168.not, label %._crit_edge, label %18, !llvm.loop !31
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7libzpaq10StateTable6cminitEi(ptr noundef nonnull align 1 dereferenceable(1024), i32 noundef) local_unnamed_addr #2 align 2

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #3

attributes #0 = { 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 #1 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: write) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 2056}
!6 = !{!"_ZTSN7libzpaq9PredictorE", !7, i64 0, !7, i64 4, !8, i64 8, !8, i64 1032, !10, i64 2056, !8, i64 2064, !8, i64 30736, !8, i64 31760, !8, i64 35856, !8, i64 44048, !11, i64 109584, !10, i64 110608, !7, i64 110616}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"_ZTSN7libzpaq10StateTableE", !8, i64 0}
!12 = !{!8, !8, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!7, !7, i64 0}
!16 = !{!17, !18, i64 0}
!17 = !{!"_ZTSN7libzpaq9ComponentE", !18, i64 0, !18, i64 8, !18, i64 16, !18, i64 24, !18, i64 32, !19, i64 40, !20, i64 64, !21, i64 88}
!18 = !{!"long", !8, i64 0}
!19 = !{!"_ZTSN7libzpaq5ArrayIjEE", !10, i64 0, !18, i64 8, !7, i64 16}
!20 = !{!"_ZTSN7libzpaq5ArrayIhEE", !10, i64 0, !18, i64 8, !7, i64 16}
!21 = !{!"_ZTSN7libzpaq5ArrayItEE", !10, i64 0, !18, i64 8, !7, i64 16}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = !{!17, !18, i64 32}
!25 = !{!26, !26, i64 0}
!26 = !{!"short", !8, i64 0}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !14}
!31 = distinct !{!31, !14}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopIdiomRecognizePass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass