; LLVM IR from herrkaefer/AccelerateWatch :: AccelerateWatch/Classes/acceleratelib (dsbuffer)

; 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.dsbuffer_complex = type { float, float }

@.str.2 = external hidden unnamed_addr constant [109 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@dsbuffer_test.fir_taps = external hidden constant [32 x float], align 16
@.str.18 = external hidden unnamed_addr constant [4 x i8], align 1
@__PRETTY_FUNCTION__.dsbuffer_test = external hidden unnamed_addr constant [21 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [39 x i8], align 1
@__const.dsbuffer_test.signal1 = external hidden unnamed_addr constant [4 x float], align 16
@.str.20 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [6 x i8], align 1
@__const.dsbuffer_test.signal2 = external hidden unnamed_addr constant [8 x float], align 16
@.str.23 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [20 x i8], align 1
@__const.dsbuffer_test.signal3 = external hidden unnamed_addr constant [5 x float], align 16
@.str.26 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local ptr @dsbuffer_new(i64 noundef, i1 noundef zeroext) #0

declare i32 @printf(ptr noundef, ...) #1

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @dsbuffer_push(ptr noundef, float noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @dsbuffer_dump(ptr noundef, ptr noundef) #0

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

; Function Attrs: nounwind uwtable
declare dso_local void @dsbuffer_fftr(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @dsbuffer_fft_freq(ptr noundef, float noundef, ptr noundef) #0

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

; Function Attrs: nounwind uwtable
declare dso_local float @dsbuffer_latest_fir_output(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @dsbuffer_fir_filter(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local float @dsbuffer_mean(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local float @dsbuffer_length(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @dsbuffer_normalize_to_unit_length(ptr noundef, i1 noundef zeroext, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @dsbuffer_free(ptr noundef) #0

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

; Function Attrs: nounwind uwtable
define dso_local void @dsbuffer_test() #0 {
  %1 = alloca ptr, align 8
  %2 = alloca ptr, align 8
  %3 = alloca i64, align 8
  %4 = alloca i8, align 1
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca float, align 4
  %8 = alloca [4 x float], align 16
  %9 = alloca i64, align 8
  %10 = alloca i32, align 4
  %11 = alloca i64, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca [8 x float], align 16
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca float, align 4
  %22 = alloca i64, align 8
  %23 = alloca float, align 4
  %24 = alloca i64, align 8
  %25 = alloca float, align 4
  %26 = alloca i64, align 8
  %27 = alloca float, align 4
  %28 = alloca [5 x float], align 16
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %1) #8
  store ptr null, ptr %1, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %2) #8
  store ptr null, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %4) #8
  %31 = call ptr @dsbuffer_new(i64 noundef 32, i1 noundef zeroext false)
  store ptr %31, ptr %1, align 8, !tbaa !5
  %32 = load ptr, ptr %1, align 8, !tbaa !5
  %33 = icmp ne ptr %32, null
  br i1 %33, label %34, label %35

34:                                               ; preds = %0
  br label %36

35:                                               ; preds = %0
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.2, i32 noundef 586, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

36:                                               ; preds = %34
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  store i64 0, ptr %5, align 8, !tbaa !9
  br label %37

37:                                               ; preds = %52, %36
  %38 = load i64, ptr %5, align 8, !tbaa !9
  %39 = icmp ult i64 %38, 32
  br i1 %39, label %41, label %40

40:                                               ; preds = %37
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  br label %55

41:                                               ; preds = %37
  %42 = load ptr, ptr %1, align 8, !tbaa !5
  %43 = load i64, ptr %5, align 8, !tbaa !9
  %44 = call float @dsbuffer_at(ptr noundef %42, i64 noundef %43)
  %45 = fsub float %44, 0.000000e+00
  %46 = fpext float %45 to double
  %47 = call double @llvm.fabs.f64(double %46)
  %48 = fcmp olt double %47, 1.000000e-08
  br i1 %48, label %49, label %50

49:                                               ; preds = %41
  br label %51

50:                                               ; preds = %41
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.2, i32 noundef 588, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

51:                                               ; preds = %49
  br label %52

52:                                               ; preds = %51
  %53 = load i64, ptr %5, align 8, !tbaa !9
  %54 = add i64 %53, 1
  store i64 %54, ptr %5, align 8, !tbaa !9
  br label %37, !llvm.loop !11

55:                                               ; preds = %40
  %56 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_setup_fir(ptr noundef %56, ptr noundef @dsbuffer_test.fir_taps, i64 noundef 32)
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #8
  store i64 0, ptr %6, align 8, !tbaa !9
  br label %57

57:                                               ; preds = %70, %55
  %58 = load i64, ptr %6, align 8, !tbaa !9
  %59 = icmp ult i64 %58, 10000000
  br i1 %59, label %61, label %60

60:                                               ; preds = %57
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  br label %73

61:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  %62 = load i64, ptr %6, align 8, !tbaa !9
  %63 = uitofp i64 %62 to double
  %64 = fmul double %63, 1.000000e+00
  %65 = fptrunc double %64 to float
  store float %65, ptr %7, align 4, !tbaa !13
  %66 = load ptr, ptr %1, align 8, !tbaa !5
  %67 = load float, ptr %7, align 4, !tbaa !13
  call void @dsbuffer_push(ptr noundef %66, float noundef %67)
  %68 = load ptr, ptr %1, align 8, !tbaa !5
  %69 = call float @dsbuffer_latest_fir_output(ptr noundef %68)
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  br label %70

70:                                               ; preds = %61
  %71 = load i64, ptr %6, align 8, !tbaa !9
  %72 = add i64 %71, 1
  store i64 %72, ptr %6, align 8, !tbaa !9
  br label %57, !llvm.loop !15

73:                                               ; preds = %60
  call void @dsbuffer_free(ptr noundef %1)
  store i64 32, ptr %3, align 8, !tbaa !9
  %74 = call ptr @dsbuffer_new(i64 noundef 32, i1 noundef zeroext false)
  store ptr %74, ptr %1, align 8, !tbaa !5
  %75 = load ptr, ptr %1, align 8, !tbaa !5
  %76 = icmp ne ptr %75, null
  br i1 %76, label %77, label %78

77:                                               ; preds = %73
  br label %79

78:                                               ; preds = %73
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.2, i32 noundef 603, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

79:                                               ; preds = %77
  %80 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_setup_fir(ptr noundef %80, ptr noundef @dsbuffer_test.fir_taps, i64 noundef 32)
  %81 = load i64, ptr %3, align 8, !tbaa !9
  %82 = mul i64 4, %81
  %83 = call noalias ptr @malloc(i64 noundef %82) #10
  store ptr %83, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %8) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %8, ptr align 16 @__const.dsbuffer_test.signal1, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %84

84:                                               ; preds = %116, %79
  %85 = load i64, ptr %9, align 8, !tbaa !9
  %86 = icmp ult i64 %85, 4
  br i1 %86, label %88, label %87

87:                                               ; preds = %84
  store i32 8, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  br label %119

88:                                               ; preds = %84
  %89 = load ptr, ptr %1, align 8, !tbaa !5
  %90 = load i64, ptr %9, align 8, !tbaa !9
  %91 = getelementptr inbounds [4 x float], ptr %8, i64 0, i64 %90
  %92 = load float, ptr %91, align 4, !tbaa !13
  call void @dsbuffer_push(ptr noundef %89, float noundef %92)
  %93 = load ptr, ptr %1, align 8, !tbaa !5
  %94 = load ptr, ptr %2, align 8, !tbaa !5
  call void @dsbuffer_dump(ptr noundef %93, ptr noundef %94)
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  store i64 0, ptr %11, align 8, !tbaa !9
  br label %95

95:                                               ; preds = %108, %88
  %96 = load i64, ptr %11, align 8, !tbaa !9
  %97 = load i64, ptr %3, align 8, !tbaa !9
  %98 = icmp ult i64 %96, %97
  br i1 %98, label %100, label %99

99:                                               ; preds = %95
  store i32 11, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  br label %111

100:                                              ; preds = %95
  %101 = load i64, ptr %11, align 8, !tbaa !9
  %102 = load ptr, ptr %2, align 8, !tbaa !5
  %103 = load i64, ptr %11, align 8, !tbaa !9
  %104 = getelementptr inbounds float, ptr %102, i64 %103
  %105 = load float, ptr %104, align 4, !tbaa !13
  %106 = fpext float %105 to double
  %107 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, i64 noundef %101, double noundef %106)
  br label %108

108:                                              ; preds = %100
  %109 = load i64, ptr %11, align 8, !tbaa !9
  %110 = add i64 %109, 1
  store i64 %110, ptr %11, align 8, !tbaa !9
  br label %95, !llvm.loop !16

111:                                              ; preds = %99
  %112 = load ptr, ptr %1, align 8, !tbaa !5
  %113 = call float @dsbuffer_latest_fir_output(ptr noundef %112)
  %114 = fpext float %113 to double
  %115 = call i32 (ptr, ...) @printf(ptr noundef @.str.21, double noundef %114)
  br label %116

116:                                              ; preds = %111
  %117 = load i64, ptr %9, align 8, !tbaa !9
  %118 = add i64 %117, 1
  store i64 %118, ptr %9, align 8, !tbaa !9
  br label %84, !llvm.loop !17

119:                                              ; preds = %87
  %120 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_print_raw(ptr noundef %120, i1 noundef zeroext false)
  %121 = load ptr, ptr %2, align 8, !tbaa !5
  call void @free(ptr noundef %121) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %122 = load i64, ptr %3, align 8, !tbaa !9
  %123 = mul i64 4, %122
  %124 = call noalias ptr @malloc(i64 noundef %123) #10
  store ptr %124, ptr %12, align 8, !tbaa !5
  %125 = load ptr, ptr %12, align 8, !tbaa !5
  %126 = icmp ne ptr %125, null
  br i1 %126, label %127, label %128

127:                                              ; preds = %119
  br label %129

128:                                              ; preds = %119
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.2, i32 noundef 622, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

129:                                              ; preds = %127
  %130 = load ptr, ptr %1, align 8, !tbaa !5
  %131 = load ptr, ptr %12, align 8, !tbaa !5
  call void @dsbuffer_fir_filter(ptr noundef %130, ptr noundef %131)
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %132

132:                                              ; preds = %143, %129
  %133 = load i64, ptr %13, align 8, !tbaa !9
  %134 = icmp ult i64 %133, 32
  br i1 %134, label %136, label %135

135:                                              ; preds = %132
  store i32 14, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  br label %146

136:                                              ; preds = %132
  %137 = load ptr, ptr %12, align 8, !tbaa !5
  %138 = load i64, ptr %13, align 8, !tbaa !9
  %139 = getelementptr inbounds float, ptr %137, i64 %138
  %140 = load float, ptr %139, align 4, !tbaa !13
  %141 = fpext float %140 to double
  %142 = call i32 (ptr, ...) @printf(ptr noundef @.str.22, double noundef %141)
  br label %143

143:                                              ; preds = %136
  %144 = load i64, ptr %13, align 8, !tbaa !9
  %145 = add i64 %144, 1
  store i64 %145, ptr %13, align 8, !tbaa !9
  br label %132, !llvm.loop !18

146:                                              ; preds = %135
  %147 = call i32 (ptr, ...) @printf(ptr noundef @.str.16)
  %148 = load ptr, ptr %12, align 8, !tbaa !5
  call void @free(ptr noundef %148) #8
  call void @dsbuffer_free(ptr noundef %1)
  call void @llvm.lifetime.start.p0(i64 32, ptr %14) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %14, ptr align 16 @__const.dsbuffer_test.signal2, i64 32, i1 false)
  store i64 8, ptr %3, align 8, !tbaa !9
  %149 = load i64, ptr %3, align 8, !tbaa !9
  %150 = call ptr @dsbuffer_new(i64 noundef %149, i1 noundef zeroext true)
  store ptr %150, ptr %1, align 8, !tbaa !5
  %151 = load ptr, ptr %1, align 8, !tbaa !5
  %152 = icmp ne ptr %151, null
  br i1 %152, label %153, label %154

153:                                              ; preds = %146
  br label %155

154:                                              ; preds = %146
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.2, i32 noundef 637, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

155:                                              ; preds = %153
  %156 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_print_raw(ptr noundef %156, i1 noundef zeroext true)
  %157 = load i64, ptr %3, align 8, !tbaa !9
  %158 = mul i64 4, %157
  %159 = call noalias ptr @malloc(i64 noundef %158) #10
  store ptr %159, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %160

160:                                              ; preds = %190, %155
  %161 = load i64, ptr %15, align 8, !tbaa !9
  %162 = load i64, ptr %3, align 8, !tbaa !9
  %163 = icmp ult i64 %161, %162
  br i1 %163, label %165, label %164

164:                                              ; preds = %160
  store i32 17, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  br label %193

165:                                              ; preds = %160
  %166 = load ptr, ptr %1, align 8, !tbaa !5
  %167 = load i64, ptr %15, align 8, !tbaa !9
  %168 = getelementptr inbounds [8 x float], ptr %14, i64 0, i64 %167
  %169 = load float, ptr %168, align 4, !tbaa !13
  call void @dsbuffer_push(ptr noundef %166, float noundef %169)
  %170 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_print_raw(ptr noundef %170, i1 noundef zeroext true)
  %171 = load ptr, ptr %1, align 8, !tbaa !5
  %172 = load ptr, ptr %2, align 8, !tbaa !5
  call void @dsbuffer_dump(ptr noundef %171, ptr noundef %172)
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %173

173:                                              ; preds = %186, %165
  %174 = load i64, ptr %16, align 8, !tbaa !9
  %175 = load i64, ptr %3, align 8, !tbaa !9
  %176 = icmp ult i64 %174, %175
  br i1 %176, label %178, label %177

177:                                              ; preds = %173
  store i32 20, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  br label %189

178:                                              ; preds = %173
  %179 = load i64, ptr %16, align 8, !tbaa !9
  %180 = load ptr, ptr %2, align 8, !tbaa !5
  %181 = load i64, ptr %16, align 8, !tbaa !9
  %182 = getelementptr inbounds float, ptr %180, i64 %181
  %183 = load float, ptr %182, align 4, !tbaa !13
  %184 = fpext float %183 to double
  %185 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, i64 noundef %179, double noundef %184)
  br label %186

186:                                              ; preds = %178
  %187 = load i64, ptr %16, align 8, !tbaa !9
  %188 = add i64 %187, 1
  store i64 %188, ptr %16, align 8, !tbaa !9
  br label %173, !llvm.loop !19

189:                                              ; preds = %177
  br label %190

190:                                              ; preds = %189
  %191 = load i64, ptr %15, align 8, !tbaa !9
  %192 = add i64 %191, 1
  store i64 %192, ptr %15, align 8, !tbaa !9
  br label %160, !llvm.loop !20

193:                                              ; preds = %164
  %194 = load ptr, ptr %2, align 8, !tbaa !5
  call void @free(ptr noundef %194) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %195 = load i64, ptr %3, align 8, !tbaa !9
  %196 = udiv i64 %195, 2
  %197 = add i64 %196, 1
  %198 = mul i64 8, %197
  %199 = call noalias ptr @malloc(i64 noundef %198) #10
  store ptr %199, ptr %17, align 8, !tbaa !5
  %200 = load ptr, ptr %1, align 8, !tbaa !5
  %201 = load ptr, ptr %17, align 8, !tbaa !5
  call void @dsbuffer_fftr(ptr noundef %200, ptr noundef %201)
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %202 = load i64, ptr %3, align 8, !tbaa !9
  %203 = udiv i64 %202, 2
  %204 = add i64 %203, 1
  %205 = mul i64 4, %204
  %206 = call noalias ptr @malloc(i64 noundef %205) #10
  store ptr %206, ptr %18, align 8, !tbaa !5
  %207 = load ptr, ptr %1, align 8, !tbaa !5
  %208 = load ptr, ptr %18, align 8, !tbaa !5
  call void @dsbuffer_fft_freq(ptr noundef %207, float noundef 9.000000e+00, ptr noundef %208)
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %209

209:                                              ; preds = %236, %193
  %210 = load i64, ptr %19, align 8, !tbaa !9
  %211 = load i64, ptr %3, align 8, !tbaa !9
  %212 = udiv i64 %211, 2
  %213 = add i64 %212, 1
  %214 = icmp ult i64 %210, %213
  br i1 %214, label %216, label %215

215:                                              ; preds = %209
  store i32 23, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %239

216:                                              ; preds = %209
  %217 = load i64, ptr %19, align 8, !tbaa !9
  %218 = load ptr, ptr %18, align 8, !tbaa !5
  %219 = load i64, ptr %19, align 8, !tbaa !9
  %220 = getelementptr inbounds float, ptr %218, i64 %219
  %221 = load float, ptr %220, align 4, !tbaa !13
  %222 = fpext float %221 to double
  %223 = load ptr, ptr %17, align 8, !tbaa !5
  %224 = load i64, ptr %19, align 8, !tbaa !9
  %225 = getelementptr inbounds %struct.dsbuffer_complex, ptr %223, i64 %224
  %226 = getelementptr inbounds %struct.dsbuffer_complex, ptr %225, i32 0, i32 0
  %227 = load float, ptr %226, align 4, !tbaa !21
  %228 = fpext float %227 to double
  %229 = load ptr, ptr %17, align 8, !tbaa !5
  %230 = load i64, ptr %19, align 8, !tbaa !9
  %231 = getelementptr inbounds %struct.dsbuffer_complex, ptr %229, i64 %230
  %232 = getelementptr inbounds %struct.dsbuffer_complex, ptr %231, i32 0, i32 1
  %233 = load float, ptr %232, align 4, !tbaa !23
  %234 = fpext float %233 to double
  %235 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, i64 noundef %217, double noundef %222, double noundef %228, double noundef %234)
  br label %236

236:                                              ; preds = %216
  %237 = load i64, ptr %19, align 8, !tbaa !9
  %238 = add i64 %237, 1
  store i64 %238, ptr %19, align 8, !tbaa !9
  br label %209, !llvm.loop !24

239:                                              ; preds = %215
  call void @dsbuffer_free(ptr noundef %1)
  store i64 64, ptr %3, align 8, !tbaa !9
  store i8 0, ptr %4, align 1, !tbaa !25
  %240 = load i64, ptr %3, align 8, !tbaa !9
  %241 = load i8, ptr %4, align 1, !tbaa !25, !range !27, !noundef !28
  %242 = trunc i8 %241 to i1
  %243 = call ptr @dsbuffer_new(i64 noundef %240, i1 noundef zeroext %242)
  store ptr %243, ptr %1, align 8, !tbaa !5
  %244 = load ptr, ptr %1, align 8, !tbaa !5
  %245 = icmp ne ptr %244, null
  br i1 %245, label %246, label %247

246:                                              ; preds = %239
  br label %248

247:                                              ; preds = %239
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.2, i32 noundef 673, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

248:                                              ; preds = %246
  %249 = load i64, ptr %3, align 8, !tbaa !9
  %250 = mul i64 4, %249
  %251 = call noalias ptr @malloc(i64 noundef %250) #10
  store ptr %251, ptr %2, align 8, !tbaa !5
  %252 = load ptr, ptr %2, align 8, !tbaa !5
  %253 = icmp ne ptr %252, null
  br i1 %253, label %254, label %255

254:                                              ; preds = %248
  br label %256

255:                                              ; preds = %248
  call void @__assert_fail(ptr noundef @.str.24, ptr noundef @.str.2, i32 noundef 675, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

256:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  store i64 0, ptr %20, align 8, !tbaa !9
  br label %257

257:                                              ; preds = %284, %256
  %258 = load i64, ptr %20, align 8, !tbaa !9
  %259 = icmp ult i64 %258, 100000
  br i1 %259, label %261, label %260

260:                                              ; preds = %257
  store i32 26, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %287

261:                                              ; preds = %257
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  %262 = call i32 @rand() #8
  %263 = sitofp i32 %262 to double
  %264 = fmul double %263, 1.000000e+04
  %265 = fdiv double %264, 0x41DFFFFFFFC00000
  %266 = fptosi double %265 to i32
  %267 = sitofp i32 %266 to double
  %268 = fdiv double %267, 1.000000e+02
  %269 = fptrunc double %268 to float
  store float %269, ptr %21, align 4, !tbaa !13
  %270 = load ptr, ptr %1, align 8, !tbaa !5
  %271 = load float, ptr %21, align 4, !tbaa !13
  call void @dsbuffer_push(ptr noundef %270, float noundef %271)
  %272 = load ptr, ptr %1, align 8, !tbaa !5
  %273 = load ptr, ptr %2, align 8, !tbaa !5
  call void @dsbuffer_dump(ptr noundef %272, ptr noundef %273)
  %274 = load ptr, ptr %2, align 8, !tbaa !5
  %275 = load i64, ptr %3, align 8, !tbaa !9
  %276 = sub i64 %275, 1
  %277 = getelementptr inbounds float, ptr %274, i64 %276
  %278 = load float, ptr %277, align 4, !tbaa !13
  %279 = load float, ptr %21, align 4, !tbaa !13
  %280 = fcmp oeq float %278, %279
  br i1 %280, label %281, label %282

281:                                              ; preds = %261
  br label %283

282:                                              ; preds = %261
  call void @__assert_fail(ptr noundef @.str.25, ptr noundef @.str.2, i32 noundef 686, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

283:                                              ; preds = %281
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  br label %284

284:                                              ; preds = %283
  %285 = load i64, ptr %20, align 8, !tbaa !9
  %286 = add i64 %285, 1
  store i64 %286, ptr %20, align 8, !tbaa !9
  br label %257, !llvm.loop !29

287:                                              ; preds = %260
  %288 = load ptr, ptr %2, align 8, !tbaa !5
  call void @free(ptr noundef %288) #8
  call void @dsbuffer_free(ptr noundef %1)
  store i64 64, ptr %3, align 8, !tbaa !9
  store i8 1, ptr %4, align 1, !tbaa !25
  %289 = load i64, ptr %3, align 8, !tbaa !9
  %290 = load i8, ptr %4, align 1, !tbaa !25, !range !27, !noundef !28
  %291 = trunc i8 %290 to i1
  %292 = call ptr @dsbuffer_new(i64 noundef %289, i1 noundef zeroext %291)
  store ptr %292, ptr %1, align 8, !tbaa !5
  %293 = load ptr, ptr %1, align 8, !tbaa !5
  %294 = icmp ne ptr %293, null
  br i1 %294, label %295, label %296

295:                                              ; preds = %287
  br label %297

296:                                              ; preds = %287
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.2, i32 noundef 696, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

297:                                              ; preds = %295
  %298 = load i64, ptr %3, align 8, !tbaa !9
  %299 = mul i64 4, %298
  %300 = call noalias ptr @malloc(i64 noundef %299) #10
  store ptr %300, ptr %2, align 8, !tbaa !5
  %301 = load ptr, ptr %2, align 8, !tbaa !5
  %302 = icmp ne ptr %301, null
  br i1 %302, label %303, label %304

303:                                              ; preds = %297
  br label %305

304:                                              ; preds = %297
  call void @__assert_fail(ptr noundef @.str.24, ptr noundef @.str.2, i32 noundef 698, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

305:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  store i64 0, ptr %22, align 8, !tbaa !9
  br label %306

306:                                              ; preds = %333, %305
  %307 = load i64, ptr %22, align 8, !tbaa !9
  %308 = icmp ult i64 %307, 100000
  br i1 %308, label %310, label %309

309:                                              ; preds = %306
  store i32 29, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %336

310:                                              ; preds = %306
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  %311 = call i32 @rand() #8
  %312 = sitofp i32 %311 to double
  %313 = fmul double %312, 1.000000e+04
  %314 = fdiv double %313, 0x41DFFFFFFFC00000
  %315 = fptosi double %314 to i32
  %316 = sitofp i32 %315 to double
  %317 = fdiv double %316, 1.000000e+02
  %318 = fptrunc double %317 to float
  store float %318, ptr %23, align 4, !tbaa !13
  %319 = load ptr, ptr %1, align 8, !tbaa !5
  %320 = load float, ptr %23, align 4, !tbaa !13
  call void @dsbuffer_push(ptr noundef %319, float noundef %320)
  %321 = load ptr, ptr %1, align 8, !tbaa !5
  %322 = load ptr, ptr %2, align 8, !tbaa !5
  call void @dsbuffer_dump(ptr noundef %321, ptr noundef %322)
  %323 = load ptr, ptr %2, align 8, !tbaa !5
  %324 = load i64, ptr %3, align 8, !tbaa !9
  %325 = sub i64 %324, 1
  %326 = getelementptr inbounds float, ptr %323, i64 %325
  %327 = load float, ptr %326, align 4, !tbaa !13
  %328 = load float, ptr %23, align 4, !tbaa !13
  %329 = fcmp oeq float %327, %328
  br i1 %329, label %330, label %331

330:                                              ; preds = %310
  br label %332

331:                                              ; preds = %310
  call void @__assert_fail(ptr noundef @.str.25, ptr noundef @.str.2, i32 noundef 709, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

332:                                              ; preds = %330
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  br label %333

333:                                              ; preds = %332
  %334 = load i64, ptr %22, align 8, !tbaa !9
  %335 = add i64 %334, 1
  store i64 %335, ptr %22, align 8, !tbaa !9
  br label %306, !llvm.loop !30

336:                                              ; preds = %309
  %337 = load ptr, ptr %2, align 8, !tbaa !5
  call void @free(ptr noundef %337) #8
  call void @dsbuffer_free(ptr noundef %1)
  store i64 100, ptr %3, align 8, !tbaa !9
  store i8 1, ptr %4, align 1, !tbaa !25
  %338 = load i64, ptr %3, align 8, !tbaa !9
  %339 = load i8, ptr %4, align 1, !tbaa !25, !range !27, !noundef !28
  %340 = trunc i8 %339 to i1
  %341 = call ptr @dsbuffer_new(i64 noundef %338, i1 noundef zeroext %340)
  store ptr %341, ptr %1, align 8, !tbaa !5
  %342 = load ptr, ptr %1, align 8, !tbaa !5
  %343 = icmp ne ptr %342, null
  br i1 %343, label %344, label %345

344:                                              ; preds = %336
  br label %346

345:                                              ; preds = %336
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.2, i32 noundef 720, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

346:                                              ; preds = %344
  %347 = load i64, ptr %3, align 8, !tbaa !9
  %348 = mul i64 4, %347
  %349 = call noalias ptr @malloc(i64 noundef %348) #10
  store ptr %349, ptr %2, align 8, !tbaa !5
  %350 = load ptr, ptr %2, align 8, !tbaa !5
  %351 = icmp ne ptr %350, null
  br i1 %351, label %352, label %353

352:                                              ; preds = %346
  br label %354

353:                                              ; preds = %346
  call void @__assert_fail(ptr noundef @.str.24, ptr noundef @.str.2, i32 noundef 722, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

354:                                              ; preds = %352
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  store i64 0, ptr %24, align 8, !tbaa !9
  br label %355

355:                                              ; preds = %382, %354
  %356 = load i64, ptr %24, align 8, !tbaa !9
  %357 = icmp ult i64 %356, 100000
  br i1 %357, label %359, label %358

358:                                              ; preds = %355
  store i32 32, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  br label %385

359:                                              ; preds = %355
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  %360 = call i32 @rand() #8
  %361 = sitofp i32 %360 to double
  %362 = fmul double %361, 1.000000e+04
  %363 = fdiv double %362, 0x41DFFFFFFFC00000
  %364 = fptosi double %363 to i32
  %365 = sitofp i32 %364 to double
  %366 = fdiv double %365, 1.000000e+02
  %367 = fptrunc double %366 to float
  store float %367, ptr %25, align 4, !tbaa !13
  %368 = load ptr, ptr %1, align 8, !tbaa !5
  %369 = load float, ptr %25, align 4, !tbaa !13
  call void @dsbuffer_push(ptr noundef %368, float noundef %369)
  %370 = load ptr, ptr %1, align 8, !tbaa !5
  %371 = load ptr, ptr %2, align 8, !tbaa !5
  call void @dsbuffer_dump(ptr noundef %370, ptr noundef %371)
  %372 = load ptr, ptr %2, align 8, !tbaa !5
  %373 = load i64, ptr %3, align 8, !tbaa !9
  %374 = sub i64 %373, 1
  %375 = getelementptr inbounds float, ptr %372, i64 %374
  %376 = load float, ptr %375, align 4, !tbaa !13
  %377 = load float, ptr %25, align 4, !tbaa !13
  %378 = fcmp oeq float %376, %377
  br i1 %378, label %379, label %380

379:                                              ; preds = %359
  br label %381

380:                                              ; preds = %359
  call void @__assert_fail(ptr noundef @.str.25, ptr noundef @.str.2, i32 noundef 733, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

381:                                              ; preds = %379
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  br label %382

382:                                              ; preds = %381
  %383 = load i64, ptr %24, align 8, !tbaa !9
  %384 = add i64 %383, 1
  store i64 %384, ptr %24, align 8, !tbaa !9
  br label %355, !llvm.loop !31

385:                                              ; preds = %358
  %386 = load ptr, ptr %2, align 8, !tbaa !5
  call void @free(ptr noundef %386) #8
  call void @dsbuffer_free(ptr noundef %1)
  store i64 100, ptr %3, align 8, !tbaa !9
  store i8 0, ptr %4, align 1, !tbaa !25
  %387 = load i64, ptr %3, align 8, !tbaa !9
  %388 = load i8, ptr %4, align 1, !tbaa !25, !range !27, !noundef !28
  %389 = trunc i8 %388 to i1
  %390 = call ptr @dsbuffer_new(i64 noundef %387, i1 noundef zeroext %389)
  store ptr %390, ptr %1, align 8, !tbaa !5
  %391 = load ptr, ptr %1, align 8, !tbaa !5
  %392 = icmp ne ptr %391, null
  br i1 %392, label %393, label %394

393:                                              ; preds = %385
  br label %395

394:                                              ; preds = %385
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.2, i32 noundef 743, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

395:                                              ; preds = %393
  %396 = load i64, ptr %3, align 8, !tbaa !9
  %397 = mul i64 4, %396
  %398 = call noalias ptr @malloc(i64 noundef %397) #10
  store ptr %398, ptr %2, align 8, !tbaa !5
  %399 = load ptr, ptr %2, align 8, !tbaa !5
  %400 = icmp ne ptr %399, null
  br i1 %400, label %401, label %402

401:                                              ; preds = %395
  br label %403

402:                                              ; preds = %395
  call void @__assert_fail(ptr noundef @.str.24, ptr noundef @.str.2, i32 noundef 745, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

403:                                              ; preds = %401
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  store i64 0, ptr %26, align 8, !tbaa !9
  br label %404

404:                                              ; preds = %431, %403
  %405 = load i64, ptr %26, align 8, !tbaa !9
  %406 = icmp ult i64 %405, 100000
  br i1 %406, label %408, label %407

407:                                              ; preds = %404
  store i32 35, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  br label %434

408:                                              ; preds = %404
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  %409 = call i32 @rand() #8
  %410 = sitofp i32 %409 to double
  %411 = fmul double %410, 1.000000e+04
  %412 = fdiv double %411, 0x41DFFFFFFFC00000
  %413 = fptosi double %412 to i32
  %414 = sitofp i32 %413 to double
  %415 = fdiv double %414, 1.000000e+02
  %416 = fptrunc double %415 to float
  store float %416, ptr %27, align 4, !tbaa !13
  %417 = load ptr, ptr %1, align 8, !tbaa !5
  %418 = load float, ptr %27, align 4, !tbaa !13
  call void @dsbuffer_push(ptr noundef %417, float noundef %418)
  %419 = load ptr, ptr %1, align 8, !tbaa !5
  %420 = load ptr, ptr %2, align 8, !tbaa !5
  call void @dsbuffer_dump(ptr noundef %419, ptr noundef %420)
  %421 = load ptr, ptr %2, align 8, !tbaa !5
  %422 = load i64, ptr %3, align 8, !tbaa !9
  %423 = sub i64 %422, 1
  %424 = getelementptr inbounds float, ptr %421, i64 %423
  %425 = load float, ptr %424, align 4, !tbaa !13
  %426 = load float, ptr %27, align 4, !tbaa !13
  %427 = fcmp oeq float %425, %426
  br i1 %427, label %428, label %429

428:                                              ; preds = %408
  br label %430

429:                                              ; preds = %408
  call void @__assert_fail(ptr noundef @.str.25, ptr noundef @.str.2, i32 noundef 756, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

430:                                              ; preds = %428
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %431

431:                                              ; preds = %430
  %432 = load i64, ptr %26, align 8, !tbaa !9
  %433 = add i64 %432, 1
  store i64 %433, ptr %26, align 8, !tbaa !9
  br label %404, !llvm.loop !32

434:                                              ; preds = %407
  %435 = load ptr, ptr %2, align 8, !tbaa !5
  call void @free(ptr noundef %435) #8
  call void @dsbuffer_free(ptr noundef %1)
  store i64 5, ptr %3, align 8, !tbaa !9
  store i8 0, ptr %4, align 1, !tbaa !25
  %436 = load i64, ptr %3, align 8, !tbaa !9
  %437 = load i8, ptr %4, align 1, !tbaa !25, !range !27, !noundef !28
  %438 = trunc i8 %437 to i1
  %439 = call ptr @dsbuffer_new(i64 noundef %436, i1 noundef zeroext %438)
  store ptr %439, ptr %1, align 8, !tbaa !5
  %440 = load ptr, ptr %1, align 8, !tbaa !5
  %441 = icmp ne ptr %440, null
  br i1 %441, label %442, label %443

442:                                              ; preds = %434
  br label %444

443:                                              ; preds = %434
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.2, i32 noundef 766, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

444:                                              ; preds = %442
  call void @llvm.lifetime.start.p0(i64 20, ptr %28) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %28, ptr align 16 @__const.dsbuffer_test.signal3, i64 20, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  store i64 0, ptr %29, align 8, !tbaa !9
  br label %445

445:                                              ; preds = %455, %444
  %446 = load i64, ptr %29, align 8, !tbaa !9
  %447 = load i64, ptr %3, align 8, !tbaa !9
  %448 = icmp ult i64 %446, %447
  br i1 %448, label %450, label %449

449:                                              ; preds = %445
  store i32 38, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  br label %458

450:                                              ; preds = %445
  %451 = load ptr, ptr %1, align 8, !tbaa !5
  %452 = load i64, ptr %29, align 8, !tbaa !9
  %453 = getelementptr inbounds [5 x float], ptr %28, i64 0, i64 %452
  %454 = load float, ptr %453, align 4, !tbaa !13
  call void @dsbuffer_push(ptr noundef %451, float noundef %454)
  br label %455

455:                                              ; preds = %450
  %456 = load i64, ptr %29, align 8, !tbaa !9
  %457 = add i64 %456, 1
  store i64 %457, ptr %29, align 8, !tbaa !9
  br label %445, !llvm.loop !33

458:                                              ; preds = %449
  %459 = load ptr, ptr %1, align 8, !tbaa !5
  %460 = call float @dsbuffer_mean(ptr noundef %459)
  %461 = fpext float %460 to double
  %462 = load ptr, ptr %1, align 8, !tbaa !5
  %463 = call float @dsbuffer_length(ptr noundef %462)
  %464 = fpext float %463 to double
  %465 = call i32 (ptr, ...) @printf(ptr noundef @.str.26, double noundef %461, double noundef %464)
  %466 = load i64, ptr %3, align 8, !tbaa !9
  %467 = mul i64 4, %466
  %468 = call noalias ptr @malloc(i64 noundef %467) #10
  store ptr %468, ptr %2, align 8, !tbaa !5
  %469 = load ptr, ptr %2, align 8, !tbaa !5
  %470 = icmp ne ptr %469, null
  br i1 %470, label %471, label %472

471:                                              ; preds = %458
  br label %473

472:                                              ; preds = %458
  call void @__assert_fail(ptr noundef @.str.24, ptr noundef @.str.2, i32 noundef 774, ptr noundef @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

473:                                              ; preds = %471
  %474 = load ptr, ptr %1, align 8, !tbaa !5
  %475 = load ptr, ptr %2, align 8, !tbaa !5
  call void @dsbuffer_normalize_to_unit_length(ptr noundef %474, i1 noundef zeroext true, ptr noundef %475)
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  store i64 0, ptr %30, align 8, !tbaa !9
  br label %476

476:                                              ; preds = %489, %473
  %477 = load i64, ptr %30, align 8, !tbaa !9
  %478 = load i64, ptr %3, align 8, !tbaa !9
  %479 = icmp ult i64 %477, %478
  br i1 %479, label %481, label %480

480:                                              ; preds = %476
  store i32 41, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %492

481:                                              ; preds = %476
  %482 = load i64, ptr %30, align 8, !tbaa !9
  %483 = load ptr, ptr %2, align 8, !tbaa !5
  %484 = load i64, ptr %30, align 8, !tbaa !9
  %485 = getelementptr inbounds float, ptr %483, i64 %484
  %486 = load float, ptr %485, align 4, !tbaa !13
  %487 = fpext float %486 to double
  %488 = call i32 (ptr, ...) @printf(ptr noundef @.str.27, i64 noundef %482, double noundef %487)
  br label %489

489:                                              ; preds = %481
  %490 = load i64, ptr %30, align 8, !tbaa !9
  %491 = add i64 %490, 1
  store i64 %491, ptr %30, align 8, !tbaa !9
  br label %476, !llvm.loop !34

492:                                              ; preds = %480
  %493 = load ptr, ptr %2, align 8, !tbaa !5
  call void @free(ptr noundef %493) #8
  call void @dsbuffer_free(ptr noundef %1)
  %494 = call i32 (ptr, ...) @printf(ptr noundef @.str.28)
  call void @llvm.lifetime.end.p0(i64 20, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %2) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %1) #8
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #7

; Function Attrs: nounwind uwtable
declare hidden void @dsbuffer_print_raw(ptr noundef, i1 noundef zeroext) #0

; Function Attrs: nounwind
declare i32 @rand() #6

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = distinct !{!15, !12}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12}
!21 = !{!22, !14, i64 0}
!22 = !{!"", !14, i64 0, !14, i64 4}
!23 = !{!22, !14, i64 4}
!24 = distinct !{!24, !12}
!25 = !{!26, !26, i64 0}
!26 = !{!"_Bool", !7, i64 0}
!27 = !{i8 0, i8 2}
!28 = !{}
!29 = distinct !{!29, !12}
!30 = distinct !{!30, !12}
!31 = distinct !{!31, !12}
!32 = distinct !{!32, !12}
!33 = distinct !{!33, !12}
!34 = distinct !{!34, !12}


; 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.2 = external hidden unnamed_addr constant [109 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@dsbuffer_test.fir_taps = external hidden constant [32 x float], align 16
@.str.18 = external hidden unnamed_addr constant [4 x i8], align 1
@__PRETTY_FUNCTION__.dsbuffer_test = external hidden unnamed_addr constant [21 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [39 x i8], align 1
@__const.dsbuffer_test.signal1 = external hidden unnamed_addr constant [4 x float], align 16
@.str.20 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [6 x i8], align 1
@__const.dsbuffer_test.signal2 = external hidden unnamed_addr constant [8 x float], align 16
@.str.23 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [20 x i8], align 1
@__const.dsbuffer_test.signal3 = external hidden unnamed_addr constant [5 x float], align 16
@.str.26 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local ptr @dsbuffer_new(i64 noundef, i1 noundef zeroext) local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #1

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @dsbuffer_push(ptr noundef, float noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @dsbuffer_dump(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @dsbuffer_fftr(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @dsbuffer_fft_freq(ptr noundef, float noundef, ptr noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
declare dso_local float @dsbuffer_latest_fir_output(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @dsbuffer_fir_filter(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local float @dsbuffer_mean(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local float @dsbuffer_length(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @dsbuffer_normalize_to_unit_length(ptr noundef, i1 noundef zeroext, ptr noundef) local_unnamed_addr #0

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

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

; Function Attrs: nounwind uwtable
define dso_local void @dsbuffer_test() local_unnamed_addr #0 {
  %1 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %1) #8
  %2 = tail call ptr @dsbuffer_new(i64 noundef 32, i1 noundef zeroext false)
  store ptr %2, ptr %1, align 8, !tbaa !5
  %.not = icmp eq ptr %2, null
  br i1 %.not, label %7, label %.preheader156

.preheader156:                                    ; preds = %0
  %3 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 0)
  %4 = tail call float @llvm.fabs.f32(float %3)
  %5 = fpext float %4 to double
  %6 = fcmp olt double %5, 1.000000e-08
  br i1 %6, label %8, label %164

7:                                                ; preds = %0
  tail call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.2, i32 noundef 586, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

8:                                                ; preds = %.preheader156
  %9 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 1)
  %10 = tail call float @llvm.fabs.f32(float %9)
  %11 = fpext float %10 to double
  %12 = fcmp olt double %11, 1.000000e-08
  br i1 %12, label %13, label %164

13:                                               ; preds = %8
  %14 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 2)
  %15 = tail call float @llvm.fabs.f32(float %14)
  %16 = fpext float %15 to double
  %17 = fcmp olt double %16, 1.000000e-08
  br i1 %17, label %18, label %164

18:                                               ; preds = %13
  %19 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 3)
  %20 = tail call float @llvm.fabs.f32(float %19)
  %21 = fpext float %20 to double
  %22 = fcmp olt double %21, 1.000000e-08
  br i1 %22, label %23, label %164

23:                                               ; preds = %18
  %24 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 4)
  %25 = tail call float @llvm.fabs.f32(float %24)
  %26 = fpext float %25 to double
  %27 = fcmp olt double %26, 1.000000e-08
  br i1 %27, label %28, label %164

28:                                               ; preds = %23
  %29 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 5)
  %30 = tail call float @llvm.fabs.f32(float %29)
  %31 = fpext float %30 to double
  %32 = fcmp olt double %31, 1.000000e-08
  br i1 %32, label %33, label %164

33:                                               ; preds = %28
  %34 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 6)
  %35 = tail call float @llvm.fabs.f32(float %34)
  %36 = fpext float %35 to double
  %37 = fcmp olt double %36, 1.000000e-08
  br i1 %37, label %38, label %164

38:                                               ; preds = %33
  %39 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 7)
  %40 = tail call float @llvm.fabs.f32(float %39)
  %41 = fpext float %40 to double
  %42 = fcmp olt double %41, 1.000000e-08
  br i1 %42, label %43, label %164

43:                                               ; preds = %38
  %44 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 8)
  %45 = tail call float @llvm.fabs.f32(float %44)
  %46 = fpext float %45 to double
  %47 = fcmp olt double %46, 1.000000e-08
  br i1 %47, label %48, label %164

48:                                               ; preds = %43
  %49 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 9)
  %50 = tail call float @llvm.fabs.f32(float %49)
  %51 = fpext float %50 to double
  %52 = fcmp olt double %51, 1.000000e-08
  br i1 %52, label %53, label %164

53:                                               ; preds = %48
  %54 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 10)
  %55 = tail call float @llvm.fabs.f32(float %54)
  %56 = fpext float %55 to double
  %57 = fcmp olt double %56, 1.000000e-08
  br i1 %57, label %58, label %164

58:                                               ; preds = %53
  %59 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 11)
  %60 = tail call float @llvm.fabs.f32(float %59)
  %61 = fpext float %60 to double
  %62 = fcmp olt double %61, 1.000000e-08
  br i1 %62, label %63, label %164

63:                                               ; preds = %58
  %64 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 12)
  %65 = tail call float @llvm.fabs.f32(float %64)
  %66 = fpext float %65 to double
  %67 = fcmp olt double %66, 1.000000e-08
  br i1 %67, label %68, label %164

68:                                               ; preds = %63
  %69 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 13)
  %70 = tail call float @llvm.fabs.f32(float %69)
  %71 = fpext float %70 to double
  %72 = fcmp olt double %71, 1.000000e-08
  br i1 %72, label %73, label %164

73:                                               ; preds = %68
  %74 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 14)
  %75 = tail call float @llvm.fabs.f32(float %74)
  %76 = fpext float %75 to double
  %77 = fcmp olt double %76, 1.000000e-08
  br i1 %77, label %78, label %164

78:                                               ; preds = %73
  %79 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 15)
  %80 = tail call float @llvm.fabs.f32(float %79)
  %81 = fpext float %80 to double
  %82 = fcmp olt double %81, 1.000000e-08
  br i1 %82, label %83, label %164

83:                                               ; preds = %78
  %84 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 16)
  %85 = tail call float @llvm.fabs.f32(float %84)
  %86 = fpext float %85 to double
  %87 = fcmp olt double %86, 1.000000e-08
  br i1 %87, label %88, label %164

