; LLVM IR from dbry/wavpack-stream :: src (unpack_floats)

; 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.WavpackStream = type { %struct.WavpackHeader, %struct.words_data, ptr, ptr, ptr, ptr, ptr, i64, i64, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, %struct.bs, %struct.bs, %struct.bs, float, i8, i8, i8, i8, i8, i8, i8, i8, %struct.anon, [16 x %struct.decorr_pass], %struct.decorr_pass, ptr, %struct.anon.0 }
%struct.WavpackHeader = type { [4 x i8], i16, i16, i32 }
%struct.words_data = type { [2 x i32], [2 x i32], i32, i32, i32, i32, i32, [2 x %struct.entropy_data] }
%struct.entropy_data = type { [3 x i32], i32, i32 }
%struct.bs = type { ptr, ptr, ptr, ptr, i32, i32, i32 }
%struct.anon = type { [2 x i32], [2 x i32], [2 x i32], double, double, double, ptr, ptr, i32 }
%struct.decorr_pass = type { i32, i32, i32, i32, [8 x i32], [8 x i32], i32, i32, i32, i32 }
%struct.anon.0 = type { ptr, ptr, ptr, ptr, ptr, i8, i8, i32, i32, i32, ptr, i32, i32, i32, [2 x %struct.DSDfilters], ptr }
%struct.DSDfilters = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }

; Function Attrs: nounwind uwtable
define dso_local void @float_values(ptr noundef %0, ptr noundef %1, i32 noundef %2) #0 {
  %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 i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store i32 %2, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #2
  %13 = load ptr, ptr %4, align 8, !tbaa !5
  %14 = getelementptr inbounds %struct.WavpackStream, ptr %13, i32 0, i32 24
  %15 = load i32, ptr %14, align 8, !tbaa !11
  store i32 %15, ptr %7, align 4, !tbaa !9
  %16 = load ptr, ptr %4, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.WavpackStream, ptr %16, i32 0, i32 29
  %18 = getelementptr inbounds %struct.bs, ptr %17, i32 0, i32 2
  %19 = load ptr, ptr %18, align 8, !tbaa !23
  %20 = icmp ne ptr %19, null
  br i1 %20, label %25, label %21

21:                                               ; preds = %3
  %22 = load ptr, ptr %4, align 8, !tbaa !5
  %23 = load ptr, ptr %5, align 8, !tbaa !5
  %24 = load i32, ptr %6, align 4, !tbaa !9
  call void @float_values_nowvx(ptr noundef %22, ptr noundef %23, i32 noundef %24)
  store i32 1, ptr %8, align 4
  br label %939

25:                                               ; preds = %3
  br label %26

26:                                               ; preds = %916, %25
  %27 = load i32, ptr %6, align 4, !tbaa !9
  %28 = add nsw i32 %27, -1
  store i32 %28, ptr %6, align 4, !tbaa !9
  %29 = icmp ne i32 %27, 0
  br i1 %29, label %30, label %935

30:                                               ; preds = %26
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #2
  store i32 0, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #2
  %31 = load ptr, ptr %4, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.WavpackStream, ptr %31, i32 0, i32 37
  %33 = load i8, ptr %32, align 2, !tbaa !24
  %34 = zext i8 %33 to i32
  store i32 %34, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #2
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #2
  %35 = load ptr, ptr %5, align 8, !tbaa !5
  %36 = load i32, ptr %35, align 4, !tbaa !9
  %37 = icmp eq i32 %36, 0
  br i1 %37, label %38, label %472

38:                                               ; preds = %30
  %39 = load ptr, ptr %4, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.WavpackStream, ptr %39, i32 0, i32 35
  %41 = load i8, ptr %40, align 8, !tbaa !25
  %42 = zext i8 %41 to i32
  %43 = and i32 %42, 8
  %44 = icmp ne i32 %43, 0
  br i1 %44, label %45, label %471

45:                                               ; preds = %38
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.WavpackStream, ptr %46, i32 0, i32 29
  %48 = getelementptr inbounds %struct.bs, ptr %47, i32 0, i32 5
  %49 = load i32, ptr %48, align 4, !tbaa !26
  %50 = icmp ne i32 %49, 0
  br i1 %50, label %51, label %63

51:                                               ; preds = %45
  %52 = load ptr, ptr %4, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.WavpackStream, ptr %52, i32 0, i32 29
  %54 = getelementptr inbounds %struct.bs, ptr %53, i32 0, i32 5
  %55 = load i32, ptr %54, align 4, !tbaa !26
  %56 = add nsw i32 %55, -1
  store i32 %56, ptr %54, align 4, !tbaa !26
  %57 = load ptr, ptr %4, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.WavpackStream, ptr %57, i32 0, i32 29
  %59 = getelementptr inbounds %struct.bs, ptr %58, i32 0, i32 6
  %60 = load i32, ptr %59, align 8, !tbaa !27
  %61 = and i32 %60, 1
  %62 = icmp ne i32 %61, 0
  br i1 %62, label %97, label %103

63:                                               ; preds = %45
  %64 = load ptr, ptr %4, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.WavpackStream, ptr %64, i32 0, i32 29
  %66 = getelementptr inbounds %struct.bs, ptr %65, i32 0, i32 2
  %67 = load ptr, ptr %66, align 8, !tbaa !23
  %68 = getelementptr inbounds i16, ptr %67, i32 1
  store ptr %68, ptr %66, align 8, !tbaa !23
  %69 = load ptr, ptr %4, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.WavpackStream, ptr %69, i32 0, i32 29
  %71 = getelementptr inbounds %struct.bs, ptr %70, i32 0, i32 1
  %72 = load ptr, ptr %71, align 8, !tbaa !28
  %73 = icmp ne ptr %68, %72
  br i1 %73, label %74, label %75

74:                                               ; preds = %63
  br label %82

75:                                               ; preds = %63
  %76 = load ptr, ptr %4, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.WavpackStream, ptr %76, i32 0, i32 29
  %78 = getelementptr inbounds %struct.bs, ptr %77, i32 0, i32 3
  %79 = load ptr, ptr %78, align 8, !tbaa !29
  %80 = load ptr, ptr %4, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.WavpackStream, ptr %80, i32 0, i32 29
  call void %79(ptr noundef %81)
  br label %82

82:                                               ; preds = %75, %74
  %83 = load ptr, ptr %4, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.WavpackStream, ptr %83, i32 0, i32 29
  %85 = getelementptr inbounds %struct.bs, ptr %84, i32 0, i32 5
  store i32 15, ptr %85, align 4, !tbaa !26
  %86 = load ptr, ptr %4, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.WavpackStream, ptr %86, i32 0, i32 29
  %88 = getelementptr inbounds %struct.bs, ptr %87, i32 0, i32 2
  %89 = load ptr, ptr %88, align 8, !tbaa !23
  %90 = load i16, ptr %89, align 2, !tbaa !30
  %91 = zext i16 %90 to i32
  %92 = load ptr, ptr %4, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.WavpackStream, ptr %92, i32 0, i32 29
  %94 = getelementptr inbounds %struct.bs, ptr %93, i32 0, i32 6
  store i32 %91, ptr %94, align 8, !tbaa !27
  %95 = and i32 %91, 1
  %96 = icmp ne i32 %95, 0
  br i1 %96, label %97, label %103

97:                                               ; preds = %82, %51
  %98 = load ptr, ptr %4, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.WavpackStream, ptr %98, i32 0, i32 29
  %100 = getelementptr inbounds %struct.bs, ptr %99, i32 0, i32 6
  %101 = load i32, ptr %100, align 8, !tbaa !27
  %102 = lshr i32 %101, 1
  store i32 %102, ptr %100, align 8, !tbaa !27
  br i1 true, label %109, label %390

103:                                              ; preds = %82, %51
  %104 = load ptr, ptr %4, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.WavpackStream, ptr %104, i32 0, i32 29
  %106 = getelementptr inbounds %struct.bs, ptr %105, i32 0, i32 6
  %107 = load i32, ptr %106, align 8, !tbaa !27
  %108 = lshr i32 %107, 1
  store i32 %108, ptr %106, align 8, !tbaa !27
  br i1 false, label %109, label %390

109:                                              ; preds = %103, %97
  br label %110

110:                                              ; preds = %109
  br label %111

111:                                              ; preds = %135, %110
  %112 = load ptr, ptr %4, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.WavpackStream, ptr %112, i32 0, i32 29
  %114 = getelementptr inbounds %struct.bs, ptr %113, i32 0, i32 5
  %115 = load i32, ptr %114, align 4, !tbaa !26
  %116 = icmp sgt i32 23, %115
  br i1 %116, label %117, label %159

117:                                              ; preds = %111
  %118 = load ptr, ptr %4, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.WavpackStream, ptr %118, i32 0, i32 29
  %120 = getelementptr inbounds %struct.bs, ptr %119, i32 0, i32 2
  %121 = load ptr, ptr %120, align 8, !tbaa !23
  %122 = getelementptr inbounds i16, ptr %121, i32 1
  store ptr %122, ptr %120, align 8, !tbaa !23
  %123 = load ptr, ptr %4, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.WavpackStream, ptr %123, i32 0, i32 29
  %125 = getelementptr inbounds %struct.bs, ptr %124, i32 0, i32 1
  %126 = load ptr, ptr %125, align 8, !tbaa !28
  %127 = icmp eq ptr %122, %126
  br i1 %127, label %128, label %135

128:                                              ; preds = %117
  %129 = load ptr, ptr %4, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.WavpackStream, ptr %129, i32 0, i32 29
  %131 = getelementptr inbounds %struct.bs, ptr %130, i32 0, i32 3
  %132 = load ptr, ptr %131, align 8, !tbaa !29
  %133 = load ptr, ptr %4, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.WavpackStream, ptr %133, i32 0, i32 29
  call void %132(ptr noundef %134)
  br label %135

135:                                              ; preds = %128, %117
  %136 = load ptr, ptr %4, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.WavpackStream, ptr %136, i32 0, i32 29
  %138 = getelementptr inbounds %struct.bs, ptr %137, i32 0, i32 2
  %139 = load ptr, ptr %138, align 8, !tbaa !23
  %140 = load i16, ptr %139, align 2, !tbaa !30
  %141 = zext i16 %140 to i32
  %142 = load ptr, ptr %4, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.WavpackStream, ptr %142, i32 0, i32 29
  %144 = getelementptr inbounds %struct.bs, ptr %143, i32 0, i32 5
  %145 = load i32, ptr %144, align 4, !tbaa !26
  %146 = shl i32 %141, %145
  %147 = load ptr, ptr %4, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.WavpackStream, ptr %147, i32 0, i32 29
  %149 = getelementptr inbounds %struct.bs, ptr %148, i32 0, i32 6
  %150 = load i32, ptr %149, align 8, !tbaa !27
  %151 = or i32 %150, %146
  store i32 %151, ptr %149, align 8, !tbaa !27
  %152 = load ptr, ptr %4, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.WavpackStream, ptr %152, i32 0, i32 29
  %154 = getelementptr inbounds %struct.bs, ptr %153, i32 0, i32 5
  %155 = load i32, ptr %154, align 4, !tbaa !26
  %156 = sext i32 %155 to i64
  %157 = add i64 %156, 16
  %158 = trunc i64 %157 to i32
  store i32 %158, ptr %154, align 4, !tbaa !26
  br label %111, !llvm.loop !31

159:                                              ; preds = %111
  %160 = load ptr, ptr %4, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.WavpackStream, ptr %160, i32 0, i32 29
  %162 = getelementptr inbounds %struct.bs, ptr %161, i32 0, i32 6
  %163 = load i32, ptr %162, align 8, !tbaa !27
  store i32 %163, ptr %12, align 4, !tbaa !9
  %164 = load ptr, ptr %4, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.WavpackStream, ptr %164, i32 0, i32 29
  %166 = getelementptr inbounds %struct.bs, ptr %165, i32 0, i32 5
  %167 = load i32, ptr %166, align 4, !tbaa !26
  %168 = icmp sgt i32 %167, 32
  br i1 %168, label %169, label %192

169:                                              ; preds = %159
  %170 = load ptr, ptr %4, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.WavpackStream, ptr %170, i32 0, i32 29
  %172 = getelementptr inbounds %struct.bs, ptr %171, i32 0, i32 5
  %173 = load i32, ptr %172, align 4, !tbaa !26
  %174 = sub nsw i32 %173, 23
  store i32 %174, ptr %172, align 4, !tbaa !26
  %175 = load ptr, ptr %4, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.WavpackStream, ptr %175, i32 0, i32 29
  %177 = getelementptr inbounds %struct.bs, ptr %176, i32 0, i32 2
  %178 = load ptr, ptr %177, align 8, !tbaa !23
  %179 = load i16, ptr %178, align 2, !tbaa !30
  %180 = zext i16 %179 to i32
  %181 = load ptr, ptr %4, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.WavpackStream, ptr %181, i32 0, i32 29
  %183 = getelementptr inbounds %struct.bs, ptr %182, i32 0, i32 5
  %184 = load i32, ptr %183, align 4, !tbaa !26
  %185 = sext i32 %184 to i64
  %186 = sub i64 16, %185
  %187 = trunc i64 %186 to i32
  %188 = ashr i32 %180, %187
  %189 = load ptr, ptr %4, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.WavpackStream, ptr %189, i32 0, i32 29
  %191 = getelementptr inbounds %struct.bs, ptr %190, i32 0, i32 6
  store i32 %188, ptr %191, align 8, !tbaa !27
  br label %203

