; LLVM IR from merpheus-dev/LavaEngine :: src/Utils/soloud/src/audiosource/wav (dr_impl)

; 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.drwav = type { ptr, ptr, ptr, ptr, %struct.drwav_allocation_callbacks, i32, %struct.drwav_fmt, i32, i16, i16, i16, i64, i64, i64, i64, i64, i32, %struct.drwav_smpl, %struct.drwav__memory_stream, %struct.drwav__memory_stream_write, %struct.anon.1, %struct.anon.2, %struct.anon.3 }
%struct.drwav_allocation_callbacks = type { ptr, ptr, ptr, ptr }
%struct.drwav_fmt = type { i16, i16, i32, i32, i16, i16, i16, i16, i32, [16 x i8] }
%struct.drwav_smpl = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, [1 x %struct.drwav_smpl_loop] }
%struct.drwav_smpl_loop = type { i32, i32, i32, i32, i32, i32 }
%struct.drwav__memory_stream = type { ptr, i64, i64 }
%struct.drwav__memory_stream_write = type { ptr, ptr, i64, i64, i64 }
%struct.anon.1 = type { i64 }
%struct.anon.2 = type { i32, [2 x i16], [2 x i32], [4 x i32], i32, [2 x [2 x i32]] }
%struct.anon.3 = type { i32, [2 x i32], [2 x i32], [16 x i32], i32 }

@.str.16 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [15 x i8], align 1
@__PRETTY_FUNCTION__._Z34drwav_read_pcm_frames_s16__msadpcmP5drwavmPs = external hidden unnamed_addr constant [86 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [21 x i8], align 1
@_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE15adaptationTable = external hidden global [16 x i32], align 16
@_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff1Table = external hidden global [7 x i32], align 16
@_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff2Table = external hidden global [7 x i32], align 16

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local noundef i64 @_Z34drwav_read_pcm_frames_s16__msadpcmP5drwavmPs(ptr noundef %0, i64 noundef %1, ptr noundef %2) #2 {
  %4 = alloca i64, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i64, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca [7 x i8], align 1
  %10 = alloca i32, align 4
  %11 = alloca [14 x i8], align 1
  %12 = alloca i32, align 4
  %13 = alloca i8, align 1
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i64 %1, ptr %6, align 8, !tbaa !9
  store ptr %2, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  store i64 0, ptr %8, align 8, !tbaa !9
  %20 = load ptr, ptr %5, align 8, !tbaa !5
  %21 = icmp ne ptr %20, null
  br i1 %21, label %22, label %23

22:                                               ; preds = %3
  br label %25

23:                                               ; preds = %3
  call void @__assert_fail(ptr noundef @.str.29, ptr noundef @.str.16, i32 noundef 3171, ptr noundef @__PRETTY_FUNCTION__._Z34drwav_read_pcm_frames_s16__msadpcmP5drwavmPs) #5
  unreachable

24:                                               ; No predecessors!
  br label %25

25:                                               ; preds = %24, %22
  %26 = load i64, ptr %6, align 8, !tbaa !9
  %27 = icmp ugt i64 %26, 0
  br i1 %27, label %28, label %29

28:                                               ; preds = %25
  br label %31

29:                                               ; preds = %25
  call void @__assert_fail(ptr noundef @.str.30, ptr noundef @.str.16, i32 noundef 3172, ptr noundef @__PRETTY_FUNCTION__._Z34drwav_read_pcm_frames_s16__msadpcmP5drwavmPs) #5
  unreachable

30:                                               ; No predecessors!
  br label %31

31:                                               ; preds = %30, %28
  %32 = load ptr, ptr %7, align 8, !tbaa !5
  %33 = icmp ne ptr %32, null
  br i1 %33, label %34, label %35

34:                                               ; preds = %31
  br label %37

35:                                               ; preds = %31
  call void @__assert_fail(ptr noundef @.str.31, ptr noundef @.str.16, i32 noundef 3173, ptr noundef @__PRETTY_FUNCTION__._Z34drwav_read_pcm_frames_s16__msadpcmP5drwavmPs) #5
  unreachable

36:                                               ; No predecessors!
  br label %37

37:                                               ; preds = %36, %34
  br label %38

38:                                               ; preds = %896, %384, %37
  %39 = load i64, ptr %6, align 8, !tbaa !9
  %40 = icmp ugt i64 %39, 0
  br i1 %40, label %41, label %50

41:                                               ; preds = %38
  %42 = load ptr, ptr %5, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.drwav, ptr %42, i32 0, i32 20
  %44 = getelementptr inbounds %struct.anon.1, ptr %43, i32 0, i32 0
  %45 = load i64, ptr %44, align 8, !tbaa !11
  %46 = load ptr, ptr %5, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.drwav, ptr %46, i32 0, i32 11
  %48 = load i64, ptr %47, align 8, !tbaa !24
  %49 = icmp ult i64 %45, %48
  br label %50

50:                                               ; preds = %41, %38
  %51 = phi i1 [ false, %38 ], [ %49, %41 ]
  br i1 %51, label %52, label %897

52:                                               ; preds = %50
  %53 = load ptr, ptr %5, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.drwav, ptr %53, i32 0, i32 21
  %55 = getelementptr inbounds %struct.anon.2, ptr %54, i32 0, i32 4
  %56 = load i32, ptr %55, align 8, !tbaa !25
  %57 = icmp eq i32 %56, 0
  br i1 %57, label %58, label %288

58:                                               ; preds = %52
  %59 = load ptr, ptr %5, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.drwav, ptr %59, i32 0, i32 21
  %61 = getelementptr inbounds %struct.anon.2, ptr %60, i32 0, i32 0
  %62 = load i32, ptr %61, align 8, !tbaa !26
  %63 = icmp eq i32 %62, 0
  br i1 %63, label %64, label %288

64:                                               ; preds = %58
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.drwav, ptr %65, i32 0, i32 8
  %67 = load i16, ptr %66, align 8, !tbaa !27
  %68 = zext i16 %67 to i32
  %69 = icmp eq i32 %68, 1
  br i1 %69, label %70, label %152

70:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 7, ptr %9) #4
  %71 = load ptr, ptr %5, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.drwav, ptr %71, i32 0, i32 0
  %73 = load ptr, ptr %72, align 8, !tbaa !28
  %74 = load ptr, ptr %5, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.drwav, ptr %74, i32 0, i32 3
  %76 = load ptr, ptr %75, align 8, !tbaa !29
  %77 = getelementptr inbounds [7 x i8], ptr %9, i64 0, i64 0
  %78 = call noundef i64 %73(ptr noundef %76, ptr noundef %77, i64 noundef 7)
  %79 = icmp ne i64 %78, 7
  br i1 %79, label %80, label %82

80:                                               ; preds = %70
  %81 = load i64, ptr %8, align 8, !tbaa !9
  store i64 %81, ptr %4, align 8
  store i32 1, ptr %10, align 4
  br label %149

82:                                               ; preds = %70
  %83 = load ptr, ptr %5, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.drwav, ptr %83, i32 0, i32 6
  %85 = getelementptr inbounds %struct.drwav_fmt, ptr %84, i32 0, i32 4
  %86 = load i16, ptr %85, align 4, !tbaa !30
  %87 = zext i16 %86 to i64
  %88 = sub i64 %87, 7
  %89 = trunc i64 %88 to i32
  %90 = load ptr, ptr %5, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.drwav, ptr %90, i32 0, i32 21
  %92 = getelementptr inbounds %struct.anon.2, ptr %91, i32 0, i32 0
  store i32 %89, ptr %92, align 8, !tbaa !26
  %93 = getelementptr inbounds [7 x i8], ptr %9, i64 0, i64 0
  %94 = load i8, ptr %93, align 1, !tbaa !31
  %95 = zext i8 %94 to i16
  %96 = load ptr, ptr %5, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.drwav, ptr %96, i32 0, i32 21
  %98 = getelementptr inbounds %struct.anon.2, ptr %97, i32 0, i32 1
  %99 = getelementptr inbounds [2 x i16], ptr %98, i64 0, i64 0
  store i16 %95, ptr %99, align 4, !tbaa !32
  %100 = getelementptr inbounds [7 x i8], ptr %9, i64 0, i64 0
  %101 = getelementptr inbounds i8, ptr %100, i64 1
  %102 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef %101)
  %103 = sext i16 %102 to i32
  %104 = load ptr, ptr %5, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.drwav, ptr %104, i32 0, i32 21
  %106 = getelementptr inbounds %struct.anon.2, ptr %105, i32 0, i32 2
  %107 = getelementptr inbounds [2 x i32], ptr %106, i64 0, i64 0
  store i32 %103, ptr %107, align 8, !tbaa !33
  %108 = getelementptr inbounds [7 x i8], ptr %9, i64 0, i64 0
  %109 = getelementptr inbounds i8, ptr %108, i64 3
  %110 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef %109)
  %111 = sext i16 %110 to i32
  %112 = load ptr, ptr %5, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.drwav, ptr %112, i32 0, i32 21
  %114 = getelementptr inbounds %struct.anon.2, ptr %113, i32 0, i32 5
  %115 = getelementptr inbounds [2 x [2 x i32]], ptr %114, i64 0, i64 0
  %116 = getelementptr inbounds [2 x i32], ptr %115, i64 0, i64 1
  store i32 %111, ptr %116, align 4, !tbaa !33
  %117 = getelementptr inbounds [7 x i8], ptr %9, i64 0, i64 0
  %118 = getelementptr inbounds i8, ptr %117, i64 5
  %119 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef %118)
  %120 = sext i16 %119 to i32
  %121 = load ptr, ptr %5, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.drwav, ptr %121, i32 0, i32 21
  %123 = getelementptr inbounds %struct.anon.2, ptr %122, i32 0, i32 5
  %124 = getelementptr inbounds [2 x [2 x i32]], ptr %123, i64 0, i64 0
  %125 = getelementptr inbounds [2 x i32], ptr %124, i64 0, i64 0
  store i32 %120, ptr %125, align 4, !tbaa !33
  %126 = load ptr, ptr %5, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.drwav, ptr %126, i32 0, i32 21
  %128 = getelementptr inbounds %struct.anon.2, ptr %127, i32 0, i32 5
  %129 = getelementptr inbounds [2 x [2 x i32]], ptr %128, i64 0, i64 0
  %130 = getelementptr inbounds [2 x i32], ptr %129, i64 0, i64 0
  %131 = load i32, ptr %130, align 4, !tbaa !33
  %132 = load ptr, ptr %5, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.drwav, ptr %132, i32 0, i32 21
  %134 = getelementptr inbounds %struct.anon.2, ptr %133, i32 0, i32 3
  %135 = getelementptr inbounds [4 x i32], ptr %134, i64 0, i64 2
  store i32 %131, ptr %135, align 8, !tbaa !33
  %136 = load ptr, ptr %5, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.drwav, ptr %136, i32 0, i32 21
  %138 = getelementptr inbounds %struct.anon.2, ptr %137, i32 0, i32 5
  %139 = getelementptr inbounds [2 x [2 x i32]], ptr %138, i64 0, i64 0
  %140 = getelementptr inbounds [2 x i32], ptr %139, i64 0, i64 1
  %141 = load i32, ptr %140, align 4, !tbaa !33
  %142 = load ptr, ptr %5, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.drwav, ptr %142, i32 0, i32 21
  %144 = getelementptr inbounds %struct.anon.2, ptr %143, i32 0, i32 3
  %145 = getelementptr inbounds [4 x i32], ptr %144, i64 0, i64 3
  store i32 %141, ptr %145, align 4, !tbaa !33
  %146 = load ptr, ptr %5, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.drwav, ptr %146, i32 0, i32 21
  %148 = getelementptr inbounds %struct.anon.2, ptr %147, i32 0, i32 4
  store i32 2, ptr %148, align 8, !tbaa !25
  store i32 0, ptr %10, align 4
  br label %149