88:                                               ; preds = %83
  %89 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 17)
  %90 = tail call float @llvm.fabs.f32(float %89)
  %91 = fpext float %90 to double
  %92 = fcmp olt double %91, 1.000000e-08
  br i1 %92, label %93, label %164

93:                                               ; preds = %88
  %94 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 18)
  %95 = tail call float @llvm.fabs.f32(float %94)
  %96 = fpext float %95 to double
  %97 = fcmp olt double %96, 1.000000e-08
  br i1 %97, label %98, label %164

98:                                               ; preds = %93
  %99 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 19)
  %100 = tail call float @llvm.fabs.f32(float %99)
  %101 = fpext float %100 to double
  %102 = fcmp olt double %101, 1.000000e-08
  br i1 %102, label %103, label %164

103:                                              ; preds = %98
  %104 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 20)
  %105 = tail call float @llvm.fabs.f32(float %104)
  %106 = fpext float %105 to double
  %107 = fcmp olt double %106, 1.000000e-08
  br i1 %107, label %108, label %164

108:                                              ; preds = %103
  %109 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 21)
  %110 = tail call float @llvm.fabs.f32(float %109)
  %111 = fpext float %110 to double
  %112 = fcmp olt double %111, 1.000000e-08
  br i1 %112, label %113, label %164

