; LLVM IR from glaretechnologies/substrata :: opus/opus-1.3.1/silk (decode_indices)

; 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.silk_decoder_state = type { i32, [320 x i32], [16 x i32], [480 x i16], i32, i8, i32, i32, i32, i32, i32, i32, i32, [16 x i16], i32, ptr, ptr, i32, i32, i32, i16, [3 x i32], i32, [3 x i32], %struct._silk_resampler_state_struct, ptr, %struct.SideInfoIndices, %struct.silk_CNG_struct, i32, i32, i32, %struct.silk_PLC_struct }
%struct._silk_resampler_state_struct = type { [6 x i32], %union.anon, [48 x i16], i32, i32, i32, i32, i32, i32, i32, i32, ptr }
%union.anon = type { [36 x i32] }
%struct.SideInfoIndices = type { [4 x i8], [4 x i8], [17 x i8], i16, i8, i8, i8, i8, i8, i8, i8 }
%struct.silk_CNG_struct = type { [320 x i32], [16 x i16], [16 x i32], i32, i32, i32 }
%struct.silk_PLC_struct = type { i32, [5 x i16], [16 x i16], i32, i32, i16, i32, i32, i16, [2 x i32], i32, i32, i32 }
%struct.silk_NLSF_CB_struct = type { i16, i16, i16, i16, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@silk_type_offset_VAD_iCDF = external constant [4 x i8], align 1
@silk_type_offset_no_VAD_iCDF = external constant [2 x i8], align 1
@silk_delta_gain_iCDF = external constant [41 x i8], align 16
@silk_gain_iCDF = external constant [3 x [8 x i8]], align 16
@silk_uniform8_iCDF = external constant [8 x i8], align 1
@silk_NLSF_EXT_iCDF = external constant [7 x i8], align 1
@silk_NLSF_interpolation_factor_iCDF = external constant [5 x i8], align 1
@silk_pitch_delta_iCDF = external constant [21 x i8], align 16
@silk_pitch_lag_iCDF = external constant [32 x i8], align 16
@silk_LTP_per_index_iCDF = external constant [3 x i8], align 1
@silk_LTP_gain_iCDF_ptrs = external constant [3 x ptr], align 16
@silk_LTPscale_iCDF = external constant [3 x i8], align 1
@silk_uniform4_iCDF = external constant [4 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @silk_decode_indices(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4) #0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %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
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca [16 x i16], align 16
  %17 = alloca [16 x i8], align 16
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i32 %2, ptr %8, align 4, !tbaa !9
  store i32 %3, ptr %9, align 4, !tbaa !9
  store i32 %4, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #3
  %18 = load i32, ptr %9, align 4, !tbaa !9
  %19 = icmp ne i32 %18, 0
  br i1 %19, label %28, label %20

20:                                               ; preds = %5
  %21 = load ptr, ptr %6, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct.silk_decoder_state, ptr %21, i32 0, i32 21
  %23 = load i32, ptr %8, align 4, !tbaa !9
  %24 = sext i32 %23 to i64
  %25 = getelementptr inbounds [3 x i32], ptr %22, i64 0, i64 %24
  %26 = load i32, ptr %25, align 4, !tbaa !9
  %27 = icmp ne i32 %26, 0
  br i1 %27, label %28, label %32

28:                                               ; preds = %20, %5
  %29 = load ptr, ptr %7, align 8, !tbaa !5
  %30 = call i32 @ec_dec_icdf(ptr noundef %29, ptr noundef @silk_type_offset_VAD_iCDF, i32 noundef 8)
  %31 = add nsw i32 %30, 2
  store i32 %31, ptr %13, align 4, !tbaa !9
  br label %35

32:                                               ; preds = %20
  %33 = load ptr, ptr %7, align 8, !tbaa !5
  %34 = call i32 @ec_dec_icdf(ptr noundef %33, ptr noundef @silk_type_offset_no_VAD_iCDF, i32 noundef 8)
  store i32 %34, ptr %13, align 4, !tbaa !9
  br label %35

35:                                               ; preds = %32, %28
  %36 = load i32, ptr %13, align 4, !tbaa !9
  %37 = ashr i32 %36, 1
  %38 = trunc i32 %37 to i8
  %39 = load ptr, ptr %6, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.silk_decoder_state, ptr %39, i32 0, i32 26
  %41 = getelementptr inbounds %struct.SideInfoIndices, ptr %40, i32 0, i32 5
  store i8 %38, ptr %41, align 1, !tbaa !11
  %42 = load i32, ptr %13, align 4, !tbaa !9
  %43 = and i32 %42, 1
  %44 = trunc i32 %43 to i8
  %45 = load ptr, ptr %6, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.silk_decoder_state, ptr %45, i32 0, i32 26
  %47 = getelementptr inbounds %struct.SideInfoIndices, ptr %46, i32 0, i32 6
  store i8 %44, ptr %47, align 2, !tbaa !18
  %48 = load i32, ptr %10, align 4, !tbaa !9
  %49 = icmp eq i32 %48, 2
  br i1 %49, label %50, label %58

50:                                               ; preds = %35
  %51 = load ptr, ptr %7, align 8, !tbaa !5
  %52 = call i32 @ec_dec_icdf(ptr noundef %51, ptr noundef @silk_delta_gain_iCDF, i32 noundef 8)
  %53 = trunc i32 %52 to i8
  %54 = load ptr, ptr %6, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.silk_decoder_state, ptr %54, i32 0, i32 26
  %56 = getelementptr inbounds %struct.SideInfoIndices, ptr %55, i32 0, i32 0
  %57 = getelementptr inbounds [4 x i8], ptr %56, i64 0, i64 0
  store i8 %53, ptr %57, align 8, !tbaa !19
  br label %86

58:                                               ; preds = %35
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = load ptr, ptr %6, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.silk_decoder_state, ptr %60, i32 0, i32 26
  %62 = getelementptr inbounds %struct.SideInfoIndices, ptr %61, i32 0, i32 5
  %63 = load i8, ptr %62, align 1, !tbaa !11
  %64 = sext i8 %63 to i64
  %65 = getelementptr inbounds [3 x [8 x i8]], ptr @silk_gain_iCDF, i64 0, i64 %64
  %66 = getelementptr inbounds [8 x i8], ptr %65, i64 0, i64 0
  %67 = call i32 @ec_dec_icdf(ptr noundef %59, ptr noundef %66, i32 noundef 8)
  %68 = shl i32 %67, 3
  %69 = trunc i32 %68 to i8
  %70 = load ptr, ptr %6, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.silk_decoder_state, ptr %70, i32 0, i32 26
  %72 = getelementptr inbounds %struct.SideInfoIndices, ptr %71, i32 0, i32 0
  %73 = getelementptr inbounds [4 x i8], ptr %72, i64 0, i64 0
  store i8 %69, ptr %73, align 8, !tbaa !19
  %74 = load ptr, ptr %7, align 8, !tbaa !5
  %75 = call i32 @ec_dec_icdf(ptr noundef %74, ptr noundef @silk_uniform8_iCDF, i32 noundef 8)
  %76 = trunc i32 %75 to i8
  %77 = sext i8 %76 to i32
  %78 = load ptr, ptr %6, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.silk_decoder_state, ptr %78, i32 0, i32 26
  %80 = getelementptr inbounds %struct.SideInfoIndices, ptr %79, i32 0, i32 0
  %81 = getelementptr inbounds [4 x i8], ptr %80, i64 0, i64 0
  %82 = load i8, ptr %81, align 8, !tbaa !19
  %83 = sext i8 %82 to i32
  %84 = add nsw i32 %83, %77
  %85 = trunc i32 %84 to i8
  store i8 %85, ptr %81, align 8, !tbaa !19
  br label %86

86:                                               ; preds = %58, %50
  store i32 1, ptr %11, align 4, !tbaa !9
  br label %87

87:                                               ; preds = %103, %86
  %88 = load i32, ptr %11, align 4, !tbaa !9
  %89 = load ptr, ptr %6, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.silk_decoder_state, ptr %89, i32 0, i32 8
  %91 = load i32, ptr %90, align 4, !tbaa !20
  %92 = icmp slt i32 %88, %91
  br i1 %92, label %93, label %106

93:                                               ; preds = %87
  %94 = load ptr, ptr %7, align 8, !tbaa !5
  %95 = call i32 @ec_dec_icdf(ptr noundef %94, ptr noundef @silk_delta_gain_iCDF, i32 noundef 8)
  %96 = trunc i32 %95 to i8
  %97 = load ptr, ptr %6, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.silk_decoder_state, ptr %97, i32 0, i32 26
  %99 = getelementptr inbounds %struct.SideInfoIndices, ptr %98, i32 0, i32 0
  %100 = load i32, ptr %11, align 4, !tbaa !9
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds [4 x i8], ptr %99, i64 0, i64 %101
  store i8 %96, ptr %102, align 1, !tbaa !19
  br label %103

103:                                              ; preds = %93
  %104 = load i32, ptr %11, align 4, !tbaa !9
  %105 = add nsw i32 %104, 1
  store i32 %105, ptr %11, align 4, !tbaa !9
  br label %87, !llvm.loop !21

106:                                              ; preds = %87
  %107 = load ptr, ptr %7, align 8, !tbaa !5
  %108 = load ptr, ptr %6, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.silk_decoder_state, ptr %108, i32 0, i32 25
  %110 = load ptr, ptr %109, align 8, !tbaa !23
  %111 = getelementptr inbounds %struct.silk_NLSF_CB_struct, ptr %110, i32 0, i32 6
  %112 = load ptr, ptr %111, align 8, !tbaa !24
  %113 = load ptr, ptr %6, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.silk_decoder_state, ptr %113, i32 0, i32 26
  %115 = getelementptr inbounds %struct.SideInfoIndices, ptr %114, i32 0, i32 5
  %116 = load i8, ptr %115, align 1, !tbaa !11
  %117 = sext i8 %116 to i32
  %118 = ashr i32 %117, 1
  %119 = load ptr, ptr %6, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.silk_decoder_state, ptr %119, i32 0, i32 25
  %121 = load ptr, ptr %120, align 8, !tbaa !23
  %122 = getelementptr inbounds %struct.silk_NLSF_CB_struct, ptr %121, i32 0, i32 0
  %123 = load i16, ptr %122, align 8, !tbaa !26
  %124 = sext i16 %123 to i32
  %125 = mul nsw i32 %118, %124
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds i8, ptr %112, i64 %126
  %128 = call i32 @ec_dec_icdf(ptr noundef %107, ptr noundef %127, i32 noundef 8)
  %129 = trunc i32 %128 to i8
  %130 = load ptr, ptr %6, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.silk_decoder_state, ptr %130, i32 0, i32 26
  %132 = getelementptr inbounds %struct.SideInfoIndices, ptr %131, i32 0, i32 2
  %133 = getelementptr inbounds [17 x i8], ptr %132, i64 0, i64 0
  store i8 %129, ptr %133, align 8, !tbaa !19
  %134 = getelementptr inbounds [16 x i16], ptr %16, i64 0, i64 0
  %135 = getelementptr inbounds [16 x i8], ptr %17, i64 0, i64 0
  %136 = load ptr, ptr %6, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.silk_decoder_state, ptr %136, i32 0, i32 25
  %138 = load ptr, ptr %137, align 8, !tbaa !23
  %139 = load ptr, ptr %6, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.silk_decoder_state, ptr %139, i32 0, i32 26
  %141 = getelementptr inbounds %struct.SideInfoIndices, ptr %140, i32 0, i32 2
  %142 = getelementptr inbounds [17 x i8], ptr %141, i64 0, i64 0
  %143 = load i8, ptr %142, align 8, !tbaa !19
  %144 = sext i8 %143 to i32
  call void @silk_NLSF_unpack(ptr noundef %134, ptr noundef %135, ptr noundef %138, i32 noundef %144)
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %145

145:                                              ; preds = %195, %106
  %146 = load i32, ptr %11, align 4, !tbaa !9
  %147 = load ptr, ptr %6, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.silk_decoder_state, ptr %147, i32 0, i32 25
  %149 = load ptr, ptr %148, align 8, !tbaa !23
  %150 = getelementptr inbounds %struct.silk_NLSF_CB_struct, ptr %149, i32 0, i32 1
  %151 = load i16, ptr %150, align 2, !tbaa !27
  %152 = sext i16 %151 to i32
  %153 = icmp slt i32 %146, %152
  br i1 %153, label %154, label %198

154:                                              ; preds = %145
  %155 = load ptr, ptr %7, align 8, !tbaa !5
  %156 = load ptr, ptr %6, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.silk_decoder_state, ptr %156, i32 0, i32 25
  %158 = load ptr, ptr %157, align 8, !tbaa !23
  %159 = getelementptr inbounds %struct.silk_NLSF_CB_struct, ptr %158, i32 0, i32 9
  %160 = load ptr, ptr %159, align 8, !tbaa !28
  %161 = load i32, ptr %11, align 4, !tbaa !9
  %162 = sext i32 %161 to i64
  %163 = getelementptr inbounds [16 x i16], ptr %16, i64 0, i64 %162
  %164 = load i16, ptr %163, align 2, !tbaa !29
  %165 = sext i16 %164 to i64
  %166 = getelementptr inbounds i8, ptr %160, i64 %165
  %167 = call i32 @ec_dec_icdf(ptr noundef %155, ptr noundef %166, i32 noundef 8)
  store i32 %167, ptr %13, align 4, !tbaa !9
  %168 = load i32, ptr %13, align 4, !tbaa !9
  %169 = icmp eq i32 %168, 0
  br i1 %169, label %170, label %175

170:                                              ; preds = %154
  %171 = load ptr, ptr %7, align 8, !tbaa !5
  %172 = call i32 @ec_dec_icdf(ptr noundef %171, ptr noundef @silk_NLSF_EXT_iCDF, i32 noundef 8)
  %173 = load i32, ptr %13, align 4, !tbaa !9
  %174 = sub nsw i32 %173, %172
  store i32 %174, ptr %13, align 4, !tbaa !9
  br label %184

175:                                              ; preds = %154
  %176 = load i32, ptr %13, align 4, !tbaa !9
  %177 = icmp eq i32 %176, 8
  br i1 %177, label %178, label %183

178:                                              ; preds = %175
  %179 = load ptr, ptr %7, align 8, !tbaa !5
  %180 = call i32 @ec_dec_icdf(ptr noundef %179, ptr noundef @silk_NLSF_EXT_iCDF, i32 noundef 8)
  %181 = load i32, ptr %13, align 4, !tbaa !9
  %182 = add nsw i32 %181, %180
  store i32 %182, ptr %13, align 4, !tbaa !9
  br label %183

183:                                              ; preds = %178, %175
  br label %184

184:                                              ; preds = %183, %170
  %185 = load i32, ptr %13, align 4, !tbaa !9
  %186 = sub nsw i32 %185, 4
  %187 = trunc i32 %186 to i8
  %188 = load ptr, ptr %6, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.silk_decoder_state, ptr %188, i32 0, i32 26
  %190 = getelementptr inbounds %struct.SideInfoIndices, ptr %189, i32 0, i32 2
  %191 = load i32, ptr %11, align 4, !tbaa !9
  %192 = add nsw i32 %191, 1
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds [17 x i8], ptr %190, i64 0, i64 %193
  store i8 %187, ptr %194, align 1, !tbaa !19
  br label %195

195:                                              ; preds = %184
  %196 = load i32, ptr %11, align 4, !tbaa !9
  %197 = add nsw i32 %196, 1
  store i32 %197, ptr %11, align 4, !tbaa !9
  br label %145, !llvm.loop !30

198:                                              ; preds = %145
  %199 = load ptr, ptr %6, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.silk_decoder_state, ptr %199, i32 0, i32 8
  %201 = load i32, ptr %200, align 4, !tbaa !20
  %202 = icmp eq i32 %201, 4
  br i1 %202, label %203, label %210

203:                                              ; preds = %198
  %204 = load ptr, ptr %7, align 8, !tbaa !5
  %205 = call i32 @ec_dec_icdf(ptr noundef %204, ptr noundef @silk_NLSF_interpolation_factor_iCDF, i32 noundef 8)
  %206 = trunc i32 %205 to i8
  %207 = load ptr, ptr %6, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.silk_decoder_state, ptr %207, i32 0, i32 26
  %209 = getelementptr inbounds %struct.SideInfoIndices, ptr %208, i32 0, i32 7
  store i8 %206, ptr %209, align 1, !tbaa !31
  br label %214

210:                                              ; preds = %198
  %211 = load ptr, ptr %6, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.silk_decoder_state, ptr %211, i32 0, i32 26
  %213 = getelementptr inbounds %struct.SideInfoIndices, ptr %212, i32 0, i32 7
  store i8 4, ptr %213, align 1, !tbaa !31
  br label %214

214:                                              ; preds = %210, %203
  %215 = load ptr, ptr %6, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.silk_decoder_state, ptr %215, i32 0, i32 26
  %217 = getelementptr inbounds %struct.SideInfoIndices, ptr %216, i32 0, i32 5
  %218 = load i8, ptr %217, align 1, !tbaa !11
  %219 = sext i8 %218 to i32
  %220 = icmp eq i32 %219, 2
  br i1 %220, label %221, label %344

221:                                              ; preds = %214
  store i32 1, ptr %14, align 4, !tbaa !9
  %222 = load i32, ptr %10, align 4, !tbaa !9
  %223 = icmp eq i32 %222, 2
  br i1 %223, label %224, label %250

224:                                              ; preds = %221
  %225 = load ptr, ptr %6, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.silk_decoder_state, ptr %225, i32 0, i32 19
  %227 = load i32, ptr %226, align 8, !tbaa !32
  %228 = icmp eq i32 %227, 2
  br i1 %228, label %229, label %250

229:                                              ; preds = %224
  %230 = load ptr, ptr %7, align 8, !tbaa !5
  %231 = call i32 @ec_dec_icdf(ptr noundef %230, ptr noundef @silk_pitch_delta_iCDF, i32 noundef 8)
  %232 = trunc i32 %231 to i16
  %233 = sext i16 %232 to i32
  store i32 %233, ptr %15, align 4, !tbaa !9
  %234 = load i32, ptr %15, align 4, !tbaa !9
  %235 = icmp sgt i32 %234, 0
  br i1 %235, label %236, label %249

236:                                              ; preds = %229
  %237 = load i32, ptr %15, align 4, !tbaa !9
  %238 = sub nsw i32 %237, 9
  store i32 %238, ptr %15, align 4, !tbaa !9
  %239 = load ptr, ptr %6, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.silk_decoder_state, ptr %239, i32 0, i32 20
  %241 = load i16, ptr %240, align 4, !tbaa !33
  %242 = sext i16 %241 to i32
  %243 = load i32, ptr %15, align 4, !tbaa !9
  %244 = add nsw i32 %242, %243
  %245 = trunc i32 %244 to i16
  %246 = load ptr, ptr %6, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.silk_decoder_state, ptr %246, i32 0, i32 26
  %248 = getelementptr inbounds %struct.SideInfoIndices, ptr %247, i32 0, i32 3
  store i16 %245, ptr %248, align 2, !tbaa !34
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %249

249:                                              ; preds = %236, %229
  br label %250

250:                                              ; preds = %249, %224, %221
  %251 = load i32, ptr %14, align 4, !tbaa !9
  %252 = icmp ne i32 %251, 0
  br i1 %252, label %253, label %281

253:                                              ; preds = %250
  %254 = load ptr, ptr %7, align 8, !tbaa !5
  %255 = call i32 @ec_dec_icdf(ptr noundef %254, ptr noundef @silk_pitch_lag_iCDF, i32 noundef 8)
  %256 = trunc i32 %255 to i16
  %257 = sext i16 %256 to i32
  %258 = load ptr, ptr %6, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.silk_decoder_state, ptr %258, i32 0, i32 6
  %260 = load i32, ptr %259, align 4, !tbaa !35
  %261 = ashr i32 %260, 1
  %262 = mul nsw i32 %257, %261
  %263 = trunc i32 %262 to i16
  %264 = load ptr, ptr %6, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.silk_decoder_state, ptr %264, i32 0, i32 26
  %266 = getelementptr inbounds %struct.SideInfoIndices, ptr %265, i32 0, i32 3
  store i16 %263, ptr %266, align 2, !tbaa !34
  %267 = load ptr, ptr %7, align 8, !tbaa !5
  %268 = load ptr, ptr %6, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.silk_decoder_state, ptr %268, i32 0, i32 15
  %270 = load ptr, ptr %269, align 8, !tbaa !36
  %271 = call i32 @ec_dec_icdf(ptr noundef %267, ptr noundef %270, i32 noundef 8)
  %272 = trunc i32 %271 to i16
  %273 = sext i16 %272 to i32
  %274 = load ptr, ptr %6, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.silk_decoder_state, ptr %274, i32 0, i32 26
  %276 = getelementptr inbounds %struct.SideInfoIndices, ptr %275, i32 0, i32 3
  %277 = load i16, ptr %276, align 2, !tbaa !34
  %278 = sext i16 %277 to i32
  %279 = add nsw i32 %278, %273
  %280 = trunc i32 %279 to i16
  store i16 %280, ptr %276, align 2, !tbaa !34
  br label %281

281:                                              ; preds = %253, %250
  %282 = load ptr, ptr %6, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.silk_decoder_state, ptr %282, i32 0, i32 26
  %284 = getelementptr inbounds %struct.SideInfoIndices, ptr %283, i32 0, i32 3
  %285 = load i16, ptr %284, align 2, !tbaa !34
  %286 = load ptr, ptr %6, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.silk_decoder_state, ptr %286, i32 0, i32 20
  store i16 %285, ptr %287, align 4, !tbaa !33
  %288 = load ptr, ptr %7, align 8, !tbaa !5
  %289 = load ptr, ptr %6, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.silk_decoder_state, ptr %289, i32 0, i32 16
  %291 = load ptr, ptr %290, align 8, !tbaa !37
  %292 = call i32 @ec_dec_icdf(ptr noundef %288, ptr noundef %291, i32 noundef 8)
  %293 = trunc i32 %292 to i8
  %294 = load ptr, ptr %6, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.silk_decoder_state, ptr %294, i32 0, i32 26
  %296 = getelementptr inbounds %struct.SideInfoIndices, ptr %295, i32 0, i32 4
  store i8 %293, ptr %296, align 4, !tbaa !38
  %297 = load ptr, ptr %7, align 8, !tbaa !5
  %298 = call i32 @ec_dec_icdf(ptr noundef %297, ptr noundef @silk_LTP_per_index_iCDF, i32 noundef 8)
  %299 = trunc i32 %298 to i8
  %300 = load ptr, ptr %6, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.silk_decoder_state, ptr %300, i32 0, i32 26
  %302 = getelementptr inbounds %struct.SideInfoIndices, ptr %301, i32 0, i32 8
  store i8 %299, ptr %302, align 8, !tbaa !39
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %303

303:                                              ; preds = %326, %281
  %304 = load i32, ptr %12, align 4, !tbaa !9
  %305 = load ptr, ptr %6, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.silk_decoder_state, ptr %305, i32 0, i32 8
  %307 = load i32, ptr %306, align 4, !tbaa !20
  %308 = icmp slt i32 %304, %307
  br i1 %308, label %309, label %329

309:                                              ; preds = %303
  %310 = load ptr, ptr %7, align 8, !tbaa !5
  %311 = load ptr, ptr %6, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.silk_decoder_state, ptr %311, i32 0, i32 26
  %313 = getelementptr inbounds %struct.SideInfoIndices, ptr %312, i32 0, i32 8
  %314 = load i8, ptr %313, align 8, !tbaa !39
  %315 = sext i8 %314 to i64
  %316 = getelementptr inbounds [3 x ptr], ptr @silk_LTP_gain_iCDF_ptrs, i64 0, i64 %315
  %317 = load ptr, ptr %316, align 8, !tbaa !5
  %318 = call i32 @ec_dec_icdf(ptr noundef %310, ptr noundef %317, i32 noundef 8)
  %319 = trunc i32 %318 to i8
  %320 = load ptr, ptr %6, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.silk_decoder_state, ptr %320, i32 0, i32 26
  %322 = getelementptr inbounds %struct.SideInfoIndices, ptr %321, i32 0, i32 1
  %323 = load i32, ptr %12, align 4, !tbaa !9
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds [4 x i8], ptr %322, i64 0, i64 %324
  store i8 %319, ptr %325, align 1, !tbaa !19
  br label %326

326:                                              ; preds = %309
  %327 = load i32, ptr %12, align 4, !tbaa !9
  %328 = add nsw i32 %327, 1
  store i32 %328, ptr %12, align 4, !tbaa !9
  br label %303, !llvm.loop !40

329:                                              ; preds = %303
  %330 = load i32, ptr %10, align 4, !tbaa !9
  %331 = icmp eq i32 %330, 0
  br i1 %331, label %332, label %339

332:                                              ; preds = %329
  %333 = load ptr, ptr %7, align 8, !tbaa !5
  %334 = call i32 @ec_dec_icdf(ptr noundef %333, ptr noundef @silk_LTPscale_iCDF, i32 noundef 8)
  %335 = trunc i32 %334 to i8
  %336 = load ptr, ptr %6, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.silk_decoder_state, ptr %336, i32 0, i32 26
  %338 = getelementptr inbounds %struct.SideInfoIndices, ptr %337, i32 0, i32 9
  store i8 %335, ptr %338, align 1, !tbaa !41
  br label %343

339:                                              ; preds = %329
  %340 = load ptr, ptr %6, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.silk_decoder_state, ptr %340, i32 0, i32 26
  %342 = getelementptr inbounds %struct.SideInfoIndices, ptr %341, i32 0, i32 9
  store i8 0, ptr %342, align 1, !tbaa !41
  br label %343

343:                                              ; preds = %339, %332
  br label %344

344:                                              ; preds = %343, %214
  %345 = load ptr, ptr %6, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.silk_decoder_state, ptr %345, i32 0, i32 26
  %347 = getelementptr inbounds %struct.SideInfoIndices, ptr %346, i32 0, i32 5
  %348 = load i8, ptr %347, align 1, !tbaa !11
  %349 = sext i8 %348 to i32
  %350 = load ptr, ptr %6, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.silk_decoder_state, ptr %350, i32 0, i32 19
  store i32 %349, ptr %351, align 8, !tbaa !32
  %352 = load ptr, ptr %7, align 8, !tbaa !5
  %353 = call i32 @ec_dec_icdf(ptr noundef %352, ptr noundef @silk_uniform4_iCDF, i32 noundef 8)
  %354 = trunc i32 %353 to i8
  %355 = load ptr, ptr %6, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.silk_decoder_state, ptr %355, i32 0, i32 26
  %357 = getelementptr inbounds %struct.SideInfoIndices, ptr %356, i32 0, i32 10
  store i8 %354, ptr %357, align 2, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  ret void
}

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

declare i32 @ec_dec_icdf(ptr noundef, ptr noundef, i32 noundef) #2

declare void @silk_NLSF_unpack(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #2

; 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 = { "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 = { 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, !7, i64 2789}
!12 = !{!"", !10, i64 0, !7, i64 4, !7, i64 1284, !7, i64 1348, !10, i64 2308, !7, i64 2312, !10, i64 2316, !10, i64 2320, !10, i64 2324, !10, i64 2328, !10, i64 2332, !10, i64 2336, !10, i64 2340, !7, i64 2344, !10, i64 2376, !6, i64 2384, !6, i64 2392, !10, i64 2400, !10, i64 2404, !10, i64 2408, !13, i64 2412, !7, i64 2416, !10, i64 2428, !7, i64 2432, !14, i64 2448, !6, i64 2752, !15, i64 2760, !16, i64 2796, !10, i64 4184, !10, i64 4188, !10, i64 4192, !17, i64 4196}
!13 = !{!"short", !7, i64 0}
!14 = !{!"_silk_resampler_state_struct", !7, i64 0, !7, i64 24, !7, i64 168, !10, i64 264, !10, i64 268, !10, i64 272, !10, i64 276, !10, i64 280, !10, i64 284, !10, i64 288, !10, i64 292, !6, i64 296}
!15 = !{!"", !7, i64 0, !7, i64 4, !7, i64 8, !13, i64 26, !7, i64 28, !7, i64 29, !7, i64 30, !7, i64 31, !7, i64 32, !7, i64 33, !7, i64 34}
!16 = !{!"", !7, i64 0, !7, i64 1280, !7, i64 1312, !10, i64 1376, !10, i64 1380, !10, i64 1384}
!17 = !{!"", !10, i64 0, !7, i64 4, !7, i64 14, !10, i64 48, !10, i64 52, !13, i64 56, !10, i64 60, !10, i64 64, !13, i64 68, !7, i64 72, !10, i64 80, !10, i64 84, !10, i64 88}
!18 = !{!12, !7, i64 2790}
!19 = !{!7, !7, i64 0}
!20 = !{!12, !10, i64 2324}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!12, !6, i64 2752}
!24 = !{!25, !6, i64 24}
!25 = !{!"", !13, i64 0, !13, i64 2, !13, i64 4, !13, i64 6, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64}
!26 = !{!25, !13, i64 0}
!27 = !{!25, !13, i64 2}
!28 = !{!25, !6, i64 48}
!29 = !{!13, !13, i64 0}
!30 = distinct !{!30, !22}
!31 = !{!12, !7, i64 2791}
!32 = !{!12, !10, i64 2408}
!33 = !{!12, !13, i64 2412}
!34 = !{!12, !13, i64 2786}
!35 = !{!12, !10, i64 2316}
!36 = !{!12, !6, i64 2384}
!37 = !{!12, !6, i64 2392}
!38 = !{!12, !7, i64 2788}
!39 = !{!12, !7, i64 2792}
!40 = distinct !{!40, !22}
!41 = !{!12, !7, i64 2793}
!42 = !{!12, !7, i64 2794}


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

@silk_type_offset_VAD_iCDF = external constant [4 x i8], align 1
@silk_type_offset_no_VAD_iCDF = external constant [2 x i8], align 1
@silk_delta_gain_iCDF = external constant [41 x i8], align 16
@silk_gain_iCDF = external constant [3 x [8 x i8]], align 16
@silk_uniform8_iCDF = external constant [8 x i8], align 1
@silk_NLSF_EXT_iCDF = external constant [7 x i8], align 1
@silk_NLSF_interpolation_factor_iCDF = external constant [5 x i8], align 1
@silk_pitch_delta_iCDF = external constant [21 x i8], align 16
@silk_pitch_lag_iCDF = external constant [32 x i8], align 16
@silk_LTP_per_index_iCDF = external constant [3 x i8], align 1
@silk_LTP_gain_iCDF_ptrs = external local_unnamed_addr constant [3 x ptr], align 16
@silk_LTPscale_iCDF = external constant [3 x i8], align 1
@silk_uniform4_iCDF = external constant [4 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @silk_decode_indices(ptr nocapture noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4) local_unnamed_addr #0 {
  %6 = alloca [16 x i16], align 16
  %7 = alloca [16 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #3
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #3
  %.not = icmp eq i32 %3, 0
  br i1 %.not, label %8, label %13

8:                                                ; preds = %5
  %9 = getelementptr inbounds i8, ptr %0, i64 2416
  %10 = sext i32 %2 to i64
  %11 = getelementptr inbounds [3 x i32], ptr %9, i64 0, i64 %10
  %12 = load i32, ptr %11, align 4, !tbaa !5
  %.not93 = icmp eq i32 %12, 0
  br i1 %.not93, label %16, label %13

13:                                               ; preds = %8, %5
  %14 = tail call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef nonnull @silk_type_offset_VAD_iCDF, i32 noundef 8) #3
  %15 = add nsw i32 %14, 2
  br label %18

16:                                               ; preds = %8
  %17 = tail call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef nonnull @silk_type_offset_no_VAD_iCDF, i32 noundef 8) #3
  br label %18

18:                                               ; preds = %16, %13
  %.086 = phi i32 [ %15, %13 ], [ %17, %16 ]
  %19 = lshr i32 %.086, 1
  %20 = trunc i32 %19 to i8
  %21 = getelementptr inbounds i8, ptr %0, i64 2760
  %22 = getelementptr inbounds i8, ptr %0, i64 2789
  store i8 %20, ptr %22, align 1, !tbaa !9
  %23 = trunc i32 %.086 to i8
  %24 = and i8 %23, 1
  %25 = getelementptr inbounds i8, ptr %0, i64 2790
  store i8 %24, ptr %25, align 2, !tbaa !17
  %26 = icmp eq i32 %4, 2
  br i1 %26, label %27, label %30

27:                                               ; preds = %18
  %28 = tail call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef nonnull @silk_delta_gain_iCDF, i32 noundef 8) #3
  %29 = trunc i32 %28 to i8
  br label %39

30:                                               ; preds = %18
  %31 = sext i8 %20 to i64
  %32 = getelementptr inbounds [3 x [8 x i8]], ptr @silk_gain_iCDF, i64 0, i64 %31
  %33 = tail call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef nonnull %32, i32 noundef 8) #3
  %.tr = trunc i32 %33 to i8
  %34 = shl i8 %.tr, 3
  store i8 %34, ptr %21, align 8, !tbaa !18
  %35 = tail call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef nonnull @silk_uniform8_iCDF, i32 noundef 8) #3
  %36 = load i8, ptr %21, align 8, !tbaa !18
  %37 = trunc i32 %35 to i8
  %38 = add i8 %36, %37
  br label %39