192:                                              ; preds = %159
  %193 = load ptr, ptr %4, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.WavpackStream, ptr %193, i32 0, i32 29
  %195 = getelementptr inbounds %struct.bs, ptr %194, i32 0, i32 5
  %196 = load i32, ptr %195, align 4, !tbaa !26
  %197 = sub nsw i32 %196, 23
  store i32 %197, ptr %195, align 4, !tbaa !26
  %198 = load ptr, ptr %4, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.WavpackStream, ptr %198, i32 0, i32 29
  %200 = getelementptr inbounds %struct.bs, ptr %199, i32 0, i32 6
  %201 = load i32, ptr %200, align 8, !tbaa !27
  %202 = lshr i32 %201, 23
  store i32 %202, ptr %200, align 8, !tbaa !27
  br label %203

203:                                              ; preds = %192, %169
  br label %204

204:                                              ; preds = %203
  br label %205

205:                                              ; preds = %204
  %206 = load i32, ptr %11, align 4, !tbaa !9
  %207 = load i32, ptr %12, align 4, !tbaa !9
  %208 = xor i32 %206, %207
  %209 = and i32 %208, 8388607
  %210 = load i32, ptr %11, align 4, !tbaa !9
  %211 = xor i32 %210, %209
  store i32 %211, ptr %11, align 4, !tbaa !9
  %212 = load i32, ptr %10, align 4, !tbaa !9
  %213 = icmp sge i32 %212, 25
  br i1 %213, label %214, label %318

214:                                              ; preds = %205
  br label %215

215:                                              ; preds = %214
  br label %216

216:                                              ; preds = %240, %215
  %217 = load ptr, ptr %4, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.WavpackStream, ptr %217, i32 0, i32 29
  %219 = getelementptr inbounds %struct.bs, ptr %218, i32 0, i32 5
  %220 = load i32, ptr %219, align 4, !tbaa !26
  %221 = icmp sgt i32 8, %220
  br i1 %221, label %222, label %264

222:                                              ; preds = %216
  %223 = load ptr, ptr %4, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.WavpackStream, ptr %223, i32 0, i32 29
  %225 = getelementptr inbounds %struct.bs, ptr %224, i32 0, i32 2
  %226 = load ptr, ptr %225, align 8, !tbaa !23
  %227 = getelementptr inbounds i16, ptr %226, i32 1
  store ptr %227, ptr %225, align 8, !tbaa !23
  %228 = load ptr, ptr %4, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.WavpackStream, ptr %228, i32 0, i32 29
  %230 = getelementptr inbounds %struct.bs, ptr %229, i32 0, i32 1
  %231 = load ptr, ptr %230, align 8, !tbaa !28
  %232 = icmp eq ptr %227, %231
  br i1 %232, label %233, label %240

233:                                              ; preds = %222
  %234 = load ptr, ptr %4, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.WavpackStream, ptr %234, i32 0, i32 29
  %236 = getelementptr inbounds %struct.bs, ptr %235, i32 0, i32 3
  %237 = load ptr, ptr %236, align 8, !tbaa !29
  %238 = load ptr, ptr %4, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.WavpackStream, ptr %238, i32 0, i32 29
  call void %237(ptr noundef %239)
  br label %240

240:                                              ; preds = %233, %222
  %241 = load ptr, ptr %4, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.WavpackStream, ptr %241, i32 0, i32 29
  %243 = getelementptr inbounds %struct.bs, ptr %242, i32 0, i32 2
  %244 = load ptr, ptr %243, align 8, !tbaa !23
  %245 = load i16, ptr %244, align 2, !tbaa !30
  %246 = zext i16 %245 to i32
  %247 = load ptr, ptr %4, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.WavpackStream, ptr %247, i32 0, i32 29
  %249 = getelementptr inbounds %struct.bs, ptr %248, i32 0, i32 5
  %250 = load i32, ptr %249, align 4, !tbaa !26
  %251 = shl i32 %246, %250
  %252 = load ptr, ptr %4, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.WavpackStream, ptr %252, i32 0, i32 29
  %254 = getelementptr inbounds %struct.bs, ptr %253, i32 0, i32 6
  %255 = load i32, ptr %254, align 8, !tbaa !27
  %256 = or i32 %255, %251
  store i32 %256, ptr %254, align 8, !tbaa !27
  %257 = load ptr, ptr %4, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.WavpackStream, ptr %257, i32 0, i32 29
  %259 = getelementptr inbounds %struct.bs, ptr %258, i32 0, i32 5
  %260 = load i32, ptr %259, align 4, !tbaa !26
  %261 = sext i32 %260 to i64
  %262 = add i64 %261, 16
  %263 = trunc i64 %262 to i32
  store i32 %263, ptr %259, align 4, !tbaa !26
  br label %216, !llvm.loop !33

264:                                              ; preds = %216
  %265 = load ptr, ptr %4, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.WavpackStream, ptr %265, i32 0, i32 29
  %267 = getelementptr inbounds %struct.bs, ptr %266, i32 0, i32 6
  %268 = load i32, ptr %267, align 8, !tbaa !27
  store i32 %268, ptr %12, align 4, !tbaa !9
  %269 = load ptr, ptr %4, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.WavpackStream, ptr %269, i32 0, i32 29
  %271 = getelementptr inbounds %struct.bs, ptr %270, i32 0, i32 5
  %272 = load i32, ptr %271, align 4, !tbaa !26
  %273 = icmp sgt i32 %272, 32
  br i1 %273, label %274, label %297

274:                                              ; preds = %264
  %275 = load ptr, ptr %4, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.WavpackStream, ptr %275, i32 0, i32 29
  %277 = getelementptr inbounds %struct.bs, ptr %276, i32 0, i32 5
  %278 = load i32, ptr %277, align 4, !tbaa !26
  %279 = sub nsw i32 %278, 8
  store i32 %279, ptr %277, align 4, !tbaa !26
  %280 = load ptr, ptr %4, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.WavpackStream, ptr %280, i32 0, i32 29
  %282 = getelementptr inbounds %struct.bs, ptr %281, i32 0, i32 2
  %283 = load ptr, ptr %282, align 8, !tbaa !23
  %284 = load i16, ptr %283, align 2, !tbaa !30
  %285 = zext i16 %284 to i32
  %286 = load ptr, ptr %4, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.WavpackStream, ptr %286, i32 0, i32 29
  %288 = getelementptr inbounds %struct.bs, ptr %287, i32 0, i32 5
  %289 = load i32, ptr %288, align 4, !tbaa !26
  %290 = sext i32 %289 to i64
  %291 = sub i64 16, %290
  %292 = trunc i64 %291 to i32
  %293 = ashr i32 %285, %292
  %294 = load ptr, ptr %4, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.WavpackStream, ptr %294, i32 0, i32 29
  %296 = getelementptr inbounds %struct.bs, ptr %295, i32 0, i32 6
  store i32 %293, ptr %296, align 8, !tbaa !27
  br label %308

297:                                              ; preds = %264
  %298 = load ptr, ptr %4, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.WavpackStream, ptr %298, i32 0, i32 29
  %300 = getelementptr inbounds %struct.bs, ptr %299, i32 0, i32 5
  %301 = load i32, ptr %300, align 4, !tbaa !26
  %302 = sub nsw i32 %301, 8
  store i32 %302, ptr %300, align 4, !tbaa !26
  %303 = load ptr, ptr %4, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.WavpackStream, ptr %303, i32 0, i32 29
  %305 = getelementptr inbounds %struct.bs, ptr %304, i32 0, i32 6
  %306 = load i32, ptr %305, align 8, !tbaa !27
  %307 = lshr i32 %306, 8
  store i32 %307, ptr %305, align 8, !tbaa !27
  br label %308

308:                                              ; preds = %297, %274
  br label %309

309:                                              ; preds = %308
  br label %310

310:                                              ; preds = %309
  %311 = load i32, ptr %11, align 4, !tbaa !9
  %312 = load i32, ptr %12, align 4, !tbaa !9
  %313 = shl i32 %312, 23
  %314 = xor i32 %311, %313
  %315 = and i32 %314, 2139095040
  %316 = load i32, ptr %11, align 4, !tbaa !9
  %317 = xor i32 %316, %315
  store i32 %317, ptr %11, align 4, !tbaa !9
  br label %318

318:                                              ; preds = %310, %205
  %319 = load i32, ptr %11, align 4, !tbaa !9
  %320 = load ptr, ptr %4, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.WavpackStream, ptr %320, i32 0, i32 29
  %322 = getelementptr inbounds %struct.bs, ptr %321, i32 0, i32 5
  %323 = load i32, ptr %322, align 4, !tbaa !26
  %324 = icmp ne i32 %323, 0
  br i1 %324, label %325, label %337

325:                                              ; preds = %318
  %326 = load ptr, ptr %4, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.WavpackStream, ptr %326, i32 0, i32 29
  %328 = getelementptr inbounds %struct.bs, ptr %327, i32 0, i32 5
  %329 = load i32, ptr %328, align 4, !tbaa !26
  %330 = add nsw i32 %329, -1
  store i32 %330, ptr %328, align 4, !tbaa !26
  %331 = load ptr, ptr %4, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.WavpackStream, ptr %331, i32 0, i32 29
  %333 = getelementptr inbounds %struct.bs, ptr %332, i32 0, i32 6
  %334 = load i32, ptr %333, align 8, !tbaa !27
  %335 = and i32 %334, 1
  %336 = icmp ne i32 %335, 0
  br i1 %336, label %371, label %377

337:                                              ; preds = %318
  %338 = load ptr, ptr %4, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.WavpackStream, ptr %338, i32 0, i32 29
  %340 = getelementptr inbounds %struct.bs, ptr %339, i32 0, i32 2
  %341 = load ptr, ptr %340, align 8, !tbaa !23
  %342 = getelementptr inbounds i16, ptr %341, i32 1
  store ptr %342, ptr %340, align 8, !tbaa !23
  %343 = load ptr, ptr %4, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.WavpackStream, ptr %343, i32 0, i32 29
  %345 = getelementptr inbounds %struct.bs, ptr %344, i32 0, i32 1
  %346 = load ptr, ptr %345, align 8, !tbaa !28
  %347 = icmp ne ptr %342, %346
  br i1 %347, label %348, label %349

348:                                              ; preds = %337
  br label %356

349:                                              ; preds = %337
  %350 = load ptr, ptr %4, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.WavpackStream, ptr %350, i32 0, i32 29
  %352 = getelementptr inbounds %struct.bs, ptr %351, i32 0, i32 3
  %353 = load ptr, ptr %352, align 8, !tbaa !29
  %354 = load ptr, ptr %4, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.WavpackStream, ptr %354, i32 0, i32 29
  call void %353(ptr noundef %355)
  br label %356

356:                                              ; preds = %349, %348
  %357 = load ptr, ptr %4, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.WavpackStream, ptr %357, i32 0, i32 29
  %359 = getelementptr inbounds %struct.bs, ptr %358, i32 0, i32 5
  store i32 15, ptr %359, align 4, !tbaa !26
  %360 = load ptr, ptr %4, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.WavpackStream, ptr %360, i32 0, i32 29
  %362 = getelementptr inbounds %struct.bs, ptr %361, i32 0, i32 2
  %363 = load ptr, ptr %362, align 8, !tbaa !23
  %364 = load i16, ptr %363, align 2, !tbaa !30
  %365 = zext i16 %364 to i32
  %366 = load ptr, ptr %4, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.WavpackStream, ptr %366, i32 0, i32 29
  %368 = getelementptr inbounds %struct.bs, ptr %367, i32 0, i32 6
  store i32 %365, ptr %368, align 8, !tbaa !27
  %369 = and i32 %365, 1
  %370 = icmp ne i32 %369, 0
  br i1 %370, label %371, label %377

371:                                              ; preds = %356, %325
  %372 = load ptr, ptr %4, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.WavpackStream, ptr %372, i32 0, i32 29
  %374 = getelementptr inbounds %struct.bs, ptr %373, i32 0, i32 6
  %375 = load i32, ptr %374, align 8, !tbaa !27
  %376 = lshr i32 %375, 1
  store i32 %376, ptr %374, align 8, !tbaa !27
  br label %383

377:                                              ; preds = %356, %325
  %378 = load ptr, ptr %4, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.WavpackStream, ptr %378, i32 0, i32 29
  %380 = getelementptr inbounds %struct.bs, ptr %379, i32 0, i32 6
  %381 = load i32, ptr %380, align 8, !tbaa !27
  %382 = lshr i32 %381, 1
  store i32 %382, ptr %380, align 8, !tbaa !27
  br label %383

383:                                              ; preds = %377, %371
  %384 = phi i32 [ 1, %371 ], [ 0, %377 ]
  %385 = shl i32 %384, 31
  %386 = xor i32 %319, %385
  %387 = and i32 %386, -2147483648
  %388 = load i32, ptr %11, align 4, !tbaa !9
  %389 = xor i32 %388, %387
  store i32 %389, ptr %11, align 4, !tbaa !9
  br label %470

390:                                              ; preds = %103, %97
  %391 = load ptr, ptr %4, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.WavpackStream, ptr %391, i32 0, i32 35
  %393 = load i8, ptr %392, align 8, !tbaa !25
  %394 = zext i8 %393 to i32
  %395 = and i32 %394, 16
  %396 = icmp ne i32 %395, 0
  br i1 %396, label %397, label %469

397:                                              ; preds = %390
  %398 = load i32, ptr %11, align 4, !tbaa !9
  %399 = load ptr, ptr %4, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.WavpackStream, ptr %399, i32 0, i32 29
  %401 = getelementptr inbounds %struct.bs, ptr %400, i32 0, i32 5
  %402 = load i32, ptr %401, align 4, !tbaa !26
  %403 = icmp ne i32 %402, 0
  br i1 %403, label %404, label %416