113:                                              ; preds = %108
  %114 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 22)
  %115 = tail call float @llvm.fabs.f32(float %114)
  %116 = fpext float %115 to double
  %117 = fcmp olt double %116, 1.000000e-08
  br i1 %117, label %118, label %164

118:                                              ; preds = %113
  %119 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 23)
  %120 = tail call float @llvm.fabs.f32(float %119)
  %121 = fpext float %120 to double
  %122 = fcmp olt double %121, 1.000000e-08
  br i1 %122, label %123, label %164

123:                                              ; preds = %118
  %124 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 24)
  %125 = tail call float @llvm.fabs.f32(float %124)
  %126 = fpext float %125 to double
  %127 = fcmp olt double %126, 1.000000e-08
  br i1 %127, label %128, label %164

128:                                              ; preds = %123
  %129 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 25)
  %130 = tail call float @llvm.fabs.f32(float %129)
  %131 = fpext float %130 to double
  %132 = fcmp olt double %131, 1.000000e-08
  br i1 %132, label %133, label %164

133:                                              ; preds = %128
  %134 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 26)
  %135 = tail call float @llvm.fabs.f32(float %134)
  %136 = fpext float %135 to double
  %137 = fcmp olt double %136, 1.000000e-08
  br i1 %137, label %138, label %164