39:                                               ; preds = %30, %27
  %storemerge = phi i8 [ %38, %30 ], [ %29, %27 ]
  store i8 %storemerge, ptr %21, align 8, !tbaa !18
  %40 = getelementptr inbounds i8, ptr %0, i64 2324
  %41 = load i32, ptr %40, align 4, !tbaa !19
  %42 = icmp sgt i32 %41, 1
  br i1 %42, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %39, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 1, %39 ]
  %43 = tail call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef nonnull @silk_delta_gain_iCDF, i32 noundef 8) #3
  %44 = trunc i32 %43 to i8
  %45 = getelementptr inbounds [4 x i8], ptr %21, i64 0, i64 %indvars.iv
  store i8 %44, ptr %45, align 1, !tbaa !18
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %46 = load i32, ptr %40, align 4, !tbaa !19
  %47 = sext i32 %46 to i64
  %48 = icmp slt i64 %indvars.iv.next, %47
  br i1 %48, label %.lr.ph, label %._crit_edge, !llvm.loop !20

._crit_edge:                                      ; preds = %.lr.ph, %39
  %49 = getelementptr inbounds i8, ptr %0, i64 2752
  %50 = load ptr, ptr %49, align 8, !tbaa !22
  %51 = getelementptr inbounds i8, ptr %50, i64 24
  %52 = load ptr, ptr %51, align 8, !tbaa !23
  %53 = load i8, ptr %22, align 1, !tbaa !9
  %54 = ashr i8 %53, 1
  %55 = sext i8 %54 to i64
  %56 = load i16, ptr %50, align 8, !tbaa !25
  %57 = sext i16 %56 to i64
  %58 = mul nsw i64 %55, %57
  %59 = getelementptr inbounds i8, ptr %52, i64 %58
  %60 = tail call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef %59, i32 noundef 8) #3
  %61 = trunc i32 %60 to i8
  %62 = getelementptr inbounds i8, ptr %0, i64 2768
  store i8 %61, ptr %62, align 8, !tbaa !18
  %63 = load ptr, ptr %49, align 8, !tbaa !22
  %sext = shl i32 %60, 24
  %64 = ashr exact i32 %sext, 24
  call void @silk_NLSF_unpack(ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef %63, i32 noundef %64) #3
  %65 = load ptr, ptr %49, align 8, !tbaa !22
  %66 = getelementptr inbounds i8, ptr %65, i64 2
  %67 = load i16, ptr %66, align 2, !tbaa !26
  %68 = icmp sgt i16 %67, 0
  br i1 %68, label %.lr.ph101, label %._crit_edge102

