; LLVM IR from indygreg/python-zstandard :: zstd (zstd)

; 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.DTableDesc = type { i8, i8, i8, i8 }
%struct.HUF_DEltX1 = type { i8, i8 }
%struct.HUF_ReadDTableX1_Workspace = type { [13 x i32], [13 x i32], [219 x i32], [256 x i8], [256 x i8] }

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

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

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @MEM_write64(ptr noundef, i64 noundef) #3

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

52:                                               ; preds = %6
  store i64 -44, ptr %7, align 8
  store i32 1, ptr %20, align 4
  br label %436

53:                                               ; preds = %6
  %54 = load ptr, ptr %19, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %54, i32 0, i32 4
  %56 = getelementptr inbounds [256 x i8], ptr %55, i64 0, i64 0
  %57 = load ptr, ptr %19, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %57, i32 0, i32 0
  %59 = getelementptr inbounds [13 x i32], ptr %58, i64 0, i64 0
  %60 = load ptr, ptr %9, align 8, !tbaa !5
  %61 = load i64, ptr %10, align 8, !tbaa !9
  %62 = load ptr, ptr %19, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %62, i32 0, i32 2
  %64 = getelementptr inbounds [219 x i32], ptr %63, i64 0, i64 0
  %65 = load i32, ptr %13, align 4, !tbaa !11
  %66 = call i64 @HUF_readStats_wksp(ptr noundef %56, i64 noundef 256, ptr noundef %59, ptr noundef %15, ptr noundef %14, ptr noundef %60, i64 noundef %61, ptr noundef %64, i64 noundef 876, i32 noundef %65)
  store i64 %66, ptr %16, align 8, !tbaa !9
  %67 = load i64, ptr %16, align 8, !tbaa !9
  %68 = call i32 @ERR_isError(i64 noundef %67)
  %69 = icmp ne i32 %68, 0
  br i1 %69, label %70, label %72

70:                                               ; preds = %53
  %71 = load i64, ptr %16, align 8, !tbaa !9
  store i64 %71, ptr %7, align 8
  store i32 1, ptr %20, align 4
  br label %436

72:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %73 = load ptr, ptr %8, align 8, !tbaa !5
  %74 = call i32 @HUF_getDTableDesc(ptr noundef %73)
  store i32 %74, ptr %21, align 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  %75 = getelementptr inbounds %struct.DTableDesc, ptr %21, i32 0, i32 0
  %76 = load i8, ptr %75, align 1, !tbaa !13
  %77 = zext i8 %76 to i32
  %78 = add nsw i32 %77, 1
  store i32 %78, ptr %22, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %79 = load i32, ptr %22, align 4, !tbaa !11
  %80 = icmp ult i32 %79, 11
  br i1 %80, label %81, label %83

81:                                               ; preds = %72
  %82 = load i32, ptr %22, align 4, !tbaa !11
  br label %84

83:                                               ; preds = %72
  br label %84

84:                                               ; preds = %83, %81
  %85 = phi i32 [ %82, %81 ], [ 11, %83 ]
  store i32 %85, ptr %23, align 4, !tbaa !11
  %86 = load ptr, ptr %19, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %86, i32 0, i32 4
  %88 = getelementptr inbounds [256 x i8], ptr %87, i64 0, i64 0
  %89 = load ptr, ptr %19, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %89, i32 0, i32 0
  %91 = getelementptr inbounds [13 x i32], ptr %90, i64 0, i64 0
  %92 = load i32, ptr %15, align 4, !tbaa !11
  %93 = load i32, ptr %14, align 4, !tbaa !11
  %94 = load i32, ptr %23, align 4, !tbaa !11
  %95 = call i32 @HUF_rescaleStats(ptr noundef %88, ptr noundef %91, i32 noundef %92, i32 noundef %93, i32 noundef %94)
  store i32 %95, ptr %14, align 4, !tbaa !11
  %96 = load i32, ptr %14, align 4, !tbaa !11
  %97 = getelementptr inbounds %struct.DTableDesc, ptr %21, i32 0, i32 0
  %98 = load i8, ptr %97, align 1, !tbaa !13
  %99 = zext i8 %98 to i32
  %100 = add nsw i32 %99, 1
  %101 = icmp ugt i32 %96, %100
  br i1 %101, label %102, label %103

102:                                              ; preds = %84
  store i64 -44, ptr %7, align 8
  store i32 1, ptr %20, align 4
  br label %109

103:                                              ; preds = %84
  %104 = getelementptr inbounds %struct.DTableDesc, ptr %21, i32 0, i32 1
  store i8 0, ptr %104, align 1, !tbaa !15
  %105 = load i32, ptr %14, align 4, !tbaa !11
  %106 = trunc i32 %105 to i8
  %107 = getelementptr inbounds %struct.DTableDesc, ptr %21, i32 0, i32 2
  store i8 %106, ptr %107, align 1, !tbaa !16
  %108 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %108, ptr align 1 %21, i64 4, i1 false)
  store i32 0, ptr %20, align 4
  br label %109

109:                                              ; preds = %103, %102
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  %110 = load i32, ptr %20, align 4
  switch i32 %110, label %436 [
    i32 0, label %111
  ]

111:                                              ; preds = %109
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  store i32 0, ptr %25, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  store i32 4, ptr %26, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %112 = load i32, ptr %15, align 4, !tbaa !11
  %113 = sub nsw i32 %112, 4
  %114 = add nsw i32 %113, 1
  store i32 %114, ptr %27, align 4, !tbaa !11
  store i32 0, ptr %24, align 4, !tbaa !11
  br label %115

115:                                              ; preds = %136, %111
  %116 = load i32, ptr %24, align 4, !tbaa !11
  %117 = load i32, ptr %14, align 4, !tbaa !11
  %118 = add nsw i32 %117, 1
  %119 = icmp slt i32 %116, %118
  br i1 %119, label %120, label %139

120:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %121 = load i32, ptr %25, align 4, !tbaa !11
  store i32 %121, ptr %28, align 4, !tbaa !11
  %122 = load ptr, ptr %19, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %122, i32 0, i32 0
  %124 = load i32, ptr %24, align 4, !tbaa !11
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds [13 x i32], ptr %123, i64 0, i64 %125
  %127 = load i32, ptr %126, align 4, !tbaa !11
  %128 = load i32, ptr %25, align 4, !tbaa !11
  %129 = add i32 %128, %127
  store i32 %129, ptr %25, align 4, !tbaa !11
  %130 = load i32, ptr %28, align 4, !tbaa !11
  %131 = load ptr, ptr %19, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %131, i32 0, i32 1
  %133 = load i32, ptr %24, align 4, !tbaa !11
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds [13 x i32], ptr %132, i64 0, i64 %134
  store i32 %130, ptr %135, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  br label %136

136:                                              ; preds = %120
  %137 = load i32, ptr %24, align 4, !tbaa !11
  %138 = add nsw i32 %137, 1
  store i32 %138, ptr %24, align 4, !tbaa !11
  br label %115, !llvm.loop !17

139:                                              ; preds = %115
  store i32 0, ptr %24, align 4, !tbaa !11
  br label %140

140:                                              ; preds = %176, %139
  %141 = load i32, ptr %24, align 4, !tbaa !11
  %142 = load i32, ptr %27, align 4, !tbaa !11
  %143 = icmp slt i32 %141, %142
  br i1 %143, label %144, label %179

144:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  store i32 0, ptr %29, align 4, !tbaa !11
  br label %145

145:                                              ; preds = %172, %144
  %146 = load i32, ptr %29, align 4, !tbaa !11
  %147 = icmp slt i32 %146, 4
  br i1 %147, label %148, label %175

148:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  %149 = load ptr, ptr %19, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %149, i32 0, i32 4
  %151 = load i32, ptr %24, align 4, !tbaa !11
  %152 = load i32, ptr %29, align 4, !tbaa !11
  %153 = add nsw i32 %151, %152
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds [256 x i8], ptr %150, i64 0, i64 %154
  %156 = load i8, ptr %155, align 1, !tbaa !19
  %157 = zext i8 %156 to i64
  store i64 %157, ptr %30, align 8, !tbaa !9
  %158 = load i32, ptr %24, align 4, !tbaa !11
  %159 = load i32, ptr %29, align 4, !tbaa !11
  %160 = add nsw i32 %158, %159
  %161 = trunc i32 %160 to i8
  %162 = load ptr, ptr %19, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %162, i32 0, i32 3
  %164 = load ptr, ptr %19, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %164, i32 0, i32 1
  %166 = load i64, ptr %30, align 8, !tbaa !9
  %167 = getelementptr inbounds [13 x i32], ptr %165, i64 0, i64 %166
  %168 = load i32, ptr %167, align 4, !tbaa !11
  %169 = add i32 %168, 1
  store i32 %169, ptr %167, align 4, !tbaa !11
  %170 = zext i32 %168 to i64
  %171 = getelementptr inbounds [256 x i8], ptr %163, i64 0, i64 %170
  store i8 %161, ptr %171, align 1, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  br label %172

172:                                              ; preds = %148
  %173 = load i32, ptr %29, align 4, !tbaa !11
  %174 = add nsw i32 %173, 1
  store i32 %174, ptr %29, align 4, !tbaa !11
  br label %145, !llvm.loop !20

175:                                              ; preds = %145
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %176

176:                                              ; preds = %175
  %177 = load i32, ptr %24, align 4, !tbaa !11
  %178 = add nsw i32 %177, 4
  store i32 %178, ptr %24, align 4, !tbaa !11
  br label %140, !llvm.loop !21

179:                                              ; preds = %140
  br label %180

180:                                              ; preds = %204, %179
  %181 = load i32, ptr %24, align 4, !tbaa !11
  %182 = load i32, ptr %15, align 4, !tbaa !11
  %183 = icmp slt i32 %181, %182
  br i1 %183, label %184, label %207

184:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  %185 = load ptr, ptr %19, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %185, i32 0, i32 4
  %187 = load i32, ptr %24, align 4, !tbaa !11
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds [256 x i8], ptr %186, i64 0, i64 %188
  %190 = load i8, ptr %189, align 1, !tbaa !19
  %191 = zext i8 %190 to i64
  store i64 %191, ptr %31, align 8, !tbaa !9
  %192 = load i32, ptr %24, align 4, !tbaa !11
  %193 = trunc i32 %192 to i8
  %194 = load ptr, ptr %19, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %194, i32 0, i32 3
  %196 = load ptr, ptr %19, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %196, i32 0, i32 1
  %198 = load i64, ptr %31, align 8, !tbaa !9
  %199 = getelementptr inbounds [13 x i32], ptr %197, i64 0, i64 %198
  %200 = load i32, ptr %199, align 4, !tbaa !11
  %201 = add i32 %200, 1
  store i32 %201, ptr %199, align 4, !tbaa !11
  %202 = zext i32 %200 to i64
  %203 = getelementptr inbounds [256 x i8], ptr %195, i64 0, i64 %202
  store i8 %193, ptr %203, align 1, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  br label %204

204:                                              ; preds = %184
  %205 = load i32, ptr %24, align 4, !tbaa !11
  %206 = add nsw i32 %205, 1
  store i32 %206, ptr %24, align 4, !tbaa !11
  br label %180, !llvm.loop !22

207:                                              ; preds = %180
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  %208 = load ptr, ptr %19, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %208, i32 0, i32 0
  %210 = getelementptr inbounds [13 x i32], ptr %209, i64 0, i64 0
  %211 = load i32, ptr %210, align 4, !tbaa !11
  store i32 %211, ptr %33, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  store i32 0, ptr %34, align 4, !tbaa !11
  store i32 1, ptr %32, align 4, !tbaa !11
  br label %212

212:                                              ; preds = %431, %207
  %213 = load i32, ptr %32, align 4, !tbaa !11
  %214 = load i32, ptr %14, align 4, !tbaa !11
  %215 = add i32 %214, 1
  %216 = icmp ult i32 %213, %215
  br i1 %216, label %217, label %434

217:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %218 = load ptr, ptr %19, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %218, i32 0, i32 0
  %220 = load i32, ptr %32, align 4, !tbaa !11
  %221 = zext i32 %220 to i64
  %222 = getelementptr inbounds [13 x i32], ptr %219, i64 0, i64 %221
  %223 = load i32, ptr %222, align 4, !tbaa !11
  store i32 %223, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  %224 = load i32, ptr %32, align 4, !tbaa !11
  %225 = shl i32 1, %224
  %226 = ashr i32 %225, 1
  store i32 %226, ptr %36, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #4
  %227 = load i32, ptr %34, align 4, !tbaa !11
  store i32 %227, ptr %37, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #4
  %228 = load i32, ptr %14, align 4, !tbaa !11
  %229 = add i32 %228, 1
  %230 = load i32, ptr %32, align 4, !tbaa !11
  %231 = sub i32 %229, %230
  %232 = trunc i32 %231 to i8
  store i8 %232, ptr %38, align 1, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  %233 = load i32, ptr %36, align 4, !tbaa !11
  switch i32 %233, label %354 [
    i32 1, label %234
    i32 2, label %261
    i32 4, label %294
    i32 8, label %321
  ]

234:                                              ; preds = %217
  store i32 0, ptr %39, align 4, !tbaa !11
  br label %235

235:                                              ; preds = %257, %234
  %236 = load i32, ptr %39, align 4, !tbaa !11
  %237 = load i32, ptr %35, align 4, !tbaa !11
  %238 = icmp slt i32 %236, %237
  br i1 %238, label %239, label %260

239:                                              ; preds = %235
  call void @llvm.lifetime.start.p0(i64 2, ptr %41) #4
  %240 = load ptr, ptr %19, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %240, i32 0, i32 3
  %242 = load i32, ptr %33, align 4, !tbaa !11
  %243 = load i32, ptr %39, align 4, !tbaa !11
  %244 = add nsw i32 %242, %243
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds [256 x i8], ptr %241, i64 0, i64 %245
  %247 = load i8, ptr %246, align 1, !tbaa !19
  %248 = getelementptr inbounds %struct.HUF_DEltX1, ptr %41, i32 0, i32 1
  store i8 %247, ptr %248, align 1, !tbaa !23
  %249 = load i8, ptr %38, align 1, !tbaa !19
  %250 = getelementptr inbounds %struct.HUF_DEltX1, ptr %41, i32 0, i32 0
  store i8 %249, ptr %250, align 1, !tbaa !25
  %251 = load ptr, ptr %18, align 8, !tbaa !5
  %252 = load i32, ptr %37, align 4, !tbaa !11
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds %struct.HUF_DEltX1, ptr %251, i64 %253
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %254, ptr align 1 %41, i64 2, i1 false), !tbaa.struct !26
  %255 = load i32, ptr %37, align 4, !tbaa !11
  %256 = add nsw i32 %255, 1
  store i32 %256, ptr %37, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 2, ptr %41) #4
  br label %257

257:                                              ; preds = %239
  %258 = load i32, ptr %39, align 4, !tbaa !11
  %259 = add nsw i32 %258, 1
  store i32 %259, ptr %39, align 4, !tbaa !11
  br label %235, !llvm.loop !27

260:                                              ; preds = %235
  br label %422

261:                                              ; preds = %217
  store i32 0, ptr %39, align 4, !tbaa !11
  br label %262

262:                                              ; preds = %290, %261
  %263 = load i32, ptr %39, align 4, !tbaa !11
  %264 = load i32, ptr %35, align 4, !tbaa !11
  %265 = icmp slt i32 %263, %264
  br i1 %265, label %266, label %293

266:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 2, ptr %42) #4
  %267 = load ptr, ptr %19, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %267, i32 0, i32 3
  %269 = load i32, ptr %33, align 4, !tbaa !11
  %270 = load i32, ptr %39, align 4, !tbaa !11
  %271 = add nsw i32 %269, %270
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds [256 x i8], ptr %268, i64 0, i64 %272
  %274 = load i8, ptr %273, align 1, !tbaa !19
  %275 = getelementptr inbounds %struct.HUF_DEltX1, ptr %42, i32 0, i32 1
  store i8 %274, ptr %275, align 1, !tbaa !23
  %276 = load i8, ptr %38, align 1, !tbaa !19
  %277 = getelementptr inbounds %struct.HUF_DEltX1, ptr %42, i32 0, i32 0
  store i8 %276, ptr %277, align 1, !tbaa !25
  %278 = load ptr, ptr %18, align 8, !tbaa !5
  %279 = load i32, ptr %37, align 4, !tbaa !11
  %280 = add nsw i32 %279, 0
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds %struct.HUF_DEltX1, ptr %278, i64 %281
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %282, ptr align 1 %42, i64 2, i1 false), !tbaa.struct !26
  %283 = load ptr, ptr %18, align 8, !tbaa !5
  %284 = load i32, ptr %37, align 4, !tbaa !11
  %285 = add nsw i32 %284, 1
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds %struct.HUF_DEltX1, ptr %283, i64 %286
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %287, ptr align 1 %42, i64 2, i1 false), !tbaa.struct !26
  %288 = load i32, ptr %37, align 4, !tbaa !11
  %289 = add nsw i32 %288, 2
  store i32 %289, ptr %37, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 2, ptr %42) #4
  br label %290