138:                                              ; preds = %133
  %139 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 27)
  %140 = tail call float @llvm.fabs.f32(float %139)
  %141 = fpext float %140 to double
  %142 = fcmp olt double %141, 1.000000e-08
  br i1 %142, label %143, label %164

143:                                              ; preds = %138
  %144 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 28)
  %145 = tail call float @llvm.fabs.f32(float %144)
  %146 = fpext float %145 to double
  %147 = fcmp olt double %146, 1.000000e-08
  br i1 %147, label %148, label %164

148:                                              ; preds = %143
  %149 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 29)
  %150 = tail call float @llvm.fabs.f32(float %149)
  %151 = fpext float %150 to double
  %152 = fcmp olt double %151, 1.000000e-08
  br i1 %152, label %153, label %164

153:                                              ; preds = %148
  %154 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 30)
  %155 = tail call float @llvm.fabs.f32(float %154)
  %156 = fpext float %155 to double
  %157 = fcmp olt double %156, 1.000000e-08
  br i1 %157, label %158, label %164

158:                                              ; preds = %153
  %159 = tail call float @dsbuffer_at(ptr noundef nonnull %2, i64 noundef 31)
  %160 = tail call float @llvm.fabs.f32(float %159)
  %161 = fpext float %160 to double
  %162 = fcmp olt double %161, 1.000000e-08
  br i1 %162, label %163, label %164