404:                                              ; preds = %397
  %405 = load ptr, ptr %4, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.WavpackStream, ptr %405, i32 0, i32 29
  %407 = getelementptr inbounds %struct.bs, ptr %406, i32 0, i32 5
  %408 = load i32, ptr %407, align 4, !tbaa !26
  %409 = add nsw i32 %408, -1
  store i32 %409, ptr %407, align 4, !tbaa !26
  %410 = load ptr, ptr %4, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.WavpackStream, ptr %410, i32 0, i32 29
  %412 = getelementptr inbounds %struct.bs, ptr %411, i32 0, i32 6
  %413 = load i32, ptr %412, align 8, !tbaa !27
  %414 = and i32 %413, 1
  %415 = icmp ne i32 %414, 0
  br i1 %415, label %450, label %456

416:                                              ; preds = %397
  %417 = load ptr, ptr %4, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.WavpackStream, ptr %417, i32 0, i32 29
  %419 = getelementptr inbounds %struct.bs, ptr %418, i32 0, i32 2
  %420 = load ptr, ptr %419, align 8, !tbaa !23
  %421 = getelementptr inbounds i16, ptr %420, i32 1
  store ptr %421, ptr %419, align 8, !tbaa !23
  %422 = load ptr, ptr %4, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.WavpackStream, ptr %422, i32 0, i32 29
  %424 = getelementptr inbounds %struct.bs, ptr %423, i32 0, i32 1
  %425 = load ptr, ptr %424, align 8, !tbaa !28
  %426 = icmp ne ptr %421, %425
  br i1 %426, label %427, label %428

427:                                              ; preds = %416
  br label %435

428:                                              ; preds = %416
  %429 = load ptr, ptr %4, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.WavpackStream, ptr %429, i32 0, i32 29
  %431 = getelementptr inbounds %struct.bs, ptr %430, i32 0, i32 3
  %432 = load ptr, ptr %431, align 8, !tbaa !29
  %433 = load ptr, ptr %4, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.WavpackStream, ptr %433, i32 0, i32 29
  call void %432(ptr noundef %434)
  br label %435

435:                                              ; preds = %428, %427
  %436 = load ptr, ptr %4, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.WavpackStream, ptr %436, i32 0, i32 29
  %438 = getelementptr inbounds %struct.bs, ptr %437, i32 0, i32 5
  store i32 15, ptr %438, align 4, !tbaa !26
  %439 = load ptr, ptr %4, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.WavpackStream, ptr %439, i32 0, i32 29
  %441 = getelementptr inbounds %struct.bs, ptr %440, i32 0, i32 2
  %442 = load ptr, ptr %441, align 8, !tbaa !23
  %443 = load i16, ptr %442, align 2, !tbaa !30
  %444 = zext i16 %443 to i32
  %445 = load ptr, ptr %4, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.WavpackStream, ptr %445, i32 0, i32 29
  %447 = getelementptr inbounds %struct.bs, ptr %446, i32 0, i32 6
  store i32 %444, ptr %447, align 8, !tbaa !27
  %448 = and i32 %444, 1
  %449 = icmp ne i32 %448, 0
  br i1 %449, label %450, label %456

450:                                              ; preds = %435, %404
  %451 = load ptr, ptr %4, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.WavpackStream, ptr %451, i32 0, i32 29
  %453 = getelementptr inbounds %struct.bs, ptr %452, i32 0, i32 6
  %454 = load i32, ptr %453, align 8, !tbaa !27
  %455 = lshr i32 %454, 1
  store i32 %455, ptr %453, align 8, !tbaa !27
  br label %462

456:                                              ; preds = %435, %404
  %457 = load ptr, ptr %4, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.WavpackStream, ptr %457, i32 0, i32 29
  %459 = getelementptr inbounds %struct.bs, ptr %458, i32 0, i32 6
  %460 = load i32, ptr %459, align 8, !tbaa !27
  %461 = lshr i32 %460, 1
  store i32 %461, ptr %459, align 8, !tbaa !27
  br label %462

462:                                              ; preds = %456, %450
  %463 = phi i32 [ 1, %450 ], [ 0, %456 ]
  %464 = shl i32 %463, 31
  %465 = xor i32 %398, %464
  %466 = and i32 %465, -2147483648
  %467 = load i32, ptr %11, align 4, !tbaa !9
  %468 = xor i32 %467, %466
  store i32 %468, ptr %11, align 4, !tbaa !9
  br label %469

469:                                              ; preds = %462, %390
  br label %470

470:                                              ; preds = %469, %383
  br label %471

471:                                              ; preds = %470, %38
  br label %916

472:                                              ; preds = %30
  %473 = load ptr, ptr %4, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.WavpackStream, ptr %473, i32 0, i32 36
  %475 = load i8, ptr %474, align 1, !tbaa !34
  %476 = zext i8 %475 to i32
  %477 = and i32 %476, 31
  %478 = load ptr, ptr %5, align 8, !tbaa !5
  %479 = load i32, ptr %478, align 4, !tbaa !9
  %480 = shl i32 %479, %477
  store i32 %480, ptr %478, align 4, !tbaa !9
  %481 = load ptr, ptr %5, align 8, !tbaa !5
  %482 = load i32, ptr %481, align 4, !tbaa !9
  %483 = icmp slt i32 %482, 0
  br i1 %483, label %484, label %494

484:                                              ; preds = %472
  %485 = load ptr, ptr %5, align 8, !tbaa !5
  %486 = load i32, ptr %485, align 4, !tbaa !9
  %487 = sub nsw i32 0, %486
  %488 = load ptr, ptr %5, align 8, !tbaa !5
  store i32 %487, ptr %488, align 4, !tbaa !9
  %489 = load i32, ptr %11, align 4, !tbaa !9
  %490 = xor i32 %489, -2147483648
  %491 = and i32 %490, -2147483648
  %492 = load i32, ptr %11, align 4, !tbaa !9
  %493 = xor i32 %492, %491
  store i32 %493, ptr %11, align 4, !tbaa !9
  br label %494

494:                                              ; preds = %484, %472
  %495 = load ptr, ptr %5, align 8, !tbaa !5
  %496 = load i32, ptr %495, align 4, !tbaa !9
  %497 = icmp eq i32 %496, 16777216
  br i1 %497, label %498, label %671

498:                                              ; preds = %494
  %499 = load ptr, ptr %4, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.WavpackStream, ptr %499, i32 0, i32 29
  %501 = getelementptr inbounds %struct.bs, ptr %500, i32 0, i32 5
  %502 = load i32, ptr %501, align 4, !tbaa !26
  %503 = icmp ne i32 %502, 0
  br i1 %503, label %504, label %516

504:                                              ; preds = %498
  %505 = load ptr, ptr %4, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.WavpackStream, ptr %505, i32 0, i32 29
  %507 = getelementptr inbounds %struct.bs, ptr %506, i32 0, i32 5
  %508 = load i32, ptr %507, align 4, !tbaa !26
  %509 = add nsw i32 %508, -1
  store i32 %509, ptr %507, align 4, !tbaa !26
  %510 = load ptr, ptr %4, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.WavpackStream, ptr %510, i32 0, i32 29
  %512 = getelementptr inbounds %struct.bs, ptr %511, i32 0, i32 6
  %513 = load i32, ptr %512, align 8, !tbaa !27
  %514 = and i32 %513, 1
  %515 = icmp ne i32 %514, 0
  br i1 %515, label %550, label %556

516:                                              ; preds = %498
  %517 = load ptr, ptr %4, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.WavpackStream, ptr %517, i32 0, i32 29
  %519 = getelementptr inbounds %struct.bs, ptr %518, i32 0, i32 2
  %520 = load ptr, ptr %519, align 8, !tbaa !23
  %521 = getelementptr inbounds i16, ptr %520, i32 1
  store ptr %521, ptr %519, align 8, !tbaa !23
  %522 = load ptr, ptr %4, align 8, !tbaa !5
  %523 = getelementptr inbounds %struct.WavpackStream, ptr %522, i32 0, i32 29
  %524 = getelementptr inbounds %struct.bs, ptr %523, i32 0, i32 1
  %525 = load ptr, ptr %524, align 8, !tbaa !28
  %526 = icmp ne ptr %521, %525
  br i1 %526, label %527, label %528

527:                                              ; preds = %516
  br label %535

528:                                              ; preds = %516
  %529 = load ptr, ptr %4, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.WavpackStream, ptr %529, i32 0, i32 29
  %531 = getelementptr inbounds %struct.bs, ptr %530, i32 0, i32 3
  %532 = load ptr, ptr %531, align 8, !tbaa !29
  %533 = load ptr, ptr %4, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.WavpackStream, ptr %533, i32 0, i32 29
  call void %532(ptr noundef %534)
  br label %535

535:                                              ; preds = %528, %527
  %536 = load ptr, ptr %4, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.WavpackStream, ptr %536, i32 0, i32 29
  %538 = getelementptr inbounds %struct.bs, ptr %537, i32 0, i32 5
  store i32 15, ptr %538, align 4, !tbaa !26
  %539 = load ptr, ptr %4, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.WavpackStream, ptr %539, i32 0, i32 29
  %541 = getelementptr inbounds %struct.bs, ptr %540, i32 0, i32 2
  %542 = load ptr, ptr %541, align 8, !tbaa !23
  %543 = load i16, ptr %542, align 2, !tbaa !30
  %544 = zext i16 %543 to i32
  %545 = load ptr, ptr %4, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.WavpackStream, ptr %545, i32 0, i32 29
  %547 = getelementptr inbounds %struct.bs, ptr %546, i32 0, i32 6
  store i32 %544, ptr %547, align 8, !tbaa !27
  %548 = and i32 %544, 1
  %549 = icmp ne i32 %548, 0
  br i1 %549, label %550, label %556

550:                                              ; preds = %535, %504
  %551 = load ptr, ptr %4, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.WavpackStream, ptr %551, i32 0, i32 29
  %553 = getelementptr inbounds %struct.bs, ptr %552, i32 0, i32 6
  %554 = load i32, ptr %553, align 8, !tbaa !27
  %555 = lshr i32 %554, 1
  store i32 %555, ptr %553, align 8, !tbaa !27
  br i1 true, label %562, label %665

556:                                              ; preds = %535, %504
  %557 = load ptr, ptr %4, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.WavpackStream, ptr %557, i32 0, i32 29
  %559 = getelementptr inbounds %struct.bs, ptr %558, i32 0, i32 6
  %560 = load i32, ptr %559, align 8, !tbaa !27
  %561 = lshr i32 %560, 1
  store i32 %561, ptr %559, align 8, !tbaa !27
  br i1 false, label %562, label %665

562:                                              ; preds = %556, %550
  br label %563

563:                                              ; preds = %562
  br label %564

564:                                              ; preds = %588, %563
  %565 = load ptr, ptr %4, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.WavpackStream, ptr %565, i32 0, i32 29
  %567 = getelementptr inbounds %struct.bs, ptr %566, i32 0, i32 5
  %568 = load i32, ptr %567, align 4, !tbaa !26
  %569 = icmp sgt i32 23, %568
  br i1 %569, label %570, label %612

570:                                              ; preds = %564
  %571 = load ptr, ptr %4, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.WavpackStream, ptr %571, i32 0, i32 29
  %573 = getelementptr inbounds %struct.bs, ptr %572, i32 0, i32 2
  %574 = load ptr, ptr %573, align 8, !tbaa !23
  %575 = getelementptr inbounds i16, ptr %574, i32 1
  store ptr %575, ptr %573, align 8, !tbaa !23
  %576 = load ptr, ptr %4, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.WavpackStream, ptr %576, i32 0, i32 29
  %578 = getelementptr inbounds %struct.bs, ptr %577, i32 0, i32 1
  %579 = load ptr, ptr %578, align 8, !tbaa !28
  %580 = icmp eq ptr %575, %579
  br i1 %580, label %581, label %588

581:                                              ; preds = %570
  %582 = load ptr, ptr %4, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.WavpackStream, ptr %582, i32 0, i32 29
  %584 = getelementptr inbounds %struct.bs, ptr %583, i32 0, i32 3
  %585 = load ptr, ptr %584, align 8, !tbaa !29
  %586 = load ptr, ptr %4, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.WavpackStream, ptr %586, i32 0, i32 29
  call void %585(ptr noundef %587)
  br label %588

588:                                              ; preds = %581, %570
  %589 = load ptr, ptr %4, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.WavpackStream, ptr %589, i32 0, i32 29
  %591 = getelementptr inbounds %struct.bs, ptr %590, i32 0, i32 2
  %592 = load ptr, ptr %591, align 8, !tbaa !23
  %593 = load i16, ptr %592, align 2, !tbaa !30
  %594 = zext i16 %593 to i32
  %595 = load ptr, ptr %4, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.WavpackStream, ptr %595, i32 0, i32 29
  %597 = getelementptr inbounds %struct.bs, ptr %596, i32 0, i32 5
  %598 = load i32, ptr %597, align 4, !tbaa !26
  %599 = shl i32 %594, %598
  %600 = load ptr, ptr %4, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.WavpackStream, ptr %600, i32 0, i32 29
  %602 = getelementptr inbounds %struct.bs, ptr %601, i32 0, i32 6
  %603 = load i32, ptr %602, align 8, !tbaa !27
  %604 = or i32 %603, %599
  store i32 %604, ptr %602, align 8, !tbaa !27
  %605 = load ptr, ptr %4, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.WavpackStream, ptr %605, i32 0, i32 29
  %607 = getelementptr inbounds %struct.bs, ptr %606, i32 0, i32 5
  %608 = load i32, ptr %607, align 4, !tbaa !26
  %609 = sext i32 %608 to i64
  %610 = add i64 %609, 16
  %611 = trunc i64 %610 to i32
  store i32 %611, ptr %607, align 4, !tbaa !26
  br label %564, !llvm.loop !35