.lr.ph101:                                        ; preds = %._crit_edge, %83
  %indvars.iv108 = phi i64 [ %indvars.iv.next109, %83 ], [ 0, %._crit_edge ]
  %69 = phi ptr [ %87, %83 ], [ %65, %._crit_edge ]
  %70 = getelementptr inbounds i8, ptr %69, i64 48
  %71 = load ptr, ptr %70, align 8, !tbaa !27
  %72 = getelementptr inbounds [16 x i16], ptr %6, i64 0, i64 %indvars.iv108
  %73 = load i16, ptr %72, align 2, !tbaa !28
  %74 = sext i16 %73 to i64
  %75 = getelementptr inbounds i8, ptr %71, i64 %74
  %76 = call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef %75, i32 noundef 8) #3
  switch i32 %76, label %83 [
    i32 0, label %77
    i32 8, label %80
  ]

77:                                               ; preds = %.lr.ph101
  %78 = call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef nonnull @silk_NLSF_EXT_iCDF, i32 noundef 8) #3
  %79 = sub nsw i32 0, %78
  br label %83

80:                                               ; preds = %.lr.ph101
  %81 = call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef nonnull @silk_NLSF_EXT_iCDF, i32 noundef 8) #3
  %82 = add nsw i32 %81, 8
  br label %83