163:                                              ; preds = %158
  tail call void @dsbuffer_setup_fir(ptr noundef nonnull %2, ptr noundef nonnull @dsbuffer_test.fir_taps, i64 noundef 32)
  br label %167

164:                                              ; preds = %158, %153, %148, %143, %138, %133, %128, %123, %118, %113, %108, %103, %98, %93, %88, %83, %78, %73, %68, %63, %58, %53, %48, %43, %38, %33, %28, %23, %18, %13, %8, %.preheader156
  tail call void @__assert_fail(ptr noundef nonnull @.str.19, ptr noundef nonnull @.str.2, i32 noundef 588, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

165:                                              ; preds = %167
  call void @dsbuffer_free(ptr noundef nonnull %1)
  %166 = call ptr @dsbuffer_new(i64 noundef 32, i1 noundef zeroext false)
  store ptr %166, ptr %1, align 8, !tbaa !5
  %.not139 = icmp eq ptr %166, null
  br i1 %.not139, label %171, label %172

167:                                              ; preds = %163, %167
  %.0125158 = phi i64 [ 0, %163 ], [ %170, %167 ]
  %168 = uitofp nneg i64 %.0125158 to float
  tail call void @dsbuffer_push(ptr noundef %2, float noundef %168)
  %169 = tail call float @dsbuffer_latest_fir_output(ptr noundef %2)
  %170 = add nuw nsw i64 %.0125158, 1
  %exitcond.not = icmp eq i64 %170, 10000000
  br i1 %exitcond.not, label %165, label %167, !llvm.loop !9

171:                                              ; preds = %165
  call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.2, i32 noundef 603, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

172:                                              ; preds = %165
  call void @dsbuffer_setup_fir(ptr noundef nonnull %166, ptr noundef nonnull @dsbuffer_test.fir_taps, i64 noundef 32)
  %173 = call noalias dereferenceable_or_null(128) ptr @malloc(i64 noundef 128) #10
  %174 = getelementptr inbounds i8, ptr %173, i64 4
  %175 = getelementptr inbounds i8, ptr %173, i64 8
  %176 = getelementptr inbounds i8, ptr %173, i64 12
  %177 = getelementptr inbounds i8, ptr %173, i64 16
  %178 = getelementptr inbounds i8, ptr %173, i64 20
  %179 = getelementptr inbounds i8, ptr %173, i64 24
  %180 = getelementptr inbounds i8, ptr %173, i64 28
  %181 = getelementptr inbounds i8, ptr %173, i64 32
  %182 = getelementptr inbounds i8, ptr %173, i64 36
  %183 = getelementptr inbounds i8, ptr %173, i64 40
  %184 = getelementptr inbounds i8, ptr %173, i64 44
  %185 = getelementptr inbounds i8, ptr %173, i64 48
  %186 = getelementptr inbounds i8, ptr %173, i64 52
  %187 = getelementptr inbounds i8, ptr %173, i64 56
  %188 = getelementptr inbounds i8, ptr %173, i64 60
  %189 = getelementptr inbounds i8, ptr %173, i64 64
  %190 = getelementptr inbounds i8, ptr %173, i64 68
  %191 = getelementptr inbounds i8, ptr %173, i64 72
  %192 = getelementptr inbounds i8, ptr %173, i64 76
  %193 = getelementptr inbounds i8, ptr %173, i64 80
  %194 = getelementptr inbounds i8, ptr %173, i64 84
  %195 = getelementptr inbounds i8, ptr %173, i64 88
  %196 = getelementptr inbounds i8, ptr %173, i64 92
  %197 = getelementptr inbounds i8, ptr %173, i64 96
  %198 = getelementptr inbounds i8, ptr %173, i64 100
  %199 = getelementptr inbounds i8, ptr %173, i64 104
  %200 = getelementptr inbounds i8, ptr %173, i64 108
  %201 = getelementptr inbounds i8, ptr %173, i64 112
  %202 = getelementptr inbounds i8, ptr %173, i64 116
  %203 = getelementptr inbounds i8, ptr %173, i64 120
  %204 = getelementptr inbounds i8, ptr %173, i64 124
  br label %208

205:                                              ; preds = %208
  %206 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_print_raw(ptr noundef %206, i1 noundef zeroext false)
  call void @free(ptr noundef nonnull %173) #8
  %207 = call noalias dereferenceable_or_null(128) ptr @malloc(i64 noundef 128) #10
  %.not140 = icmp eq ptr %207, null
  br i1 %.not140, label %314, label %315

208:                                              ; preds = %172, %208
  %.0126160 = phi i64 [ 0, %172 ], [ %313, %208 ]
  %209 = load ptr, ptr %1, align 8, !tbaa !5
  %210 = getelementptr inbounds [4 x float], ptr @__const.dsbuffer_test.signal1, i64 0, i64 %.0126160
  %211 = load float, ptr %210, align 4, !tbaa !11
  call void @dsbuffer_push(ptr noundef %209, float noundef %211)
  %212 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_dump(ptr noundef %212, ptr noundef %173)
  %213 = load float, ptr %173, align 4, !tbaa !11
  %214 = fpext float %213 to double
  %215 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 0, double noundef %214)
  %216 = load float, ptr %174, align 4, !tbaa !11
  %217 = fpext float %216 to double
  %218 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 1, double noundef %217)
  %219 = load float, ptr %175, align 4, !tbaa !11
  %220 = fpext float %219 to double
  %221 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 2, double noundef %220)
  %222 = load float, ptr %176, align 4, !tbaa !11
  %223 = fpext float %222 to double
  %224 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 3, double noundef %223)
  %225 = load float, ptr %177, align 4, !tbaa !11
  %226 = fpext float %225 to double
  %227 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 4, double noundef %226)
  %228 = load float, ptr %178, align 4, !tbaa !11
  %229 = fpext float %228 to double
  %230 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 5, double noundef %229)
  %231 = load float, ptr %179, align 4, !tbaa !11
  %232 = fpext float %231 to double
  %233 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 6, double noundef %232)
  %234 = load float, ptr %180, align 4, !tbaa !11
  %235 = fpext float %234 to double
  %236 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 7, double noundef %235)
  %237 = load float, ptr %181, align 4, !tbaa !11
  %238 = fpext float %237 to double
  %239 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 8, double noundef %238)
  %240 = load float, ptr %182, align 4, !tbaa !11
  %241 = fpext float %240 to double
  %242 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 9, double noundef %241)
  %243 = load float, ptr %183, align 4, !tbaa !11
  %244 = fpext float %243 to double
  %245 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 10, double noundef %244)
  %246 = load float, ptr %184, align 4, !tbaa !11
  %247 = fpext float %246 to double
  %248 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 11, double noundef %247)
  %249 = load float, ptr %185, align 4, !tbaa !11
  %250 = fpext float %249 to double
  %251 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 12, double noundef %250)
  %252 = load float, ptr %186, align 4, !tbaa !11
  %253 = fpext float %252 to double
  %254 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 13, double noundef %253)
  %255 = load float, ptr %187, align 4, !tbaa !11
  %256 = fpext float %255 to double
  %257 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 14, double noundef %256)
  %258 = load float, ptr %188, align 4, !tbaa !11
  %259 = fpext float %258 to double
  %260 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 15, double noundef %259)
  %261 = load float, ptr %189, align 4, !tbaa !11
  %262 = fpext float %261 to double
  %263 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 16, double noundef %262)
  %264 = load float, ptr %190, align 4, !tbaa !11
  %265 = fpext float %264 to double
  %266 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 17, double noundef %265)
  %267 = load float, ptr %191, align 4, !tbaa !11
  %268 = fpext float %267 to double
  %269 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 18, double noundef %268)
  %270 = load float, ptr %192, align 4, !tbaa !11
  %271 = fpext float %270 to double
  %272 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 19, double noundef %271)
  %273 = load float, ptr %193, align 4, !tbaa !11
  %274 = fpext float %273 to double
  %275 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 20, double noundef %274)
  %276 = load float, ptr %194, align 4, !tbaa !11
  %277 = fpext float %276 to double
  %278 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 21, double noundef %277)
  %279 = load float, ptr %195, align 4, !tbaa !11
  %280 = fpext float %279 to double
  %281 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 22, double noundef %280)
  %282 = load float, ptr %196, align 4, !tbaa !11
  %283 = fpext float %282 to double
  %284 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 23, double noundef %283)
  %285 = load float, ptr %197, align 4, !tbaa !11
  %286 = fpext float %285 to double
  %287 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 24, double noundef %286)
  %288 = load float, ptr %198, align 4, !tbaa !11
  %289 = fpext float %288 to double
  %290 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 25, double noundef %289)
  %291 = load float, ptr %199, align 4, !tbaa !11
  %292 = fpext float %291 to double
  %293 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 26, double noundef %292)
  %294 = load float, ptr %200, align 4, !tbaa !11
  %295 = fpext float %294 to double
  %296 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 27, double noundef %295)
  %297 = load float, ptr %201, align 4, !tbaa !11
  %298 = fpext float %297 to double
  %299 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 28, double noundef %298)
  %300 = load float, ptr %202, align 4, !tbaa !11
  %301 = fpext float %300 to double
  %302 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 29, double noundef %301)
  %303 = load float, ptr %203, align 4, !tbaa !11
  %304 = fpext float %303 to double
  %305 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 30, double noundef %304)
  %306 = load float, ptr %204, align 4, !tbaa !11
  %307 = fpext float %306 to double
  %308 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 31, double noundef %307)
  %309 = load ptr, ptr %1, align 8, !tbaa !5
  %310 = call float @dsbuffer_latest_fir_output(ptr noundef %309)
  %311 = fpext float %310 to double
  %312 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21, double noundef %311)
  %313 = add nuw nsw i64 %.0126160, 1
  %exitcond172.not = icmp eq i64 %313, 4
  br i1 %exitcond172.not, label %205, label %208, !llvm.loop !13