612:                                              ; preds = %564
  %613 = load ptr, ptr %4, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.WavpackStream, ptr %613, i32 0, i32 29
  %615 = getelementptr inbounds %struct.bs, ptr %614, i32 0, i32 6
  %616 = load i32, ptr %615, align 8, !tbaa !27
  store i32 %616, ptr %12, align 4, !tbaa !9
  %617 = load ptr, ptr %4, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.WavpackStream, ptr %617, i32 0, i32 29
  %619 = getelementptr inbounds %struct.bs, ptr %618, i32 0, i32 5
  %620 = load i32, ptr %619, align 4, !tbaa !26
  %621 = icmp sgt i32 %620, 32
  br i1 %621, label %622, label %645

622:                                              ; preds = %612
  %623 = load ptr, ptr %4, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.WavpackStream, ptr %623, i32 0, i32 29
  %625 = getelementptr inbounds %struct.bs, ptr %624, i32 0, i32 5
  %626 = load i32, ptr %625, align 4, !tbaa !26
  %627 = sub nsw i32 %626, 23
  store i32 %627, ptr %625, align 4, !tbaa !26
  %628 = load ptr, ptr %4, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct.WavpackStream, ptr %628, i32 0, i32 29
  %630 = getelementptr inbounds %struct.bs, ptr %629, i32 0, i32 2
  %631 = load ptr, ptr %630, align 8, !tbaa !23
  %632 = load i16, ptr %631, align 2, !tbaa !30
  %633 = zext i16 %632 to i32
  %634 = load ptr, ptr %4, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.WavpackStream, ptr %634, i32 0, i32 29
  %636 = getelementptr inbounds %struct.bs, ptr %635, i32 0, i32 5
  %637 = load i32, ptr %636, align 4, !tbaa !26
  %638 = sext i32 %637 to i64
  %639 = sub i64 16, %638
  %640 = trunc i64 %639 to i32
  %641 = ashr i32 %633, %640
  %642 = load ptr, ptr %4, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.WavpackStream, ptr %642, i32 0, i32 29
  %644 = getelementptr inbounds %struct.bs, ptr %643, i32 0, i32 6
  store i32 %641, ptr %644, align 8, !tbaa !27
  br label %656

645:                                              ; preds = %612
  %646 = load ptr, ptr %4, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.WavpackStream, ptr %646, i32 0, i32 29
  %648 = getelementptr inbounds %struct.bs, ptr %647, i32 0, i32 5
  %649 = load i32, ptr %648, align 4, !tbaa !26
  %650 = sub nsw i32 %649, 23
  store i32 %650, ptr %648, align 4, !tbaa !26
  %651 = load ptr, ptr %4, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.WavpackStream, ptr %651, i32 0, i32 29
  %653 = getelementptr inbounds %struct.bs, ptr %652, i32 0, i32 6
  %654 = load i32, ptr %653, align 8, !tbaa !27
  %655 = lshr i32 %654, 23
  store i32 %655, ptr %653, align 8, !tbaa !27
  br label %656

656:                                              ; preds = %645, %622
  br label %657

657:                                              ; preds = %656
  br label %658

658:                                              ; preds = %657
  %659 = load i32, ptr %11, align 4, !tbaa !9
  %660 = load i32, ptr %12, align 4, !tbaa !9
  %661 = xor i32 %659, %660
  %662 = and i32 %661, 8388607
  %663 = load i32, ptr %11, align 4, !tbaa !9
  %664 = xor i32 %663, %662
  store i32 %664, ptr %11, align 4, !tbaa !9
  br label %665

665:                                              ; preds = %658, %556, %550
  %666 = load i32, ptr %11, align 4, !tbaa !9
  %667 = xor i32 %666, 2139095040
  %668 = and i32 %667, 2139095040
  %669 = load i32, ptr %11, align 4, !tbaa !9
  %670 = xor i32 %669, %668
  store i32 %670, ptr %11, align 4, !tbaa !9
  br label %915

671:                                              ; preds = %494
  %672 = load i32, ptr %10, align 4, !tbaa !9
  %673 = icmp ne i32 %672, 0
  br i1 %673, label %674, label %693

674:                                              ; preds = %671
  br label %675

675:                                              ; preds = %686, %674
  %676 = load ptr, ptr %5, align 8, !tbaa !5
  %677 = load i32, ptr %676, align 4, !tbaa !9
  %678 = and i32 %677, 8388608
  %679 = icmp ne i32 %678, 0
  br i1 %679, label %684, label %680

680:                                              ; preds = %675
  %681 = load i32, ptr %10, align 4, !tbaa !9
  %682 = add nsw i32 %681, -1
  store i32 %682, ptr %10, align 4, !tbaa !9
  %683 = icmp ne i32 %682, 0
  br label %684

684:                                              ; preds = %680, %675
  %685 = phi i1 [ false, %675 ], [ %683, %680 ]
  br i1 %685, label %686, label %692

686:                                              ; preds = %684
  %687 = load i32, ptr %9, align 4, !tbaa !9
  %688 = add nsw i32 %687, 1
  store i32 %688, ptr %9, align 4, !tbaa !9
  %689 = load ptr, ptr %5, align 8, !tbaa !5
  %690 = load i32, ptr %689, align 4, !tbaa !9
  %691 = shl i32 %690, 1
  store i32 %691, ptr %689, align 4, !tbaa !9
  br label %675, !llvm.loop !36

692:                                              ; preds = %684
  br label %693

693:                                              ; preds = %692, %671
  %694 = load i32, ptr %9, align 4, !tbaa !9
  %695 = and i32 %694, 31
  store i32 %695, ptr %9, align 4, !tbaa !9
  %696 = icmp ne i32 %695, 0
  br i1 %696, label %697, label %900

697:                                              ; preds = %693
  %698 = load ptr, ptr %4, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.WavpackStream, ptr %698, i32 0, i32 35
  %700 = load i8, ptr %699, align 8, !tbaa !25
  %701 = zext i8 %700 to i32
  %702 = and i32 %701, 1
  %703 = icmp ne i32 %702, 0
  br i1 %703, label %775, label %704

704:                                              ; preds = %697
  %705 = load ptr, ptr %4, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.WavpackStream, ptr %705, i32 0, i32 35
  %707 = load i8, ptr %706, align 8, !tbaa !25
  %708 = zext i8 %707 to i32
  %709 = and i32 %708, 2
  %710 = icmp ne i32 %709, 0
  br i1 %710, label %711, label %782

711:                                              ; preds = %704
  %712 = load ptr, ptr %4, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.WavpackStream, ptr %712, i32 0, i32 29
  %714 = getelementptr inbounds %struct.bs, ptr %713, i32 0, i32 5
  %715 = load i32, ptr %714, align 4, !tbaa !26
  %716 = icmp ne i32 %715, 0
  br i1 %716, label %717, label %729

717:                                              ; preds = %711
  %718 = load ptr, ptr %4, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.WavpackStream, ptr %718, i32 0, i32 29
  %720 = getelementptr inbounds %struct.bs, ptr %719, i32 0, i32 5
  %721 = load i32, ptr %720, align 4, !tbaa !26
  %722 = add nsw i32 %721, -1
  store i32 %722, ptr %720, align 4, !tbaa !26
  %723 = load ptr, ptr %4, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.WavpackStream, ptr %723, i32 0, i32 29
  %725 = getelementptr inbounds %struct.bs, ptr %724, i32 0, i32 6
  %726 = load i32, ptr %725, align 8, !tbaa !27
  %727 = and i32 %726, 1
  %728 = icmp ne i32 %727, 0
  br i1 %728, label %763, label %769

729:                                              ; preds = %711
  %730 = load ptr, ptr %4, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.WavpackStream, ptr %730, i32 0, i32 29
  %732 = getelementptr inbounds %struct.bs, ptr %731, i32 0, i32 2
  %733 = load ptr, ptr %732, align 8, !tbaa !23
  %734 = getelementptr inbounds i16, ptr %733, i32 1
  store ptr %734, ptr %732, align 8, !tbaa !23
  %735 = load ptr, ptr %4, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.WavpackStream, ptr %735, i32 0, i32 29
  %737 = getelementptr inbounds %struct.bs, ptr %736, i32 0, i32 1
  %738 = load ptr, ptr %737, align 8, !tbaa !28
  %739 = icmp ne ptr %734, %738
  br i1 %739, label %740, label %741

740:                                              ; preds = %729
  br label %748

741:                                              ; preds = %729
  %742 = load ptr, ptr %4, align 8, !tbaa !5
  %743 = getelementptr inbounds %struct.WavpackStream, ptr %742, i32 0, i32 29
  %744 = getelementptr inbounds %struct.bs, ptr %743, i32 0, i32 3
  %745 = load ptr, ptr %744, align 8, !tbaa !29
  %746 = load ptr, ptr %4, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.WavpackStream, ptr %746, i32 0, i32 29
  call void %745(ptr noundef %747)
  br label %748

748:                                              ; preds = %741, %740
  %749 = load ptr, ptr %4, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.WavpackStream, ptr %749, i32 0, i32 29
  %751 = getelementptr inbounds %struct.bs, ptr %750, i32 0, i32 5
  store i32 15, ptr %751, align 4, !tbaa !26
  %752 = load ptr, ptr %4, align 8, !tbaa !5
  %753 = getelementptr inbounds %struct.WavpackStream, ptr %752, i32 0, i32 29
  %754 = getelementptr inbounds %struct.bs, ptr %753, i32 0, i32 2
  %755 = load ptr, ptr %754, align 8, !tbaa !23
  %756 = load i16, ptr %755, align 2, !tbaa !30
  %757 = zext i16 %756 to i32
  %758 = load ptr, ptr %4, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.WavpackStream, ptr %758, i32 0, i32 29
  %760 = getelementptr inbounds %struct.bs, ptr %759, i32 0, i32 6
  store i32 %757, ptr %760, align 8, !tbaa !27
  %761 = and i32 %757, 1
  %762 = icmp ne i32 %761, 0
  br i1 %762, label %763, label %769

763:                                              ; preds = %748, %717
  %764 = load ptr, ptr %4, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.WavpackStream, ptr %764, i32 0, i32 29
  %766 = getelementptr inbounds %struct.bs, ptr %765, i32 0, i32 6
  %767 = load i32, ptr %766, align 8, !tbaa !27
  %768 = lshr i32 %767, 1
  store i32 %768, ptr %766, align 8, !tbaa !27
  br i1 true, label %775, label %782

769:                                              ; preds = %748, %717
  %770 = load ptr, ptr %4, align 8, !tbaa !5
  %771 = getelementptr inbounds %struct.WavpackStream, ptr %770, i32 0, i32 29
  %772 = getelementptr inbounds %struct.bs, ptr %771, i32 0, i32 6
  %773 = load i32, ptr %772, align 8, !tbaa !27
  %774 = lshr i32 %773, 1
  store i32 %774, ptr %772, align 8, !tbaa !27
  br i1 false, label %775, label %782

775:                                              ; preds = %769, %763, %697
  %776 = load i32, ptr %9, align 4, !tbaa !9
  %777 = shl i32 1, %776
  %778 = sub i32 %777, 1
  %779 = load ptr, ptr %5, align 8, !tbaa !5
  %780 = load i32, ptr %779, align 4, !tbaa !9
  %781 = or i32 %780, %778
  store i32 %781, ptr %779, align 4, !tbaa !9
  br label %899

782:                                              ; preds = %769, %763, %704
  %783 = load ptr, ptr %4, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct.WavpackStream, ptr %783, i32 0, i32 35
  %785 = load i8, ptr %784, align 8, !tbaa !25
  %786 = zext i8 %785 to i32
  %787 = and i32 %786, 4
  %788 = icmp ne i32 %787, 0
  br i1 %788, label %789, label %898

789:                                              ; preds = %782
  br label %790

790:                                              ; preds = %789
  br label %791

791:                                              ; preds = %816, %790
  %792 = load i32, ptr %9, align 4, !tbaa !9
  %793 = load ptr, ptr %4, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.WavpackStream, ptr %793, i32 0, i32 29
  %795 = getelementptr inbounds %struct.bs, ptr %794, i32 0, i32 5
  %796 = load i32, ptr %795, align 4, !tbaa !26
  %797 = icmp sgt i32 %792, %796
  br i1 %797, label %798, label %840

798:                                              ; preds = %791
  %799 = load ptr, ptr %4, align 8, !tbaa !5
  %800 = getelementptr inbounds %struct.WavpackStream, ptr %799, i32 0, i32 29
  %801 = getelementptr inbounds %struct.bs, ptr %800, i32 0, i32 2
  %802 = load ptr, ptr %801, align 8, !tbaa !23
  %803 = getelementptr inbounds i16, ptr %802, i32 1
  store ptr %803, ptr %801, align 8, !tbaa !23
  %804 = load ptr, ptr %4, align 8, !tbaa !5
  %805 = getelementptr inbounds %struct.WavpackStream, ptr %804, i32 0, i32 29
  %806 = getelementptr inbounds %struct.bs, ptr %805, i32 0, i32 1
  %807 = load ptr, ptr %806, align 8, !tbaa !28
  %808 = icmp eq ptr %803, %807
  br i1 %808, label %809, label %816

809:                                              ; preds = %798
  %810 = load ptr, ptr %4, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.WavpackStream, ptr %810, i32 0, i32 29
  %812 = getelementptr inbounds %struct.bs, ptr %811, i32 0, i32 3
  %813 = load ptr, ptr %812, align 8, !tbaa !29
  %814 = load ptr, ptr %4, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.WavpackStream, ptr %814, i32 0, i32 29
  call void %813(ptr noundef %815)
  br label %816

