; LLVM IR from VoidRune/Audio-engine :: src (minivorbis)

; 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.static_codebook = type { i64, i64, ptr, i32, i64, i64, i32, i32, ptr, i32 }
%struct.codebook = type { i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32 }

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

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #1

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

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

; Function Attrs: nounwind
declare void @free(ptr noundef) #3

; Function Attrs: nounwind allocsize(0,1)
declare noalias ptr @calloc(i64 noundef, i64 noundef) #4

declare void @qsort(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #5

; Function Attrs: nounwind uwtable
declare dso_local i32 @ov_ilog(i32 noundef) #6

; Function Attrs: nounwind uwtable
declare dso_local void @vorbis_book_clear(ptr noundef) #6

; Function Attrs: nounwind uwtable
declare dso_local ptr @_make_words(ptr noundef, i64 noundef, i64 noundef) #6

; Function Attrs: nounwind uwtable
declare dso_local ptr @_book_unquantize(ptr noundef, i32 noundef, ptr noundef) #6

; Function Attrs: nounwind uwtable
define dso_local i32 @vorbis_book_init_decode(ptr noundef %0, ptr noundef %1) #6 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i32, align 4
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  store i32 0, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  %22 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr align 8 %22, i8 0, i64 96, i1 false)
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %23

23:                                               ; preds = %44, %2
  %24 = load i32, ptr %6, align 4, !tbaa !9
  %25 = sext i32 %24 to i64
  %26 = load ptr, ptr %5, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.static_codebook, ptr %26, i32 0, i32 1
  %28 = load i64, ptr %27, align 8, !tbaa !11
  %29 = icmp slt i64 %25, %28
  br i1 %29, label %30, label %47

30:                                               ; preds = %23
  %31 = load ptr, ptr %5, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.static_codebook, ptr %31, i32 0, i32 2
  %33 = load ptr, ptr %32, align 8, !tbaa !14
  %34 = load i32, ptr %6, align 4, !tbaa !9
  %35 = sext i32 %34 to i64
  %36 = getelementptr inbounds i8, ptr %33, i64 %35
  %37 = load i8, ptr %36, align 1, !tbaa !15
  %38 = sext i8 %37 to i32
  %39 = icmp sgt i32 %38, 0
  br i1 %39, label %40, label %43

40:                                               ; preds = %30
  %41 = load i32, ptr %8, align 4, !tbaa !9
  %42 = add nsw i32 %41, 1
  store i32 %42, ptr %8, align 4, !tbaa !9
  br label %43

43:                                               ; preds = %40, %30
  br label %44

44:                                               ; preds = %43
  %45 = load i32, ptr %6, align 4, !tbaa !9
  %46 = add nsw i32 %45, 1
  store i32 %46, ptr %6, align 4, !tbaa !9
  br label %23, !llvm.loop !16

47:                                               ; preds = %23
  %48 = load ptr, ptr %5, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.static_codebook, ptr %48, i32 0, i32 1
  %50 = load i64, ptr %49, align 8, !tbaa !11
  %51 = load ptr, ptr %4, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.codebook, ptr %51, i32 0, i32 1
  store i64 %50, ptr %52, align 8, !tbaa !18
  %53 = load i32, ptr %8, align 4, !tbaa !9
  %54 = sext i32 %53 to i64
  %55 = load ptr, ptr %4, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.codebook, ptr %55, i32 0, i32 2
  store i64 %54, ptr %56, align 8, !tbaa !20
  %57 = load ptr, ptr %5, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.static_codebook, ptr %57, i32 0, i32 0
  %59 = load i64, ptr %58, align 8, !tbaa !21
  %60 = load ptr, ptr %4, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.codebook, ptr %60, i32 0, i32 0
  store i64 %59, ptr %61, align 8, !tbaa !22
  %62 = load i32, ptr %8, align 4, !tbaa !9
  %63 = icmp sgt i32 %62, 0
  br i1 %63, label %64, label %526

64:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.static_codebook, ptr %65, i32 0, i32 2
  %67 = load ptr, ptr %66, align 8, !tbaa !14
  %68 = load ptr, ptr %5, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.static_codebook, ptr %68, i32 0, i32 1
  %70 = load i64, ptr %69, align 8, !tbaa !11
  %71 = load ptr, ptr %4, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.codebook, ptr %71, i32 0, i32 2
  %73 = load i64, ptr %72, align 8, !tbaa !20
  %74 = call ptr @_make_words(ptr noundef %67, i64 noundef %70, i64 noundef %73)
  store ptr %74, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %75 = load i32, ptr %8, align 4, !tbaa !9
  %76 = sext i32 %75 to i64
  %77 = mul i64 8, %76
  %78 = alloca i8, i64 %77, align 16
  store ptr %78, ptr %12, align 8, !tbaa !5
  %79 = load ptr, ptr %11, align 8, !tbaa !5
  %80 = icmp eq ptr %79, null
  br i1 %80, label %81, label %82

81:                                               ; preds = %64
  store i32 5, ptr %21, align 4
  br label %523

82:                                               ; preds = %64
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %83

83:                                               ; preds = %106, %82
  %84 = load i32, ptr %6, align 4, !tbaa !9
  %85 = load i32, ptr %8, align 4, !tbaa !9
  %86 = icmp slt i32 %84, %85
  br i1 %86, label %87, label %109

87:                                               ; preds = %83
  %88 = load ptr, ptr %11, align 8, !tbaa !5
  %89 = load i32, ptr %6, align 4, !tbaa !9
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds i32, ptr %88, i64 %90
  %92 = load i32, ptr %91, align 4, !tbaa !9
  %93 = call i32 @bitreverse(i32 noundef %92)
  %94 = load ptr, ptr %11, align 8, !tbaa !5
  %95 = load i32, ptr %6, align 4, !tbaa !9
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds i32, ptr %94, i64 %96
  store i32 %93, ptr %97, align 4, !tbaa !9
  %98 = load ptr, ptr %11, align 8, !tbaa !5
  %99 = load i32, ptr %6, align 4, !tbaa !9
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds i32, ptr %98, i64 %100
  %102 = load ptr, ptr %12, align 8, !tbaa !5
  %103 = load i32, ptr %6, align 4, !tbaa !9
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds ptr, ptr %102, i64 %104
  store ptr %101, ptr %105, align 8, !tbaa !5
  br label %106

106:                                              ; preds = %87
  %107 = load i32, ptr %6, align 4, !tbaa !9
  %108 = add nsw i32 %107, 1
  store i32 %108, ptr %6, align 4, !tbaa !9
  br label %83, !llvm.loop !23

109:                                              ; preds = %83
  %110 = load ptr, ptr %12, align 8, !tbaa !5
  %111 = load i32, ptr %8, align 4, !tbaa !9
  %112 = sext i32 %111 to i64
  call void @qsort(ptr noundef %110, i64 noundef %112, i64 noundef 8, ptr noundef @sort32a)
  %113 = load i32, ptr %8, align 4, !tbaa !9
  %114 = sext i32 %113 to i64
  %115 = mul i64 %114, 4
  %116 = alloca i8, i64 %115, align 16
  store ptr %116, ptr %10, align 8, !tbaa !5
  %117 = load i32, ptr %8, align 4, !tbaa !9
  %118 = sext i32 %117 to i64
  %119 = mul i64 %118, 4
  %120 = call noalias ptr @malloc(i64 noundef %119) #8
  %121 = load ptr, ptr %4, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.codebook, ptr %121, i32 0, i32 5
  store ptr %120, ptr %122, align 8, !tbaa !24
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %123

123:                                              ; preds = %144, %109
  %124 = load i32, ptr %6, align 4, !tbaa !9
  %125 = load i32, ptr %8, align 4, !tbaa !9
  %126 = icmp slt i32 %124, %125
  br i1 %126, label %127, label %147

127:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  %128 = load ptr, ptr %12, align 8, !tbaa !5
  %129 = load i32, ptr %6, align 4, !tbaa !9
  %130 = sext i32 %129 to i64
  %131 = getelementptr inbounds ptr, ptr %128, i64 %130
  %132 = load ptr, ptr %131, align 8, !tbaa !5
  %133 = load ptr, ptr %11, align 8, !tbaa !5
  %134 = ptrtoint ptr %132 to i64
  %135 = ptrtoint ptr %133 to i64
  %136 = sub i64 %134, %135
  %137 = sdiv exact i64 %136, 4
  %138 = trunc i64 %137 to i32
  store i32 %138, ptr %13, align 4, !tbaa !9
  %139 = load i32, ptr %6, align 4, !tbaa !9
  %140 = load ptr, ptr %10, align 8, !tbaa !5
  %141 = load i32, ptr %13, align 4, !tbaa !9
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds i32, ptr %140, i64 %142
  store i32 %139, ptr %143, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  br label %144