83:                                               ; preds = %.lr.ph101, %80, %77
  %.1 = phi i32 [ %79, %77 ], [ %82, %80 ], [ %76, %.lr.ph101 ]
  %84 = trunc i32 %.1 to i8
  %85 = add i8 %84, -4
  %indvars.iv.next109 = add nuw nsw i64 %indvars.iv108, 1
  %86 = getelementptr inbounds [17 x i8], ptr %62, i64 0, i64 %indvars.iv.next109
  store i8 %85, ptr %86, align 1, !tbaa !18
  %87 = load ptr, ptr %49, align 8, !tbaa !22
  %88 = getelementptr inbounds i8, ptr %87, i64 2
  %89 = load i16, ptr %88, align 2, !tbaa !26
  %90 = sext i16 %89 to i64
  %91 = icmp slt i64 %indvars.iv.next109, %90
  br i1 %91, label %.lr.ph101, label %._crit_edge102, !llvm.loop !29

._crit_edge102:                                   ; preds = %83, %._crit_edge
  %92 = load i32, ptr %40, align 4, !tbaa !19
  %93 = icmp eq i32 %92, 4
  br i1 %93, label %94, label %97

94:                                               ; preds = %._crit_edge102
  %95 = call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef nonnull @silk_NLSF_interpolation_factor_iCDF, i32 noundef 8) #3
  %96 = trunc i32 %95 to i8
  br label %97