149:                                              ; preds = %82, %80
  call void @llvm.lifetime.end.p0(i64 7, ptr %9) #4
  %150 = load i32, ptr %10, align 4
  switch i32 %150, label %899 [
    i32 0, label %151
  ]

151:                                              ; preds = %149
  br label %287

152:                                              ; preds = %64
  call void @llvm.lifetime.start.p0(i64 14, ptr %11) #4
  %153 = load ptr, ptr %5, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.drwav, ptr %153, i32 0, i32 0
  %155 = load ptr, ptr %154, align 8, !tbaa !28
  %156 = load ptr, ptr %5, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.drwav, ptr %156, i32 0, i32 3
  %158 = load ptr, ptr %157, align 8, !tbaa !29
  %159 = getelementptr inbounds [14 x i8], ptr %11, i64 0, i64 0
  %160 = call noundef i64 %155(ptr noundef %158, ptr noundef %159, i64 noundef 14)
  %161 = icmp ne i64 %160, 14
  br i1 %161, label %162, label %164

162:                                              ; preds = %152
  %163 = load i64, ptr %8, align 8, !tbaa !9
  store i64 %163, ptr %4, align 8
  store i32 1, ptr %10, align 4
  br label %284

164:                                              ; preds = %152
  %165 = load ptr, ptr %5, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.drwav, ptr %165, i32 0, i32 6
  %167 = getelementptr inbounds %struct.drwav_fmt, ptr %166, i32 0, i32 4
  %168 = load i16, ptr %167, align 4, !tbaa !30
  %169 = zext i16 %168 to i64
  %170 = sub i64 %169, 14
  %171 = trunc i64 %170 to i32
  %172 = load ptr, ptr %5, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.drwav, ptr %172, i32 0, i32 21
  %174 = getelementptr inbounds %struct.anon.2, ptr %173, i32 0, i32 0
  store i32 %171, ptr %174, align 8, !tbaa !26
  %175 = getelementptr inbounds [14 x i8], ptr %11, i64 0, i64 0
  %176 = load i8, ptr %175, align 1, !tbaa !31
  %177 = zext i8 %176 to i16
  %178 = load ptr, ptr %5, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.drwav, ptr %178, i32 0, i32 21
  %180 = getelementptr inbounds %struct.anon.2, ptr %179, i32 0, i32 1
  %181 = getelementptr inbounds [2 x i16], ptr %180, i64 0, i64 0
  store i16 %177, ptr %181, align 4, !tbaa !32
  %182 = getelementptr inbounds [14 x i8], ptr %11, i64 0, i64 1
  %183 = load i8, ptr %182, align 1, !tbaa !31
  %184 = zext i8 %183 to i16
  %185 = load ptr, ptr %5, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.drwav, ptr %185, i32 0, i32 21
  %187 = getelementptr inbounds %struct.anon.2, ptr %186, i32 0, i32 1
  %188 = getelementptr inbounds [2 x i16], ptr %187, i64 0, i64 1
  store i16 %184, ptr %188, align 2, !tbaa !32
  %189 = getelementptr inbounds [14 x i8], ptr %11, i64 0, i64 0
  %190 = getelementptr inbounds i8, ptr %189, i64 2
  %191 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef %190)
  %192 = sext i16 %191 to i32
  %193 = load ptr, ptr %5, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.drwav, ptr %193, i32 0, i32 21
  %195 = getelementptr inbounds %struct.anon.2, ptr %194, i32 0, i32 2
  %196 = getelementptr inbounds [2 x i32], ptr %195, i64 0, i64 0
  store i32 %192, ptr %196, align 8, !tbaa !33
  %197 = getelementptr inbounds [14 x i8], ptr %11, i64 0, i64 0
  %198 = getelementptr inbounds i8, ptr %197, i64 4
  %199 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef %198)
  %200 = sext i16 %199 to i32
  %201 = load ptr, ptr %5, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.drwav, ptr %201, i32 0, i32 21
  %203 = getelementptr inbounds %struct.anon.2, ptr %202, i32 0, i32 2
  %204 = getelementptr inbounds [2 x i32], ptr %203, i64 0, i64 1
  store i32 %200, ptr %204, align 4, !tbaa !33
  %205 = getelementptr inbounds [14 x i8], ptr %11, i64 0, i64 0
  %206 = getelementptr inbounds i8, ptr %205, i64 6
  %207 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef %206)
  %208 = sext i16 %207 to i32
  %209 = load ptr, ptr %5, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.drwav, ptr %209, i32 0, i32 21
  %211 = getelementptr inbounds %struct.anon.2, ptr %210, i32 0, i32 5
  %212 = getelementptr inbounds [2 x [2 x i32]], ptr %211, i64 0, i64 0
  %213 = getelementptr inbounds [2 x i32], ptr %212, i64 0, i64 1
  store i32 %208, ptr %213, align 4, !tbaa !33
  %214 = getelementptr inbounds [14 x i8], ptr %11, i64 0, i64 0
  %215 = getelementptr inbounds i8, ptr %214, i64 8
  %216 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef %215)
  %217 = sext i16 %216 to i32
  %218 = load ptr, ptr %5, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.drwav, ptr %218, i32 0, i32 21
  %220 = getelementptr inbounds %struct.anon.2, ptr %219, i32 0, i32 5
  %221 = getelementptr inbounds [2 x [2 x i32]], ptr %220, i64 0, i64 1
  %222 = getelementptr inbounds [2 x i32], ptr %221, i64 0, i64 1
  store i32 %217, ptr %222, align 4, !tbaa !33
  %223 = getelementptr inbounds [14 x i8], ptr %11, i64 0, i64 0
  %224 = getelementptr inbounds i8, ptr %223, i64 10
  %225 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef %224)
  %226 = sext i16 %225 to i32
  %227 = load ptr, ptr %5, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.drwav, ptr %227, i32 0, i32 21
  %229 = getelementptr inbounds %struct.anon.2, ptr %228, i32 0, i32 5
  %230 = getelementptr inbounds [2 x [2 x i32]], ptr %229, i64 0, i64 0
  %231 = getelementptr inbounds [2 x i32], ptr %230, i64 0, i64 0
  store i32 %226, ptr %231, align 4, !tbaa !33
  %232 = getelementptr inbounds [14 x i8], ptr %11, i64 0, i64 0
  %233 = getelementptr inbounds i8, ptr %232, i64 12
  %234 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef %233)
  %235 = sext i16 %234 to i32
  %236 = load ptr, ptr %5, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.drwav, ptr %236, i32 0, i32 21
  %238 = getelementptr inbounds %struct.anon.2, ptr %237, i32 0, i32 5
  %239 = getelementptr inbounds [2 x [2 x i32]], ptr %238, i64 0, i64 1
  %240 = getelementptr inbounds [2 x i32], ptr %239, i64 0, i64 0
  store i32 %235, ptr %240, align 4, !tbaa !33
  %241 = load ptr, ptr %5, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.drwav, ptr %241, i32 0, i32 21
  %243 = getelementptr inbounds %struct.anon.2, ptr %242, i32 0, i32 5
  %244 = getelementptr inbounds [2 x [2 x i32]], ptr %243, i64 0, i64 0
  %245 = getelementptr inbounds [2 x i32], ptr %244, i64 0, i64 0
  %246 = load i32, ptr %245, align 4, !tbaa !33
  %247 = load ptr, ptr %5, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.drwav, ptr %247, i32 0, i32 21
  %249 = getelementptr inbounds %struct.anon.2, ptr %248, i32 0, i32 3
  %250 = getelementptr inbounds [4 x i32], ptr %249, i64 0, i64 0
  store i32 %246, ptr %250, align 8, !tbaa !33
  %251 = load ptr, ptr %5, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.drwav, ptr %251, i32 0, i32 21
  %253 = getelementptr inbounds %struct.anon.2, ptr %252, i32 0, i32 5
  %254 = getelementptr inbounds [2 x [2 x i32]], ptr %253, i64 0, i64 1
  %255 = getelementptr inbounds [2 x i32], ptr %254, i64 0, i64 0
  %256 = load i32, ptr %255, align 4, !tbaa !33
  %257 = load ptr, ptr %5, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.drwav, ptr %257, i32 0, i32 21
  %259 = getelementptr inbounds %struct.anon.2, ptr %258, i32 0, i32 3
  %260 = getelementptr inbounds [4 x i32], ptr %259, i64 0, i64 1
  store i32 %256, ptr %260, align 4, !tbaa !33
  %261 = load ptr, ptr %5, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.drwav, ptr %261, i32 0, i32 21
  %263 = getelementptr inbounds %struct.anon.2, ptr %262, i32 0, i32 5
  %264 = getelementptr inbounds [2 x [2 x i32]], ptr %263, i64 0, i64 0
  %265 = getelementptr inbounds [2 x i32], ptr %264, i64 0, i64 1
  %266 = load i32, ptr %265, align 4, !tbaa !33
  %267 = load ptr, ptr %5, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.drwav, ptr %267, i32 0, i32 21
  %269 = getelementptr inbounds %struct.anon.2, ptr %268, i32 0, i32 3
  %270 = getelementptr inbounds [4 x i32], ptr %269, i64 0, i64 2
  store i32 %266, ptr %270, align 8, !tbaa !33
  %271 = load ptr, ptr %5, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.drwav, ptr %271, i32 0, i32 21
  %273 = getelementptr inbounds %struct.anon.2, ptr %272, i32 0, i32 5
  %274 = getelementptr inbounds [2 x [2 x i32]], ptr %273, i64 0, i64 1
  %275 = getelementptr inbounds [2 x i32], ptr %274, i64 0, i64 1
  %276 = load i32, ptr %275, align 4, !tbaa !33
  %277 = load ptr, ptr %5, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.drwav, ptr %277, i32 0, i32 21
  %279 = getelementptr inbounds %struct.anon.2, ptr %278, i32 0, i32 3
  %280 = getelementptr inbounds [4 x i32], ptr %279, i64 0, i64 3
  store i32 %276, ptr %280, align 4, !tbaa !33
  %281 = load ptr, ptr %5, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.drwav, ptr %281, i32 0, i32 21
  %283 = getelementptr inbounds %struct.anon.2, ptr %282, i32 0, i32 4
  store i32 2, ptr %283, align 8, !tbaa !25
  store i32 0, ptr %10, align 4
  br label %284

284:                                              ; preds = %164, %162
  call void @llvm.lifetime.end.p0(i64 14, ptr %11) #4
  %285 = load i32, ptr %10, align 4
  switch i32 %285, label %899 [
    i32 0, label %286
  ]

286:                                              ; preds = %284
  br label %287

287:                                              ; preds = %286, %151
  br label %288

288:                                              ; preds = %287, %58, %52
  br label %289

289:                                              ; preds = %345, %288
  %290 = load i64, ptr %6, align 8, !tbaa !9
  %291 = icmp ugt i64 %290, 0
  br i1 %291, label %292, label %307