816:                                              ; preds = %809, %798
  %817 = load ptr, ptr %4, align 8, !tbaa !5
  %818 = getelementptr inbounds %struct.WavpackStream, ptr %817, i32 0, i32 29
  %819 = getelementptr inbounds %struct.bs, ptr %818, i32 0, i32 2
  %820 = load ptr, ptr %819, align 8, !tbaa !23
  %821 = load i16, ptr %820, align 2, !tbaa !30
  %822 = zext i16 %821 to i32
  %823 = load ptr, ptr %4, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.WavpackStream, ptr %823, i32 0, i32 29
  %825 = getelementptr inbounds %struct.bs, ptr %824, i32 0, i32 5
  %826 = load i32, ptr %825, align 4, !tbaa !26
  %827 = shl i32 %822, %826
  %828 = load ptr, ptr %4, align 8, !tbaa !5
  %829 = getelementptr inbounds %struct.WavpackStream, ptr %828, i32 0, i32 29
  %830 = getelementptr inbounds %struct.bs, ptr %829, i32 0, i32 6
  %831 = load i32, ptr %830, align 8, !tbaa !27
  %832 = or i32 %831, %827
  store i32 %832, ptr %830, align 8, !tbaa !27
  %833 = load ptr, ptr %4, align 8, !tbaa !5
  %834 = getelementptr inbounds %struct.WavpackStream, ptr %833, i32 0, i32 29
  %835 = getelementptr inbounds %struct.bs, ptr %834, i32 0, i32 5
  %836 = load i32, ptr %835, align 4, !tbaa !26
  %837 = sext i32 %836 to i64
  %838 = add i64 %837, 16
  %839 = trunc i64 %838 to i32
  store i32 %839, ptr %835, align 4, !tbaa !26
  br label %791, !llvm.loop !37

840:                                              ; preds = %791
  %841 = load ptr, ptr %4, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.WavpackStream, ptr %841, i32 0, i32 29
  %843 = getelementptr inbounds %struct.bs, ptr %842, i32 0, i32 6
  %844 = load i32, ptr %843, align 8, !tbaa !27
  store i32 %844, ptr %12, align 4, !tbaa !9
  %845 = load ptr, ptr %4, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.WavpackStream, ptr %845, i32 0, i32 29
  %847 = getelementptr inbounds %struct.bs, ptr %846, i32 0, i32 5
  %848 = load i32, ptr %847, align 4, !tbaa !26
  %849 = icmp sgt i32 %848, 32
  br i1 %849, label %850, label %874

850:                                              ; preds = %840
  %851 = load i32, ptr %9, align 4, !tbaa !9
  %852 = load ptr, ptr %4, align 8, !tbaa !5
  %853 = getelementptr inbounds %struct.WavpackStream, ptr %852, i32 0, i32 29
  %854 = getelementptr inbounds %struct.bs, ptr %853, i32 0, i32 5
  %855 = load i32, ptr %854, align 4, !tbaa !26
  %856 = sub nsw i32 %855, %851
  store i32 %856, ptr %854, align 4, !tbaa !26
  %857 = load ptr, ptr %4, align 8, !tbaa !5
  %858 = getelementptr inbounds %struct.WavpackStream, ptr %857, i32 0, i32 29
  %859 = getelementptr inbounds %struct.bs, ptr %858, i32 0, i32 2
  %860 = load ptr, ptr %859, align 8, !tbaa !23
  %861 = load i16, ptr %860, align 2, !tbaa !30
  %862 = zext i16 %861 to i32
  %863 = load ptr, ptr %4, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.WavpackStream, ptr %863, i32 0, i32 29
  %865 = getelementptr inbounds %struct.bs, ptr %864, i32 0, i32 5
  %866 = load i32, ptr %865, align 4, !tbaa !26
  %867 = sext i32 %866 to i64
  %868 = sub i64 16, %867
  %869 = trunc i64 %868 to i32
  %870 = ashr i32 %862, %869
  %871 = load ptr, ptr %4, align 8, !tbaa !5
  %872 = getelementptr inbounds %struct.WavpackStream, ptr %871, i32 0, i32 29
  %873 = getelementptr inbounds %struct.bs, ptr %872, i32 0, i32 6
  store i32 %870, ptr %873, align 8, !tbaa !27
  br label %887

874:                                              ; preds = %840
  %875 = load i32, ptr %9, align 4, !tbaa !9
  %876 = load ptr, ptr %4, align 8, !tbaa !5
  %877 = getelementptr inbounds %struct.WavpackStream, ptr %876, i32 0, i32 29
  %878 = getelementptr inbounds %struct.bs, ptr %877, i32 0, i32 5
  %879 = load i32, ptr %878, align 4, !tbaa !26
  %880 = sub nsw i32 %879, %875
  store i32 %880, ptr %878, align 4, !tbaa !26
  %881 = load i32, ptr %9, align 4, !tbaa !9
  %882 = load ptr, ptr %4, align 8, !tbaa !5
  %883 = getelementptr inbounds %struct.WavpackStream, ptr %882, i32 0, i32 29
  %884 = getelementptr inbounds %struct.bs, ptr %883, i32 0, i32 6
  %885 = load i32, ptr %884, align 8, !tbaa !27
  %886 = lshr i32 %885, %881
  store i32 %886, ptr %884, align 8, !tbaa !27
  br label %887

887:                                              ; preds = %874, %850
  br label %888

888:                                              ; preds = %887
  br label %889

889:                                              ; preds = %888
  %890 = load i32, ptr %12, align 4, !tbaa !9
  %891 = load i32, ptr %9, align 4, !tbaa !9
  %892 = shl i32 1, %891
  %893 = sub i32 %892, 1
  %894 = and i32 %890, %893
  %895 = load ptr, ptr %5, align 8, !tbaa !5
  %896 = load i32, ptr %895, align 4, !tbaa !9
  %897 = or i32 %896, %894
  store i32 %897, ptr %895, align 4, !tbaa !9
  br label %898

898:                                              ; preds = %889, %782
  br label %899

899:                                              ; preds = %898, %775
  br label %900

900:                                              ; preds = %899, %693
  %901 = load i32, ptr %11, align 4, !tbaa !9
  %902 = load ptr, ptr %5, align 8, !tbaa !5
  %903 = load i32, ptr %902, align 4, !tbaa !9
  %904 = xor i32 %901, %903
  %905 = and i32 %904, 8388607
  %906 = load i32, ptr %11, align 4, !tbaa !9
  %907 = xor i32 %906, %905
  store i32 %907, ptr %11, align 4, !tbaa !9
  %908 = load i32, ptr %11, align 4, !tbaa !9
  %909 = load i32, ptr %10, align 4, !tbaa !9
  %910 = shl i32 %909, 23
  %911 = xor i32 %908, %910
  %912 = and i32 %911, 2139095040
  %913 = load i32, ptr %11, align 4, !tbaa !9
  %914 = xor i32 %913, %912
  store i32 %914, ptr %11, align 4, !tbaa !9
  br label %915

915:                                              ; preds = %900, %665
  br label %916

916:                                              ; preds = %915, %471
  %917 = load i32, ptr %7, align 4, !tbaa !9
  %918 = mul i32 %917, 27
  %919 = load i32, ptr %11, align 4, !tbaa !9
  %920 = and i32 %919, 8388607
  %921 = mul nsw i32 %920, 9
  %922 = add i32 %918, %921
  %923 = load i32, ptr %11, align 4, !tbaa !9
  %924 = ashr i32 %923, 23
  %925 = and i32 %924, 255
  %926 = mul nsw i32 %925, 3
  %927 = add i32 %922, %926
  %928 = load i32, ptr %11, align 4, !tbaa !9
  %929 = ashr i32 %928, 31
  %930 = and i32 %929, 1
  %931 = add i32 %927, %930
  store i32 %931, ptr %7, align 4, !tbaa !9
  %932 = load i32, ptr %11, align 4, !tbaa !9
  %933 = load ptr, ptr %5, align 8, !tbaa !5
  %934 = getelementptr inbounds i32, ptr %933, i32 1
  store ptr %934, ptr %5, align 8, !tbaa !5
  store i32 %932, ptr %933, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #2
  br label %26, !llvm.loop !38

935:                                              ; preds = %26
  %936 = load i32, ptr %7, align 4, !tbaa !9
  %937 = load ptr, ptr %4, align 8, !tbaa !5
  %938 = getelementptr inbounds %struct.WavpackStream, ptr %937, i32 0, i32 24
  store i32 %936, ptr %938, align 8, !tbaa !11
  store i32 0, ptr %8, align 4
  br label %939

939:                                              ; preds = %935, %21
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #2
  %940 = load i32, ptr %8, align 4
  switch i32 %940, label %942 [
    i32 0, label %941
    i32 1, label %941
  ]

941:                                              ; preds = %939, %939
  ret void

942:                                              ; preds = %939
  unreachable
}

; 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 hidden void @float_values_nowvx(ptr noundef, ptr 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

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 = { 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 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 184}
!12 = !{!"", !13, i64 0, !15, i64 12, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !16, i64 128, !16, i64 136, !10, i64 144, !10, i64 148, !10, i64 152, !7, i64 156, !7, i64 157, !7, i64 158, !7, i64 159, !7, i64 160, !7, i64 161, !7, i64 162, !10, i64 164, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !10, i64 192, !17, i64 200, !17, i64 248, !17, i64 296, !18, i64 344, !7, i64 348, !7, i64 349, !7, i64 350, !7, i64 351, !7, i64 352, !7, i64 353, !7, i64 354, !7, i64 355, !19, i64 360, !7, i64 432, !21, i64 1968, !6, i64 2064, !22, i64 2072}
!13 = !{!"", !7, i64 0, !14, i64 4, !14, i64 6, !10, i64 8}
!14 = !{!"short", !7, i64 0}
!15 = !{!"words_data", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !7, i64 36}
!16 = !{!"long", !7, i64 0}
!17 = !{!"bs", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !10, i64 32, !10, i64 36, !10, i64 40}
!18 = !{!"float", !7, i64 0}
!19 = !{!"", !7, i64 0, !7, i64 8, !7, i64 16, !20, i64 24, !20, i64 32, !20, i64 40, !6, i64 48, !6, i64 56, !10, i64 64}
!20 = !{!"double", !7, i64 0}
!21 = !{!"decorr_pass", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !7, i64 16, !7, i64 48, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92}
!22 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !7, i64 40, !7, i64 41, !10, i64 44, !10, i64 48, !10, i64 52, !6, i64 56, !10, i64 64, !10, i64 68, !10, i64 72, !7, i64 76, !6, i64 160}
!23 = !{!12, !6, i64 312}
!24 = !{!12, !7, i64 354}
!25 = !{!12, !7, i64 352}
!26 = !{!12, !10, i64 332}
!27 = !{!12, !10, i64 336}
!28 = !{!12, !6, i64 304}
!29 = !{!12, !6, i64 320}
!30 = !{!14, !14, i64 0}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = !{!12, !7, i64 353}
!35 = distinct !{!35, !32}
!36 = distinct !{!36, !32}
!37 = distinct !{!37, !32}
!38 = distinct !{!38, !32}


; 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: nounwind uwtable
define dso_local void @float_values(ptr noundef %0, ptr noundef %1, i32 noundef %2) local_unnamed_addr #0 {
  %4 = getelementptr inbounds i8, ptr %0, i64 184
  %5 = load i32, ptr %4, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %0, i64 296
  %7 = getelementptr inbounds i8, ptr %0, i64 312
  %8 = load ptr, ptr %7, align 8, !tbaa !21
  %.not = icmp eq ptr %8, null
  br i1 %.not, label %16, label %.preheader261

.preheader261:                                    ; preds = %3
  %.not216287 = icmp eq i32 %2, 0
  br i1 %.not216287, label %._crit_edge292, label %.lr.ph291

.lr.ph291:                                        ; preds = %.preheader261
  %9 = getelementptr inbounds i8, ptr %0, i64 354
  %10 = getelementptr inbounds i8, ptr %0, i64 353
  %11 = getelementptr inbounds i8, ptr %0, i64 352
  %12 = getelementptr inbounds i8, ptr %0, i64 332
  %13 = getelementptr inbounds i8, ptr %0, i64 336
  %14 = getelementptr inbounds i8, ptr %0, i64 304
  %15 = getelementptr inbounds i8, ptr %0, i64 320
  br label %17

16:                                               ; preds = %3
  tail call void @float_values_nowvx(ptr noundef nonnull %0, ptr noundef %1, i32 noundef %2)
  br label %384

17:                                               ; preds = %.lr.ph291, %368
  %18 = phi ptr [ %8, %.lr.ph291 ], [ %369, %368 ]
  %19 = phi ptr [ %8, %.lr.ph291 ], [ %370, %368 ]
  %20 = phi ptr [ %8, %.lr.ph291 ], [ %371, %368 ]
  %21 = phi ptr [ %8, %.lr.ph291 ], [ %372, %368 ]
  %.in = phi i32 [ %2, %.lr.ph291 ], [ %22, %368 ]
  %.0197290 = phi i32 [ %5, %.lr.ph291 ], [ %382, %368 ]
  %.0199288 = phi ptr [ %1, %.lr.ph291 ], [ %383, %368 ]
  %22 = add nsw i32 %.in, -1
  %23 = load i8, ptr %9, align 2, !tbaa !22
  %24 = zext i8 %23 to i32
  %25 = load i32, ptr %.0199288, align 4, !tbaa !23
  %26 = icmp eq i32 %25, 0
  br i1 %26, label %27, label %183

27:                                               ; preds = %17
  %28 = load i8, ptr %11, align 8, !tbaa !24
  %29 = and i8 %28, 8
  %.not235 = icmp eq i8 %29, 0
  br i1 %.not235, label %368, label %30

30:                                               ; preds = %27
  %31 = load i32, ptr %12, align 4, !tbaa !25
  %.not236 = icmp eq i32 %31, 0
  br i1 %.not236, label %37, label %32