97:                                               ; preds = %._crit_edge102, %94
  %.sink = phi i8 [ %96, %94 ], [ 4, %._crit_edge102 ]
  %98 = getelementptr inbounds i8, ptr %0, i64 2791
  store i8 %.sink, ptr %98, align 1
  %99 = load i8, ptr %22, align 1, !tbaa !9
  %100 = icmp eq i8 %99, 2
  br i1 %100, label %101, label %159

101:                                              ; preds = %97
  br i1 %26, label %102, label %115

102:                                              ; preds = %101
  %103 = getelementptr inbounds i8, ptr %0, i64 2408
  %104 = load i32, ptr %103, align 8, !tbaa !30
  %105 = icmp eq i32 %104, 2
  br i1 %105, label %106, label %115

106:                                              ; preds = %102
  %107 = call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef nonnull @silk_pitch_delta_iCDF, i32 noundef 8) #3
  %108 = trunc i32 %107 to i16
  %109 = icmp sgt i16 %108, 0
  br i1 %109, label %.critedge, label %115

.critedge:                                        ; preds = %106
  %110 = getelementptr inbounds i8, ptr %0, i64 2412
  %111 = load i16, ptr %110, align 4, !tbaa !31
  %112 = add nsw i16 %108, -9
  %113 = add i16 %112, %111
  %114 = getelementptr inbounds i8, ptr %0, i64 2786
  store i16 %113, ptr %114, align 2, !tbaa !32
  br label %129