314:                                              ; preds = %205
  call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.2, i32 noundef 622, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

315:                                              ; preds = %205
  %316 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_fir_filter(ptr noundef %316, ptr noundef nonnull %207)
  %317 = load float, ptr %207, align 4, !tbaa !11
  %318 = fpext float %317 to double
  %319 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %318)
  %320 = getelementptr inbounds i8, ptr %207, i64 4
  %321 = load float, ptr %320, align 4, !tbaa !11
  %322 = fpext float %321 to double
  %323 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %322)
  %324 = getelementptr inbounds i8, ptr %207, i64 8
  %325 = load float, ptr %324, align 4, !tbaa !11
  %326 = fpext float %325 to double
  %327 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %326)
  %328 = getelementptr inbounds i8, ptr %207, i64 12
  %329 = load float, ptr %328, align 4, !tbaa !11
  %330 = fpext float %329 to double
  %331 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %330)
  %332 = getelementptr inbounds i8, ptr %207, i64 16
  %333 = load float, ptr %332, align 4, !tbaa !11
  %334 = fpext float %333 to double
  %335 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %334)
  %336 = getelementptr inbounds i8, ptr %207, i64 20
  %337 = load float, ptr %336, align 4, !tbaa !11
  %338 = fpext float %337 to double
  %339 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %338)
  %340 = getelementptr inbounds i8, ptr %207, i64 24
  %341 = load float, ptr %340, align 4, !tbaa !11
  %342 = fpext float %341 to double
  %343 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %342)
  %344 = getelementptr inbounds i8, ptr %207, i64 28
  %345 = load float, ptr %344, align 4, !tbaa !11
  %346 = fpext float %345 to double
  %347 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %346)
  %348 = getelementptr inbounds i8, ptr %207, i64 32
  %349 = load float, ptr %348, align 4, !tbaa !11
  %350 = fpext float %349 to double
  %351 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %350)
  %352 = getelementptr inbounds i8, ptr %207, i64 36
  %353 = load float, ptr %352, align 4, !tbaa !11
  %354 = fpext float %353 to double
  %355 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %354)
  %356 = getelementptr inbounds i8, ptr %207, i64 40
  %357 = load float, ptr %356, align 4, !tbaa !11
  %358 = fpext float %357 to double
  %359 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %358)
  %360 = getelementptr inbounds i8, ptr %207, i64 44
  %361 = load float, ptr %360, align 4, !tbaa !11
  %362 = fpext float %361 to double
  %363 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %362)
  %364 = getelementptr inbounds i8, ptr %207, i64 48
  %365 = load float, ptr %364, align 4, !tbaa !11
  %366 = fpext float %365 to double
  %367 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %366)
  %368 = getelementptr inbounds i8, ptr %207, i64 52
  %369 = load float, ptr %368, align 4, !tbaa !11
  %370 = fpext float %369 to double
  %371 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %370)
  %372 = getelementptr inbounds i8, ptr %207, i64 56
  %373 = load float, ptr %372, align 4, !tbaa !11
  %374 = fpext float %373 to double
  %375 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %374)
  %376 = getelementptr inbounds i8, ptr %207, i64 60
  %377 = load float, ptr %376, align 4, !tbaa !11
  %378 = fpext float %377 to double
  %379 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %378)
  %380 = getelementptr inbounds i8, ptr %207, i64 64
  %381 = load float, ptr %380, align 4, !tbaa !11
  %382 = fpext float %381 to double
  %383 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %382)
  %384 = getelementptr inbounds i8, ptr %207, i64 68
  %385 = load float, ptr %384, align 4, !tbaa !11
  %386 = fpext float %385 to double
  %387 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %386)
  %388 = getelementptr inbounds i8, ptr %207, i64 72
  %389 = load float, ptr %388, align 4, !tbaa !11
  %390 = fpext float %389 to double
  %391 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %390)
  %392 = getelementptr inbounds i8, ptr %207, i64 76
  %393 = load float, ptr %392, align 4, !tbaa !11
  %394 = fpext float %393 to double
  %395 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %394)
  %396 = getelementptr inbounds i8, ptr %207, i64 80
  %397 = load float, ptr %396, align 4, !tbaa !11
  %398 = fpext float %397 to double
  %399 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %398)
  %400 = getelementptr inbounds i8, ptr %207, i64 84
  %401 = load float, ptr %400, align 4, !tbaa !11
  %402 = fpext float %401 to double
  %403 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %402)
  %404 = getelementptr inbounds i8, ptr %207, i64 88
  %405 = load float, ptr %404, align 4, !tbaa !11
  %406 = fpext float %405 to double
  %407 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %406)
  %408 = getelementptr inbounds i8, ptr %207, i64 92
  %409 = load float, ptr %408, align 4, !tbaa !11
  %410 = fpext float %409 to double
  %411 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %410)
  %412 = getelementptr inbounds i8, ptr %207, i64 96
  %413 = load float, ptr %412, align 4, !tbaa !11
  %414 = fpext float %413 to double
  %415 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %414)
  %416 = getelementptr inbounds i8, ptr %207, i64 100
  %417 = load float, ptr %416, align 4, !tbaa !11
  %418 = fpext float %417 to double
  %419 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %418)
  %420 = getelementptr inbounds i8, ptr %207, i64 104
  %421 = load float, ptr %420, align 4, !tbaa !11
  %422 = fpext float %421 to double
  %423 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %422)
  %424 = getelementptr inbounds i8, ptr %207, i64 108
  %425 = load float, ptr %424, align 4, !tbaa !11
  %426 = fpext float %425 to double
  %427 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %426)
  %428 = getelementptr inbounds i8, ptr %207, i64 112
  %429 = load float, ptr %428, align 4, !tbaa !11
  %430 = fpext float %429 to double
  %431 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %430)
  %432 = getelementptr inbounds i8, ptr %207, i64 116
  %433 = load float, ptr %432, align 4, !tbaa !11
  %434 = fpext float %433 to double
  %435 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %434)
  %436 = getelementptr inbounds i8, ptr %207, i64 120
  %437 = load float, ptr %436, align 4, !tbaa !11
  %438 = fpext float %437 to double
  %439 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %438)
  %440 = getelementptr inbounds i8, ptr %207, i64 124
  %441 = load float, ptr %440, align 4, !tbaa !11
  %442 = fpext float %441 to double
  %443 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %442)
  %444 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16)
  call void @free(ptr noundef nonnull %207) #8
  call void @dsbuffer_free(ptr noundef nonnull %1)
  %445 = call ptr @dsbuffer_new(i64 noundef 8, i1 noundef zeroext true)
  store ptr %445, ptr %1, align 8, !tbaa !5
  %.not141 = icmp eq ptr %445, null
  br i1 %.not141, label %446, label %447