292:                                              ; preds = %289
  %293 = load ptr, ptr %5, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.drwav, ptr %293, i32 0, i32 21
  %295 = getelementptr inbounds %struct.anon.2, ptr %294, i32 0, i32 4
  %296 = load i32, ptr %295, align 8, !tbaa !25
  %297 = icmp ugt i32 %296, 0
  br i1 %297, label %298, label %307

298:                                              ; preds = %292
  %299 = load ptr, ptr %5, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.drwav, ptr %299, i32 0, i32 20
  %301 = getelementptr inbounds %struct.anon.1, ptr %300, i32 0, i32 0
  %302 = load i64, ptr %301, align 8, !tbaa !11
  %303 = load ptr, ptr %5, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.drwav, ptr %303, i32 0, i32 11
  %305 = load i64, ptr %304, align 8, !tbaa !24
  %306 = icmp ult i64 %302, %305
  br label %307

307:                                              ; preds = %298, %292, %289
  %308 = phi i1 [ false, %292 ], [ false, %289 ], [ %306, %298 ]
  br i1 %308, label %309, label %367

309:                                              ; preds = %307
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  store i32 0, ptr %12, align 4, !tbaa !33
  store i32 0, ptr %12, align 4, !tbaa !33
  br label %310

310:                                              ; preds = %342, %309
  %311 = load i32, ptr %12, align 4, !tbaa !33
  %312 = load ptr, ptr %5, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.drwav, ptr %312, i32 0, i32 8
  %314 = load i16, ptr %313, align 8, !tbaa !27
  %315 = zext i16 %314 to i32
  %316 = icmp ult i32 %311, %315
  br i1 %316, label %317, label %345

317:                                              ; preds = %310
  %318 = load ptr, ptr %5, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.drwav, ptr %318, i32 0, i32 21
  %320 = getelementptr inbounds %struct.anon.2, ptr %319, i32 0, i32 3
  %321 = load ptr, ptr %5, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.drwav, ptr %321, i32 0, i32 21
  %323 = getelementptr inbounds %struct.anon.2, ptr %322, i32 0, i32 4
  %324 = load i32, ptr %323, align 8, !tbaa !25
  %325 = load ptr, ptr %5, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.drwav, ptr %325, i32 0, i32 8
  %327 = load i16, ptr %326, align 8, !tbaa !27
  %328 = zext i16 %327 to i32
  %329 = mul i32 %324, %328
  %330 = zext i32 %329 to i64
  %331 = sub i64 4, %330
  %332 = load i32, ptr %12, align 4, !tbaa !33
  %333 = zext i32 %332 to i64
  %334 = add i64 %331, %333
  %335 = getelementptr inbounds [4 x i32], ptr %320, i64 0, i64 %334
  %336 = load i32, ptr %335, align 4, !tbaa !33
  %337 = trunc i32 %336 to i16
  %338 = load ptr, ptr %7, align 8, !tbaa !5
  %339 = load i32, ptr %12, align 4, !tbaa !33
  %340 = zext i32 %339 to i64
  %341 = getelementptr inbounds i16, ptr %338, i64 %340
  store i16 %337, ptr %341, align 2, !tbaa !32
  br label %342

342:                                              ; preds = %317
  %343 = load i32, ptr %12, align 4, !tbaa !33
  %344 = add i32 %343, 1
  store i32 %344, ptr %12, align 4, !tbaa !33
  br label %310, !llvm.loop !34

345:                                              ; preds = %310
  %346 = load ptr, ptr %5, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.drwav, ptr %346, i32 0, i32 8
  %348 = load i16, ptr %347, align 8, !tbaa !27
  %349 = zext i16 %348 to i32
  %350 = load ptr, ptr %7, align 8, !tbaa !5
  %351 = sext i32 %349 to i64
  %352 = getelementptr inbounds i16, ptr %350, i64 %351
  store ptr %352, ptr %7, align 8, !tbaa !5
  %353 = load i64, ptr %6, align 8, !tbaa !9
  %354 = sub i64 %353, 1
  store i64 %354, ptr %6, align 8, !tbaa !9
  %355 = load i64, ptr %8, align 8, !tbaa !9
  %356 = add i64 %355, 1
  store i64 %356, ptr %8, align 8, !tbaa !9
  %357 = load ptr, ptr %5, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.drwav, ptr %357, i32 0, i32 20
  %359 = getelementptr inbounds %struct.anon.1, ptr %358, i32 0, i32 0
  %360 = load i64, ptr %359, align 8, !tbaa !11
  %361 = add i64 %360, 1
  store i64 %361, ptr %359, align 8, !tbaa !11
  %362 = load ptr, ptr %5, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.drwav, ptr %362, i32 0, i32 21
  %364 = getelementptr inbounds %struct.anon.2, ptr %363, i32 0, i32 4
  %365 = load i32, ptr %364, align 8, !tbaa !25
  %366 = sub i32 %365, 1
  store i32 %366, ptr %364, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  br label %289, !llvm.loop !36

367:                                              ; preds = %307
  %368 = load i64, ptr %6, align 8, !tbaa !9
  %369 = icmp eq i64 %368, 0
  br i1 %369, label %370, label %372

370:                                              ; preds = %367
  %371 = load i64, ptr %8, align 8, !tbaa !9
  store i64 %371, ptr %4, align 8
  store i32 1, ptr %10, align 4
  br label %899

372:                                              ; preds = %367
  %373 = load ptr, ptr %5, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.drwav, ptr %373, i32 0, i32 21
  %375 = getelementptr inbounds %struct.anon.2, ptr %374, i32 0, i32 4
  %376 = load i32, ptr %375, align 8, !tbaa !25
  %377 = icmp eq i32 %376, 0
  br i1 %377, label %378, label %896

378:                                              ; preds = %372
  %379 = load ptr, ptr %5, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.drwav, ptr %379, i32 0, i32 21
  %381 = getelementptr inbounds %struct.anon.2, ptr %380, i32 0, i32 0
  %382 = load i32, ptr %381, align 8, !tbaa !26
  %383 = icmp eq i32 %382, 0
  br i1 %383, label %384, label %385

384:                                              ; preds = %378
  br label %38, !llvm.loop !37

385:                                              ; preds = %378
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  %386 = load ptr, ptr %5, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.drwav, ptr %386, i32 0, i32 0
  %388 = load ptr, ptr %387, align 8, !tbaa !28
  %389 = load ptr, ptr %5, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.drwav, ptr %389, i32 0, i32 3
  %391 = load ptr, ptr %390, align 8, !tbaa !29
  %392 = call noundef i64 %388(ptr noundef %391, ptr noundef %13, i64 noundef 1)
  %393 = icmp ne i64 %392, 1
  br i1 %393, label %394, label %396

394:                                              ; preds = %385
  %395 = load i64, ptr %8, align 8, !tbaa !9
  store i64 %395, ptr %4, align 8
  store i32 1, ptr %10, align 4
  br label %892

396:                                              ; preds = %385
  %397 = load ptr, ptr %5, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.drwav, ptr %397, i32 0, i32 21
  %399 = getelementptr inbounds %struct.anon.2, ptr %398, i32 0, i32 0
  %400 = load i32, ptr %399, align 8, !tbaa !26
  %401 = sub i32 %400, 1
  store i32 %401, ptr %399, align 8, !tbaa !26
  %402 = load i8, ptr %13, align 1, !tbaa !31
  %403 = zext i8 %402 to i32
  %404 = and i32 %403, 240
  %405 = ashr i32 %404, 4
  store i32 %405, ptr %14, align 4, !tbaa !33
  %406 = load i8, ptr %13, align 1, !tbaa !31
  %407 = zext i8 %406 to i32
  %408 = and i32 %407, 128
  %409 = icmp ne i32 %408, 0
  br i1 %409, label %410, label %415

410:                                              ; preds = %396
  %411 = load i32, ptr %14, align 4, !tbaa !33
  %412 = sext i32 %411 to i64
  %413 = or i64 %412, 4294967280
  %414 = trunc i64 %413 to i32
  store i32 %414, ptr %14, align 4, !tbaa !33
  br label %415

415:                                              ; preds = %410, %396
  %416 = load i8, ptr %13, align 1, !tbaa !31
  %417 = zext i8 %416 to i32
  %418 = and i32 %417, 15
  %419 = ashr i32 %418, 0
  store i32 %419, ptr %15, align 4, !tbaa !33
  %420 = load i8, ptr %13, align 1, !tbaa !31
  %421 = zext i8 %420 to i32
  %422 = and i32 %421, 8
  %423 = icmp ne i32 %422, 0
  br i1 %423, label %424, label %429

424:                                              ; preds = %415
  %425 = load i32, ptr %15, align 4, !tbaa !33
  %426 = sext i32 %425 to i64
  %427 = or i64 %426, 4294967280
  %428 = trunc i64 %427 to i32
  store i32 %428, ptr %15, align 4, !tbaa !33
  br label %429

429:                                              ; preds = %424, %415
  %430 = load ptr, ptr %5, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.drwav, ptr %430, i32 0, i32 8
  %432 = load i16, ptr %431, align 8, !tbaa !27
  %433 = zext i16 %432 to i32
  %434 = icmp eq i32 %433, 1
  br i1 %434, label %435, label %663