115:                                              ; preds = %101, %102, %106
  %116 = call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef nonnull @silk_pitch_lag_iCDF, i32 noundef 8) #3
  %117 = getelementptr inbounds i8, ptr %0, i64 2316
  %118 = load i32, ptr %117, align 4, !tbaa !33
  %119 = lshr i32 %118, 1
  %120 = mul i32 %119, %116
  %121 = trunc i32 %120 to i16
  %122 = getelementptr inbounds i8, ptr %0, i64 2786
  store i16 %121, ptr %122, align 2, !tbaa !32
  %123 = getelementptr inbounds i8, ptr %0, i64 2384
  %124 = load ptr, ptr %123, align 8, !tbaa !34
  %125 = call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef %124, i32 noundef 8) #3
  %126 = load i16, ptr %122, align 2, !tbaa !32
  %127 = trunc i32 %125 to i16
  %128 = add i16 %126, %127
  store i16 %128, ptr %122, align 2, !tbaa !32
  br label %129

129:                                              ; preds = %.critedge, %115
  %130 = phi i16 [ %113, %.critedge ], [ %128, %115 ]
  %131 = getelementptr inbounds i8, ptr %0, i64 2412
  store i16 %130, ptr %131, align 4, !tbaa !31
  %132 = getelementptr inbounds i8, ptr %0, i64 2392
  %133 = load ptr, ptr %132, align 8, !tbaa !35
  %134 = call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef %133, i32 noundef 8) #3
  %135 = trunc i32 %134 to i8
  %136 = getelementptr inbounds i8, ptr %0, i64 2788
  store i8 %135, ptr %136, align 4, !tbaa !36
  %137 = call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef nonnull @silk_LTP_per_index_iCDF, i32 noundef 8) #3
  %138 = trunc i32 %137 to i8
  %139 = getelementptr inbounds i8, ptr %0, i64 2792
  store i8 %138, ptr %139, align 8, !tbaa !37
  %140 = load i32, ptr %40, align 4, !tbaa !19
  %141 = icmp sgt i32 %140, 0
  br i1 %141, label %.lr.ph105, label %._crit_edge106