446:                                              ; preds = %315
  call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.2, i32 noundef 637, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

447:                                              ; preds = %315
  call void @dsbuffer_print_raw(ptr noundef nonnull %445, i1 noundef zeroext true)
  %448 = call noalias dereferenceable_or_null(32) ptr @malloc(i64 noundef 32) #10
  %449 = getelementptr inbounds i8, ptr %448, i64 4
  %450 = getelementptr inbounds i8, ptr %448, i64 8
  %451 = getelementptr inbounds i8, ptr %448, i64 12
  %452 = getelementptr inbounds i8, ptr %448, i64 16
  %453 = getelementptr inbounds i8, ptr %448, i64 20
  %454 = getelementptr inbounds i8, ptr %448, i64 24
  %455 = getelementptr inbounds i8, ptr %448, i64 28
  br label %510

456:                                              ; preds = %510
  call void @free(ptr noundef nonnull %448) #8
  %457 = call noalias dereferenceable_or_null(40) ptr @malloc(i64 noundef 40) #10
  %458 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_fftr(ptr noundef %458, ptr noundef %457)
  %459 = call noalias dereferenceable_or_null(20) ptr @malloc(i64 noundef 20) #10
  %460 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_fft_freq(ptr noundef %460, float noundef 9.000000e+00, ptr noundef %459)
  %461 = load float, ptr %459, align 4, !tbaa !11
  %462 = fpext float %461 to double
  %463 = load float, ptr %457, align 4, !tbaa !14
  %464 = fpext float %463 to double
  %465 = getelementptr inbounds i8, ptr %457, i64 4
  %466 = load float, ptr %465, align 4, !tbaa !16
  %467 = fpext float %466 to double
  %468 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, i64 noundef 0, double noundef %462, double noundef %464, double noundef %467)
  %469 = getelementptr inbounds i8, ptr %459, i64 4
  %470 = load float, ptr %469, align 4, !tbaa !11
  %471 = fpext float %470 to double
  %472 = getelementptr inbounds i8, ptr %457, i64 8
  %473 = load float, ptr %472, align 4, !tbaa !14
  %474 = fpext float %473 to double
  %475 = getelementptr inbounds i8, ptr %457, i64 12
  %476 = load float, ptr %475, align 4, !tbaa !16
  %477 = fpext float %476 to double
  %478 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, i64 noundef 1, double noundef %471, double noundef %474, double noundef %477)
  %479 = getelementptr inbounds i8, ptr %459, i64 8
  %480 = load float, ptr %479, align 4, !tbaa !11
  %481 = fpext float %480 to double
  %482 = getelementptr inbounds i8, ptr %457, i64 16
  %483 = load float, ptr %482, align 4, !tbaa !14
  %484 = fpext float %483 to double
  %485 = getelementptr inbounds i8, ptr %457, i64 20
  %486 = load float, ptr %485, align 4, !tbaa !16
  %487 = fpext float %486 to double
  %488 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, i64 noundef 2, double noundef %481, double noundef %484, double noundef %487)
  %489 = getelementptr inbounds i8, ptr %459, i64 12
  %490 = load float, ptr %489, align 4, !tbaa !11
  %491 = fpext float %490 to double
  %492 = getelementptr inbounds i8, ptr %457, i64 24
  %493 = load float, ptr %492, align 4, !tbaa !14
  %494 = fpext float %493 to double
  %495 = getelementptr inbounds i8, ptr %457, i64 28
  %496 = load float, ptr %495, align 4, !tbaa !16
  %497 = fpext float %496 to double
  %498 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, i64 noundef 3, double noundef %491, double noundef %494, double noundef %497)
  %499 = getelementptr inbounds i8, ptr %459, i64 16
  %500 = load float, ptr %499, align 4, !tbaa !11
  %501 = fpext float %500 to double
  %502 = getelementptr inbounds i8, ptr %457, i64 32
  %503 = load float, ptr %502, align 4, !tbaa !14
  %504 = fpext float %503 to double
  %505 = getelementptr inbounds i8, ptr %457, i64 36
  %506 = load float, ptr %505, align 4, !tbaa !16
  %507 = fpext float %506 to double
  %508 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, i64 noundef 4, double noundef %501, double noundef %504, double noundef %507)
  call void @dsbuffer_free(ptr noundef nonnull %1)
  %509 = call ptr @dsbuffer_new(i64 noundef 64, i1 noundef zeroext false)
  store ptr %509, ptr %1, align 8, !tbaa !5
  %.not142 = icmp eq ptr %509, null
  br i1 %.not142, label %541, label %542

510:                                              ; preds = %447, %510
  %.0128163 = phi i64 [ 0, %447 ], [ %540, %510 ]
  %511 = load ptr, ptr %1, align 8, !tbaa !5
  %512 = getelementptr inbounds [8 x float], ptr @__const.dsbuffer_test.signal2, i64 0, i64 %.0128163
  %513 = load float, ptr %512, align 4, !tbaa !11
  call void @dsbuffer_push(ptr noundef %511, float noundef %513)
  %514 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_print_raw(ptr noundef %514, i1 noundef zeroext true)
  %515 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_dump(ptr noundef %515, ptr noundef %448)
  %516 = load float, ptr %448, align 4, !tbaa !11
  %517 = fpext float %516 to double
  %518 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 0, double noundef %517)
  %519 = load float, ptr %449, align 4, !tbaa !11
  %520 = fpext float %519 to double
  %521 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 1, double noundef %520)
  %522 = load float, ptr %450, align 4, !tbaa !11
  %523 = fpext float %522 to double
  %524 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 2, double noundef %523)
  %525 = load float, ptr %451, align 4, !tbaa !11
  %526 = fpext float %525 to double
  %527 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 3, double noundef %526)
  %528 = load float, ptr %452, align 4, !tbaa !11
  %529 = fpext float %528 to double
  %530 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 4, double noundef %529)
  %531 = load float, ptr %453, align 4, !tbaa !11
  %532 = fpext float %531 to double
  %533 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 5, double noundef %532)
  %534 = load float, ptr %454, align 4, !tbaa !11
  %535 = fpext float %534 to double
  %536 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 6, double noundef %535)
  %537 = load float, ptr %455, align 4, !tbaa !11
  %538 = fpext float %537 to double
  %539 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 7, double noundef %538)
  %540 = add nuw nsw i64 %.0128163, 1
  %exitcond175.not = icmp eq i64 %540, 8
  br i1 %exitcond175.not, label %456, label %510, !llvm.loop !17

541:                                              ; preds = %456
  call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.2, i32 noundef 673, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

542:                                              ; preds = %456
  %543 = call noalias dereferenceable_or_null(256) ptr @malloc(i64 noundef 256) #10
  %.not143 = icmp eq ptr %543, null
  br i1 %.not143, label %545, label %.preheader155

.preheader155:                                    ; preds = %542
  %544 = getelementptr inbounds i8, ptr %543, i64 252
  br label %550