290:                                              ; preds = %266
  %291 = load i32, ptr %39, align 4, !tbaa !11
  %292 = add nsw i32 %291, 1
  store i32 %292, ptr %39, align 4, !tbaa !11
  br label %262, !llvm.loop !28

293:                                              ; preds = %262
  br label %422

294:                                              ; preds = %217
  store i32 0, ptr %39, align 4, !tbaa !11
  br label %295

295:                                              ; preds = %317, %294
  %296 = load i32, ptr %39, align 4, !tbaa !11
  %297 = load i32, ptr %35, align 4, !tbaa !11
  %298 = icmp slt i32 %296, %297
  br i1 %298, label %299, label %320

299:                                              ; preds = %295
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #4
  %300 = load ptr, ptr %19, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %300, i32 0, i32 3
  %302 = load i32, ptr %33, align 4, !tbaa !11
  %303 = load i32, ptr %39, align 4, !tbaa !11
  %304 = add nsw i32 %302, %303
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds [256 x i8], ptr %301, i64 0, i64 %305
  %307 = load i8, ptr %306, align 1, !tbaa !19
  %308 = load i8, ptr %38, align 1, !tbaa !19
  %309 = call i64 @HUF_DEltX1_set4(i8 noundef zeroext %307, i8 noundef zeroext %308)
  store i64 %309, ptr %43, align 8, !tbaa !9
  %310 = load ptr, ptr %18, align 8, !tbaa !5
  %311 = load i32, ptr %37, align 4, !tbaa !11
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds %struct.HUF_DEltX1, ptr %310, i64 %312
  %314 = load i64, ptr %43, align 8, !tbaa !9
  call void @MEM_write64(ptr noundef %313, i64 noundef %314)
  %315 = load i32, ptr %37, align 4, !tbaa !11
  %316 = add nsw i32 %315, 4
  store i32 %316, ptr %37, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  br label %317

317:                                              ; preds = %299
  %318 = load i32, ptr %39, align 4, !tbaa !11
  %319 = add nsw i32 %318, 1
  store i32 %319, ptr %39, align 4, !tbaa !11
  br label %295, !llvm.loop !29

320:                                              ; preds = %295
  br label %422

321:                                              ; preds = %217
  store i32 0, ptr %39, align 4, !tbaa !11
  br label %322

322:                                              ; preds = %350, %321
  %323 = load i32, ptr %39, align 4, !tbaa !11
  %324 = load i32, ptr %35, align 4, !tbaa !11
  %325 = icmp slt i32 %323, %324
  br i1 %325, label %326, label %353

326:                                              ; preds = %322
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #4
  %327 = load ptr, ptr %19, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %327, i32 0, i32 3
  %329 = load i32, ptr %33, align 4, !tbaa !11
  %330 = load i32, ptr %39, align 4, !tbaa !11
  %331 = add nsw i32 %329, %330
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds [256 x i8], ptr %328, i64 0, i64 %332
  %334 = load i8, ptr %333, align 1, !tbaa !19
  %335 = load i8, ptr %38, align 1, !tbaa !19
  %336 = call i64 @HUF_DEltX1_set4(i8 noundef zeroext %334, i8 noundef zeroext %335)
  store i64 %336, ptr %44, align 8, !tbaa !9
  %337 = load ptr, ptr %18, align 8, !tbaa !5
  %338 = load i32, ptr %37, align 4, !tbaa !11
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds %struct.HUF_DEltX1, ptr %337, i64 %339
  %341 = load i64, ptr %44, align 8, !tbaa !9
  call void @MEM_write64(ptr noundef %340, i64 noundef %341)
  %342 = load ptr, ptr %18, align 8, !tbaa !5
  %343 = load i32, ptr %37, align 4, !tbaa !11
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds %struct.HUF_DEltX1, ptr %342, i64 %344
  %346 = getelementptr inbounds %struct.HUF_DEltX1, ptr %345, i64 4
  %347 = load i64, ptr %44, align 8, !tbaa !9
  call void @MEM_write64(ptr noundef %346, i64 noundef %347)
  %348 = load i32, ptr %37, align 4, !tbaa !11
  %349 = add nsw i32 %348, 8
  store i32 %349, ptr %37, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  br label %350

350:                                              ; preds = %326
  %351 = load i32, ptr %39, align 4, !tbaa !11
  %352 = add nsw i32 %351, 1
  store i32 %352, ptr %39, align 4, !tbaa !11
  br label %322, !llvm.loop !30

353:                                              ; preds = %322
  br label %422

354:                                              ; preds = %217
  store i32 0, ptr %39, align 4, !tbaa !11
  br label %355

355:                                              ; preds = %418, %354
  %356 = load i32, ptr %39, align 4, !tbaa !11
  %357 = load i32, ptr %35, align 4, !tbaa !11
  %358 = icmp slt i32 %356, %357
  br i1 %358, label %359, label %421

359:                                              ; preds = %355
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #4
  %360 = load ptr, ptr %19, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.HUF_ReadDTableX1_Workspace, ptr %360, i32 0, i32 3
  %362 = load i32, ptr %33, align 4, !tbaa !11
  %363 = load i32, ptr %39, align 4, !tbaa !11
  %364 = add nsw i32 %362, %363
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds [256 x i8], ptr %361, i64 0, i64 %365
  %367 = load i8, ptr %366, align 1, !tbaa !19
  %368 = load i8, ptr %38, align 1, !tbaa !19
  %369 = call i64 @HUF_DEltX1_set4(i8 noundef zeroext %367, i8 noundef zeroext %368)
  store i64 %369, ptr %45, align 8, !tbaa !9
  store i32 0, ptr %40, align 4, !tbaa !11
  br label %370

370:                                              ; preds = %411, %359
  %371 = load i32, ptr %40, align 4, !tbaa !11
  %372 = load i32, ptr %36, align 4, !tbaa !11
  %373 = icmp slt i32 %371, %372
  br i1 %373, label %374, label %414

374:                                              ; preds = %370
  %375 = load ptr, ptr %18, align 8, !tbaa !5
  %376 = load i32, ptr %37, align 4, !tbaa !11
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds %struct.HUF_DEltX1, ptr %375, i64 %377
  %379 = load i32, ptr %40, align 4, !tbaa !11
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds %struct.HUF_DEltX1, ptr %378, i64 %380
  %382 = getelementptr inbounds %struct.HUF_DEltX1, ptr %381, i64 0
  %383 = load i64, ptr %45, align 8, !tbaa !9
  call void @MEM_write64(ptr noundef %382, i64 noundef %383)
  %384 = load ptr, ptr %18, align 8, !tbaa !5
  %385 = load i32, ptr %37, align 4, !tbaa !11
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds %struct.HUF_DEltX1, ptr %384, i64 %386
  %388 = load i32, ptr %40, align 4, !tbaa !11
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds %struct.HUF_DEltX1, ptr %387, i64 %389
  %391 = getelementptr inbounds %struct.HUF_DEltX1, ptr %390, i64 4
  %392 = load i64, ptr %45, align 8, !tbaa !9
  call void @MEM_write64(ptr noundef %391, i64 noundef %392)
  %393 = load ptr, ptr %18, align 8, !tbaa !5
  %394 = load i32, ptr %37, align 4, !tbaa !11
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds %struct.HUF_DEltX1, ptr %393, i64 %395
  %397 = load i32, ptr %40, align 4, !tbaa !11
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds %struct.HUF_DEltX1, ptr %396, i64 %398
  %400 = getelementptr inbounds %struct.HUF_DEltX1, ptr %399, i64 8
  %401 = load i64, ptr %45, align 8, !tbaa !9
  call void @MEM_write64(ptr noundef %400, i64 noundef %401)
  %402 = load ptr, ptr %18, align 8, !tbaa !5
  %403 = load i32, ptr %37, align 4, !tbaa !11
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds %struct.HUF_DEltX1, ptr %402, i64 %404
  %406 = load i32, ptr %40, align 4, !tbaa !11
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds %struct.HUF_DEltX1, ptr %405, i64 %407
  %409 = getelementptr inbounds %struct.HUF_DEltX1, ptr %408, i64 12
  %410 = load i64, ptr %45, align 8, !tbaa !9
  call void @MEM_write64(ptr noundef %409, i64 noundef %410)
  br label %411

411:                                              ; preds = %374
  %412 = load i32, ptr %40, align 4, !tbaa !11
  %413 = add nsw i32 %412, 16
  store i32 %413, ptr %40, align 4, !tbaa !11
  br label %370, !llvm.loop !31

414:                                              ; preds = %370
  %415 = load i32, ptr %36, align 4, !tbaa !11
  %416 = load i32, ptr %37, align 4, !tbaa !11
  %417 = add nsw i32 %416, %415
  store i32 %417, ptr %37, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  br label %418

418:                                              ; preds = %414
  %419 = load i32, ptr %39, align 4, !tbaa !11
  %420 = add nsw i32 %419, 1
  store i32 %420, ptr %39, align 4, !tbaa !11
  br label %355, !llvm.loop !32

421:                                              ; preds = %355
  br label %422

422:                                              ; preds = %421, %353, %320, %293, %260
  %423 = load i32, ptr %35, align 4, !tbaa !11
  %424 = load i32, ptr %33, align 4, !tbaa !11
  %425 = add nsw i32 %424, %423
  store i32 %425, ptr %33, align 4, !tbaa !11
  %426 = load i32, ptr %35, align 4, !tbaa !11
  %427 = load i32, ptr %36, align 4, !tbaa !11
  %428 = mul nsw i32 %426, %427
  %429 = load i32, ptr %34, align 4, !tbaa !11
  %430 = add nsw i32 %429, %428
  store i32 %430, ptr %34, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  br label %431

431:                                              ; preds = %422
  %432 = load i32, ptr %32, align 4, !tbaa !11
  %433 = add i32 %432, 1
  store i32 %433, ptr %32, align 4, !tbaa !11
  br label %212, !llvm.loop !33

434:                                              ; preds = %212
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  %435 = load i64, ptr %16, align 8, !tbaa !9
  store i64 %435, ptr %7, align 8
  store i32 1, ptr %20, align 4
  br label %436

436:                                              ; preds = %434, %109, %70, %52
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  %437 = load i64, ptr %7, align 8
  ret i64 %437
}

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

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

; Function Attrs: nounwind uwtable
declare hidden i64 @HUF_DEltX1_set4(i8 noundef zeroext, i8 noundef zeroext) #0

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { inlinehint 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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !7, i64 0}
!14 = !{!"", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3}
!15 = !{!14, !7, i64 1}
!16 = !{!14, !7, i64 2}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!7, !7, i64 0}
!20 = distinct !{!20, !18}
!21 = distinct !{!21, !18}
!22 = distinct !{!22, !18}
!23 = !{!24, !7, i64 1}
!24 = !{!"", !7, i64 0, !7, i64 1}
!25 = !{!24, !7, i64 0}
!26 = !{i64 0, i64 1, !19, i64 1, i64 1, !19}
!27 = distinct !{!27, !18}
!28 = distinct !{!28, !18}
!29 = distinct !{!29, !18}
!30 = distinct !{!30, !18}
!31 = distinct !{!31, !18}
!32 = distinct !{!32, !18}
!33 = distinct !{!33, !18}


; 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.HUF_DEltX1 = type { i8, i8 }

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

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @MEM_write64(ptr noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local noundef i64 @HUF_readDTableX1_wksp(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, i64 noundef %4, i32 noundef %5) local_unnamed_addr #0 {
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #4
  store i32 0, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #4
  store i32 0, ptr %8, align 4, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %0, i64 4
  %10 = icmp ult i64 %4, 1492
  br i1 %10, label %.critedge, label %11

11:                                               ; preds = %6
  %12 = getelementptr inbounds i8, ptr %3, i64 1236
  %13 = getelementptr inbounds i8, ptr %3, i64 104
  %14 = call i64 @HUF_readStats_wksp(ptr noundef nonnull %12, i64 noundef 256, ptr noundef %3, ptr noundef nonnull %8, ptr noundef nonnull %7, ptr noundef %1, i64 noundef %2, ptr noundef nonnull %13, i64 noundef 876, i32 noundef %5)
  %15 = call i32 @ERR_isError(i64 noundef %14)
  %.not = icmp eq i32 %15, 0
  br i1 %.not, label %16, label %.critedge

16:                                               ; preds = %11
  %17 = call i32 @HUF_getDTableDesc(ptr noundef %0)
  %18 = and i32 %17, 255
  %19 = add nuw nsw i32 %18, 1
  %20 = call i32 @llvm.umin.i32(i32 %19, i32 11)
  %21 = load i32, ptr %8, align 4, !tbaa !5
  %22 = load i32, ptr %7, align 4, !tbaa !5
  %23 = call i32 @HUF_rescaleStats(ptr noundef nonnull %12, ptr noundef %3, i32 noundef %21, i32 noundef %22, i32 noundef %20)
  store i32 %23, ptr %7, align 4, !tbaa !5
  %.not165 = icmp ugt i32 %23, %19
  br i1 %.not165, label %.critedge, label %.lr.ph

.lr.ph:                                           ; preds = %16
  %.sroa.0101.0.extract.trunc = trunc i32 %17 to i8
  %.sroa.8.0.extract.shift = lshr i32 %17, 24
  %.sroa.8.0.extract.trunc = trunc nuw i32 %.sroa.8.0.extract.shift to i8
  %24 = trunc i32 %23 to i8
  store i8 %.sroa.0101.0.extract.trunc, ptr %0, align 4
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 1
  store i8 0, ptr %.sroa.6.0..sroa_idx, align 1
  %.sroa.7.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 2
  store i8 %24, ptr %.sroa.7.0..sroa_idx, align 2
  %.sroa.8.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 3
  store i8 %.sroa.8.0.extract.trunc, ptr %.sroa.8.0..sroa_idx, align 1
  %25 = load i32, ptr %8, align 4, !tbaa !5
  %26 = add nsw i32 %25, -3
  %27 = getelementptr inbounds i8, ptr %3, i64 52
  %28 = add nuw nsw i32 %23, 1
  %wide.trip.count = zext nneg i32 %28 to i64
  %xtraiter = and i64 %wide.trip.count, 3
  %29 = icmp ult i32 %23, 3
  br i1 %29, label %.preheader177.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %wide.trip.count, 2147483644
  br label %38

.preheader177.unr-lcssa:                          ; preds = %38, %.lr.ph
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next.3, %38 ]
  %.0149179.unr = phi i32 [ 0, %.lr.ph ], [ %53, %38 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader177, label %.epil.preheader

.epil.preheader:                                  ; preds = %.preheader177.unr-lcssa, %.epil.preheader
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.epil.preheader ], [ %indvars.iv.unr, %.preheader177.unr-lcssa ]
  %.0149179.epil = phi i32 [ %32, %.epil.preheader ], [ %.0149179.unr, %.preheader177.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.preheader177.unr-lcssa ]
  %30 = getelementptr inbounds [13 x i32], ptr %3, i64 0, i64 %indvars.iv.epil
  %31 = load i32, ptr %30, align 4, !tbaa !5
  %32 = add i32 %31, %.0149179.epil
  %33 = getelementptr inbounds [13 x i32], ptr %27, i64 0, i64 %indvars.iv.epil
  store i32 %.0149179.epil, ptr %33, align 4, !tbaa !5
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.preheader177, label %.epil.preheader, !llvm.loop !9

.preheader177:                                    ; preds = %.epil.preheader, %.preheader177.unr-lcssa
  %34 = icmp sgt i32 %25, 3
  br i1 %34, label %.preheader176.lr.ph, label %.preheader175