435:                                              ; preds = %429
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %436 = load ptr, ptr %5, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.drwav, ptr %436, i32 0, i32 21
  %438 = getelementptr inbounds %struct.anon.2, ptr %437, i32 0, i32 5
  %439 = getelementptr inbounds [2 x [2 x i32]], ptr %438, i64 0, i64 0
  %440 = getelementptr inbounds [2 x i32], ptr %439, i64 0, i64 1
  %441 = load i32, ptr %440, align 4, !tbaa !33
  %442 = load ptr, ptr %5, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.drwav, ptr %442, i32 0, i32 21
  %444 = getelementptr inbounds %struct.anon.2, ptr %443, i32 0, i32 1
  %445 = getelementptr inbounds [2 x i16], ptr %444, i64 0, i64 0
  %446 = load i16, ptr %445, align 4, !tbaa !32
  %447 = zext i16 %446 to i64
  %448 = getelementptr inbounds [7 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff1Table, i64 0, i64 %447
  %449 = load i32, ptr %448, align 4, !tbaa !33
  %450 = mul nsw i32 %441, %449
  %451 = load ptr, ptr %5, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.drwav, ptr %451, i32 0, i32 21
  %453 = getelementptr inbounds %struct.anon.2, ptr %452, i32 0, i32 5
  %454 = getelementptr inbounds [2 x [2 x i32]], ptr %453, i64 0, i64 0
  %455 = getelementptr inbounds [2 x i32], ptr %454, i64 0, i64 0
  %456 = load i32, ptr %455, align 4, !tbaa !33
  %457 = load ptr, ptr %5, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.drwav, ptr %457, i32 0, i32 21
  %459 = getelementptr inbounds %struct.anon.2, ptr %458, i32 0, i32 1
  %460 = getelementptr inbounds [2 x i16], ptr %459, i64 0, i64 0
  %461 = load i16, ptr %460, align 4, !tbaa !32
  %462 = zext i16 %461 to i64
  %463 = getelementptr inbounds [7 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff2Table, i64 0, i64 %462
  %464 = load i32, ptr %463, align 4, !tbaa !33
  %465 = mul nsw i32 %456, %464
  %466 = add nsw i32 %450, %465
  %467 = ashr i32 %466, 8
  store i32 %467, ptr %16, align 4, !tbaa !33
  %468 = load i32, ptr %14, align 4, !tbaa !33
  %469 = load ptr, ptr %5, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.drwav, ptr %469, i32 0, i32 21
  %471 = getelementptr inbounds %struct.anon.2, ptr %470, i32 0, i32 2
  %472 = getelementptr inbounds [2 x i32], ptr %471, i64 0, i64 0
  %473 = load i32, ptr %472, align 8, !tbaa !33
  %474 = mul nsw i32 %468, %473
  %475 = load i32, ptr %16, align 4, !tbaa !33
  %476 = add nsw i32 %475, %474
  store i32 %476, ptr %16, align 4, !tbaa !33
  %477 = load i32, ptr %16, align 4, !tbaa !33
  %478 = icmp slt i32 32767, %477
  br i1 %478, label %479, label %480

479:                                              ; preds = %435
  br label %482

480:                                              ; preds = %435
  %481 = load i32, ptr %16, align 4, !tbaa !33
  br label %482

482:                                              ; preds = %480, %479
  %483 = phi i32 [ 32767, %479 ], [ %481, %480 ]
  %484 = icmp sgt i32 -32768, %483
  br i1 %484, label %485, label %486

485:                                              ; preds = %482
  br label %494

486:                                              ; preds = %482
  %487 = load i32, ptr %16, align 4, !tbaa !33
  %488 = icmp slt i32 32767, %487
  br i1 %488, label %489, label %490

489:                                              ; preds = %486
  br label %492

490:                                              ; preds = %486
  %491 = load i32, ptr %16, align 4, !tbaa !33
  br label %492

492:                                              ; preds = %490, %489
  %493 = phi i32 [ 32767, %489 ], [ %491, %490 ]
  br label %494

494:                                              ; preds = %492, %485
  %495 = phi i32 [ -32768, %485 ], [ %493, %492 ]
  store i32 %495, ptr %16, align 4, !tbaa !33
  %496 = load i8, ptr %13, align 1, !tbaa !31
  %497 = zext i8 %496 to i32
  %498 = and i32 %497, 240
  %499 = ashr i32 %498, 4
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds [16 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE15adaptationTable, i64 0, i64 %500
  %502 = load i32, ptr %501, align 4, !tbaa !33
  %503 = load ptr, ptr %5, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.drwav, ptr %503, i32 0, i32 21
  %505 = getelementptr inbounds %struct.anon.2, ptr %504, i32 0, i32 2
  %506 = getelementptr inbounds [2 x i32], ptr %505, i64 0, i64 0
  %507 = load i32, ptr %506, align 8, !tbaa !33
  %508 = mul nsw i32 %502, %507
  %509 = ashr i32 %508, 8
  %510 = load ptr, ptr %5, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.drwav, ptr %510, i32 0, i32 21
  %512 = getelementptr inbounds %struct.anon.2, ptr %511, i32 0, i32 2
  %513 = getelementptr inbounds [2 x i32], ptr %512, i64 0, i64 0
  store i32 %509, ptr %513, align 8, !tbaa !33
  %514 = load ptr, ptr %5, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.drwav, ptr %514, i32 0, i32 21
  %516 = getelementptr inbounds %struct.anon.2, ptr %515, i32 0, i32 2
  %517 = getelementptr inbounds [2 x i32], ptr %516, i64 0, i64 0
  %518 = load i32, ptr %517, align 8, !tbaa !33
  %519 = icmp slt i32 %518, 16
  br i1 %519, label %520, label %525

520:                                              ; preds = %494
  %521 = load ptr, ptr %5, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.drwav, ptr %521, i32 0, i32 21
  %523 = getelementptr inbounds %struct.anon.2, ptr %522, i32 0, i32 2
  %524 = getelementptr inbounds [2 x i32], ptr %523, i64 0, i64 0
  store i32 16, ptr %524, align 8, !tbaa !33
  br label %525

525:                                              ; preds = %520, %494
  %526 = load ptr, ptr %5, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.drwav, ptr %526, i32 0, i32 21
  %528 = getelementptr inbounds %struct.anon.2, ptr %527, i32 0, i32 5
  %529 = getelementptr inbounds [2 x [2 x i32]], ptr %528, i64 0, i64 0
  %530 = getelementptr inbounds [2 x i32], ptr %529, i64 0, i64 1
  %531 = load i32, ptr %530, align 4, !tbaa !33
  %532 = load ptr, ptr %5, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.drwav, ptr %532, i32 0, i32 21
  %534 = getelementptr inbounds %struct.anon.2, ptr %533, i32 0, i32 5
  %535 = getelementptr inbounds [2 x [2 x i32]], ptr %534, i64 0, i64 0
  %536 = getelementptr inbounds [2 x i32], ptr %535, i64 0, i64 0
  store i32 %531, ptr %536, align 4, !tbaa !33
  %537 = load i32, ptr %16, align 4, !tbaa !33
  %538 = load ptr, ptr %5, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.drwav, ptr %538, i32 0, i32 21
  %540 = getelementptr inbounds %struct.anon.2, ptr %539, i32 0, i32 5
  %541 = getelementptr inbounds [2 x [2 x i32]], ptr %540, i64 0, i64 0
  %542 = getelementptr inbounds [2 x i32], ptr %541, i64 0, i64 1
  store i32 %537, ptr %542, align 4, !tbaa !33
  %543 = load ptr, ptr %5, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.drwav, ptr %543, i32 0, i32 21
  %545 = getelementptr inbounds %struct.anon.2, ptr %544, i32 0, i32 5
  %546 = getelementptr inbounds [2 x [2 x i32]], ptr %545, i64 0, i64 0
  %547 = getelementptr inbounds [2 x i32], ptr %546, i64 0, i64 1
  %548 = load i32, ptr %547, align 4, !tbaa !33
  %549 = load ptr, ptr %5, align 8, !tbaa !5
  %550 = getelementptr inbounds %struct.drwav, ptr %549, i32 0, i32 21
  %551 = getelementptr inbounds %struct.anon.2, ptr %550, i32 0, i32 1
  %552 = getelementptr inbounds [2 x i16], ptr %551, i64 0, i64 0
  %553 = load i16, ptr %552, align 4, !tbaa !32
  %554 = zext i16 %553 to i64
  %555 = getelementptr inbounds [7 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff1Table, i64 0, i64 %554
  %556 = load i32, ptr %555, align 4, !tbaa !33
  %557 = mul nsw i32 %548, %556
  %558 = load ptr, ptr %5, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.drwav, ptr %558, i32 0, i32 21
  %560 = getelementptr inbounds %struct.anon.2, ptr %559, i32 0, i32 5
  %561 = getelementptr inbounds [2 x [2 x i32]], ptr %560, i64 0, i64 0
  %562 = getelementptr inbounds [2 x i32], ptr %561, i64 0, i64 0
  %563 = load i32, ptr %562, align 4, !tbaa !33
  %564 = load ptr, ptr %5, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.drwav, ptr %564, i32 0, i32 21
  %566 = getelementptr inbounds %struct.anon.2, ptr %565, i32 0, i32 1
  %567 = getelementptr inbounds [2 x i16], ptr %566, i64 0, i64 0
  %568 = load i16, ptr %567, align 4, !tbaa !32
  %569 = zext i16 %568 to i64
  %570 = getelementptr inbounds [7 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff2Table, i64 0, i64 %569
  %571 = load i32, ptr %570, align 4, !tbaa !33
  %572 = mul nsw i32 %563, %571
  %573 = add nsw i32 %557, %572
  %574 = ashr i32 %573, 8
  store i32 %574, ptr %17, align 4, !tbaa !33
  %575 = load i32, ptr %15, align 4, !tbaa !33
  %576 = load ptr, ptr %5, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.drwav, ptr %576, i32 0, i32 21
  %578 = getelementptr inbounds %struct.anon.2, ptr %577, i32 0, i32 2
  %579 = getelementptr inbounds [2 x i32], ptr %578, i64 0, i64 0
  %580 = load i32, ptr %579, align 8, !tbaa !33
  %581 = mul nsw i32 %575, %580
  %582 = load i32, ptr %17, align 4, !tbaa !33
  %583 = add nsw i32 %582, %581
  store i32 %583, ptr %17, align 4, !tbaa !33
  %584 = load i32, ptr %17, align 4, !tbaa !33
  %585 = icmp slt i32 32767, %584
  br i1 %585, label %586, label %587

586:                                              ; preds = %525
  br label %589

587:                                              ; preds = %525
  %588 = load i32, ptr %17, align 4, !tbaa !33
  br label %589

589:                                              ; preds = %587, %586
  %590 = phi i32 [ 32767, %586 ], [ %588, %587 ]
  %591 = icmp sgt i32 -32768, %590
  br i1 %591, label %592, label %593

592:                                              ; preds = %589
  br label %601

593:                                              ; preds = %589
  %594 = load i32, ptr %17, align 4, !tbaa !33
  %595 = icmp slt i32 32767, %594
  br i1 %595, label %596, label %597

596:                                              ; preds = %593
  br label %599

597:                                              ; preds = %593
  %598 = load i32, ptr %17, align 4, !tbaa !33
  br label %599

599:                                              ; preds = %597, %596
  %600 = phi i32 [ 32767, %596 ], [ %598, %597 ]
  br label %601

601:                                              ; preds = %599, %592
  %602 = phi i32 [ -32768, %592 ], [ %600, %599 ]
  store i32 %602, ptr %17, align 4, !tbaa !33
  %603 = load i8, ptr %13, align 1, !tbaa !31
  %604 = zext i8 %603 to i32
  %605 = and i32 %604, 15
  %606 = ashr i32 %605, 0
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds [16 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE15adaptationTable, i64 0, i64 %607
  %609 = load i32, ptr %608, align 4, !tbaa !33
  %610 = load ptr, ptr %5, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.drwav, ptr %610, i32 0, i32 21
  %612 = getelementptr inbounds %struct.anon.2, ptr %611, i32 0, i32 2
  %613 = getelementptr inbounds [2 x i32], ptr %612, i64 0, i64 0
  %614 = load i32, ptr %613, align 8, !tbaa !33
  %615 = mul nsw i32 %609, %614
  %616 = ashr i32 %615, 8
  %617 = load ptr, ptr %5, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.drwav, ptr %617, i32 0, i32 21
  %619 = getelementptr inbounds %struct.anon.2, ptr %618, i32 0, i32 2
  %620 = getelementptr inbounds [2 x i32], ptr %619, i64 0, i64 0
  store i32 %616, ptr %620, align 8, !tbaa !33
  %621 = load ptr, ptr %5, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.drwav, ptr %621, i32 0, i32 21
  %623 = getelementptr inbounds %struct.anon.2, ptr %622, i32 0, i32 2
  %624 = getelementptr inbounds [2 x i32], ptr %623, i64 0, i64 0
  %625 = load i32, ptr %624, align 8, !tbaa !33
  %626 = icmp slt i32 %625, 16
  br i1 %626, label %627, label %632

627:                                              ; preds = %601
  %628 = load ptr, ptr %5, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct.drwav, ptr %628, i32 0, i32 21
  %630 = getelementptr inbounds %struct.anon.2, ptr %629, i32 0, i32 2
  %631 = getelementptr inbounds [2 x i32], ptr %630, i64 0, i64 0
  store i32 16, ptr %631, align 8, !tbaa !33
  br label %632

632:                                              ; preds = %627, %601
  %633 = load ptr, ptr %5, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.drwav, ptr %633, i32 0, i32 21
  %635 = getelementptr inbounds %struct.anon.2, ptr %634, i32 0, i32 5
  %636 = getelementptr inbounds [2 x [2 x i32]], ptr %635, i64 0, i64 0
  %637 = getelementptr inbounds [2 x i32], ptr %636, i64 0, i64 1
  %638 = load i32, ptr %637, align 4, !tbaa !33
  %639 = load ptr, ptr %5, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct.drwav, ptr %639, i32 0, i32 21
  %641 = getelementptr inbounds %struct.anon.2, ptr %640, i32 0, i32 5
  %642 = getelementptr inbounds [2 x [2 x i32]], ptr %641, i64 0, i64 0
  %643 = getelementptr inbounds [2 x i32], ptr %642, i64 0, i64 0
  store i32 %638, ptr %643, align 4, !tbaa !33
  %644 = load i32, ptr %17, align 4, !tbaa !33
  %645 = load ptr, ptr %5, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.drwav, ptr %645, i32 0, i32 21
  %647 = getelementptr inbounds %struct.anon.2, ptr %646, i32 0, i32 5
  %648 = getelementptr inbounds [2 x [2 x i32]], ptr %647, i64 0, i64 0
  %649 = getelementptr inbounds [2 x i32], ptr %648, i64 0, i64 1
  store i32 %644, ptr %649, align 4, !tbaa !33
  %650 = load i32, ptr %16, align 4, !tbaa !33
  %651 = load ptr, ptr %5, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.drwav, ptr %651, i32 0, i32 21
  %653 = getelementptr inbounds %struct.anon.2, ptr %652, i32 0, i32 3
  %654 = getelementptr inbounds [4 x i32], ptr %653, i64 0, i64 2
  store i32 %650, ptr %654, align 8, !tbaa !33
  %655 = load i32, ptr %17, align 4, !tbaa !33
  %656 = load ptr, ptr %5, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.drwav, ptr %656, i32 0, i32 21
  %658 = getelementptr inbounds %struct.anon.2, ptr %657, i32 0, i32 3
  %659 = getelementptr inbounds [4 x i32], ptr %658, i64 0, i64 3
  store i32 %655, ptr %659, align 4, !tbaa !33
  %660 = load ptr, ptr %5, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.drwav, ptr %660, i32 0, i32 21
  %662 = getelementptr inbounds %struct.anon.2, ptr %661, i32 0, i32 4
  store i32 2, ptr %662, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  br label %891

663:                                              ; preds = %429
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %664 = load ptr, ptr %5, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.drwav, ptr %664, i32 0, i32 21
  %666 = getelementptr inbounds %struct.anon.2, ptr %665, i32 0, i32 5
  %667 = getelementptr inbounds [2 x [2 x i32]], ptr %666, i64 0, i64 0
  %668 = getelementptr inbounds [2 x i32], ptr %667, i64 0, i64 1
  %669 = load i32, ptr %668, align 4, !tbaa !33
  %670 = load ptr, ptr %5, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.drwav, ptr %670, i32 0, i32 21
  %672 = getelementptr inbounds %struct.anon.2, ptr %671, i32 0, i32 1
  %673 = getelementptr inbounds [2 x i16], ptr %672, i64 0, i64 0
  %674 = load i16, ptr %673, align 4, !tbaa !32
  %675 = zext i16 %674 to i64
  %676 = getelementptr inbounds [7 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff1Table, i64 0, i64 %675
  %677 = load i32, ptr %676, align 4, !tbaa !33
  %678 = mul nsw i32 %669, %677
  %679 = load ptr, ptr %5, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.drwav, ptr %679, i32 0, i32 21
  %681 = getelementptr inbounds %struct.anon.2, ptr %680, i32 0, i32 5
  %682 = getelementptr inbounds [2 x [2 x i32]], ptr %681, i64 0, i64 0
  %683 = getelementptr inbounds [2 x i32], ptr %682, i64 0, i64 0
  %684 = load i32, ptr %683, align 4, !tbaa !33
  %685 = load ptr, ptr %5, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.drwav, ptr %685, i32 0, i32 21
  %687 = getelementptr inbounds %struct.anon.2, ptr %686, i32 0, i32 1
  %688 = getelementptr inbounds [2 x i16], ptr %687, i64 0, i64 0
  %689 = load i16, ptr %688, align 4, !tbaa !32
  %690 = zext i16 %689 to i64
  %691 = getelementptr inbounds [7 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff2Table, i64 0, i64 %690
  %692 = load i32, ptr %691, align 4, !tbaa !33
  %693 = mul nsw i32 %684, %692
  %694 = add nsw i32 %678, %693
  %695 = ashr i32 %694, 8
  store i32 %695, ptr %18, align 4, !tbaa !33
  %696 = load i32, ptr %14, align 4, !tbaa !33
  %697 = load ptr, ptr %5, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.drwav, ptr %697, i32 0, i32 21
  %699 = getelementptr inbounds %struct.anon.2, ptr %698, i32 0, i32 2
  %700 = getelementptr inbounds [2 x i32], ptr %699, i64 0, i64 0
  %701 = load i32, ptr %700, align 8, !tbaa !33
  %702 = mul nsw i32 %696, %701
  %703 = load i32, ptr %18, align 4, !tbaa !33
  %704 = add nsw i32 %703, %702
  store i32 %704, ptr %18, align 4, !tbaa !33
  %705 = load i32, ptr %18, align 4, !tbaa !33
  %706 = icmp slt i32 32767, %705
  br i1 %706, label %707, label %708

707:                                              ; preds = %663
  br label %710

708:                                              ; preds = %663
  %709 = load i32, ptr %18, align 4, !tbaa !33
  br label %710

710:                                              ; preds = %708, %707
  %711 = phi i32 [ 32767, %707 ], [ %709, %708 ]
  %712 = icmp sgt i32 -32768, %711
  br i1 %712, label %713, label %714

713:                                              ; preds = %710
  br label %722

714:                                              ; preds = %710
  %715 = load i32, ptr %18, align 4, !tbaa !33
  %716 = icmp slt i32 32767, %715
  br i1 %716, label %717, label %718

717:                                              ; preds = %714
  br label %720

718:                                              ; preds = %714
  %719 = load i32, ptr %18, align 4, !tbaa !33
  br label %720

720:                                              ; preds = %718, %717
  %721 = phi i32 [ 32767, %717 ], [ %719, %718 ]
  br label %722

722:                                              ; preds = %720, %713
  %723 = phi i32 [ -32768, %713 ], [ %721, %720 ]
  store i32 %723, ptr %18, align 4, !tbaa !33
  %724 = load i8, ptr %13, align 1, !tbaa !31
  %725 = zext i8 %724 to i32
  %726 = and i32 %725, 240
  %727 = ashr i32 %726, 4
  %728 = sext i32 %727 to i64
  %729 = getelementptr inbounds [16 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE15adaptationTable, i64 0, i64 %728
  %730 = load i32, ptr %729, align 4, !tbaa !33
  %731 = load ptr, ptr %5, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.drwav, ptr %731, i32 0, i32 21
  %733 = getelementptr inbounds %struct.anon.2, ptr %732, i32 0, i32 2
  %734 = getelementptr inbounds [2 x i32], ptr %733, i64 0, i64 0
  %735 = load i32, ptr %734, align 8, !tbaa !33
  %736 = mul nsw i32 %730, %735
  %737 = ashr i32 %736, 8
  %738 = load ptr, ptr %5, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.drwav, ptr %738, i32 0, i32 21
  %740 = getelementptr inbounds %struct.anon.2, ptr %739, i32 0, i32 2
  %741 = getelementptr inbounds [2 x i32], ptr %740, i64 0, i64 0
  store i32 %737, ptr %741, align 8, !tbaa !33
  %742 = load ptr, ptr %5, align 8, !tbaa !5
  %743 = getelementptr inbounds %struct.drwav, ptr %742, i32 0, i32 21
  %744 = getelementptr inbounds %struct.anon.2, ptr %743, i32 0, i32 2
  %745 = getelementptr inbounds [2 x i32], ptr %744, i64 0, i64 0
  %746 = load i32, ptr %745, align 8, !tbaa !33
  %747 = icmp slt i32 %746, 16
  br i1 %747, label %748, label %753

748:                                              ; preds = %722
  %749 = load ptr, ptr %5, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.drwav, ptr %749, i32 0, i32 21
  %751 = getelementptr inbounds %struct.anon.2, ptr %750, i32 0, i32 2
  %752 = getelementptr inbounds [2 x i32], ptr %751, i64 0, i64 0
  store i32 16, ptr %752, align 8, !tbaa !33
  br label %753

753:                                              ; preds = %748, %722
  %754 = load ptr, ptr %5, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.drwav, ptr %754, i32 0, i32 21
  %756 = getelementptr inbounds %struct.anon.2, ptr %755, i32 0, i32 5
  %757 = getelementptr inbounds [2 x [2 x i32]], ptr %756, i64 0, i64 0
  %758 = getelementptr inbounds [2 x i32], ptr %757, i64 0, i64 1
  %759 = load i32, ptr %758, align 4, !tbaa !33
  %760 = load ptr, ptr %5, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.drwav, ptr %760, i32 0, i32 21
  %762 = getelementptr inbounds %struct.anon.2, ptr %761, i32 0, i32 5
  %763 = getelementptr inbounds [2 x [2 x i32]], ptr %762, i64 0, i64 0
  %764 = getelementptr inbounds [2 x i32], ptr %763, i64 0, i64 0
  store i32 %759, ptr %764, align 4, !tbaa !33
  %765 = load i32, ptr %18, align 4, !tbaa !33
  %766 = load ptr, ptr %5, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.drwav, ptr %766, i32 0, i32 21
  %768 = getelementptr inbounds %struct.anon.2, ptr %767, i32 0, i32 5
  %769 = getelementptr inbounds [2 x [2 x i32]], ptr %768, i64 0, i64 0
  %770 = getelementptr inbounds [2 x i32], ptr %769, i64 0, i64 1
  store i32 %765, ptr %770, align 4, !tbaa !33
  %771 = load ptr, ptr %5, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.drwav, ptr %771, i32 0, i32 21
  %773 = getelementptr inbounds %struct.anon.2, ptr %772, i32 0, i32 5
  %774 = getelementptr inbounds [2 x [2 x i32]], ptr %773, i64 0, i64 1
  %775 = getelementptr inbounds [2 x i32], ptr %774, i64 0, i64 1
  %776 = load i32, ptr %775, align 4, !tbaa !33
  %777 = load ptr, ptr %5, align 8, !tbaa !5
  %778 = getelementptr inbounds %struct.drwav, ptr %777, i32 0, i32 21
  %779 = getelementptr inbounds %struct.anon.2, ptr %778, i32 0, i32 1
  %780 = getelementptr inbounds [2 x i16], ptr %779, i64 0, i64 1
  %781 = load i16, ptr %780, align 2, !tbaa !32
  %782 = zext i16 %781 to i64
  %783 = getelementptr inbounds [7 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff1Table, i64 0, i64 %782
  %784 = load i32, ptr %783, align 4, !tbaa !33
  %785 = mul nsw i32 %776, %784
  %786 = load ptr, ptr %5, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.drwav, ptr %786, i32 0, i32 21
  %788 = getelementptr inbounds %struct.anon.2, ptr %787, i32 0, i32 5
  %789 = getelementptr inbounds [2 x [2 x i32]], ptr %788, i64 0, i64 1
  %790 = getelementptr inbounds [2 x i32], ptr %789, i64 0, i64 0
  %791 = load i32, ptr %790, align 4, !tbaa !33
  %792 = load ptr, ptr %5, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct.drwav, ptr %792, i32 0, i32 21
  %794 = getelementptr inbounds %struct.anon.2, ptr %793, i32 0, i32 1
  %795 = getelementptr inbounds [2 x i16], ptr %794, i64 0, i64 1
  %796 = load i16, ptr %795, align 2, !tbaa !32
  %797 = zext i16 %796 to i64
  %798 = getelementptr inbounds [7 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff2Table, i64 0, i64 %797
  %799 = load i32, ptr %798, align 4, !tbaa !33
  %800 = mul nsw i32 %791, %799
  %801 = add nsw i32 %785, %800
  %802 = ashr i32 %801, 8
  store i32 %802, ptr %19, align 4, !tbaa !33
  %803 = load i32, ptr %15, align 4, !tbaa !33
  %804 = load ptr, ptr %5, align 8, !tbaa !5
  %805 = getelementptr inbounds %struct.drwav, ptr %804, i32 0, i32 21
  %806 = getelementptr inbounds %struct.anon.2, ptr %805, i32 0, i32 2
  %807 = getelementptr inbounds [2 x i32], ptr %806, i64 0, i64 1
  %808 = load i32, ptr %807, align 4, !tbaa !33
  %809 = mul nsw i32 %803, %808
  %810 = load i32, ptr %19, align 4, !tbaa !33
  %811 = add nsw i32 %810, %809
  store i32 %811, ptr %19, align 4, !tbaa !33
  %812 = load i32, ptr %19, align 4, !tbaa !33
  %813 = icmp slt i32 32767, %812
  br i1 %813, label %814, label %815

814:                                              ; preds = %753
  br label %817

815:                                              ; preds = %753
  %816 = load i32, ptr %19, align 4, !tbaa !33
  br label %817

817:                                              ; preds = %815, %814
  %818 = phi i32 [ 32767, %814 ], [ %816, %815 ]
  %819 = icmp sgt i32 -32768, %818
  br i1 %819, label %820, label %821

820:                                              ; preds = %817
  br label %829

821:                                              ; preds = %817
  %822 = load i32, ptr %19, align 4, !tbaa !33
  %823 = icmp slt i32 32767, %822
  br i1 %823, label %824, label %825

824:                                              ; preds = %821
  br label %827

825:                                              ; preds = %821
  %826 = load i32, ptr %19, align 4, !tbaa !33
  br label %827

827:                                              ; preds = %825, %824
  %828 = phi i32 [ 32767, %824 ], [ %826, %825 ]
  br label %829

829:                                              ; preds = %827, %820
  %830 = phi i32 [ -32768, %820 ], [ %828, %827 ]
  store i32 %830, ptr %19, align 4, !tbaa !33
  %831 = load i8, ptr %13, align 1, !tbaa !31
  %832 = zext i8 %831 to i32
  %833 = and i32 %832, 15
  %834 = ashr i32 %833, 0
  %835 = sext i32 %834 to i64
  %836 = getelementptr inbounds [16 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE15adaptationTable, i64 0, i64 %835
  %837 = load i32, ptr %836, align 4, !tbaa !33
  %838 = load ptr, ptr %5, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.drwav, ptr %838, i32 0, i32 21
  %840 = getelementptr inbounds %struct.anon.2, ptr %839, i32 0, i32 2
  %841 = getelementptr inbounds [2 x i32], ptr %840, i64 0, i64 1
  %842 = load i32, ptr %841, align 4, !tbaa !33
  %843 = mul nsw i32 %837, %842
  %844 = ashr i32 %843, 8
  %845 = load ptr, ptr %5, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.drwav, ptr %845, i32 0, i32 21
  %847 = getelementptr inbounds %struct.anon.2, ptr %846, i32 0, i32 2
  %848 = getelementptr inbounds [2 x i32], ptr %847, i64 0, i64 1
  store i32 %844, ptr %848, align 4, !tbaa !33
  %849 = load ptr, ptr %5, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.drwav, ptr %849, i32 0, i32 21
  %851 = getelementptr inbounds %struct.anon.2, ptr %850, i32 0, i32 2
  %852 = getelementptr inbounds [2 x i32], ptr %851, i64 0, i64 1
  %853 = load i32, ptr %852, align 4, !tbaa !33
  %854 = icmp slt i32 %853, 16
  br i1 %854, label %855, label %860

855:                                              ; preds = %829
  %856 = load ptr, ptr %5, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.drwav, ptr %856, i32 0, i32 21
  %858 = getelementptr inbounds %struct.anon.2, ptr %857, i32 0, i32 2
  %859 = getelementptr inbounds [2 x i32], ptr %858, i64 0, i64 1
  store i32 16, ptr %859, align 4, !tbaa !33
  br label %860

860:                                              ; preds = %855, %829
  %861 = load ptr, ptr %5, align 8, !tbaa !5
  %862 = getelementptr inbounds %struct.drwav, ptr %861, i32 0, i32 21
  %863 = getelementptr inbounds %struct.anon.2, ptr %862, i32 0, i32 5
  %864 = getelementptr inbounds [2 x [2 x i32]], ptr %863, i64 0, i64 1
  %865 = getelementptr inbounds [2 x i32], ptr %864, i64 0, i64 1
  %866 = load i32, ptr %865, align 4, !tbaa !33
  %867 = load ptr, ptr %5, align 8, !tbaa !5
  %868 = getelementptr inbounds %struct.drwav, ptr %867, i32 0, i32 21
  %869 = getelementptr inbounds %struct.anon.2, ptr %868, i32 0, i32 5
  %870 = getelementptr inbounds [2 x [2 x i32]], ptr %869, i64 0, i64 1
  %871 = getelementptr inbounds [2 x i32], ptr %870, i64 0, i64 0
  store i32 %866, ptr %871, align 4, !tbaa !33
  %872 = load i32, ptr %19, align 4, !tbaa !33
  %873 = load ptr, ptr %5, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct.drwav, ptr %873, i32 0, i32 21
  %875 = getelementptr inbounds %struct.anon.2, ptr %874, i32 0, i32 5
  %876 = getelementptr inbounds [2 x [2 x i32]], ptr %875, i64 0, i64 1
  %877 = getelementptr inbounds [2 x i32], ptr %876, i64 0, i64 1
  store i32 %872, ptr %877, align 4, !tbaa !33
  %878 = load i32, ptr %18, align 4, !tbaa !33
  %879 = load ptr, ptr %5, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.drwav, ptr %879, i32 0, i32 21
  %881 = getelementptr inbounds %struct.anon.2, ptr %880, i32 0, i32 3
  %882 = getelementptr inbounds [4 x i32], ptr %881, i64 0, i64 2
  store i32 %878, ptr %882, align 8, !tbaa !33
  %883 = load i32, ptr %19, align 4, !tbaa !33
  %884 = load ptr, ptr %5, align 8, !tbaa !5
  %885 = getelementptr inbounds %struct.drwav, ptr %884, i32 0, i32 21
  %886 = getelementptr inbounds %struct.anon.2, ptr %885, i32 0, i32 3
  %887 = getelementptr inbounds [4 x i32], ptr %886, i64 0, i64 3
  store i32 %883, ptr %887, align 4, !tbaa !33
  %888 = load ptr, ptr %5, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.drwav, ptr %888, i32 0, i32 21
  %890 = getelementptr inbounds %struct.anon.2, ptr %889, i32 0, i32 4
  store i32 1, ptr %890, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  br label %891

891:                                              ; preds = %860, %632
  store i32 0, ptr %10, align 4
  br label %892

892:                                              ; preds = %891, %394
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #4
  %893 = load i32, ptr %10, align 4
  switch i32 %893, label %899 [
    i32 0, label %894
  ]

894:                                              ; preds = %892
  br label %895

895:                                              ; preds = %894
  br label %896

896:                                              ; preds = %895, %372
  br label %38, !llvm.loop !37

897:                                              ; preds = %50
  %898 = load i64, ptr %8, align 8, !tbaa !9
  store i64 %898, ptr %4, align 8
  store i32 1, ptr %10, align 4
  br label %899

899:                                              ; preds = %897, %892, %370, %284, %149
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  %900 = load i64, ptr %4, align 8
  ret i64 %900
}

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }
attributes #5 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !10, i64 288}
!12 = !{!"_ZTS5drwav", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !13, i64 32, !14, i64 64, !15, i64 68, !17, i64 108, !16, i64 112, !16, i64 114, !16, i64 116, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !17, i64 160, !18, i64 164, !19, i64 224, !20, i64 248, !21, i64 288, !22, i64 296, !23, i64 348}
!13 = !{!"_ZTS26drwav_allocation_callbacks", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!14 = !{!"_ZTS15drwav_container", !7, i64 0}
!15 = !{!"_ZTS9drwav_fmt", !16, i64 0, !16, i64 2, !17, i64 4, !17, i64 8, !16, i64 12, !16, i64 14, !16, i64 16, !16, i64 18, !17, i64 20, !7, i64 24}
!16 = !{!"short", !7, i64 0}
!17 = !{!"int", !7, i64 0}
!18 = !{!"_ZTS10drwav_smpl", !17, i64 0, !17, i64 4, !17, i64 8, !17, i64 12, !17, i64 16, !17, i64 20, !17, i64 24, !17, i64 28, !17, i64 32, !7, i64 36}
!19 = !{!"_ZTS20drwav__memory_stream", !6, i64 0, !10, i64 8, !10, i64 16}
!20 = !{!"_ZTS26drwav__memory_stream_write", !6, i64 0, !6, i64 8, !10, i64 16, !10, i64 24, !10, i64 32}
!21 = !{!"_ZTSN5drwavUt_E", !10, i64 0}
!22 = !{!"_ZTSN5drwavUt0_E", !17, i64 0, !7, i64 4, !7, i64 8, !7, i64 16, !17, i64 32, !7, i64 36}
!23 = !{!"_ZTSN5drwavUt1_E", !17, i64 0, !7, i64 4, !7, i64 12, !7, i64 20, !17, i64 84}
!24 = !{!12, !10, i64 120}
!25 = !{!12, !17, i64 328}
!26 = !{!12, !17, i64 296}
!27 = !{!12, !16, i64 112}
!28 = !{!12, !6, i64 0}
!29 = !{!12, !6, i64 24}
!30 = !{!12, !16, i64 80}
!31 = !{!7, !7, i64 0}
!32 = !{!16, !16, i64 0}
!33 = !{!17, !17, i64 0}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = distinct !{!36, !35}
!37 = distinct !{!37, !35}


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

@.str.16 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [15 x i8], align 1
@__PRETTY_FUNCTION__._Z34drwav_read_pcm_frames_s16__msadpcmP5drwavmPs = external hidden unnamed_addr constant [86 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [21 x i8], align 1
@_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE15adaptationTable = external hidden local_unnamed_addr global [16 x i32], align 16
@_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff1Table = external hidden local_unnamed_addr global [7 x i32], align 16
@_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff2Table = external hidden local_unnamed_addr global [7 x i32], align 16

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local noundef i64 @_Z34drwav_read_pcm_frames_s16__msadpcmP5drwavmPs(ptr noundef %0, i64 noundef %1, ptr noundef writeonly %2) local_unnamed_addr #2 {
  %4 = alloca [7 x i8], align 1
  %5 = alloca [14 x i8], align 1
  %6 = alloca i8, align 1
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %7, label %8

7:                                                ; preds = %3
  tail call void @__assert_fail(ptr noundef nonnull @.str.29, ptr noundef nonnull @.str.16, i32 noundef 3171, ptr noundef nonnull @__PRETTY_FUNCTION__._Z34drwav_read_pcm_frames_s16__msadpcmP5drwavmPs) #5
  unreachable

8:                                                ; preds = %3
  %.not186 = icmp eq i64 %1, 0
  br i1 %.not186, label %9, label %10

9:                                                ; preds = %8
  tail call void @__assert_fail(ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.16, i32 noundef 3172, ptr noundef nonnull @__PRETTY_FUNCTION__._Z34drwav_read_pcm_frames_s16__msadpcmP5drwavmPs) #5
  unreachable

10:                                               ; preds = %8
  %.not187 = icmp eq ptr %2, null
  br i1 %.not187, label %43, label %.preheader206

.preheader206:                                    ; preds = %10
  %11 = getelementptr inbounds i8, ptr %0, i64 288
  %12 = getelementptr inbounds i8, ptr %0, i64 120
  %13 = load i64, ptr %11, align 8, !tbaa !5
  %14 = load i64, ptr %12, align 8, !tbaa !22
  %15 = icmp ult i64 %13, %14
  br i1 %15, label %.lr.ph231, label %.critedge

.lr.ph231:                                        ; preds = %.preheader206
  %16 = getelementptr inbounds i8, ptr %0, i64 296
  %17 = getelementptr inbounds i8, ptr %0, i64 328
  %18 = getelementptr inbounds i8, ptr %0, i64 112
  %19 = getelementptr inbounds i8, ptr %0, i64 24
  %20 = getelementptr inbounds i8, ptr %0, i64 80
  %21 = getelementptr inbounds i8, ptr %0, i64 300
  %22 = getelementptr inbounds i8, ptr %5, i64 1
  %23 = getelementptr inbounds i8, ptr %0, i64 302
  %24 = getelementptr inbounds i8, ptr %5, i64 2
  %25 = getelementptr inbounds i8, ptr %0, i64 304
  %26 = getelementptr inbounds i8, ptr %5, i64 4
  %27 = getelementptr inbounds i8, ptr %0, i64 308
  %28 = getelementptr inbounds i8, ptr %5, i64 6
  %29 = getelementptr inbounds i8, ptr %0, i64 332
  %30 = getelementptr inbounds i8, ptr %0, i64 336
  %31 = getelementptr inbounds i8, ptr %5, i64 8
  %32 = getelementptr inbounds i8, ptr %0, i64 340
  %33 = getelementptr inbounds i8, ptr %0, i64 344
  %34 = getelementptr inbounds i8, ptr %5, i64 10
  %35 = getelementptr inbounds i8, ptr %5, i64 12
  %36 = getelementptr inbounds i8, ptr %0, i64 312
  %37 = getelementptr inbounds i8, ptr %0, i64 316
  %38 = getelementptr inbounds i8, ptr %0, i64 320
  %39 = getelementptr inbounds i8, ptr %0, i64 324
  %40 = getelementptr inbounds i8, ptr %4, i64 1
  %41 = getelementptr inbounds i8, ptr %4, i64 3
  %42 = getelementptr inbounds i8, ptr %4, i64 5
  %.pre = load i32, ptr %17, align 8, !tbaa !23
  br label %44

43:                                               ; preds = %10
  tail call void @__assert_fail(ptr noundef nonnull @.str.31, ptr noundef nonnull @.str.16, i32 noundef 3173, ptr noundef nonnull @__PRETTY_FUNCTION__._Z34drwav_read_pcm_frames_s16__msadpcmP5drwavmPs) #5
  unreachable

44:                                               ; preds = %.lr.ph231, %.backedge
  %.promoted251 = phi i32 [ %.pre, %.lr.ph231 ], [ %.promoted252, %.backedge ]
  %.0172230 = phi i64 [ 0, %.lr.ph231 ], [ %.1173227244, %.backedge ]
  %.0174229 = phi ptr [ %2, %.lr.ph231 ], [ %.1175226, %.backedge ]
  %.0176228 = phi i64 [ %1, %.lr.ph231 ], [ %.1177225238, %.backedge ]
  %45 = icmp eq i32 %.promoted251, 0
  br i1 %45, label %46, label %96

46:                                               ; preds = %44
  %47 = load i32, ptr %16, align 8, !tbaa !24
  %48 = icmp eq i32 %47, 0
  br i1 %48, label %49, label %96

49:                                               ; preds = %46
  %50 = load i16, ptr %18, align 8, !tbaa !25
  %51 = icmp eq i16 %50, 1
  br i1 %51, label %52, label %69

52:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 7, ptr nonnull %4) #6
  %53 = load ptr, ptr %0, align 8, !tbaa !26
  %54 = load ptr, ptr %19, align 8, !tbaa !27
  %55 = call noundef i64 %53(ptr noundef %54, ptr noundef nonnull %4, i64 noundef 7)
  %.not189 = icmp eq i64 %55, 7
  br i1 %.not189, label %.thread, label %68

.thread:                                          ; preds = %52
  %56 = load i16, ptr %20, align 4, !tbaa !28
  %57 = zext i16 %56 to i32
  %58 = add nsw i32 %57, -7
  store i32 %58, ptr %16, align 8, !tbaa !24
  %59 = load i8, ptr %4, align 1, !tbaa !29
  %60 = zext i8 %59 to i16
  store i16 %60, ptr %21, align 4, !tbaa !30
  %61 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef nonnull %40)
  %62 = sext i16 %61 to i32
  store i32 %62, ptr %25, align 8, !tbaa !31
  %63 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef nonnull %41)
  %64 = sext i16 %63 to i32
  store i32 %64, ptr %30, align 4, !tbaa !31
  %65 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef nonnull %42)
  %66 = sext i16 %65 to i32
  store i32 %66, ptr %29, align 4, !tbaa !31
  store i32 %66, ptr %38, align 8, !tbaa !31
  %67 = load i32, ptr %30, align 4, !tbaa !31
  store i32 %67, ptr %39, align 4, !tbaa !31
  store i32 2, ptr %17, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 7, ptr nonnull %4) #6
  br label %96

68:                                               ; preds = %52
  call void @llvm.lifetime.end.p0(i64 7, ptr nonnull %4) #6
  br label %.critedge

69:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 14, ptr nonnull %5) #6
  %70 = load ptr, ptr %0, align 8, !tbaa !26
  %71 = load ptr, ptr %19, align 8, !tbaa !27
  %72 = call noundef i64 %70(ptr noundef %71, ptr noundef nonnull %5, i64 noundef 14)
  %.not188 = icmp eq i64 %72, 14
  br i1 %.not188, label %.thread201, label %95

.thread201:                                       ; preds = %69
  %73 = load i16, ptr %20, align 4, !tbaa !28
  %74 = zext i16 %73 to i32
  %75 = add nsw i32 %74, -14
  store i32 %75, ptr %16, align 8, !tbaa !24
  %76 = load i8, ptr %5, align 1, !tbaa !29
  %77 = zext i8 %76 to i16
  store i16 %77, ptr %21, align 4, !tbaa !30
  %78 = load i8, ptr %22, align 1, !tbaa !29
  %79 = zext i8 %78 to i16
  store i16 %79, ptr %23, align 2, !tbaa !30
  %80 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef nonnull %24)
  %81 = sext i16 %80 to i32
  store i32 %81, ptr %25, align 8, !tbaa !31
  %82 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef nonnull %26)
  %83 = sext i16 %82 to i32
  store i32 %83, ptr %27, align 4, !tbaa !31
  %84 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef nonnull %28)
  %85 = sext i16 %84 to i32
  store i32 %85, ptr %30, align 4, !tbaa !31
  %86 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef nonnull %31)
  %87 = sext i16 %86 to i32
  store i32 %87, ptr %33, align 4, !tbaa !31
  %88 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef nonnull %34)
  %89 = sext i16 %88 to i32
  store i32 %89, ptr %29, align 4, !tbaa !31
  %90 = call noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef nonnull %35)
  %91 = sext i16 %90 to i32
  store i32 %91, ptr %32, align 4, !tbaa !31
  %92 = load i32, ptr %29, align 4, !tbaa !31
  store i32 %92, ptr %36, align 8, !tbaa !31
  store i32 %91, ptr %37, align 4, !tbaa !31
  %93 = load i32, ptr %30, align 4, !tbaa !31
  store i32 %93, ptr %38, align 8, !tbaa !31
  %94 = load i32, ptr %33, align 4, !tbaa !31
  store i32 %94, ptr %39, align 4, !tbaa !31
  store i32 2, ptr %17, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 14, ptr nonnull %5) #6
  br label %96

95:                                               ; preds = %69
  call void @llvm.lifetime.end.p0(i64 14, ptr nonnull %5) #6
  br label %.critedge

96:                                               ; preds = %.thread201, %.thread, %46, %44
  %.promoted = phi i32 [ 2, %.thread201 ], [ 2, %.thread ], [ 0, %46 ], [ %.promoted251, %44 ]
  %97 = zext i32 %.promoted to i64
  %98 = add i64 %.0172230, %97
  %99 = sub i64 %.0176228, %97
  br label %100

100:                                              ; preds = %96, %._crit_edge
  %.promoted253 = phi i32 [ %.promoted, %96 ], [ %122, %._crit_edge ]
  %.1173227 = phi i64 [ %.0172230, %96 ], [ %120, %._crit_edge ]
  %.1175226 = phi ptr [ %.0174229, %96 ], [ %118, %._crit_edge ]
  %.1177225 = phi i64 [ %.0176228, %96 ], [ %119, %._crit_edge ]
  %.not191 = icmp eq i32 %.promoted253, 0
  br i1 %.not191, label %123, label %101

101:                                              ; preds = %100
  %102 = load i64, ptr %11, align 8, !tbaa !5
  %103 = load i64, ptr %12, align 8, !tbaa !22
  %104 = icmp ult i64 %102, %103
  br i1 %104, label %.preheader, label %.backedge