144:                                              ; preds = %127
  %145 = load i32, ptr %6, align 4, !tbaa !9
  %146 = add nsw i32 %145, 1
  store i32 %146, ptr %6, align 4, !tbaa !9
  br label %123, !llvm.loop !25

147:                                              ; preds = %123
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %148

148:                                              ; preds = %168, %147
  %149 = load i32, ptr %6, align 4, !tbaa !9
  %150 = load i32, ptr %8, align 4, !tbaa !9
  %151 = icmp slt i32 %149, %150
  br i1 %151, label %152, label %171

152:                                              ; preds = %148
  %153 = load ptr, ptr %11, align 8, !tbaa !5
  %154 = load i32, ptr %6, align 4, !tbaa !9
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds i32, ptr %153, i64 %155
  %157 = load i32, ptr %156, align 4, !tbaa !9
  %158 = load ptr, ptr %4, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.codebook, ptr %158, i32 0, i32 5
  %160 = load ptr, ptr %159, align 8, !tbaa !24
  %161 = load ptr, ptr %10, align 8, !tbaa !5
  %162 = load i32, ptr %6, align 4, !tbaa !9
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds i32, ptr %161, i64 %163
  %165 = load i32, ptr %164, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds i32, ptr %160, i64 %166
  store i32 %157, ptr %167, align 4, !tbaa !9
  br label %168

168:                                              ; preds = %152
  %169 = load i32, ptr %6, align 4, !tbaa !9
  %170 = add nsw i32 %169, 1
  store i32 %170, ptr %6, align 4, !tbaa !9
  br label %148, !llvm.loop !26

171:                                              ; preds = %148
  %172 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free(ptr noundef %172) #7
  %173 = load ptr, ptr %5, align 8, !tbaa !5
  %174 = load i32, ptr %8, align 4, !tbaa !9
  %175 = load ptr, ptr %10, align 8, !tbaa !5
  %176 = call ptr @_book_unquantize(ptr noundef %173, i32 noundef %174, ptr noundef %175)
  %177 = load ptr, ptr %4, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.codebook, ptr %177, i32 0, i32 4
  store ptr %176, ptr %178, align 8, !tbaa !27
  %179 = load i32, ptr %8, align 4, !tbaa !9
  %180 = sext i32 %179 to i64
  %181 = mul i64 %180, 4
  %182 = call noalias ptr @malloc(i64 noundef %181) #8
  %183 = load ptr, ptr %4, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.codebook, ptr %183, i32 0, i32 6
  store ptr %182, ptr %184, align 8, !tbaa !28
  store i32 0, ptr %8, align 4, !tbaa !9
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %185

185:                                              ; preds = %216, %171
  %186 = load i32, ptr %6, align 4, !tbaa !9
  %187 = sext i32 %186 to i64
  %188 = load ptr, ptr %5, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.static_codebook, ptr %188, i32 0, i32 1
  %190 = load i64, ptr %189, align 8, !tbaa !11
  %191 = icmp slt i64 %187, %190
  br i1 %191, label %192, label %219

192:                                              ; preds = %185
  %193 = load ptr, ptr %5, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.static_codebook, ptr %193, i32 0, i32 2
  %195 = load ptr, ptr %194, align 8, !tbaa !14
  %196 = load i32, ptr %6, align 4, !tbaa !9
  %197 = sext i32 %196 to i64
  %198 = getelementptr inbounds i8, ptr %195, i64 %197
  %199 = load i8, ptr %198, align 1, !tbaa !15
  %200 = sext i8 %199 to i32
  %201 = icmp sgt i32 %200, 0
  br i1 %201, label %202, label %215

202:                                              ; preds = %192
  %203 = load i32, ptr %6, align 4, !tbaa !9
  %204 = load ptr, ptr %4, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.codebook, ptr %204, i32 0, i32 6
  %206 = load ptr, ptr %205, align 8, !tbaa !28
  %207 = load ptr, ptr %10, align 8, !tbaa !5
  %208 = load i32, ptr %8, align 4, !tbaa !9
  %209 = add nsw i32 %208, 1
  store i32 %209, ptr %8, align 4, !tbaa !9
  %210 = sext i32 %208 to i64
  %211 = getelementptr inbounds i32, ptr %207, i64 %210
  %212 = load i32, ptr %211, align 4, !tbaa !9
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds i32, ptr %206, i64 %213
  store i32 %203, ptr %214, align 4, !tbaa !9
  br label %215

215:                                              ; preds = %202, %192
  br label %216

216:                                              ; preds = %215
  %217 = load i32, ptr %6, align 4, !tbaa !9
  %218 = add nsw i32 %217, 1
  store i32 %218, ptr %6, align 4, !tbaa !9
  br label %185, !llvm.loop !29

219:                                              ; preds = %185
  %220 = load i32, ptr %8, align 4, !tbaa !9
  %221 = sext i32 %220 to i64
  %222 = mul i64 %221, 1
  %223 = call noalias ptr @malloc(i64 noundef %222) #8
  %224 = load ptr, ptr %4, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.codebook, ptr %224, i32 0, i32 7
  store ptr %223, ptr %225, align 8, !tbaa !30
  %226 = load ptr, ptr %4, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.codebook, ptr %226, i32 0, i32 10
  store i32 0, ptr %227, align 4, !tbaa !31
  store i32 0, ptr %8, align 4, !tbaa !9
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %228

228:                                              ; preds = %289, %219
  %229 = load i32, ptr %6, align 4, !tbaa !9
  %230 = sext i32 %229 to i64
  %231 = load ptr, ptr %5, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.static_codebook, ptr %231, i32 0, i32 1
  %233 = load i64, ptr %232, align 8, !tbaa !11
  %234 = icmp slt i64 %230, %233
  br i1 %234, label %235, label %292

235:                                              ; preds = %228
  %236 = load ptr, ptr %5, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.static_codebook, ptr %236, i32 0, i32 2
  %238 = load ptr, ptr %237, align 8, !tbaa !14
  %239 = load i32, ptr %6, align 4, !tbaa !9
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds i8, ptr %238, i64 %240
  %242 = load i8, ptr %241, align 1, !tbaa !15
  %243 = sext i8 %242 to i32
  %244 = icmp sgt i32 %243, 0
  br i1 %244, label %245, label %288

245:                                              ; preds = %235
  %246 = load ptr, ptr %5, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.static_codebook, ptr %246, i32 0, i32 2
  %248 = load ptr, ptr %247, align 8, !tbaa !14
  %249 = load i32, ptr %6, align 4, !tbaa !9
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds i8, ptr %248, i64 %250
  %252 = load i8, ptr %251, align 1, !tbaa !15
  %253 = load ptr, ptr %4, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.codebook, ptr %253, i32 0, i32 7
  %255 = load ptr, ptr %254, align 8, !tbaa !30
  %256 = load ptr, ptr %10, align 8, !tbaa !5
  %257 = load i32, ptr %8, align 4, !tbaa !9
  %258 = add nsw i32 %257, 1
  store i32 %258, ptr %8, align 4, !tbaa !9
  %259 = sext i32 %257 to i64
  %260 = getelementptr inbounds i32, ptr %256, i64 %259
  %261 = load i32, ptr %260, align 4, !tbaa !9
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds i8, ptr %255, i64 %262
  store i8 %252, ptr %263, align 1, !tbaa !15
  %264 = load ptr, ptr %5, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.static_codebook, ptr %264, i32 0, i32 2
  %266 = load ptr, ptr %265, align 8, !tbaa !14
  %267 = load i32, ptr %6, align 4, !tbaa !9
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds i8, ptr %266, i64 %268
  %270 = load i8, ptr %269, align 1, !tbaa !15
  %271 = sext i8 %270 to i32
  %272 = load ptr, ptr %4, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.codebook, ptr %272, i32 0, i32 10
  %274 = load i32, ptr %273, align 4, !tbaa !31
  %275 = icmp sgt i32 %271, %274
  br i1 %275, label %276, label %287

276:                                              ; preds = %245
  %277 = load ptr, ptr %5, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.static_codebook, ptr %277, i32 0, i32 2
  %279 = load ptr, ptr %278, align 8, !tbaa !14
  %280 = load i32, ptr %6, align 4, !tbaa !9
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds i8, ptr %279, i64 %281
  %283 = load i8, ptr %282, align 1, !tbaa !15
  %284 = sext i8 %283 to i32
  %285 = load ptr, ptr %4, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.codebook, ptr %285, i32 0, i32 10
  store i32 %284, ptr %286, align 4, !tbaa !31
  br label %287

287:                                              ; preds = %276, %245
  br label %288

288:                                              ; preds = %287, %235
  br label %289

289:                                              ; preds = %288
  %290 = load i32, ptr %6, align 4, !tbaa !9
  %291 = add nsw i32 %290, 1
  store i32 %291, ptr %6, align 4, !tbaa !9
  br label %228, !llvm.loop !32