.lr.ph105:                                        ; preds = %129
  %142 = getelementptr inbounds i8, ptr %0, i64 2764
  br label %143

143:                                              ; preds = %.lr.ph105, %143
  %indvars.iv111 = phi i64 [ 0, %.lr.ph105 ], [ %indvars.iv.next112, %143 ]
  %144 = load i8, ptr %139, align 8, !tbaa !37
  %145 = sext i8 %144 to i64
  %146 = getelementptr inbounds [3 x ptr], ptr @silk_LTP_gain_iCDF_ptrs, i64 0, i64 %145
  %147 = load ptr, ptr %146, align 8, !tbaa !38
  %148 = call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef %147, i32 noundef 8) #3
  %149 = trunc i32 %148 to i8
  %150 = getelementptr inbounds [4 x i8], ptr %142, i64 0, i64 %indvars.iv111
  store i8 %149, ptr %150, align 1, !tbaa !18
  %indvars.iv.next112 = add nuw nsw i64 %indvars.iv111, 1
  %151 = load i32, ptr %40, align 4, !tbaa !19
  %152 = sext i32 %151 to i64
  %153 = icmp slt i64 %indvars.iv.next112, %152
  br i1 %153, label %143, label %._crit_edge106, !llvm.loop !39

._crit_edge106:                                   ; preds = %143, %129
  %154 = icmp eq i32 %4, 0
  br i1 %154, label %155, label %.sink.split