.preheader:                                       ; preds = %101
  %105 = load i16, ptr %18, align 8, !tbaa !25
  %.not233 = icmp eq i16 %105, 0
  br i1 %.not233, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %.preheader ]
  %.in = phi i16 [ %114, %.lr.ph ], [ %105, %.preheader ]
  %106 = zext i16 %.in to i32
  %107 = mul i32 %.promoted253, %106
  %108 = zext i32 %107 to i64
  %reass.sub = add nuw nsw i64 %indvars.iv, 4
  %109 = sub nsw i64 %reass.sub, %108
  %110 = getelementptr inbounds [4 x i32], ptr %36, i64 0, i64 %109
  %111 = load i32, ptr %110, align 4, !tbaa !31
  %112 = trunc i32 %111 to i16
  %113 = getelementptr inbounds i16, ptr %.1175226, i64 %indvars.iv
  store i16 %112, ptr %113, align 2, !tbaa !30
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %114 = load i16, ptr %18, align 8, !tbaa !25
  %115 = zext i16 %114 to i64
  %116 = icmp ult i64 %indvars.iv.next, %115
  br i1 %116, label %.lr.ph, label %._crit_edge, !llvm.loop !32

._crit_edge:                                      ; preds = %.lr.ph, %.preheader
  %.lcssa = phi i16 [ 0, %.preheader ], [ %114, %.lr.ph ]
  %117 = zext i16 %.lcssa to i64
  %118 = getelementptr inbounds i16, ptr %.1175226, i64 %117
  %119 = add i64 %.1177225, -1
  %120 = add i64 %.1173227, 1
  %121 = add i64 %102, 1
  store i64 %121, ptr %11, align 8, !tbaa !5
  %122 = add i32 %.promoted253, -1
  store i32 %122, ptr %17, align 8, !tbaa !23
  %cond = icmp eq i64 %119, 0
  br i1 %cond, label %.critedge.loopexit, label %100, !llvm.loop !34