.preheader176.lr.ph:                              ; preds = %.preheader177
  %35 = getelementptr inbounds i8, ptr %3, i64 980
  %36 = getelementptr inbounds i8, ptr %3, i64 52
  %37 = zext nneg i32 %26 to i64
  br label %.preheader176

38:                                               ; preds = %38, %.lr.ph.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.new ], [ %indvars.iv.next.3, %38 ]
  %.0149179 = phi i32 [ 0, %.lr.ph.new ], [ %53, %38 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %38 ]
  %39 = getelementptr inbounds [13 x i32], ptr %3, i64 0, i64 %indvars.iv
  %40 = load i32, ptr %39, align 4, !tbaa !5
  %41 = add i32 %40, %.0149179
  %42 = getelementptr inbounds [13 x i32], ptr %27, i64 0, i64 %indvars.iv
  store i32 %.0149179, ptr %42, align 4, !tbaa !5
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %43 = getelementptr inbounds [13 x i32], ptr %3, i64 0, i64 %indvars.iv.next
  %44 = load i32, ptr %43, align 4, !tbaa !5
  %45 = add i32 %44, %41
  %46 = getelementptr inbounds [13 x i32], ptr %27, i64 0, i64 %indvars.iv.next
  store i32 %41, ptr %46, align 4, !tbaa !5
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 2
  %47 = getelementptr inbounds [13 x i32], ptr %3, i64 0, i64 %indvars.iv.next.1
  %48 = load i32, ptr %47, align 4, !tbaa !5
  %49 = add i32 %48, %45
  %50 = getelementptr inbounds [13 x i32], ptr %27, i64 0, i64 %indvars.iv.next.1
  store i32 %45, ptr %50, align 4, !tbaa !5
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 3
  %51 = getelementptr inbounds [13 x i32], ptr %3, i64 0, i64 %indvars.iv.next.2
  %52 = load i32, ptr %51, align 4, !tbaa !5
  %53 = add i32 %52, %49
  %54 = getelementptr inbounds [13 x i32], ptr %27, i64 0, i64 %indvars.iv.next.2
  store i32 %49, ptr %54, align 4, !tbaa !5
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.preheader177.unr-lcssa, label %38, !llvm.loop !11

.preheader176:                                    ; preds = %.preheader176.lr.ph, %.preheader176
  %indvars.iv220 = phi i64 [ 0, %.preheader176.lr.ph ], [ %indvars.iv.next221, %.preheader176 ]
  %55 = getelementptr inbounds [256 x i8], ptr %12, i64 0, i64 %indvars.iv220
  %56 = load i8, ptr %55, align 1, !tbaa !13
  %57 = zext i8 %56 to i64
  %58 = trunc i64 %indvars.iv220 to i8
  %59 = getelementptr inbounds [13 x i32], ptr %36, i64 0, i64 %57
  %60 = load i32, ptr %59, align 4, !tbaa !5
  %61 = add i32 %60, 1
  store i32 %61, ptr %59, align 4, !tbaa !5
  %62 = zext i32 %60 to i64
  %63 = getelementptr inbounds [256 x i8], ptr %35, i64 0, i64 %62
  store i8 %58, ptr %63, align 1, !tbaa !13
  %64 = or disjoint i64 %indvars.iv220, 1
  %65 = getelementptr inbounds [256 x i8], ptr %12, i64 0, i64 %64
  %66 = load i8, ptr %65, align 1, !tbaa !13
  %67 = zext i8 %66 to i64
  %68 = trunc i64 %64 to i8
  %69 = getelementptr inbounds [13 x i32], ptr %36, i64 0, i64 %67
  %70 = load i32, ptr %69, align 4, !tbaa !5
  %71 = add i32 %70, 1
  store i32 %71, ptr %69, align 4, !tbaa !5
  %72 = zext i32 %70 to i64
  %73 = getelementptr inbounds [256 x i8], ptr %35, i64 0, i64 %72
  store i8 %68, ptr %73, align 1, !tbaa !13
  %74 = or disjoint i64 %indvars.iv220, 2
  %75 = getelementptr inbounds [256 x i8], ptr %12, i64 0, i64 %74
  %76 = load i8, ptr %75, align 1, !tbaa !13
  %77 = zext i8 %76 to i64
  %78 = trunc i64 %74 to i8
  %79 = getelementptr inbounds [13 x i32], ptr %36, i64 0, i64 %77
  %80 = load i32, ptr %79, align 4, !tbaa !5
  %81 = add i32 %80, 1
  store i32 %81, ptr %79, align 4, !tbaa !5
  %82 = zext i32 %80 to i64
  %83 = getelementptr inbounds [256 x i8], ptr %35, i64 0, i64 %82
  store i8 %78, ptr %83, align 1, !tbaa !13
  %84 = or disjoint i64 %indvars.iv220, 3
  %85 = getelementptr inbounds [256 x i8], ptr %12, i64 0, i64 %84
  %86 = load i8, ptr %85, align 1, !tbaa !13
  %87 = zext i8 %86 to i64
  %88 = trunc i64 %84 to i8
  %89 = getelementptr inbounds [13 x i32], ptr %36, i64 0, i64 %87
  %90 = load i32, ptr %89, align 4, !tbaa !5
  %91 = add i32 %90, 1
  store i32 %91, ptr %89, align 4, !tbaa !5
  %92 = zext i32 %90 to i64
  %93 = getelementptr inbounds [256 x i8], ptr %35, i64 0, i64 %92
  store i8 %88, ptr %93, align 1, !tbaa !13
  %indvars.iv.next221 = add nuw nsw i64 %indvars.iv220, 4
  %94 = icmp ult i64 %indvars.iv.next221, %37
  br i1 %94, label %.preheader176, label %.preheader175.loopexit, !llvm.loop !14

.preheader175.loopexit:                           ; preds = %.preheader176
  %95 = trunc nuw nsw i64 %indvars.iv.next221 to i32
  br label %.preheader175

.preheader175:                                    ; preds = %.preheader175.loopexit, %.preheader177
  %.1148.lcssa = phi i32 [ 0, %.preheader177 ], [ %95, %.preheader175.loopexit ]
  %96 = icmp slt i32 %.1148.lcssa, %25
  br i1 %96, label %.lr.ph184, label %._crit_edge

.lr.ph184:                                        ; preds = %.preheader175
  %97 = getelementptr inbounds i8, ptr %3, i64 980
  %98 = getelementptr inbounds i8, ptr %3, i64 52
  %99 = zext i32 %.1148.lcssa to i64
  %wide.trip.count226 = zext i32 %25 to i64
  %100 = sub nsw i64 %wide.trip.count226, %99
  %xtraiter302 = and i64 %100, 1
  %lcmp.mod303.not = icmp eq i64 %xtraiter302, 0
  br i1 %lcmp.mod303.not, label %.prol.loopexit, label %.prol.loopexit.unr-lcssa

.prol.loopexit.unr-lcssa:                         ; preds = %.lr.ph184
  %101 = getelementptr inbounds [256 x i8], ptr %12, i64 0, i64 %99
  %102 = load i8, ptr %101, align 1, !tbaa !13
  %103 = zext i8 %102 to i64
  %104 = trunc i32 %.1148.lcssa to i8
  %105 = getelementptr inbounds [13 x i32], ptr %98, i64 0, i64 %103
  %106 = load i32, ptr %105, align 4, !tbaa !5
  %107 = add i32 %106, 1
  store i32 %107, ptr %105, align 4, !tbaa !5
  %108 = zext i32 %106 to i64
  %109 = getelementptr inbounds [256 x i8], ptr %97, i64 0, i64 %108
  store i8 %104, ptr %109, align 1, !tbaa !13
  %indvars.iv.next224.prol = add nuw nsw i64 %99, 1
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.lr.ph184
  %indvars.iv223.unr = phi i64 [ %99, %.lr.ph184 ], [ %indvars.iv.next224.prol, %.prol.loopexit.unr-lcssa ]
  %110 = add nsw i64 %wide.trip.count226, -1
  %111 = icmp eq i64 %110, %99
  br i1 %111, label %._crit_edge, label %.lr.ph184.new

.lr.ph184.new:                                    ; preds = %.prol.loopexit, %.lr.ph184.new
  %indvars.iv223 = phi i64 [ %indvars.iv.next224.1, %.lr.ph184.new ], [ %indvars.iv223.unr, %.prol.loopexit ]
  %112 = getelementptr inbounds [256 x i8], ptr %12, i64 0, i64 %indvars.iv223
  %113 = load i8, ptr %112, align 1, !tbaa !13
  %114 = zext i8 %113 to i64
  %115 = trunc i64 %indvars.iv223 to i8
  %116 = getelementptr inbounds [13 x i32], ptr %98, i64 0, i64 %114
  %117 = load i32, ptr %116, align 4, !tbaa !5
  %118 = add i32 %117, 1
  store i32 %118, ptr %116, align 4, !tbaa !5
  %119 = zext i32 %117 to i64
  %120 = getelementptr inbounds [256 x i8], ptr %97, i64 0, i64 %119
  store i8 %115, ptr %120, align 1, !tbaa !13
  %indvars.iv.next224 = add nuw nsw i64 %indvars.iv223, 1
  %121 = getelementptr inbounds [256 x i8], ptr %12, i64 0, i64 %indvars.iv.next224
  %122 = load i8, ptr %121, align 1, !tbaa !13
  %123 = zext i8 %122 to i64
  %124 = trunc i64 %indvars.iv.next224 to i8
  %125 = getelementptr inbounds [13 x i32], ptr %98, i64 0, i64 %123
  %126 = load i32, ptr %125, align 4, !tbaa !5
  %127 = add i32 %126, 1
  store i32 %127, ptr %125, align 4, !tbaa !5
  %128 = zext i32 %126 to i64
  %129 = getelementptr inbounds [256 x i8], ptr %97, i64 0, i64 %128
  store i8 %124, ptr %129, align 1, !tbaa !13
  %indvars.iv.next224.1 = add nuw nsw i64 %indvars.iv223, 2
  %exitcond227.not.1 = icmp eq i64 %indvars.iv.next224.1, %wide.trip.count226
  br i1 %exitcond227.not.1, label %._crit_edge, label %.lr.ph184.new, !llvm.loop !15

._crit_edge:                                      ; preds = %.prol.loopexit, %.lr.ph184.new, %.preheader175
  %130 = add i32 %23, 1
  %131 = icmp ugt i32 %130, 1
  br i1 %131, label %.lr.ph210, label %.critedge

.lr.ph210:                                        ; preds = %._crit_edge
  %132 = load i32, ptr %3, align 4, !tbaa !5
  %133 = getelementptr inbounds i8, ptr %3, i64 980
  %scevgep = getelementptr i8, ptr %0, i64 4
  %scevgep288 = getelementptr i8, ptr %0, i64 4
  %scevgep290 = getelementptr i8, ptr %3, i64 980
  %scevgep292 = getelementptr i8, ptr %3, i64 980
  %invariant.gep = getelementptr i8, ptr %9, i64 16
  br label %134

134:                                              ; preds = %.lr.ph210, %.loopexit
  %indvars.iv276 = phi i64 [ 1, %.lr.ph210 ], [ %indvars.iv.next277, %.loopexit ]
  %135 = phi i32 [ %130, %.lr.ph210 ], [ %224, %.loopexit ]
  %.0161206 = phi i32 [ %132, %.lr.ph210 ], [ %220, %.loopexit ]
  %.0162204 = phi i32 [ 0, %.lr.ph210 ], [ %222, %.loopexit ]
  %136 = getelementptr inbounds [13 x i32], ptr %3, i64 0, i64 %indvars.iv276
  %137 = load i32, ptr %136, align 4, !tbaa !5
  %138 = trunc nuw i64 %indvars.iv276 to i32
  %139 = shl nuw i32 1, %138
  %140 = ashr exact i32 %139, 1
  %141 = sub i32 %135, %138
  %142 = trunc i32 %141 to i8
  %143 = icmp sgt i32 %137, 0
  switch i32 %140, label %.preheader [
    i32 1, label %.preheader167
    i32 2, label %.preheader169
    i32 4, label %.preheader171
    i32 8, label %.preheader173
  ]

.preheader173:                                    ; preds = %134
  br i1 %143, label %.lr.ph187.preheader, label %.loopexit

.lr.ph187.preheader:                              ; preds = %.preheader173
  %144 = sext i32 %.0161206 to i64
  %145 = sext i32 %.0162204 to i64
  %wide.trip.count235 = zext nneg i32 %137 to i64
  br label %.lr.ph187

.preheader171:                                    ; preds = %134
  br i1 %143, label %.lr.ph190.preheader, label %.loopexit

.lr.ph190.preheader:                              ; preds = %.preheader171
  %146 = sext i32 %.0161206 to i64
  %147 = sext i32 %.0162204 to i64
  %wide.trip.count244 = zext nneg i32 %137 to i64
  br label %.lr.ph190

.preheader169:                                    ; preds = %134
  br i1 %143, label %.lr.ph193.preheader, label %.loopexit

.lr.ph193.preheader:                              ; preds = %.preheader169
  %148 = sext i32 %.0161206 to i64
  %149 = sext i32 %.0162204 to i64
  %wide.trip.count253 = zext nneg i32 %137 to i64
  %xtraiter304 = and i64 %wide.trip.count253, 1
  %150 = icmp eq i32 %137, 1
  br i1 %150, label %.loopexit.loopexit299.unr-lcssa, label %.lr.ph193.preheader.new

.lr.ph193.preheader.new:                          ; preds = %.lr.ph193.preheader
  %unroll_iter307 = and i64 %wide.trip.count253, 2147483646
  br label %.lr.ph193

.preheader167:                                    ; preds = %134
  br i1 %143, label %.lr.ph196.preheader, label %.loopexit

.lr.ph196.preheader:                              ; preds = %.preheader167
  %151 = sext i32 %.0161206 to i64
  %152 = sext i32 %.0162204 to i64
  %wide.trip.count262 = zext nneg i32 %137 to i64
  %min.iters.check = icmp ult i32 %137, 16
  br i1 %min.iters.check, label %.lr.ph196.preheader297, label %vector.memcheck

.lr.ph196.preheader297:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph196.preheader
  %indvars.iv257.ph = phi i64 [ %152, %vector.memcheck ], [ %152, %.lr.ph196.preheader ], [ %ind.end, %middle.block ]
  %indvars.iv255.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph196.preheader ], [ %n.vec, %middle.block ]
  %xtraiter309 = and i64 %wide.trip.count262, 1
  %lcmp.mod310.not = icmp eq i64 %xtraiter309, 0
  br i1 %lcmp.mod310.not, label %.lr.ph196.prol.loopexit, label %.lr.ph196.prol

.lr.ph196.prol:                                   ; preds = %.lr.ph196.preheader297
  %153 = add nsw i64 %indvars.iv255.ph, %151
  %154 = getelementptr inbounds [256 x i8], ptr %133, i64 0, i64 %153
  %155 = load i8, ptr %154, align 1, !tbaa !13
  %156 = getelementptr inbounds %struct.HUF_DEltX1, ptr %9, i64 %indvars.iv257.ph
  store i8 %142, ptr %156, align 1, !tbaa !13
  %.sroa.4.0..sroa_idx.prol = getelementptr inbounds i8, ptr %156, i64 1
  store i8 %155, ptr %.sroa.4.0..sroa_idx.prol, align 1, !tbaa !13
  %indvars.iv.next258.prol = add nsw i64 %indvars.iv257.ph, 1
  %indvars.iv.next256.prol = or disjoint i64 %indvars.iv255.ph, 1
  br label %.lr.ph196.prol.loopexit

.lr.ph196.prol.loopexit:                          ; preds = %.lr.ph196.prol, %.lr.ph196.preheader297
  %indvars.iv257.unr = phi i64 [ %indvars.iv257.ph, %.lr.ph196.preheader297 ], [ %indvars.iv.next258.prol, %.lr.ph196.prol ]
  %indvars.iv255.unr = phi i64 [ %indvars.iv255.ph, %.lr.ph196.preheader297 ], [ %indvars.iv.next256.prol, %.lr.ph196.prol ]
  %157 = add nsw i64 %wide.trip.count262, -1
  %158 = icmp eq i64 %indvars.iv255.ph, %157
  br i1 %158, label %.loopexit, label %.lr.ph196