32:                                               ; preds = %30
  %33 = add nsw i32 %31, -1
  store i32 %33, ptr %12, align 4, !tbaa !25
  %34 = load i32, ptr %13, align 8, !tbaa !26
  %35 = and i32 %34, 1
  %.not239 = icmp eq i32 %35, 0
  %36 = lshr i32 %34, 1
  store i32 %36, ptr %13, align 8, !tbaa !26
  br i1 %.not239, label %50, label %48

37:                                               ; preds = %30
  %38 = getelementptr inbounds i8, ptr %19, i64 2
  store ptr %38, ptr %7, align 8, !tbaa !21
  %39 = load ptr, ptr %14, align 8, !tbaa !27
  %.not237 = icmp eq ptr %38, %39
  br i1 %.not237, label %40, label %42

40:                                               ; preds = %37
  %41 = load ptr, ptr %15, align 8, !tbaa !28
  tail call void %41(ptr noundef nonnull %6) #2
  %.pre313 = load ptr, ptr %7, align 8, !tbaa !21
  br label %42

42:                                               ; preds = %37, %40
  %43 = phi ptr [ %38, %37 ], [ %.pre313, %40 ]
  store i32 15, ptr %12, align 4, !tbaa !25
  %44 = load i16, ptr %43, align 2, !tbaa !29
  %45 = zext i16 %44 to i32
  store i32 %45, ptr %13, align 8, !tbaa !26
  %46 = and i32 %45, 1
  %.not238 = icmp eq i32 %46, 0
  br i1 %.not238, label %.thread333, label %.thread

.thread:                                          ; preds = %42
  %47 = lshr i32 %45, 1
  store i32 %47, ptr %13, align 8, !tbaa !26
  br label %.lr.ph281.preheader

48:                                               ; preds = %32
  %49 = icmp slt i32 %31, 24
  br i1 %49, label %.lr.ph281.preheader, label %._crit_edge282

.lr.ph281.preheader:                              ; preds = %.thread, %48
  %.ph = phi i32 [ %36, %48 ], [ %47, %.thread ]
  %.ph374 = phi i32 [ %33, %48 ], [ 15, %.thread ]
  %.ph375 = phi ptr [ %19, %48 ], [ %43, %.thread ]
  br label %.lr.ph281

50:                                               ; preds = %32
  %51 = and i8 %28, 16
  %.not240 = icmp eq i8 %51, 0
  br i1 %.not240, label %368, label %152

.thread333:                                       ; preds = %42
  %.pre325 = load i8, ptr %11, align 8, !tbaa !24
  %52 = lshr exact i32 %45, 1
  store i32 %52, ptr %13, align 8, !tbaa !26
  %53 = and i8 %.pre325, 16
  %.not240334 = icmp eq i8 %53, 0
  br i1 %.not240334, label %368, label %.thread335

.lr.ph281:                                        ; preds = %.lr.ph281.preheader, %62
  %54 = phi i32 [ %69, %62 ], [ %.ph, %.lr.ph281.preheader ]
  %55 = phi i32 [ %70, %62 ], [ %.ph374, %.lr.ph281.preheader ]
  %56 = phi ptr [ %65, %62 ], [ %.ph375, %.lr.ph281.preheader ]
  %57 = getelementptr inbounds i8, ptr %56, i64 2
  store ptr %57, ptr %7, align 8, !tbaa !21
  %58 = load ptr, ptr %14, align 8, !tbaa !27
  %59 = icmp eq ptr %57, %58
  br i1 %59, label %60, label %62

60:                                               ; preds = %.lr.ph281
  %61 = load ptr, ptr %15, align 8, !tbaa !28
  tail call void %61(ptr noundef nonnull %6) #2
  %.pre315 = load ptr, ptr %7, align 8, !tbaa !21
  %.pre316 = load i32, ptr %12, align 4, !tbaa !25
  %.pre317 = load i32, ptr %13, align 8, !tbaa !26
  br label %62

62:                                               ; preds = %60, %.lr.ph281
  %63 = phi i32 [ %.pre317, %60 ], [ %54, %.lr.ph281 ]
  %64 = phi i32 [ %.pre316, %60 ], [ %55, %.lr.ph281 ]
  %65 = phi ptr [ %.pre315, %60 ], [ %57, %.lr.ph281 ]
  %66 = load i16, ptr %65, align 2, !tbaa !29
  %67 = zext i16 %66 to i32
  %68 = shl i32 %67, %64
  %69 = or i32 %63, %68
  store i32 %69, ptr %13, align 8, !tbaa !26
  %70 = add i32 %64, 16
  store i32 %70, ptr %12, align 4, !tbaa !25
  %71 = icmp slt i32 %70, 23
  br i1 %71, label %.lr.ph281, label %._crit_edge282, !llvm.loop !30

._crit_edge282:                                   ; preds = %62, %48
  %72 = phi ptr [ %18, %48 ], [ %65, %62 ]
  %73 = phi i32 [ %36, %48 ], [ %69, %62 ]
  %74 = phi ptr [ %19, %48 ], [ %65, %62 ]
  %75 = phi ptr [ %20, %48 ], [ %65, %62 ]
  %76 = phi ptr [ %21, %48 ], [ %65, %62 ]
  %.lcssa264 = phi i32 [ %33, %48 ], [ %70, %62 ]
  %77 = icmp ugt i32 %.lcssa264, 32
  br i1 %77, label %78, label %83

78:                                               ; preds = %._crit_edge282
  %79 = load i16, ptr %72, align 2, !tbaa !29
  %80 = zext i16 %79 to i32
  %81 = sub nsw i32 39, %.lcssa264
  %82 = lshr i32 %80, %81
  br label %85

83:                                               ; preds = %._crit_edge282
  %84 = lshr i32 %73, 23
  br label %85

85:                                               ; preds = %83, %78
  %86 = phi ptr [ %72, %78 ], [ %74, %83 ]
  %87 = phi ptr [ %72, %78 ], [ %75, %83 ]
  %88 = phi ptr [ %72, %78 ], [ %76, %83 ]
  %storemerge246 = phi i32 [ %82, %78 ], [ %84, %83 ]
  %.pr254 = add nsw i32 %.lcssa264, -23
  store i32 %.pr254, ptr %12, align 4
  store i32 %storemerge246, ptr %13, align 8, !tbaa !26
  %89 = and i32 %73, 8388607
  %90 = icmp ugt i8 %23, 24
  br i1 %90, label %thread-pre-split, label %120

thread-pre-split:                                 ; preds = %85
  %91 = icmp ult i32 %.lcssa264, 31
  br i1 %91, label %.lr.ph284, label %._crit_edge285

.lr.ph284:                                        ; preds = %thread-pre-split, %100
  %92 = phi i32 [ %107, %100 ], [ %storemerge246, %thread-pre-split ]
  %93 = phi i32 [ %108, %100 ], [ %.pr254, %thread-pre-split ]
  %94 = phi ptr [ %103, %100 ], [ %72, %thread-pre-split ]
  %95 = getelementptr inbounds i8, ptr %94, i64 2
  store ptr %95, ptr %7, align 8, !tbaa !21
  %96 = load ptr, ptr %14, align 8, !tbaa !27
  %97 = icmp eq ptr %95, %96
  br i1 %97, label %98, label %100

98:                                               ; preds = %.lr.ph284
  %99 = load ptr, ptr %15, align 8, !tbaa !28
  tail call void %99(ptr noundef nonnull %6) #2
  %.pre318 = load ptr, ptr %7, align 8, !tbaa !21
  %.pre319 = load i32, ptr %12, align 4, !tbaa !25
  %.pre320 = load i32, ptr %13, align 8, !tbaa !26
  br label %100

100:                                              ; preds = %98, %.lr.ph284
  %101 = phi i32 [ %.pre320, %98 ], [ %92, %.lr.ph284 ]
  %102 = phi i32 [ %.pre319, %98 ], [ %93, %.lr.ph284 ]
  %103 = phi ptr [ %.pre318, %98 ], [ %95, %.lr.ph284 ]
  %104 = load i16, ptr %103, align 2, !tbaa !29
  %105 = zext i16 %104 to i32
  %106 = shl i32 %105, %102
  %107 = or i32 %101, %106
  store i32 %107, ptr %13, align 8, !tbaa !26
  %108 = add i32 %102, 16
  store i32 %108, ptr %12, align 4, !tbaa !25
  %109 = icmp slt i32 %108, 8
  br i1 %109, label %.lr.ph284, label %._crit_edge285, !llvm.loop !32

._crit_edge285:                                   ; preds = %100, %thread-pre-split
  %110 = phi i32 [ %storemerge246, %thread-pre-split ], [ %107, %100 ]
  %111 = phi ptr [ %72, %thread-pre-split ], [ %103, %100 ]
  %112 = phi ptr [ %86, %thread-pre-split ], [ %103, %100 ]
  %113 = phi ptr [ %87, %thread-pre-split ], [ %103, %100 ]
  %114 = phi ptr [ %88, %thread-pre-split ], [ %103, %100 ]
  %.lcssa265 = phi i32 [ %.pr254, %thread-pre-split ], [ %108, %100 ]
  %115 = icmp ugt i32 %.lcssa265, 32
  %116 = lshr i32 %110, 8
  %spec.select359 = select i1 %115, i32 0, i32 %116
  %.sink299 = add nsw i32 %.lcssa265, -8
  store i32 %.sink299, ptr %12, align 4
  store i32 %spec.select359, ptr %13, align 8, !tbaa !26
  %117 = shl i32 %110, 23
  %118 = and i32 %117, 2139095040
  %119 = or disjoint i32 %118, %89
  br label %120

120:                                              ; preds = %._crit_edge285, %85
  %121 = phi i32 [ %spec.select359, %._crit_edge285 ], [ %storemerge246, %85 ]
  %122 = phi i32 [ %.sink299, %._crit_edge285 ], [ %.pr254, %85 ]
  %123 = phi ptr [ %111, %._crit_edge285 ], [ %72, %85 ]
  %124 = phi ptr [ %112, %._crit_edge285 ], [ %86, %85 ]
  %125 = phi ptr [ %113, %._crit_edge285 ], [ %87, %85 ]
  %126 = phi ptr [ %114, %._crit_edge285 ], [ %88, %85 ]
  %.0 = phi i32 [ %119, %._crit_edge285 ], [ %89, %85 ]
  %.not248 = icmp eq i32 %122, 0
  br i1 %.not248, label %130, label %127

127:                                              ; preds = %120
  %128 = add nsw i32 %122, -1
  store i32 %128, ptr %12, align 4, !tbaa !25
  %129 = and i32 %121, 1
  %.not251 = icmp eq i32 %129, 0
  br i1 %.not251, label %140, label %145

130:                                              ; preds = %120
  %131 = getelementptr inbounds i8, ptr %123, i64 2
  store ptr %131, ptr %7, align 8, !tbaa !21
  %132 = load ptr, ptr %14, align 8, !tbaa !27
  %.not249 = icmp eq ptr %131, %132
  br i1 %.not249, label %133, label %135

133:                                              ; preds = %130
  %134 = load ptr, ptr %15, align 8, !tbaa !28
  tail call void %134(ptr noundef nonnull %6) #2
  %.pre321 = load ptr, ptr %7, align 8, !tbaa !21
  br label %135

135:                                              ; preds = %130, %133
  %136 = phi ptr [ %131, %130 ], [ %.pre321, %133 ]
  store i32 15, ptr %12, align 4, !tbaa !25
  %137 = load i16, ptr %136, align 2, !tbaa !29
  %138 = zext i16 %137 to i32
  %139 = and i32 %138, 1
  %.not250 = icmp eq i32 %139, 0
  br i1 %.not250, label %140, label %145

140:                                              ; preds = %135, %127
  %storemerge252.in323 = phi i32 [ %138, %135 ], [ %121, %127 ]
  %141 = phi ptr [ %136, %135 ], [ %123, %127 ]
  %142 = phi ptr [ %136, %135 ], [ %124, %127 ]
  %143 = phi ptr [ %136, %135 ], [ %125, %127 ]
  %144 = phi ptr [ %136, %135 ], [ %126, %127 ]
  br label %145

145:                                              ; preds = %127, %135, %140
  %storemerge252.in = phi i32 [ %storemerge252.in323, %140 ], [ %138, %135 ], [ %121, %127 ]
  %146 = phi ptr [ %141, %140 ], [ %136, %135 ], [ %123, %127 ]
  %147 = phi ptr [ %142, %140 ], [ %136, %135 ], [ %124, %127 ]
  %148 = phi ptr [ %143, %140 ], [ %136, %135 ], [ %125, %127 ]
  %149 = phi ptr [ %144, %140 ], [ %136, %135 ], [ %126, %127 ]
  %150 = phi i32 [ 0, %140 ], [ -2147483648, %135 ], [ -2147483648, %127 ]
  %storemerge252 = lshr i32 %storemerge252.in, 1
  store i32 %storemerge252, ptr %13, align 8, !tbaa !26
  %151 = xor i32 %150, %.0
  br label %368

152:                                              ; preds = %50
  %.not241 = icmp eq i32 %33, 0
  br i1 %.not241, label %162, label %.thread335

.thread335:                                       ; preds = %.thread333, %152
  %153 = phi i32 [ %33, %152 ], [ 15, %.thread333 ]
  %154 = phi i32 [ %34, %152 ], [ %45, %.thread333 ]
  %155 = phi ptr [ %18, %152 ], [ %43, %.thread333 ]
  %156 = phi ptr [ %19, %152 ], [ %43, %.thread333 ]
  %157 = phi ptr [ %20, %152 ], [ %43, %.thread333 ]
  %158 = phi ptr [ %21, %152 ], [ %43, %.thread333 ]
  %159 = phi i32 [ %36, %152 ], [ %52, %.thread333 ]
  %160 = add nsw i32 %153, -1
  store i32 %160, ptr %12, align 4, !tbaa !25
  %161 = and i32 %154, 2
  %.not244 = icmp eq i32 %161, 0
  br i1 %.not244, label %172, label %177