292:                                              ; preds = %228
  %293 = load i32, ptr %8, align 4, !tbaa !9
  %294 = icmp eq i32 %293, 1
  br i1 %294, label %295, label %314

295:                                              ; preds = %292
  %296 = load ptr, ptr %4, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.codebook, ptr %296, i32 0, i32 10
  %298 = load i32, ptr %297, align 4, !tbaa !31
  %299 = icmp eq i32 %298, 1
  br i1 %299, label %300, label %314

300:                                              ; preds = %295
  %301 = load ptr, ptr %4, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.codebook, ptr %301, i32 0, i32 9
  store i32 1, ptr %302, align 8, !tbaa !33
  %303 = call noalias ptr @calloc(i64 noundef 2, i64 noundef 4) #9
  %304 = load ptr, ptr %4, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.codebook, ptr %304, i32 0, i32 8
  store ptr %303, ptr %305, align 8, !tbaa !34
  %306 = load ptr, ptr %4, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.codebook, ptr %306, i32 0, i32 8
  %308 = load ptr, ptr %307, align 8, !tbaa !34
  %309 = getelementptr inbounds i32, ptr %308, i64 1
  store i32 1, ptr %309, align 4, !tbaa !9
  %310 = load ptr, ptr %4, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.codebook, ptr %310, i32 0, i32 8
  %312 = load ptr, ptr %311, align 8, !tbaa !34
  %313 = getelementptr inbounds i32, ptr %312, i64 0
  store i32 1, ptr %313, align 4, !tbaa !9
  br label %522

314:                                              ; preds = %295, %292
  %315 = load ptr, ptr %4, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.codebook, ptr %315, i32 0, i32 2
  %317 = load i64, ptr %316, align 8, !tbaa !20
  %318 = trunc i64 %317 to i32
  %319 = call i32 @ov_ilog(i32 noundef %318)
  %320 = sub nsw i32 %319, 4
  %321 = load ptr, ptr %4, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.codebook, ptr %321, i32 0, i32 9
  store i32 %320, ptr %322, align 8, !tbaa !33
  %323 = load ptr, ptr %4, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.codebook, ptr %323, i32 0, i32 9
  %325 = load i32, ptr %324, align 8, !tbaa !33
  %326 = icmp slt i32 %325, 5
  br i1 %326, label %327, label %330

327:                                              ; preds = %314
  %328 = load ptr, ptr %4, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.codebook, ptr %328, i32 0, i32 9
  store i32 5, ptr %329, align 8, !tbaa !33
  br label %330

330:                                              ; preds = %327, %314
  %331 = load ptr, ptr %4, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.codebook, ptr %331, i32 0, i32 9
  %333 = load i32, ptr %332, align 8, !tbaa !33
  %334 = icmp sgt i32 %333, 8
  br i1 %334, label %335, label %338

335:                                              ; preds = %330
  %336 = load ptr, ptr %4, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.codebook, ptr %336, i32 0, i32 9
  store i32 8, ptr %337, align 8, !tbaa !33
  br label %338

338:                                              ; preds = %335, %330
  %339 = load ptr, ptr %4, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.codebook, ptr %339, i32 0, i32 9
  %341 = load i32, ptr %340, align 8, !tbaa !33
  %342 = shl i32 1, %341
  store i32 %342, ptr %9, align 4, !tbaa !9
  %343 = load i32, ptr %9, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = call noalias ptr @calloc(i64 noundef %344, i64 noundef 4) #9
  %346 = load ptr, ptr %4, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.codebook, ptr %346, i32 0, i32 8
  store ptr %345, ptr %347, align 8, !tbaa !34
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %348

348:                                              ; preds = %415, %338
  %349 = load i32, ptr %6, align 4, !tbaa !9
  %350 = load i32, ptr %8, align 4, !tbaa !9
  %351 = icmp slt i32 %349, %350
  br i1 %351, label %352, label %418

352:                                              ; preds = %348
  %353 = load ptr, ptr %4, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.codebook, ptr %353, i32 0, i32 7
  %355 = load ptr, ptr %354, align 8, !tbaa !30
  %356 = load i32, ptr %6, align 4, !tbaa !9
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds i8, ptr %355, i64 %357
  %359 = load i8, ptr %358, align 1, !tbaa !15
  %360 = sext i8 %359 to i32
  %361 = load ptr, ptr %4, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.codebook, ptr %361, i32 0, i32 9
  %363 = load i32, ptr %362, align 8, !tbaa !33
  %364 = icmp sle i32 %360, %363
  br i1 %364, label %365, label %414

365:                                              ; preds = %352
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  %366 = load ptr, ptr %4, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.codebook, ptr %366, i32 0, i32 5
  %368 = load ptr, ptr %367, align 8, !tbaa !24
  %369 = load i32, ptr %6, align 4, !tbaa !9
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds i32, ptr %368, i64 %370
  %372 = load i32, ptr %371, align 4, !tbaa !9
  %373 = call i32 @bitreverse(i32 noundef %372)
  store i32 %373, ptr %14, align 4, !tbaa !9
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %374

374:                                              ; preds = %410, %365
  %375 = load i32, ptr %7, align 4, !tbaa !9
  %376 = load ptr, ptr %4, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.codebook, ptr %376, i32 0, i32 9
  %378 = load i32, ptr %377, align 8, !tbaa !33
  %379 = load ptr, ptr %4, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.codebook, ptr %379, i32 0, i32 7
  %381 = load ptr, ptr %380, align 8, !tbaa !30
  %382 = load i32, ptr %6, align 4, !tbaa !9
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds i8, ptr %381, i64 %383
  %385 = load i8, ptr %384, align 1, !tbaa !15
  %386 = sext i8 %385 to i32
  %387 = sub nsw i32 %378, %386
  %388 = shl i32 1, %387
  %389 = icmp slt i32 %375, %388
  br i1 %389, label %390, label %413

390:                                              ; preds = %374
  %391 = load i32, ptr %6, align 4, !tbaa !9
  %392 = add nsw i32 %391, 1
  %393 = load ptr, ptr %4, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.codebook, ptr %393, i32 0, i32 8
  %395 = load ptr, ptr %394, align 8, !tbaa !34
  %396 = load i32, ptr %14, align 4, !tbaa !9
  %397 = load i32, ptr %7, align 4, !tbaa !9
  %398 = load ptr, ptr %4, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.codebook, ptr %398, i32 0, i32 7
  %400 = load ptr, ptr %399, align 8, !tbaa !30
  %401 = load i32, ptr %6, align 4, !tbaa !9
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds i8, ptr %400, i64 %402
  %404 = load i8, ptr %403, align 1, !tbaa !15
  %405 = sext i8 %404 to i32
  %406 = shl i32 %397, %405
  %407 = or i32 %396, %406
  %408 = zext i32 %407 to i64
  %409 = getelementptr inbounds i32, ptr %395, i64 %408
  store i32 %392, ptr %409, align 4, !tbaa !9
  br label %410

410:                                              ; preds = %390
  %411 = load i32, ptr %7, align 4, !tbaa !9
  %412 = add nsw i32 %411, 1
  store i32 %412, ptr %7, align 4, !tbaa !9
  br label %374, !llvm.loop !35

413:                                              ; preds = %374
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  br label %414

414:                                              ; preds = %413, %352
  br label %415

415:                                              ; preds = %414
  %416 = load i32, ptr %6, align 4, !tbaa !9
  %417 = add nsw i32 %416, 1
  store i32 %417, ptr %6, align 4, !tbaa !9
  br label %348, !llvm.loop !36

418:                                              ; preds = %348
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  %419 = load ptr, ptr %4, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.codebook, ptr %419, i32 0, i32 9
  %421 = load i32, ptr %420, align 8, !tbaa !33
  %422 = sub nsw i32 31, %421
  %423 = zext i32 %422 to i64
  %424 = shl i64 4294967294, %423
  %425 = trunc i64 %424 to i32
  store i32 %425, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  store i64 0, ptr %16, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  store i64 0, ptr %17, align 8, !tbaa !37
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %426

426:                                              ; preds = %518, %418
  %427 = load i32, ptr %6, align 4, !tbaa !9
  %428 = load i32, ptr %9, align 4, !tbaa !9
  %429 = icmp slt i32 %427, %428
  br i1 %429, label %430, label %521

430:                                              ; preds = %426
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  %431 = load i32, ptr %6, align 4, !tbaa !9
  %432 = load ptr, ptr %4, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.codebook, ptr %432, i32 0, i32 9
  %434 = load i32, ptr %433, align 8, !tbaa !33
  %435 = sub nsw i32 32, %434
  %436 = shl i32 %431, %435
  store i32 %436, ptr %18, align 4, !tbaa !9
  %437 = load ptr, ptr %4, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.codebook, ptr %437, i32 0, i32 8
  %439 = load ptr, ptr %438, align 8, !tbaa !34
  %440 = load i32, ptr %18, align 4, !tbaa !9
  %441 = call i32 @bitreverse(i32 noundef %440)
  %442 = zext i32 %441 to i64
  %443 = getelementptr inbounds i32, ptr %439, i64 %442
  %444 = load i32, ptr %443, align 4, !tbaa !9
  %445 = icmp eq i32 %444, 0
  br i1 %445, label %446, label %517