vector.memcheck:                                  ; preds = %.lr.ph196.preheader
  %159 = shl nsw i64 %152, 1
  %scevgep287 = getelementptr i8, ptr %scevgep, i64 %159
  %160 = add nsw i64 %152, %wide.trip.count262
  %161 = shl nsw i64 %160, 1
  %scevgep289 = getelementptr i8, ptr %scevgep288, i64 %161
  %scevgep291 = getelementptr i8, ptr %scevgep290, i64 %151
  %162 = getelementptr i8, ptr %scevgep292, i64 %151
  %scevgep293 = getelementptr i8, ptr %162, i64 %wide.trip.count262
  %bound0 = icmp ult ptr %scevgep287, %scevgep293
  %bound1 = icmp ult ptr %scevgep291, %scevgep289
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph196.preheader297, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %wide.trip.count262, 2147483632
  %ind.end = add nsw i64 %n.vec, %152
  %broadcast.splatinsert = insertelement <8 x i8> poison, i8 %142, i64 0
  %broadcast.splat = shufflevector <8 x i8> %broadcast.splatinsert, <8 x i8> poison, <8 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = add i64 %index, %152
  %163 = add nsw i64 %index, %151
  %164 = getelementptr inbounds [256 x i8], ptr %133, i64 0, i64 %163
  %165 = getelementptr inbounds i8, ptr %164, i64 8
  %wide.load = load <8 x i8>, ptr %164, align 1, !tbaa !13, !alias.scope !16
  %wide.load295 = load <8 x i8>, ptr %165, align 1, !tbaa !13, !alias.scope !16
  %166 = getelementptr inbounds %struct.HUF_DEltX1, ptr %9, i64 %offset.idx
  %gep = getelementptr %struct.HUF_DEltX1, ptr %invariant.gep, i64 %offset.idx
  %interleaved.vec = shufflevector <8 x i8> %broadcast.splat, <8 x i8> %wide.load, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
  store <16 x i8> %interleaved.vec, ptr %166, align 1, !tbaa !13
  %interleaved.vec296 = shufflevector <8 x i8> %broadcast.splat, <8 x i8> %wide.load295, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
  store <16 x i8> %interleaved.vec296, ptr %gep, align 1, !tbaa !13
  %index.next = add nuw i64 %index, 16
  %167 = icmp eq i64 %index.next, %n.vec
  br i1 %167, label %middle.block, label %vector.body, !llvm.loop !19

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count262
  br i1 %cmp.n, label %.loopexit, label %.lr.ph196.preheader297

.preheader:                                       ; preds = %134
  br i1 %143, label %.lr.ph203, label %.loopexit

.lr.ph203:                                        ; preds = %.preheader
  %168 = icmp sgt i32 %140, 0
  %169 = sext i32 %140 to i64
  %170 = sext i32 %.0161206 to i64
  %171 = sext i32 %.0162204 to i64
  %wide.trip.count274 = zext nneg i32 %137 to i64
  br label %203

.lr.ph196:                                        ; preds = %.lr.ph196.prol.loopexit, %.lr.ph196
  %indvars.iv257 = phi i64 [ %indvars.iv.next258.1, %.lr.ph196 ], [ %indvars.iv257.unr, %.lr.ph196.prol.loopexit ]
  %indvars.iv255 = phi i64 [ %indvars.iv.next256.1, %.lr.ph196 ], [ %indvars.iv255.unr, %.lr.ph196.prol.loopexit ]
  %172 = add nsw i64 %indvars.iv255, %151
  %173 = getelementptr inbounds [256 x i8], ptr %133, i64 0, i64 %172
  %174 = load i8, ptr %173, align 1, !tbaa !13
  %175 = getelementptr inbounds %struct.HUF_DEltX1, ptr %9, i64 %indvars.iv257
  store i8 %142, ptr %175, align 1, !tbaa !13
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %175, i64 1
  store i8 %174, ptr %.sroa.4.0..sroa_idx, align 1, !tbaa !13
  %indvars.iv.next256 = add nuw nsw i64 %indvars.iv255, 1
  %176 = add nsw i64 %indvars.iv.next256, %151
  %177 = getelementptr inbounds [256 x i8], ptr %133, i64 0, i64 %176
  %178 = load i8, ptr %177, align 1, !tbaa !13
  %179 = getelementptr %struct.HUF_DEltX1, ptr %9, i64 %indvars.iv257
  %180 = getelementptr i8, ptr %179, i64 2
  store i8 %142, ptr %180, align 1, !tbaa !13
  %.sroa.4.0..sroa_idx.1 = getelementptr i8, ptr %179, i64 3
  store i8 %178, ptr %.sroa.4.0..sroa_idx.1, align 1, !tbaa !13
  %indvars.iv.next258.1 = add nsw i64 %indvars.iv257, 2
  %indvars.iv.next256.1 = add nuw nsw i64 %indvars.iv255, 2
  %exitcond263.not.1 = icmp eq i64 %indvars.iv.next256.1, %wide.trip.count262
  br i1 %exitcond263.not.1, label %.loopexit, label %.lr.ph196, !llvm.loop !22

.lr.ph193:                                        ; preds = %.lr.ph193, %.lr.ph193.preheader.new
  %indvars.iv248 = phi i64 [ %149, %.lr.ph193.preheader.new ], [ %indvars.iv.next249.1, %.lr.ph193 ]
  %indvars.iv246 = phi i64 [ 0, %.lr.ph193.preheader.new ], [ %indvars.iv.next247.1, %.lr.ph193 ]
  %niter308 = phi i64 [ 0, %.lr.ph193.preheader.new ], [ %niter308.next.1, %.lr.ph193 ]
  %181 = add nsw i64 %indvars.iv246, %148
  %182 = getelementptr inbounds [256 x i8], ptr %133, i64 0, i64 %181
  %183 = load i8, ptr %182, align 1, !tbaa !13
  %184 = getelementptr inbounds %struct.HUF_DEltX1, ptr %9, i64 %indvars.iv248
  store i8 %142, ptr %184, align 1, !tbaa !13
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %184, i64 1
  store i8 %183, ptr %.sroa.5.0..sroa_idx, align 1, !tbaa !13
  %185 = getelementptr i8, ptr %184, i64 2
  store i8 %142, ptr %185, align 1, !tbaa !13
  %.sroa.5.0..sroa_idx8 = getelementptr i8, ptr %184, i64 3
  store i8 %183, ptr %.sroa.5.0..sroa_idx8, align 1, !tbaa !13
  %indvars.iv.next247 = or disjoint i64 %indvars.iv246, 1
  %186 = add nsw i64 %indvars.iv.next247, %148
  %187 = getelementptr inbounds [256 x i8], ptr %133, i64 0, i64 %186
  %188 = load i8, ptr %187, align 1, !tbaa !13
  %189 = getelementptr %struct.HUF_DEltX1, ptr %9, i64 %indvars.iv248
  %190 = getelementptr i8, ptr %189, i64 4
  store i8 %142, ptr %190, align 1, !tbaa !13
  %.sroa.5.0..sroa_idx.1 = getelementptr i8, ptr %189, i64 5
  store i8 %188, ptr %.sroa.5.0..sroa_idx.1, align 1, !tbaa !13
  %191 = getelementptr i8, ptr %189, i64 6
  store i8 %142, ptr %191, align 1, !tbaa !13
  %.sroa.5.0..sroa_idx8.1 = getelementptr i8, ptr %189, i64 7
  store i8 %188, ptr %.sroa.5.0..sroa_idx8.1, align 1, !tbaa !13
  %indvars.iv.next249.1 = add nsw i64 %indvars.iv248, 4
  %indvars.iv.next247.1 = add nuw nsw i64 %indvars.iv246, 2
  %niter308.next.1 = add i64 %niter308, 2
  %niter308.ncmp.1 = icmp eq i64 %niter308.next.1, %unroll_iter307
  br i1 %niter308.ncmp.1, label %.loopexit.loopexit299.unr-lcssa, label %.lr.ph193, !llvm.loop !23