545:                                              ; preds = %542
  call void @__assert_fail(ptr noundef nonnull @.str.24, ptr noundef nonnull @.str.2, i32 noundef 675, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

546:                                              ; preds = %550
  %547 = add nuw nsw i64 %.0123165, 1
  %exitcond177.not = icmp eq i64 %547, 100000
  br i1 %exitcond177.not, label %548, label %550, !llvm.loop !18

548:                                              ; preds = %546
  call void @free(ptr noundef nonnull %543) #8
  call void @dsbuffer_free(ptr noundef nonnull %1)
  %549 = call ptr @dsbuffer_new(i64 noundef 64, i1 noundef zeroext true)
  store ptr %549, ptr %1, align 8, !tbaa !5
  %.not144 = icmp eq ptr %549, null
  br i1 %.not144, label %564, label %565

550:                                              ; preds = %.preheader155, %546
  %.0123165 = phi i64 [ 0, %.preheader155 ], [ %547, %546 ]
  %551 = call i32 @rand() #8
  %552 = sitofp i32 %551 to double
  %553 = fmul double %552, 1.000000e+04
  %554 = fdiv double %553, 0x41DFFFFFFFC00000
  %555 = fptosi double %554 to i32
  %556 = sitofp i32 %555 to double
  %557 = fdiv double %556, 1.000000e+02
  %558 = fptrunc double %557 to float
  %559 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_push(ptr noundef %559, float noundef %558)
  %560 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_dump(ptr noundef %560, ptr noundef nonnull %543)
  %561 = load float, ptr %544, align 4, !tbaa !11
  %562 = fcmp oeq float %561, %558
  br i1 %562, label %546, label %563

563:                                              ; preds = %550
  call void @__assert_fail(ptr noundef nonnull @.str.25, ptr noundef nonnull @.str.2, i32 noundef 686, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

564:                                              ; preds = %548
  call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.2, i32 noundef 696, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

565:                                              ; preds = %548
  %566 = call noalias dereferenceable_or_null(256) ptr @malloc(i64 noundef 256) #10
  %.not145 = icmp eq ptr %566, null
  br i1 %.not145, label %568, label %.preheader154

.preheader154:                                    ; preds = %565
  %567 = getelementptr inbounds i8, ptr %566, i64 252
  br label %573

568:                                              ; preds = %565
  call void @__assert_fail(ptr noundef nonnull @.str.24, ptr noundef nonnull @.str.2, i32 noundef 698, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

569:                                              ; preds = %573
  %570 = add nuw nsw i64 %.0121166, 1
  %exitcond178.not = icmp eq i64 %570, 100000
  br i1 %exitcond178.not, label %571, label %573, !llvm.loop !19

571:                                              ; preds = %569
  call void @free(ptr noundef nonnull %566) #8
  call void @dsbuffer_free(ptr noundef nonnull %1)
  %572 = call ptr @dsbuffer_new(i64 noundef 100, i1 noundef zeroext true)
  store ptr %572, ptr %1, align 8, !tbaa !5
  %.not146 = icmp eq ptr %572, null
  br i1 %.not146, label %587, label %588

573:                                              ; preds = %.preheader154, %569
  %.0121166 = phi i64 [ 0, %.preheader154 ], [ %570, %569 ]
  %574 = call i32 @rand() #8
  %575 = sitofp i32 %574 to double
  %576 = fmul double %575, 1.000000e+04
  %577 = fdiv double %576, 0x41DFFFFFFFC00000
  %578 = fptosi double %577 to i32
  %579 = sitofp i32 %578 to double
  %580 = fdiv double %579, 1.000000e+02
  %581 = fptrunc double %580 to float
  %582 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_push(ptr noundef %582, float noundef %581)
  %583 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_dump(ptr noundef %583, ptr noundef nonnull %566)
  %584 = load float, ptr %567, align 4, !tbaa !11
  %585 = fcmp oeq float %584, %581
  br i1 %585, label %569, label %586

586:                                              ; preds = %573
  call void @__assert_fail(ptr noundef nonnull @.str.25, ptr noundef nonnull @.str.2, i32 noundef 709, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

587:                                              ; preds = %571
  call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.2, i32 noundef 720, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

588:                                              ; preds = %571
  %589 = call noalias dereferenceable_or_null(400) ptr @malloc(i64 noundef 400) #10
  %.not147 = icmp eq ptr %589, null
  br i1 %.not147, label %591, label %.preheader153

.preheader153:                                    ; preds = %588
  %590 = getelementptr inbounds i8, ptr %589, i64 396
  br label %596

591:                                              ; preds = %588
  call void @__assert_fail(ptr noundef nonnull @.str.24, ptr noundef nonnull @.str.2, i32 noundef 722, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

592:                                              ; preds = %596
  %593 = add nuw nsw i64 %.0120167, 1
  %exitcond179.not = icmp eq i64 %593, 100000
  br i1 %exitcond179.not, label %594, label %596, !llvm.loop !20

594:                                              ; preds = %592
  call void @free(ptr noundef nonnull %589) #8
  call void @dsbuffer_free(ptr noundef nonnull %1)
  %595 = call ptr @dsbuffer_new(i64 noundef 100, i1 noundef zeroext false)
  store ptr %595, ptr %1, align 8, !tbaa !5
  %.not148 = icmp eq ptr %595, null
  br i1 %.not148, label %610, label %611

596:                                              ; preds = %.preheader153, %592
  %.0120167 = phi i64 [ 0, %.preheader153 ], [ %593, %592 ]
  %597 = call i32 @rand() #8
  %598 = sitofp i32 %597 to double
  %599 = fmul double %598, 1.000000e+04
  %600 = fdiv double %599, 0x41DFFFFFFFC00000
  %601 = fptosi double %600 to i32
  %602 = sitofp i32 %601 to double
  %603 = fdiv double %602, 1.000000e+02
  %604 = fptrunc double %603 to float
  %605 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_push(ptr noundef %605, float noundef %604)
  %606 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_dump(ptr noundef %606, ptr noundef nonnull %589)
  %607 = load float, ptr %590, align 4, !tbaa !11
  %608 = fcmp oeq float %607, %604
  br i1 %608, label %592, label %609

609:                                              ; preds = %596
  call void @__assert_fail(ptr noundef nonnull @.str.25, ptr noundef nonnull @.str.2, i32 noundef 733, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

610:                                              ; preds = %594
  call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.2, i32 noundef 743, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

611:                                              ; preds = %594
  %612 = call noalias dereferenceable_or_null(400) ptr @malloc(i64 noundef 400) #10
  %.not149 = icmp eq ptr %612, null
  br i1 %.not149, label %614, label %.preheader152

.preheader152:                                    ; preds = %611
  %613 = getelementptr inbounds i8, ptr %612, i64 396
  br label %636

614:                                              ; preds = %611
  call void @__assert_fail(ptr noundef nonnull @.str.24, ptr noundef nonnull @.str.2, i32 noundef 745, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

615:                                              ; preds = %636
  %616 = add nuw nsw i64 %.0119168, 1
  %exitcond180.not = icmp eq i64 %616, 100000
  br i1 %exitcond180.not, label %617, label %636, !llvm.loop !21

617:                                              ; preds = %615
  call void @free(ptr noundef nonnull %612) #8
  call void @dsbuffer_free(ptr noundef nonnull %1)
  %618 = call ptr @dsbuffer_new(i64 noundef 5, i1 noundef zeroext false)
  store ptr %618, ptr %1, align 8, !tbaa !5
  %.not150 = icmp eq ptr %618, null
  br i1 %.not150, label %650, label %.preheader.preheader

.preheader.preheader:                             ; preds = %617
  %619 = load float, ptr @__const.dsbuffer_test.signal3, align 16, !tbaa !11
  call void @dsbuffer_push(ptr noundef nonnull %618, float noundef %619)
  %620 = load ptr, ptr %1, align 8, !tbaa !5
  %621 = load float, ptr getelementptr inbounds (i8, ptr @__const.dsbuffer_test.signal3, i64 4), align 4, !tbaa !11
  call void @dsbuffer_push(ptr noundef %620, float noundef %621)
  %622 = load ptr, ptr %1, align 8, !tbaa !5
  %623 = load float, ptr getelementptr inbounds (i8, ptr @__const.dsbuffer_test.signal3, i64 8), align 8, !tbaa !11
  call void @dsbuffer_push(ptr noundef %622, float noundef %623)
  %624 = load ptr, ptr %1, align 8, !tbaa !5
  %625 = load float, ptr getelementptr inbounds (i8, ptr @__const.dsbuffer_test.signal3, i64 12), align 4, !tbaa !11
  call void @dsbuffer_push(ptr noundef %624, float noundef %625)
  %626 = load ptr, ptr %1, align 8, !tbaa !5
  %627 = load float, ptr getelementptr inbounds (i8, ptr @__const.dsbuffer_test.signal3, i64 16), align 16, !tbaa !11
  call void @dsbuffer_push(ptr noundef %626, float noundef %627)
  %628 = load ptr, ptr %1, align 8, !tbaa !5
  %629 = call float @dsbuffer_mean(ptr noundef %628)
  %630 = fpext float %629 to double
  %631 = load ptr, ptr %1, align 8, !tbaa !5
  %632 = call float @dsbuffer_length(ptr noundef %631)
  %633 = fpext float %632 to double
  %634 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.26, double noundef %630, double noundef %633)
  %635 = call noalias dereferenceable_or_null(20) ptr @malloc(i64 noundef 20) #10
  %.not151 = icmp eq ptr %635, null
  br i1 %.not151, label %651, label %652

636:                                              ; preds = %.preheader152, %615
  %.0119168 = phi i64 [ 0, %.preheader152 ], [ %616, %615 ]
  %637 = call i32 @rand() #8
  %638 = sitofp i32 %637 to double
  %639 = fmul double %638, 1.000000e+04
  %640 = fdiv double %639, 0x41DFFFFFFFC00000
  %641 = fptosi double %640 to i32
  %642 = sitofp i32 %641 to double
  %643 = fdiv double %642, 1.000000e+02
  %644 = fptrunc double %643 to float
  %645 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_push(ptr noundef %645, float noundef %644)
  %646 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_dump(ptr noundef %646, ptr noundef nonnull %612)
  %647 = load float, ptr %613, align 4, !tbaa !11
  %648 = fcmp oeq float %647, %644
  br i1 %648, label %615, label %649

649:                                              ; preds = %636
  call void @__assert_fail(ptr noundef nonnull @.str.25, ptr noundef nonnull @.str.2, i32 noundef 756, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

650:                                              ; preds = %617
  call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.2, i32 noundef 766, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

651:                                              ; preds = %.preheader.preheader
  call void @__assert_fail(ptr noundef nonnull @.str.24, ptr noundef nonnull @.str.2, i32 noundef 774, ptr noundef nonnull @__PRETTY_FUNCTION__.dsbuffer_test) #9
  unreachable

652:                                              ; preds = %.preheader.preheader
  %653 = load ptr, ptr %1, align 8, !tbaa !5
  call void @dsbuffer_normalize_to_unit_length(ptr noundef %653, i1 noundef zeroext true, ptr noundef nonnull %635)
  %654 = load float, ptr %635, align 4, !tbaa !11
  %655 = fpext float %654 to double
  %656 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.27, i64 noundef 0, double noundef %655)
  %657 = getelementptr inbounds i8, ptr %635, i64 4
  %658 = load float, ptr %657, align 4, !tbaa !11
  %659 = fpext float %658 to double
  %660 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.27, i64 noundef 1, double noundef %659)
  %661 = getelementptr inbounds i8, ptr %635, i64 8
  %662 = load float, ptr %661, align 4, !tbaa !11
  %663 = fpext float %662 to double
  %664 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.27, i64 noundef 2, double noundef %663)
  %665 = getelementptr inbounds i8, ptr %635, i64 12
  %666 = load float, ptr %665, align 4, !tbaa !11
  %667 = fpext float %666 to double
  %668 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.27, i64 noundef 3, double noundef %667)
  %669 = getelementptr inbounds i8, ptr %635, i64 16
  %670 = load float, ptr %669, align 4, !tbaa !11
  %671 = fpext float %670 to double
  %672 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.27, i64 noundef 4, double noundef %671)
  call void @free(ptr noundef nonnull %635) #8
  call void @dsbuffer_free(ptr noundef nonnull %1)
  %673 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.28)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %1) #8
  ret void
}

; Function Attrs: nounwind uwtable
declare hidden void @dsbuffer_print_raw(ptr noundef, i1 noundef zeroext) local_unnamed_addr #0

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fabs.f32(float) #7

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

!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 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = distinct !{!13, !10}
!14 = !{!15, !12, i64 0}
!15 = !{!"", !12, i64 0, !12, i64 4}
!16 = !{!15, !12, i64 4}
!17 = distinct !{!17, !10}
!18 = distinct !{!18, !10}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !10}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopRotatePass,LoopSimplifyPass,SROAPass,SimplifyCFGPass,TailCallElimPass