155:                                              ; preds = %._crit_edge106
  %156 = call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef nonnull @silk_LTPscale_iCDF, i32 noundef 8) #3
  %157 = trunc i32 %156 to i8
  br label %.sink.split

.sink.split:                                      ; preds = %._crit_edge106, %155
  %.sink114 = phi i8 [ %157, %155 ], [ 0, %._crit_edge106 ]
  %158 = getelementptr inbounds i8, ptr %0, i64 2793
  store i8 %.sink114, ptr %158, align 1, !tbaa !40
  br label %159

159:                                              ; preds = %.sink.split, %97
  %160 = load i8, ptr %22, align 1, !tbaa !9
  %161 = sext i8 %160 to i32
  %162 = getelementptr inbounds i8, ptr %0, i64 2408
  store i32 %161, ptr %162, align 8, !tbaa !30
  %163 = call i32 @ec_dec_icdf(ptr noundef %1, ptr noundef nonnull @silk_uniform4_iCDF, i32 noundef 8) #3
  %164 = trunc i32 %163 to i8
  %165 = getelementptr inbounds i8, ptr %0, i64 2794
  store i8 %164, ptr %165, align 2, !tbaa !41
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #3
  ret void
}

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

declare i32 @ec_dec_icdf(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

declare void @silk_NLSF_unpack(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !7, i64 2789}
!10 = !{!"", !6, i64 0, !7, i64 4, !7, i64 1284, !7, i64 1348, !6, i64 2308, !7, i64 2312, !6, i64 2316, !6, i64 2320, !6, i64 2324, !6, i64 2328, !6, i64 2332, !6, i64 2336, !6, i64 2340, !7, i64 2344, !6, i64 2376, !11, i64 2384, !11, i64 2392, !6, i64 2400, !6, i64 2404, !6, i64 2408, !12, i64 2412, !7, i64 2416, !6, i64 2428, !7, i64 2432, !13, i64 2448, !11, i64 2752, !14, i64 2760, !15, i64 2796, !6, i64 4184, !6, i64 4188, !6, i64 4192, !16, i64 4196}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!"short", !7, i64 0}
!13 = !{!"_silk_resampler_state_struct", !7, i64 0, !7, i64 24, !7, i64 168, !6, i64 264, !6, i64 268, !6, i64 272, !6, i64 276, !6, i64 280, !6, i64 284, !6, i64 288, !6, i64 292, !11, i64 296}
!14 = !{!"", !7, i64 0, !7, i64 4, !7, i64 8, !12, i64 26, !7, i64 28, !7, i64 29, !7, i64 30, !7, i64 31, !7, i64 32, !7, i64 33, !7, i64 34}
!15 = !{!"", !7, i64 0, !7, i64 1280, !7, i64 1312, !6, i64 1376, !6, i64 1380, !6, i64 1384}
!16 = !{!"", !6, i64 0, !7, i64 4, !7, i64 14, !6, i64 48, !6, i64 52, !12, i64 56, !6, i64 60, !6, i64 64, !12, i64 68, !7, i64 72, !6, i64 80, !6, i64 84, !6, i64 88}
!17 = !{!10, !7, i64 2790}
!18 = !{!7, !7, i64 0}
!19 = !{!10, !6, i64 2324}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!10, !11, i64 2752}
!23 = !{!24, !11, i64 24}
!24 = !{!"", !12, i64 0, !12, i64 2, !12, i64 4, !12, i64 6, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64}
!25 = !{!24, !12, i64 0}
!26 = !{!24, !12, i64 2}
!27 = !{!24, !11, i64 48}
!28 = !{!12, !12, i64 0}
!29 = distinct !{!29, !21}
!30 = !{!10, !6, i64 2408}
!31 = !{!10, !12, i64 2412}
!32 = !{!10, !12, i64 2786}
!33 = !{!10, !6, i64 2316}
!34 = !{!10, !11, i64 2384}
!35 = !{!10, !11, i64 2392}
!36 = !{!10, !7, i64 2788}
!37 = !{!10, !7, i64 2792}
!38 = !{!11, !11, i64 0}
!39 = distinct !{!39, !21}
!40 = !{!10, !7, i64 2793}
!41 = !{!10, !7, i64 2794}


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