.lr.ph190:                                        ; preds = %.lr.ph190.preheader, %.lr.ph190
  %indvars.iv239 = phi i64 [ %147, %.lr.ph190.preheader ], [ %indvars.iv.next240, %.lr.ph190 ]
  %indvars.iv237 = phi i64 [ 0, %.lr.ph190.preheader ], [ %indvars.iv.next238, %.lr.ph190 ]
  %192 = add nsw i64 %indvars.iv237, %146
  %193 = getelementptr inbounds [256 x i8], ptr %133, i64 0, i64 %192
  %194 = load i8, ptr %193, align 1, !tbaa !13
  %195 = call i64 @HUF_DEltX1_set4(i8 noundef zeroext %194, i8 noundef zeroext %142)
  %196 = getelementptr inbounds %struct.HUF_DEltX1, ptr %9, i64 %indvars.iv239
  call void @MEM_write64(ptr noundef nonnull %196, i64 noundef %195)
  %indvars.iv.next240 = add nsw i64 %indvars.iv239, 4
  %indvars.iv.next238 = add nuw nsw i64 %indvars.iv237, 1
  %exitcond245.not = icmp eq i64 %indvars.iv.next238, %wide.trip.count244
  br i1 %exitcond245.not, label %.loopexit, label %.lr.ph190, !llvm.loop !24

.lr.ph187:                                        ; preds = %.lr.ph187.preheader, %.lr.ph187
  %indvars.iv230 = phi i64 [ %145, %.lr.ph187.preheader ], [ %indvars.iv.next231, %.lr.ph187 ]
  %indvars.iv228 = phi i64 [ 0, %.lr.ph187.preheader ], [ %indvars.iv.next229, %.lr.ph187 ]
  %197 = add nsw i64 %indvars.iv228, %144
  %198 = getelementptr inbounds [256 x i8], ptr %133, i64 0, i64 %197
  %199 = load i8, ptr %198, align 1, !tbaa !13
  %200 = call i64 @HUF_DEltX1_set4(i8 noundef zeroext %199, i8 noundef zeroext %142)
  %201 = getelementptr inbounds %struct.HUF_DEltX1, ptr %9, i64 %indvars.iv230
  call void @MEM_write64(ptr noundef nonnull %201, i64 noundef %200)
  %202 = getelementptr inbounds i8, ptr %201, i64 8
  call void @MEM_write64(ptr noundef nonnull %202, i64 noundef %200)
  %indvars.iv.next231 = add nsw i64 %indvars.iv230, 8
  %indvars.iv.next229 = add nuw nsw i64 %indvars.iv228, 1
  %exitcond236.not = icmp eq i64 %indvars.iv.next229, %wide.trip.count235
  br i1 %exitcond236.not, label %.loopexit, label %.lr.ph187, !llvm.loop !25

203:                                              ; preds = %.lr.ph203, %._crit_edge200
  %indvars.iv269 = phi i64 [ %171, %.lr.ph203 ], [ %indvars.iv.next270, %._crit_edge200 ]
  %indvars.iv267 = phi i64 [ 0, %.lr.ph203 ], [ %indvars.iv.next268, %._crit_edge200 ]
  %204 = add nsw i64 %indvars.iv267, %170
  %205 = getelementptr inbounds [256 x i8], ptr %133, i64 0, i64 %204
  %206 = load i8, ptr %205, align 1, !tbaa !13
  %207 = call i64 @HUF_DEltX1_set4(i8 noundef zeroext %206, i8 noundef zeroext %142)
  br i1 %168, label %.lr.ph199, label %._crit_edge200

.lr.ph199:                                        ; preds = %203
  %208 = getelementptr inbounds %struct.HUF_DEltX1, ptr %9, i64 %indvars.iv269
  br label %209

209:                                              ; preds = %.lr.ph199, %209
  %indvars.iv264 = phi i64 [ 0, %.lr.ph199 ], [ %indvars.iv.next265, %209 ]
  %210 = getelementptr inbounds %struct.HUF_DEltX1, ptr %208, i64 %indvars.iv264
  call void @MEM_write64(ptr noundef nonnull %210, i64 noundef %207)
  %211 = getelementptr inbounds i8, ptr %210, i64 8
  call void @MEM_write64(ptr noundef nonnull %211, i64 noundef %207)
  %212 = getelementptr inbounds i8, ptr %210, i64 16
  call void @MEM_write64(ptr noundef nonnull %212, i64 noundef %207)
  %213 = getelementptr inbounds i8, ptr %210, i64 24
  call void @MEM_write64(ptr noundef nonnull %213, i64 noundef %207)
  %indvars.iv.next265 = add nuw nsw i64 %indvars.iv264, 16
  %214 = icmp slt i64 %indvars.iv.next265, %169
  br i1 %214, label %209, label %._crit_edge200, !llvm.loop !26

._crit_edge200:                                   ; preds = %209, %203
  %indvars.iv.next270 = add nsw i64 %indvars.iv269, %169
  %indvars.iv.next268 = add nuw nsw i64 %indvars.iv267, 1
  %exitcond275.not = icmp eq i64 %indvars.iv.next268, %wide.trip.count274
  br i1 %exitcond275.not, label %.loopexit, label %203, !llvm.loop !27

.loopexit.loopexit299.unr-lcssa:                  ; preds = %.lr.ph193, %.lr.ph193.preheader
  %indvars.iv248.unr = phi i64 [ %149, %.lr.ph193.preheader ], [ %indvars.iv.next249.1, %.lr.ph193 ]
  %indvars.iv246.unr = phi i64 [ 0, %.lr.ph193.preheader ], [ %indvars.iv.next247.1, %.lr.ph193 ]
  %lcmp.mod306.not = icmp eq i64 %xtraiter304, 0
  br i1 %lcmp.mod306.not, label %.loopexit, label %.lr.ph193.epil

.lr.ph193.epil:                                   ; preds = %.loopexit.loopexit299.unr-lcssa
  %215 = add nsw i64 %indvars.iv246.unr, %148
  %216 = getelementptr inbounds [256 x i8], ptr %133, i64 0, i64 %215
  %217 = load i8, ptr %216, align 1, !tbaa !13
  %218 = getelementptr inbounds %struct.HUF_DEltX1, ptr %9, i64 %indvars.iv248.unr
  store i8 %142, ptr %218, align 1, !tbaa !13
  %.sroa.5.0..sroa_idx.epil = getelementptr inbounds i8, ptr %218, i64 1
  store i8 %217, ptr %.sroa.5.0..sroa_idx.epil, align 1, !tbaa !13
  %219 = getelementptr i8, ptr %218, i64 2
  store i8 %142, ptr %219, align 1, !tbaa !13
  %.sroa.5.0..sroa_idx8.epil = getelementptr i8, ptr %218, i64 3
  store i8 %217, ptr %.sroa.5.0..sroa_idx8.epil, align 1, !tbaa !13
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph187, %.lr.ph190, %.lr.ph193.epil, %.loopexit.loopexit299.unr-lcssa, %.lr.ph196.prol.loopexit, %.lr.ph196, %._crit_edge200, %middle.block, %.preheader173, %.preheader171, %.preheader169, %.preheader167, %.preheader
  %220 = add nsw i32 %137, %.0161206
  %221 = mul nsw i32 %137, %140
  %222 = add nsw i32 %221, %.0162204
  %indvars.iv.next277 = add nuw nsw i64 %indvars.iv276, 1
  %223 = load i32, ptr %7, align 4, !tbaa !5
  %224 = add i32 %223, 1
  %225 = zext i32 %224 to i64
  %226 = icmp ult i64 %indvars.iv.next277, %225
  br i1 %226, label %134, label %.critedge, !llvm.loop !28

.critedge:                                        ; preds = %.loopexit, %._crit_edge, %16, %11, %6
  %.1 = phi i64 [ -44, %6 ], [ %14, %11 ], [ -44, %16 ], [ %14, %._crit_edge ], [ %14, %.loopexit ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #4
  ret i64 %.1
}

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

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

; Function Attrs: nounwind uwtable
declare hidden i64 @HUF_DEltX1_set4(i8 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #0

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint 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 nosync nounwind speculatable willreturn memory(none) }
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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.unroll.disable"}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !12}
!15 = distinct !{!15, !12}
!16 = !{!17}
!17 = distinct !{!17, !18}
!18 = distinct !{!18, !"LVerDomain"}
!19 = distinct !{!19, !12, !20, !21}
!20 = !{!"llvm.loop.isvectorized", i32 1}
!21 = !{!"llvm.loop.unroll.runtime.disable"}
!22 = distinct !{!22, !12, !20}
!23 = distinct !{!23, !12}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}
!26 = distinct !{!26, !12}
!27 = distinct !{!27, !12}
!28 = distinct !{!28, !12}


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