446:                                              ; preds = %430
  br label %447

447:                                              ; preds = %465, %446
  %448 = load i64, ptr %16, align 8, !tbaa !37
  %449 = add nsw i64 %448, 1
  %450 = load i32, ptr %8, align 4, !tbaa !9
  %451 = sext i32 %450 to i64
  %452 = icmp slt i64 %449, %451
  br i1 %452, label %453, label %463

453:                                              ; preds = %447
  %454 = load ptr, ptr %4, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.codebook, ptr %454, i32 0, i32 5
  %456 = load ptr, ptr %455, align 8, !tbaa !24
  %457 = load i64, ptr %16, align 8, !tbaa !37
  %458 = add nsw i64 %457, 1
  %459 = getelementptr inbounds i32, ptr %456, i64 %458
  %460 = load i32, ptr %459, align 4, !tbaa !9
  %461 = load i32, ptr %18, align 4, !tbaa !9
  %462 = icmp ule i32 %460, %461
  br label %463

463:                                              ; preds = %453, %447
  %464 = phi i1 [ false, %447 ], [ %462, %453 ]
  br i1 %464, label %465, label %468

465:                                              ; preds = %463
  %466 = load i64, ptr %16, align 8, !tbaa !37
  %467 = add nsw i64 %466, 1
  store i64 %467, ptr %16, align 8, !tbaa !37
  br label %447, !llvm.loop !38

468:                                              ; preds = %463
  br label %469

469:                                              ; preds = %487, %468
  %470 = load i64, ptr %17, align 8, !tbaa !37
  %471 = load i32, ptr %8, align 4, !tbaa !9
  %472 = sext i32 %471 to i64
  %473 = icmp slt i64 %470, %472
  br i1 %473, label %474, label %485

474:                                              ; preds = %469
  %475 = load i32, ptr %18, align 4, !tbaa !9
  %476 = load ptr, ptr %4, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.codebook, ptr %476, i32 0, i32 5
  %478 = load ptr, ptr %477, align 8, !tbaa !24
  %479 = load i64, ptr %17, align 8, !tbaa !37
  %480 = getelementptr inbounds i32, ptr %478, i64 %479
  %481 = load i32, ptr %480, align 4, !tbaa !9
  %482 = load i32, ptr %15, align 4, !tbaa !9
  %483 = and i32 %481, %482
  %484 = icmp uge i32 %475, %483
  br label %485

485:                                              ; preds = %474, %469
  %486 = phi i1 [ false, %469 ], [ %484, %474 ]
  br i1 %486, label %487, label %490

487:                                              ; preds = %485
  %488 = load i64, ptr %17, align 8, !tbaa !37
  %489 = add nsw i64 %488, 1
  store i64 %489, ptr %17, align 8, !tbaa !37
  br label %469, !llvm.loop !39

490:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %491 = load i64, ptr %16, align 8, !tbaa !37
  store i64 %491, ptr %19, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %492 = load i32, ptr %8, align 4, !tbaa !9
  %493 = sext i32 %492 to i64
  %494 = load i64, ptr %17, align 8, !tbaa !37
  %495 = sub nsw i64 %493, %494
  store i64 %495, ptr %20, align 8, !tbaa !37
  %496 = load i64, ptr %19, align 8, !tbaa !37
  %497 = icmp ugt i64 %496, 32767
  br i1 %497, label %498, label %499

498:                                              ; preds = %490
  store i64 32767, ptr %19, align 8, !tbaa !37
  br label %499

499:                                              ; preds = %498, %490
  %500 = load i64, ptr %20, align 8, !tbaa !37
  %501 = icmp ugt i64 %500, 32767
  br i1 %501, label %502, label %503

502:                                              ; preds = %499
  store i64 32767, ptr %20, align 8, !tbaa !37
  br label %503

503:                                              ; preds = %502, %499
  %504 = load i64, ptr %19, align 8, !tbaa !37
  %505 = shl i64 %504, 15
  %506 = or i64 2147483648, %505
  %507 = load i64, ptr %20, align 8, !tbaa !37
  %508 = or i64 %506, %507
  %509 = trunc i64 %508 to i32
  %510 = load ptr, ptr %4, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.codebook, ptr %510, i32 0, i32 8
  %512 = load ptr, ptr %511, align 8, !tbaa !34
  %513 = load i32, ptr %18, align 4, !tbaa !9
  %514 = call i32 @bitreverse(i32 noundef %513)
  %515 = zext i32 %514 to i64
  %516 = getelementptr inbounds i32, ptr %512, i64 %515
  store i32 %509, ptr %516, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %517

517:                                              ; preds = %503, %430
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  br label %518

518:                                              ; preds = %517
  %519 = load i32, ptr %6, align 4, !tbaa !9
  %520 = add nsw i32 %519, 1
  store i32 %520, ptr %6, align 4, !tbaa !9
  br label %426, !llvm.loop !40

521:                                              ; preds = %426
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  br label %522

522:                                              ; preds = %521, %300
  store i32 0, ptr %21, align 4
  br label %523

523:                                              ; preds = %522, %81
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  %524 = load i32, ptr %21, align 4
  switch i32 %524, label %529 [
    i32 0, label %525
    i32 5, label %527
  ]

525:                                              ; preds = %523
  br label %526

526:                                              ; preds = %525, %47
  store i32 0, ptr %3, align 4
  store i32 1, ptr %21, align 4
  br label %529

527:                                              ; preds = %523
  %528 = load ptr, ptr %4, align 8, !tbaa !5
  call void @vorbis_book_clear(ptr noundef %528)
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %21, align 4
  br label %529

529:                                              ; preds = %527, %526, %523
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  %530 = load i32, ptr %3, align 4
  ret i32 %530
}

; Function Attrs: nounwind uwtable
declare hidden i32 @bitreverse(i32 noundef) #6

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

attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #1 = { nounwind allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nounwind "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 allocsize(0,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 #5 = { "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 #6 = { 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 #7 = { nounwind }
attributes #8 = { nounwind allocsize(0) }
attributes #9 = { nounwind allocsize(0,1) }

!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 = !{!"int", !7, i64 0}
!11 = !{!12, !13, i64 8}
!12 = !{!"static_codebook", !13, i64 0, !13, i64 8, !6, i64 16, !10, i64 24, !13, i64 32, !13, i64 40, !10, i64 48, !10, i64 52, !6, i64 56, !10, i64 64}
!13 = !{!"long", !7, i64 0}
!14 = !{!12, !6, i64 16}
!15 = !{!7, !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!19, !13, i64 8}
!19 = !{!"codebook", !13, i64 0, !13, i64 8, !13, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88}
!20 = !{!19, !13, i64 16}
!21 = !{!12, !13, i64 0}
!22 = !{!19, !13, i64 0}
!23 = distinct !{!23, !17}
!24 = !{!19, !6, i64 40}
!25 = distinct !{!25, !17}
!26 = distinct !{!26, !17}
!27 = !{!19, !6, i64 32}
!28 = !{!19, !6, i64 48}
!29 = distinct !{!29, !17}
!30 = !{!19, !6, i64 56}
!31 = !{!19, !10, i64 76}
!32 = distinct !{!32, !17}
!33 = !{!19, !10, i64 72}
!34 = !{!19, !6, i64 64}
!35 = distinct !{!35, !17}
!36 = distinct !{!36, !17}
!37 = !{!13, !13, i64 0}
!38 = distinct !{!38, !17}
!39 = distinct !{!39, !17}
!40 = distinct !{!40, !17}


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

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

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @calloc(i64 noundef, i64 noundef) local_unnamed_addr #3

; Function Attrs: nofree
declare void @qsort(ptr noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @ov_ilog(i32 noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
declare dso_local void @vorbis_book_clear(ptr noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
declare dso_local ptr @_make_words(ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
declare dso_local ptr @_book_unquantize(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @vorbis_book_init_decode(ptr noundef %0, ptr noundef %1) local_unnamed_addr #5 {
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(96) %0, i8 0, i64 96, i1 false)
  %3 = getelementptr inbounds i8, ptr %1, i64 8
  %4 = load i64, ptr %3, align 8, !tbaa !5
  %5 = icmp sgt i64 %4, 0
  br i1 %5, label %.lr.ph, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %2
  %6 = getelementptr inbounds i8, ptr %0, i64 8
  store i64 %4, ptr %6, align 8, !tbaa !12
  %7 = getelementptr inbounds i8, ptr %0, i64 16
  store i64 0, ptr %7, align 8, !tbaa !14
  %8 = load i64, ptr %1, align 8, !tbaa !15
  store i64 %8, ptr %0, align 8, !tbaa !16
  br label %.thread

.lr.ph:                                           ; preds = %2
  %9 = getelementptr inbounds i8, ptr %1, i64 16
  %10 = load ptr, ptr %9, align 8, !tbaa !17
  %min.iters.check = icmp ult i64 %4, 8
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph
  %n.vec = and i64 %4, 9223372036854775800
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %17, %vector.body ]
  %vec.phi272 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %18, %vector.body ]
  %11 = getelementptr inbounds i8, ptr %10, i64 %index
  %12 = getelementptr inbounds i8, ptr %11, i64 4
  %wide.load = load <4 x i8>, ptr %11, align 1, !tbaa !18
  %wide.load273 = load <4 x i8>, ptr %12, align 1, !tbaa !18
  %13 = icmp sgt <4 x i8> %wide.load, zeroinitializer
  %14 = icmp sgt <4 x i8> %wide.load273, zeroinitializer
  %15 = zext <4 x i1> %13 to <4 x i32>
  %16 = zext <4 x i1> %14 to <4 x i32>
  %17 = add <4 x i32> %vec.phi, %15
  %18 = add <4 x i32> %vec.phi272, %16
  %index.next = add nuw i64 %index, 8
  %19 = icmp eq i64 %index.next, %n.vec
  br i1 %19, label %middle.block, label %vector.body, !llvm.loop !19

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %18, %17
  %20 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %cmp.n = icmp eq i64 %4, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph ], [ %n.vec, %middle.block ]
  %.0165188.ph = phi i32 [ 0, %.lr.ph ], [ %20, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %.0165188 = phi i32 [ %spec.select, %scalar.ph ], [ %.0165188.ph, %scalar.ph.preheader ]
  %21 = getelementptr inbounds i8, ptr %10, i64 %indvars.iv
  %22 = load i8, ptr %21, align 1, !tbaa !18
  %23 = icmp sgt i8 %22, 0
  %24 = zext i1 %23 to i32
  %spec.select = add nuw nsw i32 %.0165188, %24
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %4
  br i1 %exitcond.not, label %._crit_edge, label %scalar.ph, !llvm.loop !23

._crit_edge:                                      ; preds = %scalar.ph, %middle.block
  %spec.select.lcssa = phi i32 [ %20, %middle.block ], [ %spec.select, %scalar.ph ]
  %25 = getelementptr inbounds i8, ptr %0, i64 8
  store i64 %4, ptr %25, align 8, !tbaa !12
  %26 = zext nneg i32 %spec.select.lcssa to i64
  %27 = getelementptr inbounds i8, ptr %0, i64 16
  store i64 %26, ptr %27, align 8, !tbaa !14
  %28 = load i64, ptr %1, align 8, !tbaa !15
  store i64 %28, ptr %0, align 8, !tbaa !16
  %.not269 = icmp eq i32 %spec.select.lcssa, 0
  br i1 %.not269, label %.thread, label %29

29:                                               ; preds = %._crit_edge
  %30 = getelementptr inbounds i8, ptr %1, i64 16
  %31 = load ptr, ptr %30, align 8, !tbaa !17
  %32 = tail call ptr @_make_words(ptr noundef %31, i64 noundef %4, i64 noundef %26)
  %33 = shl nuw nsw i64 %26, 3
  %34 = alloca i8, i64 %33, align 16
  %35 = icmp eq ptr %32, null
  br i1 %35, label %267, label %.lr.ph192.preheader

.lr.ph192.preheader:                              ; preds = %29
  %wide.trip.count = zext nneg i32 %spec.select.lcssa to i64
  br label %.lr.ph192

.lr.ph192:                                        ; preds = %.lr.ph192.preheader, %.lr.ph192
  %indvars.iv230 = phi i64 [ 0, %.lr.ph192.preheader ], [ %indvars.iv.next231, %.lr.ph192 ]
  %36 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv230
  %37 = load i32, ptr %36, align 4, !tbaa !24
  %38 = tail call i32 @bitreverse(i32 noundef %37)
  store i32 %38, ptr %36, align 4, !tbaa !24
  %39 = getelementptr inbounds ptr, ptr %34, i64 %indvars.iv230
  store ptr %36, ptr %39, align 8, !tbaa !25
  %indvars.iv.next231 = add nuw nsw i64 %indvars.iv230, 1
  %exitcond233.not = icmp eq i64 %indvars.iv.next231, %wide.trip.count
  br i1 %exitcond233.not, label %.lr.ph196, label %.lr.ph192, !llvm.loop !26

.lr.ph196:                                        ; preds = %.lr.ph192
  call void @qsort(ptr noundef nonnull %34, i64 noundef %26, i64 noundef 8, ptr noundef nonnull @sort32a) #7
  %40 = shl nuw nsw i64 %26, 2
  %41 = alloca i8, i64 %40, align 16
  %42 = call noalias ptr @malloc(i64 noundef %40) #8
  %43 = getelementptr inbounds i8, ptr %0, i64 40
  store ptr %42, ptr %43, align 8, !tbaa !27
  %44 = ptrtoint ptr %32 to i64
  %smax = call i32 @llvm.smax.i32(i32 %spec.select.lcssa, i32 1)
  %wide.trip.count237 = zext nneg i32 %smax to i64
  %xtraiter = and i64 %wide.trip.count237, 1
  %45 = icmp slt i32 %spec.select.lcssa, 2
  br i1 %45, label %.lr.ph198.preheader.unr-lcssa, label %.lr.ph196.new

.lr.ph196.new:                                    ; preds = %.lr.ph196
  %unroll_iter = and i64 %wide.trip.count237, 2147483646
  br label %54

.lr.ph198.preheader.unr-lcssa:                    ; preds = %54, %.lr.ph196
  %indvars.iv234.unr = phi i64 [ 0, %.lr.ph196 ], [ %indvars.iv.next235.1, %54 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph198.preheader, label %.lr.ph198.preheader.epilog-lcssa

.lr.ph198.preheader.epilog-lcssa:                 ; preds = %.lr.ph198.preheader.unr-lcssa
  %46 = getelementptr inbounds ptr, ptr %34, i64 %indvars.iv234.unr
  %47 = load ptr, ptr %46, align 8, !tbaa !25
  %48 = ptrtoint ptr %47 to i64
  %49 = sub i64 %48, %44
  %sext.epil = shl i64 %49, 30
  %50 = ashr i64 %sext.epil, 32
  %51 = getelementptr inbounds i32, ptr %41, i64 %50
  %52 = trunc nuw nsw i64 %indvars.iv234.unr to i32
  store i32 %52, ptr %51, align 4, !tbaa !24
  br label %.lr.ph198.preheader

.lr.ph198.preheader:                              ; preds = %.lr.ph198.preheader.unr-lcssa, %.lr.ph198.preheader.epilog-lcssa
  %xtraiter279 = and i64 %wide.trip.count237, 3
  %53 = icmp slt i32 %spec.select.lcssa, 4
  br i1 %53, label %._crit_edge199.unr-lcssa, label %.lr.ph198.preheader.new

.lr.ph198.preheader.new:                          ; preds = %.lr.ph198.preheader
  %unroll_iter281 = and i64 %wide.trip.count237, 2147483644
  br label %.lr.ph198

54:                                               ; preds = %54, %.lr.ph196.new
  %indvars.iv234 = phi i64 [ 0, %.lr.ph196.new ], [ %indvars.iv.next235.1, %54 ]
  %niter = phi i64 [ 0, %.lr.ph196.new ], [ %niter.next.1, %54 ]
  %55 = getelementptr inbounds ptr, ptr %34, i64 %indvars.iv234
  %56 = load ptr, ptr %55, align 16, !tbaa !25
  %57 = ptrtoint ptr %56 to i64
  %58 = sub i64 %57, %44
  %sext = shl i64 %58, 30
  %59 = ashr i64 %sext, 32
  %60 = getelementptr inbounds i32, ptr %41, i64 %59
  %61 = trunc nuw nsw i64 %indvars.iv234 to i32
  store i32 %61, ptr %60, align 4, !tbaa !24
  %indvars.iv.next235 = or disjoint i64 %indvars.iv234, 1
  %62 = getelementptr inbounds ptr, ptr %34, i64 %indvars.iv.next235
  %63 = load ptr, ptr %62, align 8, !tbaa !25
  %64 = ptrtoint ptr %63 to i64
  %65 = sub i64 %64, %44
  %sext.1 = shl i64 %65, 30
  %66 = ashr i64 %sext.1, 32
  %67 = getelementptr inbounds i32, ptr %41, i64 %66
  %68 = trunc nuw nsw i64 %indvars.iv.next235 to i32
  store i32 %68, ptr %67, align 4, !tbaa !24
  %indvars.iv.next235.1 = add nuw nsw i64 %indvars.iv234, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.lr.ph198.preheader.unr-lcssa, label %54, !llvm.loop !28

.lr.ph198:                                        ; preds = %.lr.ph198, %.lr.ph198.preheader.new
  %indvars.iv239 = phi i64 [ 0, %.lr.ph198.preheader.new ], [ %indvars.iv.next240.3, %.lr.ph198 ]
  %niter282 = phi i64 [ 0, %.lr.ph198.preheader.new ], [ %niter282.next.3, %.lr.ph198 ]
  %69 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv239
  %70 = load i32, ptr %69, align 4, !tbaa !24
  %71 = getelementptr inbounds i32, ptr %41, i64 %indvars.iv239
  %72 = load i32, ptr %71, align 16, !tbaa !24
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds i32, ptr %42, i64 %73
  store i32 %70, ptr %74, align 4, !tbaa !24
  %indvars.iv.next240 = or disjoint i64 %indvars.iv239, 1
  %75 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv.next240
  %76 = load i32, ptr %75, align 4, !tbaa !24
  %77 = getelementptr inbounds i32, ptr %41, i64 %indvars.iv.next240
  %78 = load i32, ptr %77, align 4, !tbaa !24
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds i32, ptr %42, i64 %79
  store i32 %76, ptr %80, align 4, !tbaa !24
  %indvars.iv.next240.1 = or disjoint i64 %indvars.iv239, 2
  %81 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv.next240.1
  %82 = load i32, ptr %81, align 4, !tbaa !24
  %83 = getelementptr inbounds i32, ptr %41, i64 %indvars.iv.next240.1
  %84 = load i32, ptr %83, align 8, !tbaa !24
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds i32, ptr %42, i64 %85
  store i32 %82, ptr %86, align 4, !tbaa !24
  %indvars.iv.next240.2 = or disjoint i64 %indvars.iv239, 3
  %87 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv.next240.2
  %88 = load i32, ptr %87, align 4, !tbaa !24
  %89 = getelementptr inbounds i32, ptr %41, i64 %indvars.iv.next240.2
  %90 = load i32, ptr %89, align 4, !tbaa !24
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds i32, ptr %42, i64 %91
  store i32 %88, ptr %92, align 4, !tbaa !24
  %indvars.iv.next240.3 = add nuw nsw i64 %indvars.iv239, 4
  %niter282.next.3 = add i64 %niter282, 4
  %niter282.ncmp.3 = icmp eq i64 %niter282.next.3, %unroll_iter281
  br i1 %niter282.ncmp.3, label %._crit_edge199.unr-lcssa, label %.lr.ph198, !llvm.loop !29

._crit_edge199.unr-lcssa:                         ; preds = %.lr.ph198, %.lr.ph198.preheader
  %indvars.iv239.unr = phi i64 [ 0, %.lr.ph198.preheader ], [ %indvars.iv.next240.3, %.lr.ph198 ]
  %lcmp.mod280.not = icmp eq i64 %xtraiter279, 0
  br i1 %lcmp.mod280.not, label %._crit_edge199, label %.lr.ph198.epil

.lr.ph198.epil:                                   ; preds = %._crit_edge199.unr-lcssa, %.lr.ph198.epil
  %indvars.iv239.epil = phi i64 [ %indvars.iv.next240.epil, %.lr.ph198.epil ], [ %indvars.iv239.unr, %._crit_edge199.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph198.epil ], [ 0, %._crit_edge199.unr-lcssa ]
  %93 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv239.epil
  %94 = load i32, ptr %93, align 4, !tbaa !24
  %95 = getelementptr inbounds i32, ptr %41, i64 %indvars.iv239.epil
  %96 = load i32, ptr %95, align 4, !tbaa !24
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds i32, ptr %42, i64 %97
  store i32 %94, ptr %98, align 4, !tbaa !24
  %indvars.iv.next240.epil = add nuw nsw i64 %indvars.iv239.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter279
  br i1 %epil.iter.cmp.not, label %._crit_edge199, label %.lr.ph198.epil, !llvm.loop !30

._crit_edge199:                                   ; preds = %.lr.ph198.epil, %._crit_edge199.unr-lcssa
  call void @free(ptr noundef nonnull %32) #7
  %99 = call ptr @_book_unquantize(ptr noundef nonnull %1, i32 noundef %spec.select.lcssa, ptr noundef nonnull %41)
  %100 = getelementptr inbounds i8, ptr %0, i64 32
  store ptr %99, ptr %100, align 8, !tbaa !32
  %101 = call noalias ptr @malloc(i64 noundef %40) #8
  %102 = getelementptr inbounds i8, ptr %0, i64 48
  store ptr %101, ptr %102, align 8, !tbaa !33
  %103 = load i64, ptr %3, align 8, !tbaa !5
  %104 = icmp sgt i64 %103, 0
  br i1 %104, label %.lr.ph203, label %._crit_edge204

.lr.ph203:                                        ; preds = %._crit_edge199
  %105 = load ptr, ptr %30, align 8, !tbaa !17
  %xtraiter284 = and i64 %103, 1
  %106 = icmp eq i64 %103, 1
  br i1 %106, label %._crit_edge204.loopexit.unr-lcssa, label %.lr.ph203.new

.lr.ph203.new:                                    ; preds = %.lr.ph203
  %unroll_iter288 = and i64 %103, 9223372036854775806
  br label %107

107:                                              ; preds = %131, %.lr.ph203.new
  %indvars.iv245 = phi i64 [ 0, %.lr.ph203.new ], [ %indvars.iv.next246.1, %131 ]
  %.2167200 = phi i32 [ 0, %.lr.ph203.new ], [ %.3168.1, %131 ]
  %niter289 = phi i64 [ 0, %.lr.ph203.new ], [ %niter289.next.1, %131 ]
  %108 = getelementptr inbounds i8, ptr %105, i64 %indvars.iv245
  %109 = load i8, ptr %108, align 1, !tbaa !18
  %110 = icmp sgt i8 %109, 0
  br i1 %110, label %111, label %119

111:                                              ; preds = %107
  %112 = add nsw i32 %.2167200, 1
  %113 = sext i32 %.2167200 to i64
  %114 = getelementptr inbounds i32, ptr %41, i64 %113
  %115 = load i32, ptr %114, align 4, !tbaa !24
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds i32, ptr %101, i64 %116
  %118 = trunc nuw nsw i64 %indvars.iv245 to i32
  store i32 %118, ptr %117, align 4, !tbaa !24
  br label %119

119:                                              ; preds = %107, %111
  %.3168 = phi i32 [ %112, %111 ], [ %.2167200, %107 ]
  %indvars.iv.next246 = or disjoint i64 %indvars.iv245, 1
  %120 = getelementptr inbounds i8, ptr %105, i64 %indvars.iv.next246
  %121 = load i8, ptr %120, align 1, !tbaa !18
  %122 = icmp sgt i8 %121, 0
  br i1 %122, label %123, label %131

123:                                              ; preds = %119
  %124 = add nsw i32 %.3168, 1
  %125 = sext i32 %.3168 to i64
  %126 = getelementptr inbounds i32, ptr %41, i64 %125
  %127 = load i32, ptr %126, align 4, !tbaa !24
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds i32, ptr %101, i64 %128
  %130 = trunc nuw nsw i64 %indvars.iv.next246 to i32
  store i32 %130, ptr %129, align 4, !tbaa !24
  br label %131

131:                                              ; preds = %123, %119
  %.3168.1 = phi i32 [ %124, %123 ], [ %.3168, %119 ]
  %indvars.iv.next246.1 = add nuw nsw i64 %indvars.iv245, 2
  %niter289.next.1 = add i64 %niter289, 2
  %niter289.ncmp.1 = icmp eq i64 %niter289.next.1, %unroll_iter288
  br i1 %niter289.ncmp.1, label %._crit_edge204.loopexit.unr-lcssa, label %107, !llvm.loop !34

._crit_edge204.loopexit.unr-lcssa:                ; preds = %131, %.lr.ph203
  %.3168.lcssa.ph = phi i32 [ poison, %.lr.ph203 ], [ %.3168.1, %131 ]
  %indvars.iv245.unr = phi i64 [ 0, %.lr.ph203 ], [ %indvars.iv.next246.1, %131 ]
  %.2167200.unr = phi i32 [ 0, %.lr.ph203 ], [ %.3168.1, %131 ]
  %lcmp.mod286.not = icmp eq i64 %xtraiter284, 0
  br i1 %lcmp.mod286.not, label %._crit_edge204.loopexit, label %.epil.preheader283

.epil.preheader283:                               ; preds = %._crit_edge204.loopexit.unr-lcssa
  %132 = getelementptr inbounds i8, ptr %105, i64 %indvars.iv245.unr
  %133 = load i8, ptr %132, align 1, !tbaa !18
  %134 = icmp sgt i8 %133, 0
  br i1 %134, label %135, label %._crit_edge204.loopexit

135:                                              ; preds = %.epil.preheader283
  %136 = add nsw i32 %.2167200.unr, 1
  %137 = sext i32 %.2167200.unr to i64
  %138 = getelementptr inbounds i32, ptr %41, i64 %137
  %139 = load i32, ptr %138, align 4, !tbaa !24
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds i32, ptr %101, i64 %140
  %142 = trunc nuw nsw i64 %indvars.iv245.unr to i32
  store i32 %142, ptr %141, align 4, !tbaa !24
  br label %._crit_edge204.loopexit

._crit_edge204.loopexit:                          ; preds = %.epil.preheader283, %135, %._crit_edge204.loopexit.unr-lcssa
  %.3168.lcssa = phi i32 [ %.3168.lcssa.ph, %._crit_edge204.loopexit.unr-lcssa ], [ %136, %135 ], [ %.2167200.unr, %.epil.preheader283 ]
  %143 = sext i32 %.3168.lcssa to i64
  br label %._crit_edge204

._crit_edge204:                                   ; preds = %._crit_edge204.loopexit, %._crit_edge199
  %.2167.lcssa = phi i64 [ 0, %._crit_edge199 ], [ %143, %._crit_edge204.loopexit ]
  %144 = call noalias ptr @malloc(i64 noundef %.2167.lcssa) #8
  %145 = getelementptr inbounds i8, ptr %0, i64 56
  store ptr %144, ptr %145, align 8, !tbaa !35
  %146 = getelementptr inbounds i8, ptr %0, i64 76
  store i32 0, ptr %146, align 4, !tbaa !36
  br i1 %104, label %.lr.ph209.preheader, label %._crit_edge210.thread

.lr.ph209.preheader:                              ; preds = %._crit_edge204
  %.pre = load ptr, ptr %30, align 8, !tbaa !17
  br label %.lr.ph209

.lr.ph209:                                        ; preds = %.lr.ph209.preheader, %167
  %147 = phi i32 [ 0, %.lr.ph209.preheader ], [ %168, %167 ]
  %148 = phi ptr [ %.pre, %.lr.ph209.preheader ], [ %169, %167 ]
  %indvars.iv249 = phi i64 [ 0, %.lr.ph209.preheader ], [ %indvars.iv.next250, %167 ]
  %.4169206 = phi i32 [ 0, %.lr.ph209.preheader ], [ %.5170, %167 ]
  %149 = getelementptr inbounds i8, ptr %148, i64 %indvars.iv249
  %150 = load i8, ptr %149, align 1, !tbaa !18
  %151 = icmp sgt i8 %150, 0
  br i1 %151, label %152, label %167

152:                                              ; preds = %.lr.ph209
  %153 = load ptr, ptr %145, align 8, !tbaa !35
  %154 = add nsw i32 %.4169206, 1
  %155 = sext i32 %.4169206 to i64
  %156 = getelementptr inbounds i32, ptr %41, i64 %155
  %157 = load i32, ptr %156, align 4, !tbaa !24
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds i8, ptr %153, i64 %158
  store i8 %150, ptr %159, align 1, !tbaa !18
  %160 = load ptr, ptr %30, align 8, !tbaa !17
  %161 = getelementptr inbounds i8, ptr %160, i64 %indvars.iv249
  %162 = load i8, ptr %161, align 1, !tbaa !18
  %163 = sext i8 %162 to i32
  %164 = load i32, ptr %146, align 4, !tbaa !36
  %165 = icmp slt i32 %164, %163
  br i1 %165, label %166, label %167

166:                                              ; preds = %152
  store i32 %163, ptr %146, align 4, !tbaa !36
  br label %167

167:                                              ; preds = %.lr.ph209, %166, %152
  %168 = phi i32 [ %163, %166 ], [ %164, %152 ], [ %147, %.lr.ph209 ]
  %169 = phi ptr [ %160, %166 ], [ %160, %152 ], [ %148, %.lr.ph209 ]
  %.5170 = phi i32 [ %154, %166 ], [ %154, %152 ], [ %.4169206, %.lr.ph209 ]
  %indvars.iv.next250 = add nuw nsw i64 %indvars.iv249, 1
  %170 = load i64, ptr %3, align 8, !tbaa !5
  %171 = icmp sgt i64 %170, %indvars.iv.next250
  br i1 %171, label %.lr.ph209, label %._crit_edge210, !llvm.loop !37

._crit_edge210:                                   ; preds = %167
  %172 = icmp ne i32 %168, 1
  %173 = icmp ne i32 %.5170, 1
  %brmerge = select i1 %173, i1 true, i1 %172
  br i1 %brmerge, label %._crit_edge210.thread, label %174

174:                                              ; preds = %._crit_edge210
  %175 = getelementptr inbounds i8, ptr %0, i64 72
  store i32 1, ptr %175, align 8, !tbaa !38
  %176 = call noalias dereferenceable_or_null(8) ptr @calloc(i64 noundef 2, i64 noundef 4) #9
  %177 = getelementptr inbounds i8, ptr %0, i64 64
  store ptr %176, ptr %177, align 8, !tbaa !39
  %178 = getelementptr inbounds i8, ptr %176, i64 4
  store i32 1, ptr %178, align 4, !tbaa !24
  store i32 1, ptr %176, align 4, !tbaa !24
  br label %.thread

._crit_edge210.thread:                            ; preds = %._crit_edge210, %._crit_edge204
  %.4169.lcssa264 = phi i32 [ %.5170, %._crit_edge210 ], [ 0, %._crit_edge204 ]
  %179 = load i64, ptr %27, align 8, !tbaa !14
  %180 = trunc i64 %179 to i32
  %181 = call i32 @ov_ilog(i32 noundef %180)
  %182 = getelementptr inbounds i8, ptr %0, i64 72
  %183 = icmp slt i32 %181, 9
  %184 = call i32 @llvm.smin.i32(i32 %181, i32 12)
  %185 = add nsw i32 %184, -4
  %storemerge178 = select i1 %183, i32 5, i32 %185
  store i32 %storemerge178, ptr %182, align 8, !tbaa !38
  %186 = shl nuw nsw i32 1, %storemerge178
  %187 = zext nneg i32 %186 to i64
  %188 = call noalias ptr @calloc(i64 noundef %187, i64 noundef 4) #9
  %189 = getelementptr inbounds i8, ptr %0, i64 64
  store ptr %188, ptr %189, align 8, !tbaa !39
  %190 = icmp sgt i32 %.4169.lcssa264, 0
  br i1 %190, label %.lr.ph218.preheader, label %._crit_edge219

.lr.ph218.preheader:                              ; preds = %._crit_edge210.thread
  %wide.trip.count255 = zext nneg i32 %.4169.lcssa264 to i64
  %.pre261 = load ptr, ptr %145, align 8, !tbaa !35
  br label %.lr.ph218

.lr.ph218:                                        ; preds = %.lr.ph218.preheader, %.loopexit
  %191 = phi i32 [ %storemerge178, %.lr.ph218.preheader ], [ %223, %.loopexit ]
  %192 = phi ptr [ %.pre261, %.lr.ph218.preheader ], [ %224, %.loopexit ]
  %indvars.iv252 = phi i64 [ 0, %.lr.ph218.preheader ], [ %indvars.iv.next253, %.loopexit ]
  %193 = getelementptr inbounds i8, ptr %192, i64 %indvars.iv252
  %194 = load i8, ptr %193, align 1, !tbaa !18
  %195 = sext i8 %194 to i32
  %.not180 = icmp slt i32 %191, %195
  br i1 %.not180, label %.loopexit, label %196

196:                                              ; preds = %.lr.ph218
  %197 = load ptr, ptr %43, align 8, !tbaa !27
  %198 = getelementptr inbounds i32, ptr %197, i64 %indvars.iv252
  %199 = load i32, ptr %198, align 4, !tbaa !24
  %200 = call i32 @bitreverse(i32 noundef %199)
  %201 = load ptr, ptr %145, align 8, !tbaa !35
  %202 = getelementptr inbounds i8, ptr %201, i64 %indvars.iv252
  %203 = load i32, ptr %182, align 8, !tbaa !38
  %204 = load i8, ptr %202, align 1, !tbaa !18
  %205 = sext i8 %204 to i32
  %206 = sub nsw i32 %203, %205
  %.not228 = icmp eq i32 %206, 31
  br i1 %.not228, label %.loopexit, label %.lr.ph214

.lr.ph214:                                        ; preds = %196
  %207 = load ptr, ptr %189, align 8, !tbaa !39
  %208 = trunc i64 %indvars.iv252 to i32
  %209 = add i32 %208, 1
  br label %210

210:                                              ; preds = %.lr.ph214, %210
  %211 = phi i32 [ %205, %.lr.ph214 ], [ %219, %210 ]
  %.0158212 = phi i32 [ 0, %.lr.ph214 ], [ %216, %210 ]
  %212 = shl i32 %.0158212, %211
  %213 = or i32 %212, %200
  %214 = zext i32 %213 to i64
  %215 = getelementptr inbounds i32, ptr %207, i64 %214
  store i32 %209, ptr %215, align 4, !tbaa !24
  %216 = add nuw nsw i32 %.0158212, 1
  %217 = load i32, ptr %182, align 8, !tbaa !38
  %218 = load i8, ptr %202, align 1, !tbaa !18
  %219 = sext i8 %218 to i32
  %220 = sub nsw i32 %217, %219
  %221 = shl nuw i32 1, %220
  %222 = icmp slt i32 %216, %221
  br i1 %222, label %210, label %.loopexit, !llvm.loop !40

.loopexit:                                        ; preds = %210, %196, %.lr.ph218
  %223 = phi i32 [ %203, %196 ], [ %191, %.lr.ph218 ], [ %217, %210 ]
  %224 = phi ptr [ %201, %196 ], [ %192, %.lr.ph218 ], [ %201, %210 ]
  %indvars.iv.next253 = add nuw nsw i64 %indvars.iv252, 1
  %exitcond256.not = icmp eq i64 %indvars.iv.next253, %wide.trip.count255
  br i1 %exitcond256.not, label %._crit_edge219, label %.lr.ph218, !llvm.loop !41

._crit_edge219:                                   ; preds = %.loopexit, %._crit_edge210.thread
  %225 = phi i32 [ %storemerge178, %._crit_edge210.thread ], [ %223, %.loopexit ]
  %226 = sub nsw i32 31, %225
  %227 = zext nneg i32 %226 to i64
  %228 = shl i64 4294967294, %227
  %229 = trunc i64 %228 to i32
  %230 = sext i32 %.4169.lcssa264 to i64
  br label %231

231:                                              ; preds = %._crit_edge219, %265
  %.7227 = phi i32 [ 0, %._crit_edge219 ], [ %266, %265 ]
  %.0159226 = phi i64 [ 0, %._crit_edge219 ], [ %.2161, %265 ]
  %.0162225 = phi i64 [ 0, %._crit_edge219 ], [ %.2164, %265 ]
  %232 = load i32, ptr %182, align 8, !tbaa !38
  %233 = sub nsw i32 32, %232
  %234 = shl i32 %.7227, %233
  %235 = load ptr, ptr %189, align 8, !tbaa !39
  %236 = call i32 @bitreverse(i32 noundef %234)
  %237 = zext i32 %236 to i64
  %238 = getelementptr inbounds i32, ptr %235, i64 %237
  %239 = load i32, ptr %238, align 4, !tbaa !24
  %240 = icmp eq i32 %239, 0
  br i1 %240, label %.preheader.preheader, label %265

.preheader.preheader:                             ; preds = %231
  %241 = add i64 %.0162225, 1
  %smax257 = call i64 @llvm.smax.i64(i64 %241, i64 %230)
  %242 = add nsw i64 %smax257, -1
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %243
  %.1163 = phi i64 [ %244, %243 ], [ %.0162225, %.preheader.preheader ]
  %exitcond258.not = icmp eq i64 %.1163, %242
  br i1 %exitcond258.not, label %.critedge, label %243

243:                                              ; preds = %.preheader
  %244 = add nsw i64 %.1163, 1
  %245 = load ptr, ptr %43, align 8, !tbaa !27
  %246 = getelementptr inbounds i32, ptr %245, i64 %244
  %247 = load i32, ptr %246, align 4, !tbaa !24
  %.not = icmp ugt i32 %247, %234
  br i1 %.not, label %.critedge, label %.preheader, !llvm.loop !42

.critedge:                                        ; preds = %.preheader, %243
  %.1163.lcssa = phi i64 [ %242, %.preheader ], [ %.1163, %243 ]
  %248 = icmp slt i64 %.0159226, %230
  br i1 %248, label %.lr.ph221, label %.critedge2

.lr.ph221:                                        ; preds = %.critedge
  %249 = load ptr, ptr %43, align 8, !tbaa !27
  br label %250

250:                                              ; preds = %.lr.ph221, %254
  %.1160220 = phi i64 [ %.0159226, %.lr.ph221 ], [ %255, %254 ]
  %251 = getelementptr inbounds i32, ptr %249, i64 %.1160220
  %252 = load i32, ptr %251, align 4, !tbaa !24
  %253 = and i32 %252, %229
  %.not179 = icmp ult i32 %234, %253
  br i1 %.not179, label %.critedge2, label %254

254:                                              ; preds = %250
  %255 = add i64 %.1160220, 1
  %exitcond259.not = icmp eq i64 %255, %230
  br i1 %exitcond259.not, label %.critedge2, label %250, !llvm.loop !43

.critedge2:                                       ; preds = %250, %254, %.critedge
  %.1160.lcssa = phi i64 [ %.0159226, %.critedge ], [ %230, %254 ], [ %.1160220, %250 ]
  %256 = sub nsw i64 %230, %.1160.lcssa
  %spec.store.select = call i64 @llvm.umin.i64(i64 %.1163.lcssa, i64 32767)
  %spec.store.select3 = call i64 @llvm.umin.i64(i64 %256, i64 32767)
  %257 = shl nuw nsw i64 %spec.store.select, 15
  %258 = or disjoint i64 %spec.store.select3, %257
  %259 = trunc nuw nsw i64 %258 to i32
  %260 = or disjoint i32 %259, -2147483648
  %261 = load ptr, ptr %189, align 8, !tbaa !39
  %262 = call i32 @bitreverse(i32 noundef %234)
  %263 = zext i32 %262 to i64
  %264 = getelementptr inbounds i32, ptr %261, i64 %263
  store i32 %260, ptr %264, align 4, !tbaa !24
  br label %265

265:                                              ; preds = %.critedge2, %231
  %.2164 = phi i64 [ %.1163.lcssa, %.critedge2 ], [ %.0162225, %231 ]
  %.2161 = phi i64 [ %.1160.lcssa, %.critedge2 ], [ %.0159226, %231 ]
  %266 = add nuw nsw i32 %.7227, 1
  %exitcond260.not = icmp eq i32 %266, %186
  br i1 %exitcond260.not, label %.thread, label %231, !llvm.loop !44

267:                                              ; preds = %29
  tail call void @vorbis_book_clear(ptr noundef nonnull %0)
  br label %.thread

.thread:                                          ; preds = %265, %._crit_edge.thread, %174, %._crit_edge, %267
  %.0156 = phi i32 [ -1, %267 ], [ 0, %._crit_edge ], [ 0, %174 ], [ 0, %._crit_edge.thread ], [ 0, %265 ]
  ret i32 %.0156
}

; Function Attrs: nounwind uwtable
declare hidden i32 @bitreverse(i32 noundef) local_unnamed_addr #5

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>) #6

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #1 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 = { nofree "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind 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 #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind }
attributes #8 = { nounwind allocsize(0) }
attributes #9 = { nounwind allocsize(0,1) }

!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, !7, i64 8}
!6 = !{!"static_codebook", !7, i64 0, !7, i64 8, !10, i64 16, !11, i64 24, !7, i64 32, !7, i64 40, !11, i64 48, !11, i64 52, !10, i64 56, !11, i64 64}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!13, !7, i64 8}
!13 = !{!"codebook", !7, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !11, i64 88}
!14 = !{!13, !7, i64 16}
!15 = !{!6, !7, i64 0}
!16 = !{!13, !7, i64 0}
!17 = !{!6, !10, i64 16}
!18 = !{!8, !8, i64 0}
!19 = distinct !{!19, !20, !21, !22}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!"llvm.loop.isvectorized", i32 1}
!22 = !{!"llvm.loop.unroll.runtime.disable"}
!23 = distinct !{!23, !20, !22, !21}
!24 = !{!11, !11, i64 0}
!25 = !{!10, !10, i64 0}
!26 = distinct !{!26, !20}
!27 = !{!13, !10, i64 40}
!28 = distinct !{!28, !20}
!29 = distinct !{!29, !20}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.unroll.disable"}
!32 = !{!13, !10, i64 32}
!33 = !{!13, !10, i64 48}
!34 = distinct !{!34, !20}
!35 = !{!13, !10, i64 56}
!36 = !{!13, !11, i64 76}
!37 = distinct !{!37, !20}
!38 = !{!13, !11, i64 72}
!39 = !{!13, !10, i64 64}
!40 = distinct !{!40, !20}
!41 = distinct !{!41, !20}
!42 = distinct !{!42, !20}
!43 = distinct !{!43, !20}
!44 = distinct !{!44, !20}


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