162:                                              ; preds = %152
  %163 = getelementptr inbounds i8, ptr %18, i64 2
  store ptr %163, ptr %7, align 8, !tbaa !21
  %164 = load ptr, ptr %14, align 8, !tbaa !27
  %.not242 = icmp eq ptr %163, %164
  br i1 %.not242, label %165, label %167

165:                                              ; preds = %162
  %166 = load ptr, ptr %15, align 8, !tbaa !28
  tail call void %166(ptr noundef nonnull %6) #2
  %.pre326 = load ptr, ptr %7, align 8, !tbaa !21
  br label %167

167:                                              ; preds = %162, %165
  %168 = phi ptr [ %163, %162 ], [ %.pre326, %165 ]
  store i32 15, ptr %12, align 4, !tbaa !25
  %169 = load i16, ptr %168, align 2, !tbaa !29
  %170 = zext i16 %169 to i32
  %171 = and i32 %170, 1
  %.not243 = icmp eq i32 %171, 0
  br i1 %.not243, label %172, label %177

172:                                              ; preds = %167, %.thread335
  %storemerge245.in328 = phi i32 [ %170, %167 ], [ %159, %.thread335 ]
  %173 = phi ptr [ %168, %167 ], [ %155, %.thread335 ]
  %174 = phi ptr [ %168, %167 ], [ %156, %.thread335 ]
  %175 = phi ptr [ %168, %167 ], [ %157, %.thread335 ]
  %176 = phi ptr [ %168, %167 ], [ %158, %.thread335 ]
  br label %177

177:                                              ; preds = %.thread335, %167, %172
  %storemerge245.in = phi i32 [ %storemerge245.in328, %172 ], [ %170, %167 ], [ %159, %.thread335 ]
  %178 = phi ptr [ %173, %172 ], [ %168, %167 ], [ %155, %.thread335 ]
  %179 = phi ptr [ %174, %172 ], [ %168, %167 ], [ %156, %.thread335 ]
  %180 = phi ptr [ %175, %172 ], [ %168, %167 ], [ %157, %.thread335 ]
  %181 = phi ptr [ %176, %172 ], [ %168, %167 ], [ %158, %.thread335 ]
  %182 = phi i32 [ 0, %172 ], [ -2147483648, %167 ], [ -2147483648, %.thread335 ]
  %storemerge245 = lshr i32 %storemerge245.in, 1
  store i32 %storemerge245, ptr %13, align 8, !tbaa !26
  br label %368

183:                                              ; preds = %17
  %184 = load i8, ptr %10, align 1, !tbaa !33
  %185 = and i8 %184, 31
  %186 = zext nneg i8 %185 to i32
  %187 = shl i32 %25, %186
  %spec.select = tail call i32 @llvm.abs.i32(i32 %187, i1 true)
  %spec.select253 = and i32 %187, -2147483648
  store i32 %spec.select, ptr %.0199288, align 4, !tbaa !23
  %188 = icmp eq i32 %spec.select, 16777216
  br i1 %188, label %189, label %258

189:                                              ; preds = %183
  %190 = load i32, ptr %12, align 4, !tbaa !25
  %.not230 = icmp eq i32 %190, 0
  br i1 %.not230, label %195, label %191

191:                                              ; preds = %189
  %192 = add nsw i32 %190, -1
  store i32 %192, ptr %12, align 4, !tbaa !25
  %193 = load i32, ptr %13, align 8, !tbaa !26
  %194 = and i32 %193, 1
  %.not233 = icmp eq i32 %194, 0
  br i1 %.not233, label %209, label %206

195:                                              ; preds = %189
  %196 = getelementptr inbounds i8, ptr %20, i64 2
  store ptr %196, ptr %7, align 8, !tbaa !21
  %197 = load ptr, ptr %14, align 8, !tbaa !27
  %.not231 = icmp eq ptr %196, %197
  br i1 %.not231, label %198, label %200

198:                                              ; preds = %195
  %199 = load ptr, ptr %15, align 8, !tbaa !28
  tail call void %199(ptr noundef nonnull %6) #2
  %.pre308 = load ptr, ptr %7, align 8, !tbaa !21
  br label %200

200:                                              ; preds = %195, %198
  %201 = phi ptr [ %196, %195 ], [ %.pre308, %198 ]
  store i32 15, ptr %12, align 4, !tbaa !25
  %202 = load i16, ptr %201, align 2, !tbaa !29
  %203 = zext i16 %202 to i32
  store i32 %203, ptr %13, align 8, !tbaa !26
  %204 = and i32 %203, 1
  %.not232 = icmp eq i32 %204, 0
  br i1 %.not232, label %209, label %.thread337

.thread337:                                       ; preds = %200
  %205 = lshr i32 %203, 1
  store i32 %205, ptr %13, align 8, !tbaa !26
  br label %.lr.ph277.preheader

206:                                              ; preds = %191
  %207 = lshr i32 %193, 1
  store i32 %207, ptr %13, align 8, !tbaa !26
  %208 = icmp slt i32 %190, 24
  br i1 %208, label %.lr.ph277.preheader, label %._crit_edge278

.lr.ph277.preheader:                              ; preds = %.thread337, %206
  %.ph376 = phi i32 [ %207, %206 ], [ %205, %.thread337 ]
  %.ph377 = phi i32 [ %192, %206 ], [ 15, %.thread337 ]
  %.ph378 = phi ptr [ %20, %206 ], [ %201, %.thread337 ]
  br label %.lr.ph277

209:                                              ; preds = %200, %191
  %210 = phi ptr [ %201, %200 ], [ %18, %191 ]
  %211 = phi i32 [ %203, %200 ], [ %193, %191 ]
  %212 = phi ptr [ %201, %200 ], [ %19, %191 ]
  %213 = phi ptr [ %201, %200 ], [ %20, %191 ]
  %214 = phi ptr [ %201, %200 ], [ %21, %191 ]
  %215 = lshr i32 %211, 1
  store i32 %215, ptr %13, align 8, !tbaa !26
  br label %252

.lr.ph277:                                        ; preds = %.lr.ph277.preheader, %224
  %216 = phi i32 [ %231, %224 ], [ %.ph376, %.lr.ph277.preheader ]
  %217 = phi i32 [ %232, %224 ], [ %.ph377, %.lr.ph277.preheader ]
  %218 = phi ptr [ %227, %224 ], [ %.ph378, %.lr.ph277.preheader ]
  %219 = getelementptr inbounds i8, ptr %218, i64 2
  store ptr %219, ptr %7, align 8, !tbaa !21
  %220 = load ptr, ptr %14, align 8, !tbaa !27
  %221 = icmp eq ptr %219, %220
  br i1 %221, label %222, label %224

222:                                              ; preds = %.lr.ph277
  %223 = load ptr, ptr %15, align 8, !tbaa !28
  tail call void %223(ptr noundef nonnull %6) #2
  %.pre310 = load ptr, ptr %7, align 8, !tbaa !21
  %.pre311 = load i32, ptr %12, align 4, !tbaa !25
  %.pre312 = load i32, ptr %13, align 8, !tbaa !26
  br label %224

224:                                              ; preds = %222, %.lr.ph277
  %225 = phi i32 [ %.pre312, %222 ], [ %216, %.lr.ph277 ]
  %226 = phi i32 [ %.pre311, %222 ], [ %217, %.lr.ph277 ]
  %227 = phi ptr [ %.pre310, %222 ], [ %219, %.lr.ph277 ]
  %228 = load i16, ptr %227, align 2, !tbaa !29
  %229 = zext i16 %228 to i32
  %230 = shl i32 %229, %226
  %231 = or i32 %225, %230
  store i32 %231, ptr %13, align 8, !tbaa !26
  %232 = add i32 %226, 16
  store i32 %232, ptr %12, align 4, !tbaa !25
  %233 = icmp slt i32 %232, 23
  br i1 %233, label %.lr.ph277, label %._crit_edge278, !llvm.loop !34

._crit_edge278:                                   ; preds = %224, %206
  %234 = phi ptr [ %18, %206 ], [ %227, %224 ]
  %235 = phi ptr [ %19, %206 ], [ %227, %224 ]
  %236 = phi i32 [ %207, %206 ], [ %231, %224 ]
  %237 = phi ptr [ %20, %206 ], [ %227, %224 ]
  %238 = phi ptr [ %21, %206 ], [ %227, %224 ]
  %.lcssa263 = phi i32 [ %192, %206 ], [ %232, %224 ]
  %239 = icmp ugt i32 %.lcssa263, 32
  br i1 %239, label %240, label %245

240:                                              ; preds = %._crit_edge278
  %241 = load i16, ptr %235, align 2, !tbaa !29
  %242 = zext i16 %241 to i32
  %243 = sub nsw i32 39, %.lcssa263
  %244 = lshr i32 %242, %243
  br label %247

245:                                              ; preds = %._crit_edge278
  %246 = lshr i32 %236, 23
  br label %247

247:                                              ; preds = %245, %240
  %248 = phi ptr [ %235, %240 ], [ %237, %245 ]
  %249 = phi ptr [ %235, %240 ], [ %238, %245 ]
  %storemerge234 = phi i32 [ %244, %240 ], [ %246, %245 ]
  %.sink300 = add nsw i32 %.lcssa263, -23
  store i32 %.sink300, ptr %12, align 4
  store i32 %storemerge234, ptr %13, align 8, !tbaa !26
  %250 = and i32 %236, 8388607
  %251 = or disjoint i32 %250, %spec.select253
  br label %252

252:                                              ; preds = %209, %247
  %253 = phi ptr [ %234, %247 ], [ %210, %209 ]
  %254 = phi ptr [ %235, %247 ], [ %212, %209 ]
  %255 = phi ptr [ %248, %247 ], [ %213, %209 ]
  %256 = phi ptr [ %249, %247 ], [ %214, %209 ]
  %.2 = phi i32 [ %251, %247 ], [ %spec.select253, %209 ]
  %257 = xor i32 %.2, 2139095040
  br label %368

258:                                              ; preds = %183
  %.not217 = icmp eq i8 %23, 0
  br i1 %.not217, label %.critedge.thread, label %.preheader260

.preheader260:                                    ; preds = %258
  %259 = and i32 %spec.select, 8388608
  %.not218266 = icmp eq i32 %259, 0
  br i1 %.not218266, label %.lr.ph.preheader, label %.critedge.thread

.lr.ph.preheader:                                 ; preds = %.preheader260
  %260 = add nsw i32 %24, -1
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %263
  %.0193268 = phi i32 [ %262, %263 ], [ %24, %.lr.ph.preheader ]
  %.0195267 = phi i32 [ %264, %263 ], [ 0, %.lr.ph.preheader ]
  %261 = phi i32 [ %265, %263 ], [ %spec.select, %.lr.ph.preheader ]
  %262 = add nsw i32 %.0193268, -1
  %.not219 = icmp eq i32 %262, 0
  br i1 %.not219, label %.critedge, label %263

263:                                              ; preds = %.lr.ph
  %264 = add nuw nsw i32 %.0195267, 1
  %265 = shl i32 %261, 1
  store i32 %265, ptr %.0199288, align 4, !tbaa !23
  %266 = and i32 %261, 4194304
  %.not218 = icmp eq i32 %266, 0
  br i1 %.not218, label %.lr.ph, label %.critedge, !llvm.loop !35

.critedge:                                        ; preds = %263, %.lr.ph
  %267 = phi i32 [ %265, %263 ], [ %261, %.lr.ph ]
  %.0195.lcssa = phi i32 [ %264, %263 ], [ %260, %.lr.ph ]
  %268 = and i32 %.0195.lcssa, 31
  %.not220 = icmp eq i32 %268, 0
  br i1 %.not220, label %.critedge.thread, label %269

269:                                              ; preds = %.critedge
  %270 = load i8, ptr %11, align 8, !tbaa !24
  %271 = zext i8 %270 to i32
  %272 = and i32 %271, 1
  %.not221 = icmp eq i32 %272, 0
  br i1 %.not221, label %273, label %305

273:                                              ; preds = %269
  %274 = and i32 %271, 2
  %.not222 = icmp eq i32 %274, 0
  br i1 %.not222, label %313, label %275

275:                                              ; preds = %273
  %276 = load i32, ptr %12, align 4, !tbaa !25
  %.not223 = icmp eq i32 %276, 0
  br i1 %.not223, label %281, label %277

277:                                              ; preds = %275
  %278 = add nsw i32 %276, -1
  store i32 %278, ptr %12, align 4, !tbaa !25
  %279 = load i32, ptr %13, align 8, !tbaa !26
  %280 = and i32 %279, 1
  %.not226 = icmp eq i32 %280, 0
  br i1 %.not226, label %298, label %291

281:                                              ; preds = %275
  %282 = getelementptr inbounds i8, ptr %21, i64 2
  store ptr %282, ptr %7, align 8, !tbaa !21
  %283 = load ptr, ptr %14, align 8, !tbaa !27
  %.not224 = icmp eq ptr %282, %283
  br i1 %.not224, label %284, label %286

284:                                              ; preds = %281
  %285 = load ptr, ptr %15, align 8, !tbaa !28
  tail call void %285(ptr noundef nonnull %6) #2
  %.pre = load ptr, ptr %7, align 8, !tbaa !21
  br label %286