123:                                              ; preds = %100
  %124 = load i32, ptr %16, align 8, !tbaa !24
  %125 = icmp eq i32 %124, 0
  br i1 %125, label %.backedge, label %126

126:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #6
  %127 = load ptr, ptr %0, align 8, !tbaa !26
  %128 = load ptr, ptr %19, align 8, !tbaa !27
  %129 = call noundef i64 %127(ptr noundef %128, ptr noundef nonnull %6, i64 noundef 1)
  %.not192 = icmp eq i64 %129, 1
  br i1 %.not192, label %130, label %206

130:                                              ; preds = %126
  %131 = load i32, ptr %16, align 8, !tbaa !24
  %132 = add i32 %131, -1
  store i32 %132, ptr %16, align 8, !tbaa !24
  %133 = load i8, ptr %6, align 1, !tbaa !29
  %134 = lshr i8 %133, 4
  %135 = zext nneg i8 %134 to i32
  %136 = or disjoint i8 %134, -16
  %137 = sext i8 %136 to i32
  %.not193205 = icmp slt i8 %133, 0
  %.0169 = select i1 %.not193205, i32 %137, i32 %135
  %138 = zext i8 %133 to i32
  %139 = and i32 %138, 15
  %140 = and i32 %138, 8
  %.not194 = icmp eq i32 %140, 0
  %masksel = select i1 %.not194, i32 0, i32 -16
  %.0 = or disjoint i32 %masksel, %139
  %141 = load i16, ptr %18, align 8, !tbaa !25
  %142 = icmp eq i16 %141, 1
  %143 = load i32, ptr %30, align 4, !tbaa !31
  %144 = load i16, ptr %21, align 4, !tbaa !30
  %145 = zext i16 %144 to i64
  %146 = getelementptr inbounds [7 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff1Table, i64 0, i64 %145
  %147 = load i32, ptr %146, align 4, !tbaa !31
  %148 = mul nsw i32 %147, %143
  %149 = load i32, ptr %29, align 4, !tbaa !31
  %150 = getelementptr inbounds [7 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff2Table, i64 0, i64 %145
  %151 = load i32, ptr %150, align 4, !tbaa !31
  %152 = mul nsw i32 %151, %149
  %153 = add nsw i32 %152, %148
  %154 = ashr i32 %153, 8
  %155 = load i32, ptr %25, align 8, !tbaa !31
  %156 = mul nsw i32 %155, %.0169
  %157 = add nsw i32 %154, %156
  %158 = call i32 @llvm.smin.i32(i32 %157, i32 32767)
  %159 = call i32 @llvm.smax.i32(i32 %158, i32 -32768)
  %160 = zext nneg i8 %134 to i64
  %161 = getelementptr inbounds [16 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE15adaptationTable, i64 0, i64 %160
  %162 = load i32, ptr %161, align 4, !tbaa !31
  %163 = mul nsw i32 %162, %155
  %164 = ashr i32 %163, 8
  %spec.select = call i32 @llvm.smax.i32(i32 %164, i32 16)
  store i32 %spec.select, ptr %25, align 8, !tbaa !31
  store i32 %143, ptr %29, align 4, !tbaa !31
  store i32 %159, ptr %30, align 4, !tbaa !31
  br i1 %142, label %165, label %182

165:                                              ; preds = %130
  %166 = load i32, ptr %146, align 4, !tbaa !31
  %167 = mul nsw i32 %159, %166
  %168 = load i32, ptr %150, align 4, !tbaa !31
  %169 = mul nsw i32 %168, %143
  %170 = add nsw i32 %169, %167
  %171 = ashr i32 %170, 8
  %172 = mul nsw i32 %spec.select, %.0
  %173 = add nsw i32 %171, %172
  %174 = call i32 @llvm.smin.i32(i32 %173, i32 32767)
  %175 = call i32 @llvm.smax.i32(i32 %174, i32 -32768)
  %176 = and i8 %133, 15
  %177 = zext nneg i8 %176 to i64
  %178 = getelementptr inbounds [16 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE15adaptationTable, i64 0, i64 %177
  %179 = load i32, ptr %178, align 4, !tbaa !31
  %180 = mul nsw i32 %179, %spec.select
  %181 = ashr i32 %180, 8
  %storemerge198 = call i32 @llvm.smax.i32(i32 %181, i32 16)
  store i32 %storemerge198, ptr %25, align 8, !tbaa !31
  store i32 %159, ptr %29, align 4, !tbaa !31
  store i32 %175, ptr %30, align 4, !tbaa !31
  br label %.thread203

182:                                              ; preds = %130
  %183 = load i32, ptr %33, align 4, !tbaa !31
  %184 = load i16, ptr %23, align 2, !tbaa !30
  %185 = zext i16 %184 to i64
  %186 = getelementptr inbounds [7 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff1Table, i64 0, i64 %185
  %187 = load i32, ptr %186, align 4, !tbaa !31
  %188 = mul nsw i32 %187, %183
  %189 = load i32, ptr %32, align 4, !tbaa !31
  %190 = getelementptr inbounds [7 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE11coeff2Table, i64 0, i64 %185
  %191 = load i32, ptr %190, align 4, !tbaa !31
  %192 = mul nsw i32 %191, %189
  %193 = add nsw i32 %192, %188
  %194 = ashr i32 %193, 8
  %195 = load i32, ptr %27, align 4, !tbaa !31
  %196 = mul nsw i32 %195, %.0
  %197 = add nsw i32 %194, %196
  %198 = call i32 @llvm.smin.i32(i32 %197, i32 32767)
  %199 = call i32 @llvm.smax.i32(i32 %198, i32 -32768)
  %200 = and i8 %133, 15
  %201 = zext nneg i8 %200 to i64
  %202 = getelementptr inbounds [16 x i32], ptr @_ZZ34drwav_read_pcm_frames_s16__msadpcmP5drwavmPsE15adaptationTable, i64 0, i64 %201
  %203 = load i32, ptr %202, align 4, !tbaa !31
  %204 = mul nsw i32 %203, %195
  %205 = ashr i32 %204, 8
  %storemerge195 = call i32 @llvm.smax.i32(i32 %205, i32 16)
  store i32 %storemerge195, ptr %27, align 4, !tbaa !31
  store i32 %183, ptr %32, align 4, !tbaa !31
  store i32 %199, ptr %33, align 4, !tbaa !31
  br label %.thread203

.thread203:                                       ; preds = %165, %182
  %storemerge = phi i32 [ %199, %182 ], [ %175, %165 ]
  %storemerge196 = phi i32 [ 1, %182 ], [ 2, %165 ]
  store i32 %159, ptr %38, align 8, !tbaa !31
  store i32 %storemerge, ptr %39, align 4, !tbaa !31
  store i32 %storemerge196, ptr %17, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #6
  br label %.backedge

206:                                              ; preds = %126
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #6
  br label %.critedge

.backedge:                                        ; preds = %101, %.thread203, %123
  %.promoted252 = phi i32 [ %storemerge196, %.thread203 ], [ 0, %123 ], [ %.promoted253, %101 ]
  %.1173227244 = phi i64 [ %98, %.thread203 ], [ %98, %123 ], [ %.1173227, %101 ]
  %.1177225238 = phi i64 [ %99, %.thread203 ], [ %99, %123 ], [ %.1177225, %101 ]
  %207 = load i64, ptr %11, align 8, !tbaa !5
  %208 = load i64, ptr %12, align 8, !tbaa !22
  %209 = icmp ult i64 %207, %208
  br i1 %209, label %44, label %.critedge, !llvm.loop !35

.critedge.loopexit:                               ; preds = %._crit_edge
  %210 = add i64 %.0176228, %.0172230
  br label %.critedge

.critedge:                                        ; preds = %.backedge, %.critedge.loopexit, %.preheader206, %206, %95, %68
  %.6 = phi i64 [ %98, %206 ], [ %.0172230, %68 ], [ %.0172230, %95 ], [ 0, %.preheader206 ], [ %210, %.critedge.loopexit ], [ %.1173227244, %.backedge ]
  ret i64 %.6
}

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef signext i16 @_ZL19drwav__bytes_to_s16PKh(ptr noundef) local_unnamed_addr #3

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { noreturn nounwind }
attributes #6 = { 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, !15, i64 288}
!6 = !{!"_ZTS5drwav", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !10, i64 32, !11, i64 64, !12, i64 68, !14, i64 108, !13, i64 112, !13, i64 114, !13, i64 116, !15, i64 120, !15, i64 128, !15, i64 136, !15, i64 144, !15, i64 152, !14, i64 160, !16, i64 164, !17, i64 224, !18, i64 248, !19, i64 288, !20, i64 296, !21, i64 348}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTS26drwav_allocation_callbacks", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24}
!11 = !{!"_ZTS15drwav_container", !8, i64 0}
!12 = !{!"_ZTS9drwav_fmt", !13, i64 0, !13, i64 2, !14, i64 4, !14, i64 8, !13, i64 12, !13, i64 14, !13, i64 16, !13, i64 18, !14, i64 20, !8, i64 24}
!13 = !{!"short", !8, i64 0}
!14 = !{!"int", !8, i64 0}
!15 = !{!"long", !8, i64 0}
!16 = !{!"_ZTS10drwav_smpl", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28, !14, i64 32, !8, i64 36}
!17 = !{!"_ZTS20drwav__memory_stream", !7, i64 0, !15, i64 8, !15, i64 16}
!18 = !{!"_ZTS26drwav__memory_stream_write", !7, i64 0, !7, i64 8, !15, i64 16, !15, i64 24, !15, i64 32}
!19 = !{!"_ZTSN5drwavUt_E", !15, i64 0}
!20 = !{!"_ZTSN5drwavUt0_E", !14, i64 0, !8, i64 4, !8, i64 8, !8, i64 16, !14, i64 32, !8, i64 36}
!21 = !{!"_ZTSN5drwavUt1_E", !14, i64 0, !8, i64 4, !8, i64 12, !8, i64 20, !14, i64 84}
!22 = !{!6, !15, i64 120}
!23 = !{!6, !14, i64 328}
!24 = !{!6, !14, i64 296}
!25 = !{!6, !13, i64 112}
!26 = !{!6, !7, i64 0}
!27 = !{!6, !7, i64 24}
!28 = !{!6, !13, i64 80}
!29 = !{!8, !8, i64 0}
!30 = !{!13, !13, i64 0}
!31 = !{!14, !14, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = distinct !{!35, !33}


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