286:                                              ; preds = %281, %284
  %287 = phi ptr [ %282, %281 ], [ %.pre, %284 ]
  store i32 15, ptr %12, align 4, !tbaa !25
  %288 = load i16, ptr %287, align 2, !tbaa !29
  %289 = zext i16 %288 to i32
  store i32 %289, ptr %13, align 8, !tbaa !26
  %290 = and i32 %289, 1
  %.not225 = icmp eq i32 %290, 0
  br i1 %.not225, label %._crit_edge329, label %291

._crit_edge329:                                   ; preds = %286
  %.pre303.pre = load i8, ptr %11, align 8, !tbaa !24
  br label %298

291:                                              ; preds = %286, %277
  %292 = phi ptr [ %287, %286 ], [ %18, %277 ]
  %293 = phi ptr [ %287, %286 ], [ %19, %277 ]
  %294 = phi ptr [ %287, %286 ], [ %20, %277 ]
  %295 = phi i32 [ %289, %286 ], [ %279, %277 ]
  %296 = phi ptr [ %287, %286 ], [ %21, %277 ]
  %297 = lshr i32 %295, 1
  store i32 %297, ptr %13, align 8, !tbaa !26
  %.pre302 = load i32, ptr %.0199288, align 4, !tbaa !23
  br label %305

298:                                              ; preds = %._crit_edge329, %277
  %.pre303 = phi i8 [ %.pre303.pre, %._crit_edge329 ], [ %270, %277 ]
  %299 = phi ptr [ %287, %._crit_edge329 ], [ %18, %277 ]
  %300 = phi ptr [ %287, %._crit_edge329 ], [ %19, %277 ]
  %301 = phi ptr [ %287, %._crit_edge329 ], [ %20, %277 ]
  %302 = phi i32 [ %289, %._crit_edge329 ], [ %279, %277 ]
  %303 = phi ptr [ %287, %._crit_edge329 ], [ %21, %277 ]
  %304 = lshr i32 %302, 1
  store i32 %304, ptr %13, align 8, !tbaa !26
  br label %313

305:                                              ; preds = %291, %269
  %306 = phi ptr [ %292, %291 ], [ %18, %269 ]
  %307 = phi ptr [ %293, %291 ], [ %19, %269 ]
  %308 = phi ptr [ %294, %291 ], [ %20, %269 ]
  %309 = phi i32 [ %.pre302, %291 ], [ %267, %269 ]
  %310 = phi ptr [ %296, %291 ], [ %21, %269 ]
  %notmask229 = shl nsw i32 -1, %268
  %311 = xor i32 %notmask229, -1
  %312 = or i32 %309, %311
  store i32 %312, ptr %.0199288, align 4, !tbaa !23
  br label %.critedge.thread

313:                                              ; preds = %298, %273
  %314 = phi ptr [ %299, %298 ], [ %18, %273 ]
  %315 = phi ptr [ %300, %298 ], [ %19, %273 ]
  %316 = phi ptr [ %301, %298 ], [ %20, %273 ]
  %317 = phi i8 [ %.pre303, %298 ], [ %270, %273 ]
  %318 = phi ptr [ %303, %298 ], [ %21, %273 ]
  %319 = and i8 %317, 4
  %.not227 = icmp eq i8 %319, 0
  br i1 %.not227, label %..critedge.thread_crit_edge, label %.preheader

..critedge.thread_crit_edge:                      ; preds = %313
  %.pre307 = load i32, ptr %.0199288, align 4, !tbaa !23
  br label %.critedge.thread

.preheader:                                       ; preds = %313
  %320 = load i32, ptr %12, align 4, !tbaa !25
  %321 = icmp sgt i32 %268, %320
  br i1 %321, label %.lr.ph273, label %.preheader.._crit_edge_crit_edge

.preheader.._crit_edge_crit_edge:                 ; preds = %.preheader
  %.pre306 = load i32, ptr %13, align 8, !tbaa !26
  br label %._crit_edge

.lr.ph273:                                        ; preds = %.preheader, %329
  %322 = phi i32 [ %337, %329 ], [ %320, %.preheader ]
  %323 = phi ptr [ %331, %329 ], [ %318, %.preheader ]
  %324 = getelementptr inbounds i8, ptr %323, i64 2
  store ptr %324, ptr %7, align 8, !tbaa !21
  %325 = load ptr, ptr %14, align 8, !tbaa !27
  %326 = icmp eq ptr %324, %325
  br i1 %326, label %327, label %329

327:                                              ; preds = %.lr.ph273
  %328 = load ptr, ptr %15, align 8, !tbaa !28
  tail call void %328(ptr noundef nonnull %6) #2
  %.pre304 = load ptr, ptr %7, align 8, !tbaa !21
  %.pre305 = load i32, ptr %12, align 4, !tbaa !25
  br label %329

329:                                              ; preds = %327, %.lr.ph273
  %330 = phi i32 [ %.pre305, %327 ], [ %322, %.lr.ph273 ]
  %331 = phi ptr [ %.pre304, %327 ], [ %324, %.lr.ph273 ]
  %332 = load i16, ptr %331, align 2, !tbaa !29
  %333 = zext i16 %332 to i32
  %334 = shl i32 %333, %330
  %335 = load i32, ptr %13, align 8, !tbaa !26
  %336 = or i32 %335, %334
  store i32 %336, ptr %13, align 8, !tbaa !26
  %337 = add i32 %330, 16
  store i32 %337, ptr %12, align 4, !tbaa !25
  %338 = icmp sgt i32 %268, %337
  br i1 %338, label %.lr.ph273, label %._crit_edge, !llvm.loop !36

._crit_edge:                                      ; preds = %329, %.preheader.._crit_edge_crit_edge
  %339 = phi ptr [ %314, %.preheader.._crit_edge_crit_edge ], [ %331, %329 ]
  %340 = phi ptr [ %315, %.preheader.._crit_edge_crit_edge ], [ %331, %329 ]
  %341 = phi ptr [ %316, %.preheader.._crit_edge_crit_edge ], [ %331, %329 ]
  %342 = phi i32 [ %.pre306, %.preheader.._crit_edge_crit_edge ], [ %336, %329 ]
  %343 = phi ptr [ %318, %.preheader.._crit_edge_crit_edge ], [ %331, %329 ]
  %.lcssa = phi i32 [ %320, %.preheader.._crit_edge_crit_edge ], [ %337, %329 ]
  %344 = icmp sgt i32 %.lcssa, 32
  %345 = sub nsw i32 %.lcssa, %268
  br i1 %344, label %346, label %351

346:                                              ; preds = %._crit_edge
  %347 = load i16, ptr %341, align 2, !tbaa !29
  %348 = zext i16 %347 to i32
  %349 = sub nsw i32 16, %345
  %350 = lshr i32 %348, %349
  br label %353

351:                                              ; preds = %._crit_edge
  %352 = lshr i32 %342, %268
  br label %353

353:                                              ; preds = %351, %346
  %354 = phi ptr [ %341, %346 ], [ %343, %351 ]
  %storemerge228 = phi i32 [ %350, %346 ], [ %352, %351 ]
  store i32 %345, ptr %12, align 4
  store i32 %storemerge228, ptr %13, align 8, !tbaa !26
  %notmask = shl nsw i32 -1, %268
  %355 = xor i32 %notmask, -1
  %356 = and i32 %342, %355
  %357 = load i32, ptr %.0199288, align 4, !tbaa !23
  %358 = or i32 %357, %356
  store i32 %358, ptr %.0199288, align 4, !tbaa !23
  br label %.critedge.thread

.critedge.thread:                                 ; preds = %.preheader260, %..critedge.thread_crit_edge, %258, %305, %353, %.critedge
  %359 = phi ptr [ %306, %305 ], [ %339, %353 ], [ %314, %..critedge.thread_crit_edge ], [ %18, %.critedge ], [ %18, %258 ], [ %18, %.preheader260 ]
  %360 = phi ptr [ %307, %305 ], [ %340, %353 ], [ %315, %..critedge.thread_crit_edge ], [ %19, %.critedge ], [ %19, %258 ], [ %19, %.preheader260 ]
  %361 = phi i32 [ %312, %305 ], [ %358, %353 ], [ %.pre307, %..critedge.thread_crit_edge ], [ %267, %.critedge ], [ %spec.select, %258 ], [ %spec.select, %.preheader260 ]
  %362 = phi ptr [ %308, %305 ], [ %341, %353 ], [ %316, %..critedge.thread_crit_edge ], [ %20, %.critedge ], [ %20, %258 ], [ %20, %.preheader260 ]
  %363 = phi ptr [ %310, %305 ], [ %354, %353 ], [ %318, %..critedge.thread_crit_edge ], [ %21, %.critedge ], [ %21, %258 ], [ %21, %.preheader260 ]
  %.1194259 = phi i32 [ %262, %305 ], [ %262, %353 ], [ %262, %..critedge.thread_crit_edge ], [ %262, %.critedge ], [ 0, %258 ], [ %24, %.preheader260 ]
  %364 = and i32 %361, 8388607
  %365 = shl nuw nsw i32 %.1194259, 23
  %366 = or disjoint i32 %364, %365
  %367 = or disjoint i32 %366, %spec.select253
  br label %368

368:                                              ; preds = %.thread333, %252, %.critedge.thread, %27, %50, %177, %145
  %369 = phi ptr [ %146, %145 ], [ %178, %177 ], [ %18, %50 ], [ %18, %27 ], [ %253, %252 ], [ %359, %.critedge.thread ], [ %43, %.thread333 ]
  %370 = phi ptr [ %147, %145 ], [ %179, %177 ], [ %19, %50 ], [ %19, %27 ], [ %254, %252 ], [ %360, %.critedge.thread ], [ %43, %.thread333 ]
  %371 = phi ptr [ %148, %145 ], [ %180, %177 ], [ %20, %50 ], [ %20, %27 ], [ %255, %252 ], [ %362, %.critedge.thread ], [ %43, %.thread333 ]
  %372 = phi ptr [ %149, %145 ], [ %181, %177 ], [ %21, %50 ], [ %21, %27 ], [ %256, %252 ], [ %363, %.critedge.thread ], [ %43, %.thread333 ]
  %.3 = phi i32 [ %151, %145 ], [ %182, %177 ], [ 0, %50 ], [ 0, %27 ], [ %257, %252 ], [ %367, %.critedge.thread ], [ 0, %.thread333 ]
  %373 = mul i32 %.0197290, 27
  %374 = and i32 %.3, 8388607
  %375 = mul nuw nsw i32 %374, 9
  %376 = lshr i32 %.3, 23
  %377 = and i32 %376, 255
  %378 = mul nuw nsw i32 %377, 3
  %379 = lshr i32 %.3, 31
  %380 = add i32 %379, %373
  %381 = add i32 %380, %375
  %382 = add i32 %381, %378
  %383 = getelementptr inbounds i8, ptr %.0199288, i64 4
  store i32 %.3, ptr %.0199288, align 4, !tbaa !23
  %.not216 = icmp eq i32 %22, 0
  br i1 %.not216, label %._crit_edge292, label %17, !llvm.loop !37

._crit_edge292:                                   ; preds = %368, %.preheader261
  %.0197.lcssa = phi i32 [ %5, %.preheader261 ], [ %382, %368 ]
  store i32 %.0197.lcssa, ptr %4, align 8, !tbaa !5
  br label %384

384:                                              ; preds = %._crit_edge292, %16
  ret void
}

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

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

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 speculatable willreturn memory(none) }
attributes #2 = { 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, !11, i64 184}
!6 = !{!"", !7, i64 0, !12, i64 12, !13, i64 88, !13, i64 96, !13, i64 104, !13, i64 112, !13, i64 120, !14, i64 128, !14, i64 136, !11, i64 144, !11, i64 148, !11, i64 152, !8, i64 156, !8, i64 157, !8, i64 158, !8, i64 159, !8, i64 160, !8, i64 161, !8, i64 162, !11, i64 164, !11, i64 168, !11, i64 172, !11, i64 176, !11, i64 180, !11, i64 184, !11, i64 188, !11, i64 192, !15, i64 200, !15, i64 248, !15, i64 296, !16, i64 344, !8, i64 348, !8, i64 349, !8, i64 350, !8, i64 351, !8, i64 352, !8, i64 353, !8, i64 354, !8, i64 355, !17, i64 360, !8, i64 432, !19, i64 1968, !13, i64 2064, !20, i64 2072}
!7 = !{!"", !8, i64 0, !10, i64 4, !10, i64 6, !11, i64 8}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"short", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!"words_data", !8, i64 0, !8, i64 8, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !8, i64 36}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!"long", !8, i64 0}
!15 = !{!"bs", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !11, i64 32, !11, i64 36, !11, i64 40}
!16 = !{!"float", !8, i64 0}
!17 = !{!"", !8, i64 0, !8, i64 8, !8, i64 16, !18, i64 24, !18, i64 32, !18, i64 40, !13, i64 48, !13, i64 56, !11, i64 64}
!18 = !{!"double", !8, i64 0}
!19 = !{!"decorr_pass", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !8, i64 16, !8, i64 48, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92}
!20 = !{!"", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !8, i64 40, !8, i64 41, !11, i64 44, !11, i64 48, !11, i64 52, !13, i64 56, !11, i64 64, !11, i64 68, !11, i64 72, !8, i64 76, !13, i64 160}
!21 = !{!6, !13, i64 312}
!22 = !{!6, !8, i64 354}
!23 = !{!11, !11, i64 0}
!24 = !{!6, !8, i64 352}
!25 = !{!6, !11, i64 332}
!26 = !{!6, !11, i64 336}
!27 = !{!6, !13, i64 304}
!28 = !{!6, !13, i64 320}
!29 = !{!10, !10, i64 0}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = !{!6, !8, i64 353}
!34 = distinct !{!34, !31}
!35 = distinct !{!35, !31}
!36 = distinct !{!36, !31}
!37 = distinct !{!37, !31}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MergedLoadStoreMotionPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass