; LLVM IR from jgaeddert/liquid-dsp :: src/equalization/src (equalizer_rrrf)

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @eqrls_rrrf_step(ptr noundef %0, float noundef %1, float noundef %2) #3 {
  %4 = alloca ptr, align 8
  %5 = alloca float, align 4
  %6 = alloca float, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca float, align 4
  %12 = alloca ptr, align 8
  %13 = alloca float, align 4
  %14 = alloca float, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store float %1, ptr %5, align 4, !tbaa !9
  store float %2, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  %15 = load ptr, ptr %4, align 8, !tbaa !5
  %16 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %15, i32 0, i32 0
  %17 = load i32, ptr %16, align 8, !tbaa !11
  store i32 %17, ptr %10, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  %18 = load float, ptr %5, align 4, !tbaa !9
  %19 = load float, ptr %6, align 4, !tbaa !9
  %20 = fsub float %18, %19
  store float %20, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %21 = load ptr, ptr %4, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %21, i32 0, i32 14
  %23 = load ptr, ptr %22, align 8, !tbaa !15
  %24 = call i32 @windowf_read(ptr noundef %23, ptr noundef %12)
  store i32 0, ptr %9, align 4, !tbaa !14
  br label %25

25:                                               ; preds = %69, %3
  %26 = load i32, ptr %9, align 4, !tbaa !14
  %27 = load i32, ptr %10, align 4, !tbaa !14
  %28 = icmp ult i32 %26, %27
  br i1 %28, label %29, label %72

29:                                               ; preds = %25
  %30 = load ptr, ptr %4, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %30, i32 0, i32 9
  %32 = load ptr, ptr %31, align 8, !tbaa !16
  %33 = load i32, ptr %9, align 4, !tbaa !14
  %34 = zext i32 %33 to i64
  %35 = getelementptr inbounds float, ptr %32, i64 %34
  store float 0.000000e+00, ptr %35, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !14
  br label %36

36:                                               ; preds = %65, %29
  %37 = load i32, ptr %8, align 4, !tbaa !14
  %38 = load i32, ptr %10, align 4, !tbaa !14
  %39 = icmp ult i32 %37, %38
  br i1 %39, label %40, label %68

40:                                               ; preds = %36
  %41 = load ptr, ptr %12, align 8, !tbaa !5
  %42 = load i32, ptr %8, align 4, !tbaa !14
  %43 = zext i32 %42 to i64
  %44 = getelementptr inbounds float, ptr %41, i64 %43
  %45 = load float, ptr %44, align 4, !tbaa !9
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %46, i32 0, i32 6
  %48 = load ptr, ptr %47, align 8, !tbaa !17
  %49 = load i32, ptr %8, align 4, !tbaa !14
  %50 = load i32, ptr %10, align 4, !tbaa !14
  %51 = mul i32 %49, %50
  %52 = load i32, ptr %9, align 4, !tbaa !14
  %53 = add i32 %51, %52
  %54 = zext i32 %53 to i64
  %55 = getelementptr inbounds float, ptr %48, i64 %54
  %56 = load float, ptr %55, align 4, !tbaa !9
  %57 = load ptr, ptr %4, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %57, i32 0, i32 9
  %59 = load ptr, ptr %58, align 8, !tbaa !16
  %60 = load i32, ptr %9, align 4, !tbaa !14
  %61 = zext i32 %60 to i64
  %62 = getelementptr inbounds float, ptr %59, i64 %61
  %63 = load float, ptr %62, align 4, !tbaa !9
  %64 = call float @llvm.fmuladd.f32(float %45, float %56, float %63)
  store float %64, ptr %62, align 4, !tbaa !9
  br label %65

65:                                               ; preds = %40
  %66 = load i32, ptr %8, align 4, !tbaa !14
  %67 = add i32 %66, 1
  store i32 %67, ptr %8, align 4, !tbaa !14
  br label %36, !llvm.loop !18

68:                                               ; preds = %36
  br label %69

69:                                               ; preds = %68
  %70 = load i32, ptr %9, align 4, !tbaa !14
  %71 = add i32 %70, 1
  store i32 %71, ptr %9, align 4, !tbaa !14
  br label %25, !llvm.loop !20

72:                                               ; preds = %25
  %73 = load ptr, ptr %4, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %73, i32 0, i32 10
  store float 0.000000e+00, ptr %74, align 8, !tbaa !21
  store i32 0, ptr %9, align 4, !tbaa !14
  br label %75

75:                                               ; preds = %102, %72
  %76 = load i32, ptr %9, align 4, !tbaa !14
  %77 = load i32, ptr %10, align 4, !tbaa !14
  %78 = icmp ult i32 %76, %77
  br i1 %78, label %79, label %105

79:                                               ; preds = %75
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %80 = load ptr, ptr %4, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %80, i32 0, i32 9
  %82 = load ptr, ptr %81, align 8, !tbaa !16
  %83 = load i32, ptr %9, align 4, !tbaa !14
  %84 = zext i32 %83 to i64
  %85 = getelementptr inbounds float, ptr %82, i64 %84
  %86 = load float, ptr %85, align 4, !tbaa !9
  %87 = fpext float %86 to double
  %88 = load ptr, ptr %12, align 8, !tbaa !5
  %89 = load i32, ptr %9, align 4, !tbaa !14
  %90 = zext i32 %89 to i64
  %91 = getelementptr inbounds float, ptr %88, i64 %90
  %92 = load float, ptr %91, align 4, !tbaa !9
  %93 = fpext float %92 to double
  %94 = fmul double %87, %93
  %95 = fmul double %87, -0.000000e+00
  %96 = fptrunc double %94 to float
  store float %96, ptr %13, align 4, !tbaa !9
  %97 = load float, ptr %13, align 4, !tbaa !9
  %98 = load ptr, ptr %4, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %98, i32 0, i32 10
  %100 = load float, ptr %99, align 8, !tbaa !21
  %101 = fadd float %100, %97
  store float %101, ptr %99, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  br label %102

102:                                              ; preds = %79
  %103 = load i32, ptr %9, align 4, !tbaa !14
  %104 = add i32 %103, 1
  store i32 %104, ptr %9, align 4, !tbaa !14
  br label %75, !llvm.loop !22

105:                                              ; preds = %75
  %106 = load ptr, ptr %4, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %106, i32 0, i32 1
  %108 = load float, ptr %107, align 4, !tbaa !23
  %109 = load ptr, ptr %4, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %109, i32 0, i32 10
  %111 = load float, ptr %110, align 8, !tbaa !21
  %112 = fadd float %111, %108
  store float %112, ptr %110, align 8, !tbaa !21
  store i32 0, ptr %8, align 4, !tbaa !14
  br label %113

113:                                              ; preds = %174, %105
  %114 = load i32, ptr %8, align 4, !tbaa !14
  %115 = load i32, ptr %10, align 4, !tbaa !14
  %116 = icmp ult i32 %114, %115
  br i1 %116, label %117, label %177

117:                                              ; preds = %113
  %118 = load ptr, ptr %4, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %118, i32 0, i32 8
  %120 = load ptr, ptr %119, align 8, !tbaa !24
  %121 = load i32, ptr %8, align 4, !tbaa !14
  %122 = zext i32 %121 to i64
  %123 = getelementptr inbounds float, ptr %120, i64 %122
  store float 0.000000e+00, ptr %123, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !14
  br label %124

124:                                              ; preds = %159, %117
  %125 = load i32, ptr %9, align 4, !tbaa !14
  %126 = load i32, ptr %10, align 4, !tbaa !14
  %127 = icmp ult i32 %125, %126
  br i1 %127, label %128, label %162

128:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  %129 = load ptr, ptr %4, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %129, i32 0, i32 6
  %131 = load ptr, ptr %130, align 8, !tbaa !17
  %132 = load i32, ptr %8, align 4, !tbaa !14
  %133 = load i32, ptr %10, align 4, !tbaa !14
  %134 = mul i32 %132, %133
  %135 = load i32, ptr %9, align 4, !tbaa !14
  %136 = add i32 %134, %135
  %137 = zext i32 %136 to i64
  %138 = getelementptr inbounds float, ptr %131, i64 %137
  %139 = load float, ptr %138, align 4, !tbaa !9
  %140 = fpext float %139 to double
  %141 = load ptr, ptr %12, align 8, !tbaa !5
  %142 = load i32, ptr %9, align 4, !tbaa !14
  %143 = zext i32 %142 to i64
  %144 = getelementptr inbounds float, ptr %141, i64 %143
  %145 = load float, ptr %144, align 4, !tbaa !9
  %146 = fpext float %145 to double
  %147 = fmul double %140, %146
  %148 = fmul double %140, -0.000000e+00
  %149 = fptrunc double %147 to float
  store float %149, ptr %14, align 4, !tbaa !9
  %150 = load float, ptr %14, align 4, !tbaa !9
  %151 = load ptr, ptr %4, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %151, i32 0, i32 8
  %153 = load ptr, ptr %152, align 8, !tbaa !24
  %154 = load i32, ptr %8, align 4, !tbaa !14
  %155 = zext i32 %154 to i64
  %156 = getelementptr inbounds float, ptr %153, i64 %155
  %157 = load float, ptr %156, align 4, !tbaa !9
  %158 = fadd float %157, %150
  store float %158, ptr %156, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  br label %159

159:                                              ; preds = %128
  %160 = load i32, ptr %9, align 4, !tbaa !14
  %161 = add i32 %160, 1
  store i32 %161, ptr %9, align 4, !tbaa !14
  br label %124, !llvm.loop !25

162:                                              ; preds = %124
  %163 = load ptr, ptr %4, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %163, i32 0, i32 10
  %165 = load float, ptr %164, align 8, !tbaa !21
  %166 = load ptr, ptr %4, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %166, i32 0, i32 8
  %168 = load ptr, ptr %167, align 8, !tbaa !24
  %169 = load i32, ptr %8, align 4, !tbaa !14
  %170 = zext i32 %169 to i64
  %171 = getelementptr inbounds float, ptr %168, i64 %170
  %172 = load float, ptr %171, align 4, !tbaa !9
  %173 = fdiv float %172, %165
  store float %173, ptr %171, align 4, !tbaa !9
  br label %174

174:                                              ; preds = %162
  %175 = load i32, ptr %8, align 4, !tbaa !14
  %176 = add i32 %175, 1
  store i32 %176, ptr %8, align 4, !tbaa !14
  br label %113, !llvm.loop !26

177:                                              ; preds = %113
  store i32 0, ptr %8, align 4, !tbaa !14
  br label %178

178:                                              ; preds = %219, %177
  %179 = load i32, ptr %8, align 4, !tbaa !14
  %180 = load i32, ptr %10, align 4, !tbaa !14
  %181 = icmp ult i32 %179, %180
  br i1 %181, label %182, label %222

182:                                              ; preds = %178
  store i32 0, ptr %9, align 4, !tbaa !14
  br label %183

183:                                              ; preds = %215, %182
  %184 = load i32, ptr %9, align 4, !tbaa !14
  %185 = load i32, ptr %10, align 4, !tbaa !14
  %186 = icmp ult i32 %184, %185
  br i1 %186, label %187, label %218

187:                                              ; preds = %183
  %188 = load ptr, ptr %4, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %188, i32 0, i32 8
  %190 = load ptr, ptr %189, align 8, !tbaa !24
  %191 = load i32, ptr %8, align 4, !tbaa !14
  %192 = zext i32 %191 to i64
  %193 = getelementptr inbounds float, ptr %190, i64 %192
  %194 = load float, ptr %193, align 4, !tbaa !9
  %195 = load ptr, ptr %12, align 8, !tbaa !5
  %196 = load i32, ptr %9, align 4, !tbaa !14
  %197 = zext i32 %196 to i64
  %198 = getelementptr inbounds float, ptr %195, i64 %197
  %199 = load float, ptr %198, align 4, !tbaa !9
  %200 = fmul float %194, %199
  %201 = load ptr, ptr %4, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %201, i32 0, i32 1
  %203 = load float, ptr %202, align 4, !tbaa !23
  %204 = fdiv float %200, %203
  %205 = load ptr, ptr %4, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %205, i32 0, i32 11
  %207 = load ptr, ptr %206, align 8, !tbaa !27
  %208 = load i32, ptr %8, align 4, !tbaa !14
  %209 = load i32, ptr %10, align 4, !tbaa !14
  %210 = mul i32 %208, %209
  %211 = load i32, ptr %9, align 4, !tbaa !14
  %212 = add i32 %210, %211
  %213 = zext i32 %212 to i64
  %214 = getelementptr inbounds float, ptr %207, i64 %213
  store float %204, ptr %214, align 4, !tbaa !9
  br label %215

215:                                              ; preds = %187
  %216 = load i32, ptr %9, align 4, !tbaa !14
  %217 = add i32 %216, 1
  store i32 %217, ptr %9, align 4, !tbaa !14
  br label %183, !llvm.loop !28

218:                                              ; preds = %183
  br label %219

219:                                              ; preds = %218
  %220 = load i32, ptr %8, align 4, !tbaa !14
  %221 = add i32 %220, 1
  store i32 %221, ptr %8, align 4, !tbaa !14
  br label %178, !llvm.loop !29

222:                                              ; preds = %178
  %223 = load ptr, ptr %4, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %223, i32 0, i32 11
  %225 = load ptr, ptr %224, align 8, !tbaa !27
  %226 = load i32, ptr %10, align 4, !tbaa !14
  %227 = load i32, ptr %10, align 4, !tbaa !14
  %228 = load ptr, ptr %4, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %228, i32 0, i32 6
  %230 = load ptr, ptr %229, align 8, !tbaa !17
  %231 = load i32, ptr %10, align 4, !tbaa !14
  %232 = load i32, ptr %10, align 4, !tbaa !14
  %233 = load ptr, ptr %4, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %233, i32 0, i32 12
  %235 = load ptr, ptr %234, align 8, !tbaa !30
  %236 = load i32, ptr %10, align 4, !tbaa !14
  %237 = load i32, ptr %10, align 4, !tbaa !14
  %238 = call i32 @matrixf_mul(ptr noundef %225, i32 noundef %226, i32 noundef %227, ptr noundef %230, i32 noundef %231, i32 noundef %232, ptr noundef %235, i32 noundef %236, i32 noundef %237)
  store i32 0, ptr %7, align 4, !tbaa !14
  br label %239

239:                                              ; preds = %271, %222
  %240 = load i32, ptr %7, align 4, !tbaa !14
  %241 = load i32, ptr %10, align 4, !tbaa !14
  %242 = load i32, ptr %10, align 4, !tbaa !14
  %243 = mul i32 %241, %242
  %244 = icmp ult i32 %240, %243
  br i1 %244, label %245, label %274

245:                                              ; preds = %239
  %246 = load ptr, ptr %4, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %246, i32 0, i32 6
  %248 = load ptr, ptr %247, align 8, !tbaa !17
  %249 = load i32, ptr %7, align 4, !tbaa !14
  %250 = zext i32 %249 to i64
  %251 = getelementptr inbounds float, ptr %248, i64 %250
  %252 = load float, ptr %251, align 4, !tbaa !9
  %253 = load ptr, ptr %4, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %253, i32 0, i32 1
  %255 = load float, ptr %254, align 4, !tbaa !23
  %256 = fdiv float %252, %255
  %257 = load ptr, ptr %4, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %257, i32 0, i32 12
  %259 = load ptr, ptr %258, align 8, !tbaa !30
  %260 = load i32, ptr %7, align 4, !tbaa !14
  %261 = zext i32 %260 to i64
  %262 = getelementptr inbounds float, ptr %259, i64 %261
  %263 = load float, ptr %262, align 4, !tbaa !9
  %264 = fsub float %256, %263
  %265 = load ptr, ptr %4, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %265, i32 0, i32 7
  %267 = load ptr, ptr %266, align 8, !tbaa !31
  %268 = load i32, ptr %7, align 4, !tbaa !14
  %269 = zext i32 %268 to i64
  %270 = getelementptr inbounds float, ptr %267, i64 %269
  store float %264, ptr %270, align 4, !tbaa !9
  br label %271

271:                                              ; preds = %245
  %272 = load i32, ptr %7, align 4, !tbaa !14
  %273 = add i32 %272, 1
  store i32 %273, ptr %7, align 4, !tbaa !14
  br label %239, !llvm.loop !32

274:                                              ; preds = %239
  store i32 0, ptr %7, align 4, !tbaa !14
  br label %275

275:                                              ; preds = %302, %274
  %276 = load i32, ptr %7, align 4, !tbaa !14
  %277 = load i32, ptr %10, align 4, !tbaa !14
  %278 = icmp ult i32 %276, %277
  br i1 %278, label %279, label %305

279:                                              ; preds = %275
  %280 = load ptr, ptr %4, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %280, i32 0, i32 4
  %282 = load ptr, ptr %281, align 8, !tbaa !33
  %283 = load i32, ptr %7, align 4, !tbaa !14
  %284 = zext i32 %283 to i64
  %285 = getelementptr inbounds float, ptr %282, i64 %284
  %286 = load float, ptr %285, align 4, !tbaa !9
  %287 = load float, ptr %11, align 4, !tbaa !9
  %288 = load ptr, ptr %4, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %288, i32 0, i32 8
  %290 = load ptr, ptr %289, align 8, !tbaa !24
  %291 = load i32, ptr %7, align 4, !tbaa !14
  %292 = zext i32 %291 to i64
  %293 = getelementptr inbounds float, ptr %290, i64 %292
  %294 = load float, ptr %293, align 4, !tbaa !9
  %295 = call float @llvm.fmuladd.f32(float %287, float %294, float %286)
  %296 = load ptr, ptr %4, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %296, i32 0, i32 5
  %298 = load ptr, ptr %297, align 8, !tbaa !34
  %299 = load i32, ptr %7, align 4, !tbaa !14
  %300 = zext i32 %299 to i64
  %301 = getelementptr inbounds float, ptr %298, i64 %300
  store float %295, ptr %301, align 4, !tbaa !9
  br label %302

302:                                              ; preds = %279
  %303 = load i32, ptr %7, align 4, !tbaa !14
  %304 = add i32 %303, 1
  store i32 %304, ptr %7, align 4, !tbaa !14
  br label %275, !llvm.loop !35

305:                                              ; preds = %275
  %306 = load ptr, ptr %4, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %306, i32 0, i32 4
  %308 = load ptr, ptr %307, align 8, !tbaa !33
  %309 = load ptr, ptr %4, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %309, i32 0, i32 5
  %311 = load ptr, ptr %310, align 8, !tbaa !34
  %312 = load i32, ptr %10, align 4, !tbaa !14
  %313 = zext i32 %312 to i64
  %314 = mul i64 %313, 4
  call void @llvm.memmove.p0.p0.i64(ptr align 4 %308, ptr align 4 %311, i64 %314, i1 false)
  %315 = load ptr, ptr %4, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %315, i32 0, i32 6
  %317 = load ptr, ptr %316, align 8, !tbaa !17
  %318 = load ptr, ptr %4, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.eqrls_rrrf_s, ptr %318, i32 0, i32 7
  %320 = load ptr, ptr %319, align 8, !tbaa !31
  %321 = load i32, ptr %10, align 4, !tbaa !14
  %322 = load i32, ptr %10, align 4, !tbaa !14
  %323 = mul i32 %321, %322
  %324 = zext i32 %323 to i64
  %325 = mul i64 %324, 4
  call void @llvm.memmove.p0.p0.i64(ptr align 4 %317, ptr align 4 %320, i64 %325, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  ret i32 0
}

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

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

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

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

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @eqrls_rrrf_step(ptr nocapture noundef %0, float noundef %1, float noundef %2) local_unnamed_addr #3 {
  %4 = alloca ptr, align 8
  %5 = load i32, ptr %0, align 8, !tbaa !5
  %6 = fsub float %1, %2
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #6
  %7 = getelementptr inbounds i8, ptr %0, i64 104
  %8 = load ptr, ptr %7, align 8, !tbaa !12
  %9 = call i32 @windowf_read(ptr noundef %8, ptr noundef nonnull %4) #6
  %.not = icmp eq i32 %5, 0
  br i1 %.not, label %._crit_edge.thread, label %.lr.ph

._crit_edge.thread:                               ; preds = %3
  %10 = getelementptr inbounds i8, ptr %0, i64 72
  br label %._crit_edge114.thread

.lr.ph:                                           ; preds = %3
  %11 = getelementptr inbounds i8, ptr %0, i64 64
  %12 = load ptr, ptr %11, align 8, !tbaa !13
  %13 = load ptr, ptr %4, align 8, !tbaa !14
  %14 = getelementptr inbounds i8, ptr %0, i64 40
  %15 = load ptr, ptr %14, align 8, !tbaa !15
  %wide.trip.count139 = zext i32 %5 to i64
  %16 = add nsw i64 %wide.trip.count139, -1
  %xtraiter = and i64 %wide.trip.count139, 1
  %17 = icmp eq i64 %16, 0
  %unroll_iter = and i64 %wide.trip.count139, 4294967294
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %18

18:                                               ; preds = %.lr.ph, %49
  %indvars.iv136 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next137, %49 ]
  %19 = getelementptr inbounds float, ptr %12, i64 %indvars.iv136
  store float 0.000000e+00, ptr %19, align 4, !tbaa !16
  %20 = trunc nuw i64 %indvars.iv136 to i32
  br i1 %17, label %.unr-lcssa, label %.new

.new:                                             ; preds = %18, %.new
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %.new ], [ 0, %18 ]
  %21 = phi float [ %39, %.new ], [ 0.000000e+00, %18 ]
  %niter = phi i64 [ %niter.next.1, %.new ], [ 0, %18 ]
  %22 = getelementptr inbounds float, ptr %13, i64 %indvars.iv
  %23 = load float, ptr %22, align 4, !tbaa !16
  %24 = trunc nuw i64 %indvars.iv to i32
  %25 = mul i32 %5, %24
  %26 = add i32 %25, %20
  %27 = zext i32 %26 to i64
  %28 = getelementptr inbounds float, ptr %15, i64 %27
  %29 = load float, ptr %28, align 4, !tbaa !16
  %30 = call float @llvm.fmuladd.f32(float %23, float %29, float %21)
  store float %30, ptr %19, align 4, !tbaa !16
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %31 = getelementptr inbounds float, ptr %13, i64 %indvars.iv.next
  %32 = load float, ptr %31, align 4, !tbaa !16
  %33 = trunc nuw i64 %indvars.iv.next to i32
  %34 = mul i32 %5, %33
  %35 = add i32 %34, %20
  %36 = zext i32 %35 to i64
  %37 = getelementptr inbounds float, ptr %15, i64 %36
  %38 = load float, ptr %37, align 4, !tbaa !16
  %39 = call float @llvm.fmuladd.f32(float %32, float %38, float %30)
  store float %39, ptr %19, align 4, !tbaa !16
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.unr-lcssa, label %.new, !llvm.loop !17

.unr-lcssa:                                       ; preds = %.new, %18
  %indvars.iv.unr = phi i64 [ 0, %18 ], [ %indvars.iv.next.1, %.new ]
  %.unr = phi float [ 0.000000e+00, %18 ], [ %39, %.new ]
  br i1 %lcmp.mod.not, label %49, label %.epilog-lcssa

.epilog-lcssa:                                    ; preds = %.unr-lcssa
  %40 = getelementptr inbounds float, ptr %13, i64 %indvars.iv.unr
  %41 = load float, ptr %40, align 4, !tbaa !16
  %42 = trunc nuw i64 %indvars.iv.unr to i32
  %43 = mul i32 %5, %42
  %44 = add i32 %43, %20
  %45 = zext i32 %44 to i64
  %46 = getelementptr inbounds float, ptr %15, i64 %45
  %47 = load float, ptr %46, align 4, !tbaa !16
  %48 = call float @llvm.fmuladd.f32(float %41, float %47, float %.unr)
  store float %48, ptr %19, align 4, !tbaa !16
  br label %49

49:                                               ; preds = %.unr-lcssa, %.epilog-lcssa
  %indvars.iv.next137 = add nuw nsw i64 %indvars.iv136, 1
  %exitcond140.not = icmp eq i64 %indvars.iv.next137, %wide.trip.count139
  br i1 %exitcond140.not, label %._crit_edge, label %18, !llvm.loop !19

._crit_edge:                                      ; preds = %49
  %50 = getelementptr inbounds i8, ptr %0, i64 72
  store float 0.000000e+00, ptr %50, align 8, !tbaa !20
  br i1 %.not, label %._crit_edge114.thread, label %.lr.ph113

.lr.ph113:                                        ; preds = %._crit_edge
  %51 = getelementptr inbounds i8, ptr %0, i64 64
  %52 = load ptr, ptr %51, align 8, !tbaa !13
  %53 = load ptr, ptr %4, align 8, !tbaa !14
  %xtraiter252 = and i64 %wide.trip.count139, 3
  %54 = icmp ult i32 %5, 4
  br i1 %54, label %._crit_edge114.unr-lcssa, label %.lr.ph113.new

.lr.ph113.new:                                    ; preds = %.lr.ph113
  %unroll_iter256 = and i64 %wide.trip.count139, 4294967292
  br label %55

55:                                               ; preds = %55, %.lr.ph113.new
  %indvars.iv141 = phi i64 [ 0, %.lr.ph113.new ], [ %indvars.iv.next142.3, %55 ]
  %56 = phi float [ 0.000000e+00, %.lr.ph113.new ], [ %80, %55 ]
  %niter257 = phi i64 [ 0, %.lr.ph113.new ], [ %niter257.next.3, %55 ]
  %57 = getelementptr inbounds float, ptr %52, i64 %indvars.iv141
  %58 = load float, ptr %57, align 4, !tbaa !16
  %59 = getelementptr inbounds float, ptr %53, i64 %indvars.iv141
  %60 = load float, ptr %59, align 4, !tbaa !16
  %61 = fmul float %58, %60
  %62 = fadd float %56, %61
  store float %62, ptr %50, align 8, !tbaa !20
  %indvars.iv.next142 = or disjoint i64 %indvars.iv141, 1
  %63 = getelementptr inbounds float, ptr %52, i64 %indvars.iv.next142
  %64 = load float, ptr %63, align 4, !tbaa !16
  %65 = getelementptr inbounds float, ptr %53, i64 %indvars.iv.next142
  %66 = load float, ptr %65, align 4, !tbaa !16
  %67 = fmul float %64, %66
  %68 = fadd float %62, %67
  store float %68, ptr %50, align 8, !tbaa !20
  %indvars.iv.next142.1 = or disjoint i64 %indvars.iv141, 2
  %69 = getelementptr inbounds float, ptr %52, i64 %indvars.iv.next142.1
  %70 = load float, ptr %69, align 4, !tbaa !16
  %71 = getelementptr inbounds float, ptr %53, i64 %indvars.iv.next142.1
  %72 = load float, ptr %71, align 4, !tbaa !16
  %73 = fmul float %70, %72
  %74 = fadd float %68, %73
  store float %74, ptr %50, align 8, !tbaa !20
  %indvars.iv.next142.2 = or disjoint i64 %indvars.iv141, 3
  %75 = getelementptr inbounds float, ptr %52, i64 %indvars.iv.next142.2
  %76 = load float, ptr %75, align 4, !tbaa !16
  %77 = getelementptr inbounds float, ptr %53, i64 %indvars.iv.next142.2
  %78 = load float, ptr %77, align 4, !tbaa !16
  %79 = fmul float %76, %78
  %80 = fadd float %74, %79
  store float %80, ptr %50, align 8, !tbaa !20
  %indvars.iv.next142.3 = add nuw nsw i64 %indvars.iv141, 4
  %niter257.next.3 = add nuw i64 %niter257, 4
  %niter257.ncmp.3 = icmp eq i64 %niter257.next.3, %unroll_iter256
  br i1 %niter257.ncmp.3, label %._crit_edge114.unr-lcssa, label %55, !llvm.loop !21

._crit_edge114.thread:                            ; preds = %._crit_edge.thread, %._crit_edge
  %.ph = phi ptr [ %10, %._crit_edge.thread ], [ %50, %._crit_edge ]
  %81 = getelementptr inbounds i8, ptr %0, i64 4
  %82 = load float, ptr %81, align 4, !tbaa !22
  %83 = fadd float %82, 0.000000e+00
  store float %83, ptr %.ph, align 8, !tbaa !20
  br label %.preheader108.._crit_edge123_crit_edge

._crit_edge114.unr-lcssa:                         ; preds = %55, %.lr.ph113
  %.lcssa250.ph = phi float [ poison, %.lr.ph113 ], [ %80, %55 ]
  %indvars.iv141.unr = phi i64 [ 0, %.lr.ph113 ], [ %indvars.iv.next142.3, %55 ]
  %.unr253 = phi float [ 0.000000e+00, %.lr.ph113 ], [ %80, %55 ]
  %lcmp.mod254.not = icmp eq i64 %xtraiter252, 0
  br i1 %lcmp.mod254.not, label %._crit_edge114, label %.epil.preheader251

.epil.preheader251:                               ; preds = %._crit_edge114.unr-lcssa, %.epil.preheader251
  %indvars.iv141.epil = phi i64 [ %indvars.iv.next142.epil, %.epil.preheader251 ], [ %indvars.iv141.unr, %._crit_edge114.unr-lcssa ]
  %84 = phi float [ %90, %.epil.preheader251 ], [ %.unr253, %._crit_edge114.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader251 ], [ 0, %._crit_edge114.unr-lcssa ]
  %85 = getelementptr inbounds float, ptr %52, i64 %indvars.iv141.epil
  %86 = load float, ptr %85, align 4, !tbaa !16
  %87 = getelementptr inbounds float, ptr %53, i64 %indvars.iv141.epil
  %88 = load float, ptr %87, align 4, !tbaa !16
  %89 = fmul float %86, %88
  %90 = fadd float %84, %89
  store float %90, ptr %50, align 8, !tbaa !20
  %indvars.iv.next142.epil = add nuw nsw i64 %indvars.iv141.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter252
  br i1 %epil.iter.cmp.not, label %._crit_edge114, label %.epil.preheader251, !llvm.loop !23

._crit_edge114:                                   ; preds = %.epil.preheader251, %._crit_edge114.unr-lcssa
  %.lcssa250 = phi float [ %.lcssa250.ph, %._crit_edge114.unr-lcssa ], [ %90, %.epil.preheader251 ]
  %91 = getelementptr inbounds i8, ptr %0, i64 4
  %92 = load float, ptr %91, align 4, !tbaa !22
  %93 = fadd float %92, %.lcssa250
  store float %93, ptr %50, align 8, !tbaa !20
  br i1 %.not, label %.preheader108.._crit_edge123_crit_edge, label %.lr.ph120

.lr.ph120:                                        ; preds = %._crit_edge114
  %94 = getelementptr inbounds i8, ptr %0, i64 56
  %95 = load ptr, ptr %94, align 8, !tbaa !25
  %96 = getelementptr inbounds i8, ptr %0, i64 40
  %97 = load ptr, ptr %96, align 8, !tbaa !15
  %98 = load ptr, ptr %4, align 8, !tbaa !14
  %wide.trip.count154 = zext i32 %5 to i64
  %xtraiter261 = and i64 %wide.trip.count139, 1
  %99 = icmp eq i64 %16, 0
  %unroll_iter267 = and i64 %wide.trip.count139, 4294967294
  %lcmp.mod264.not = icmp eq i64 %xtraiter261, 0
  br label %111

.preheader108:                                    ; preds = %143
  br i1 %.not, label %.preheader108.._crit_edge123_crit_edge, label %.preheader107.lr.ph

.preheader108.._crit_edge123_crit_edge:           ; preds = %._crit_edge114, %._crit_edge114.thread, %.preheader108
  %100 = phi ptr [ %91, %.preheader108 ], [ %91, %._crit_edge114 ], [ %81, %._crit_edge114.thread ]
  %.phi.trans.insert = getelementptr inbounds i8, ptr %0, i64 80
  %.pre = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !26
  br label %._crit_edge123

.preheader107.lr.ph:                              ; preds = %.preheader108
  %101 = getelementptr inbounds i8, ptr %0, i64 56
  %102 = load ptr, ptr %101, align 8, !tbaa !25
  %103 = load ptr, ptr %4, align 8, !tbaa !14
  %104 = getelementptr inbounds i8, ptr %0, i64 80
  %105 = load ptr, ptr %104, align 8, !tbaa !26
  %wide.trip.count164 = zext i32 %5 to i64
  %106 = add nsw i64 %wide.trip.count139, -1
  %107 = shl nuw nsw i64 %wide.trip.count139, 2
  %scevgep = getelementptr i8, ptr %102, i64 %107
  %scevgep185 = getelementptr i8, ptr %105, i64 %107
  %scevgep187 = getelementptr i8, ptr %103, i64 %107
  %scevgep188 = getelementptr i8, ptr %0, i64 8
  %min.iters.check = icmp ult i32 %5, 4
  %108 = trunc i64 %106 to i32
  %109 = icmp ugt i64 %106, 4294967295
  %n.vec = and i64 %wide.trip.count139, 4294967292
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count139
  %xtraiter269 = and i64 %wide.trip.count164, 1
  %lcmp.mod270.not = icmp eq i64 %xtraiter269, 0
  %110 = add nsw i64 %wide.trip.count164, -1
  br label %.preheader107

111:                                              ; preds = %.lr.ph120, %143
  %indvars.iv151 = phi i64 [ 0, %.lr.ph120 ], [ %indvars.iv.next152, %143 ]
  %112 = getelementptr inbounds float, ptr %95, i64 %indvars.iv151
  store float 0.000000e+00, ptr %112, align 4, !tbaa !16
  %113 = trunc nuw i64 %indvars.iv151 to i32
  %114 = mul i32 %5, %113
  br i1 %99, label %.unr-lcssa259, label %.new258

.new258:                                          ; preds = %111, %.new258
  %indvars.iv146 = phi i64 [ %indvars.iv.next147.1, %.new258 ], [ 0, %111 ]
  %115 = phi float [ %133, %.new258 ], [ 0.000000e+00, %111 ]
  %niter268 = phi i64 [ %niter268.next.1, %.new258 ], [ 0, %111 ]
  %116 = trunc nuw i64 %indvars.iv146 to i32
  %117 = add i32 %114, %116
  %118 = zext i32 %117 to i64
  %119 = getelementptr inbounds float, ptr %97, i64 %118
  %120 = load float, ptr %119, align 4, !tbaa !16
  %121 = getelementptr inbounds float, ptr %98, i64 %indvars.iv146
  %122 = load float, ptr %121, align 4, !tbaa !16
  %123 = fmul float %120, %122
  %124 = fadd float %115, %123
  store float %124, ptr %112, align 4, !tbaa !16
  %indvars.iv.next147 = or disjoint i64 %indvars.iv146, 1
  %125 = trunc nuw i64 %indvars.iv.next147 to i32
  %126 = add i32 %114, %125
  %127 = zext i32 %126 to i64
  %128 = getelementptr inbounds float, ptr %97, i64 %127
  %129 = load float, ptr %128, align 4, !tbaa !16
  %130 = getelementptr inbounds float, ptr %98, i64 %indvars.iv.next147
  %131 = load float, ptr %130, align 4, !tbaa !16
  %132 = fmul float %129, %131
  %133 = fadd float %124, %132
  store float %133, ptr %112, align 4, !tbaa !16
  %indvars.iv.next147.1 = add nuw nsw i64 %indvars.iv146, 2
  %niter268.next.1 = add i64 %niter268, 2
  %niter268.ncmp.1 = icmp eq i64 %niter268.next.1, %unroll_iter267
  br i1 %niter268.ncmp.1, label %.unr-lcssa259, label %.new258, !llvm.loop !27

.unr-lcssa259:                                    ; preds = %.new258, %111
  %.lcssa.ph = phi float [ poison, %111 ], [ %133, %.new258 ]
  %indvars.iv146.unr = phi i64 [ 0, %111 ], [ %indvars.iv.next147.1, %.new258 ]
  %.unr263 = phi float [ 0.000000e+00, %111 ], [ %133, %.new258 ]
  br i1 %lcmp.mod264.not, label %143, label %.epilog-lcssa265

.epilog-lcssa265:                                 ; preds = %.unr-lcssa259
  %134 = trunc nuw i64 %indvars.iv146.unr to i32
  %135 = add i32 %114, %134
  %136 = zext i32 %135 to i64
  %137 = getelementptr inbounds float, ptr %97, i64 %136
  %138 = load float, ptr %137, align 4, !tbaa !16
  %139 = getelementptr inbounds float, ptr %98, i64 %indvars.iv146.unr
  %140 = load float, ptr %139, align 4, !tbaa !16
  %141 = fmul float %138, %140
  %142 = fadd float %.unr263, %141
  store float %142, ptr %112, align 4, !tbaa !16
  br label %143

143:                                              ; preds = %.unr-lcssa259, %.epilog-lcssa265
  %.lcssa = phi float [ %.lcssa.ph, %.unr-lcssa259 ], [ %142, %.epilog-lcssa265 ]
  %144 = load float, ptr %50, align 8, !tbaa !20
  %145 = fdiv float %.lcssa, %144
  store float %145, ptr %112, align 4, !tbaa !16
  %indvars.iv.next152 = add nuw nsw i64 %indvars.iv151, 1
  %exitcond155.not = icmp eq i64 %indvars.iv.next152, %wide.trip.count154
  br i1 %exitcond155.not, label %.preheader108, label %111, !llvm.loop !28

.preheader107:                                    ; preds = %.preheader107.lr.ph, %.loopexit
  %indvars.iv161 = phi i64 [ 0, %.preheader107.lr.ph ], [ %indvars.iv.next162, %.loopexit ]
  %146 = trunc i64 %indvars.iv161 to i32
  %147 = mul i32 %5, %146
  %148 = zext i32 %147 to i64
  %149 = shl nuw nsw i64 %148, 2
  %scevgep184 = getelementptr i8, ptr %105, i64 %149
  %scevgep186 = getelementptr i8, ptr %scevgep185, i64 %149
  %150 = getelementptr inbounds float, ptr %102, i64 %indvars.iv161
  %151 = trunc nuw i64 %indvars.iv161 to i32
  %152 = mul i32 %5, %151
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.preheader107
  %153 = trunc i64 %indvars.iv161 to i32
  %154 = mul i32 %5, %153
  %155 = xor i32 %154, -1
  %156 = icmp ult i32 %155, %108
  %157 = or i1 %156, %109
  br i1 %157, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %vector.scevcheck
  %bound0 = icmp ult ptr %102, %scevgep186
  %bound1 = icmp ult ptr %scevgep184, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  %bound0189 = icmp ult ptr %103, %scevgep186
  %bound1190 = icmp ult ptr %scevgep184, %scevgep187
  %found.conflict191 = and i1 %bound0189, %bound1190
  %conflict.rdx = or i1 %found.conflict, %found.conflict191
  %bound0192 = icmp ult ptr %91, %scevgep186
  %bound1193 = icmp ult ptr %scevgep184, %scevgep188
  %found.conflict194 = and i1 %bound0192, %bound1193
  %conflict.rdx195 = or i1 %conflict.rdx, %found.conflict194
  br i1 %conflict.rdx195, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %158 = load float, ptr %150, align 4, !tbaa !16, !alias.scope !29, !noalias !32
  %broadcast.splatinsert = insertelement <4 x float> poison, float %158, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %159 = load float, ptr %91, align 4, !tbaa !22, !alias.scope !34, !noalias !32
  %broadcast.splatinsert196 = insertelement <4 x float> poison, float %159, i64 0
  %broadcast.splat197 = shufflevector <4 x float> %broadcast.splatinsert196, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %160 = trunc i64 %index to i32
  %161 = getelementptr inbounds float, ptr %103, i64 %index
  %wide.load = load <4 x float>, ptr %161, align 4, !tbaa !16, !alias.scope !36, !noalias !32
  %162 = fmul <4 x float> %broadcast.splat, %wide.load
  %163 = fdiv <4 x float> %162, %broadcast.splat197
  %164 = add i32 %152, %160
  %165 = zext i32 %164 to i64
  %166 = getelementptr inbounds float, ptr %105, i64 %165
  store <4 x float> %163, ptr %166, align 4, !tbaa !16, !alias.scope !32
  %index.next = add nuw i64 %index, 4
  %167 = icmp eq i64 %index.next, %n.vec
  br i1 %167, label %middle.block, label %vector.body, !llvm.loop !38

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %.loopexit, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %vector.scevcheck, %.preheader107
  %indvars.iv156.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %vector.scevcheck ], [ 0, %.preheader107 ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod270.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %168 = load float, ptr %150, align 4, !tbaa !16
  %169 = getelementptr inbounds float, ptr %103, i64 %indvars.iv156.ph
  %170 = load float, ptr %169, align 4, !tbaa !16
  %171 = fmul float %168, %170
  %172 = load float, ptr %91, align 4, !tbaa !22
  %173 = fdiv float %171, %172
  %174 = trunc nuw i64 %indvars.iv156.ph to i32
  %175 = add i32 %152, %174
  %176 = zext i32 %175 to i64
  %177 = getelementptr inbounds float, ptr %105, i64 %176
  store float %173, ptr %177, align 4, !tbaa !16
  %indvars.iv.next157.prol = or disjoint i64 %indvars.iv156.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv156.unr = phi i64 [ %indvars.iv156.ph, %scalar.ph.preheader ], [ %indvars.iv.next157.prol, %scalar.ph.prol ]
  %178 = icmp eq i64 %indvars.iv156.ph, %110
  br i1 %178, label %.loopexit, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv156 = phi i64 [ %indvars.iv.next157.1, %scalar.ph ], [ %indvars.iv156.unr, %scalar.ph.prol.loopexit ]
  %179 = load float, ptr %150, align 4, !tbaa !16
  %180 = getelementptr inbounds float, ptr %103, i64 %indvars.iv156
  %181 = load float, ptr %180, align 4, !tbaa !16
  %182 = fmul float %179, %181
  %183 = load float, ptr %91, align 4, !tbaa !22
  %184 = fdiv float %182, %183
  %185 = trunc nuw i64 %indvars.iv156 to i32
  %186 = add i32 %152, %185
  %187 = zext i32 %186 to i64
  %188 = getelementptr inbounds float, ptr %105, i64 %187
  store float %184, ptr %188, align 4, !tbaa !16
  %indvars.iv.next157 = add nuw nsw i64 %indvars.iv156, 1
  %189 = load float, ptr %150, align 4, !tbaa !16
  %190 = getelementptr inbounds float, ptr %103, i64 %indvars.iv.next157
  %191 = load float, ptr %190, align 4, !tbaa !16
  %192 = fmul float %189, %191
  %193 = load float, ptr %91, align 4, !tbaa !22
  %194 = fdiv float %192, %193
  %195 = trunc nuw i64 %indvars.iv.next157 to i32
  %196 = add i32 %152, %195
  %197 = zext i32 %196 to i64
  %198 = getelementptr inbounds float, ptr %105, i64 %197
  store float %194, ptr %198, align 4, !tbaa !16
  %indvars.iv.next157.1 = add nuw nsw i64 %indvars.iv156, 2
  %exitcond160.not.1 = icmp eq i64 %indvars.iv.next157.1, %wide.trip.count164
  br i1 %exitcond160.not.1, label %.loopexit, label %scalar.ph, !llvm.loop !41

.loopexit:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %indvars.iv.next162 = add nuw nsw i64 %indvars.iv161, 1
  %exitcond165.not = icmp eq i64 %indvars.iv.next162, %wide.trip.count164
  br i1 %exitcond165.not, label %._crit_edge123, label %.preheader107, !llvm.loop !42

._crit_edge123:                                   ; preds = %.loopexit, %.preheader108.._crit_edge123_crit_edge
  %199 = phi ptr [ %100, %.preheader108.._crit_edge123_crit_edge ], [ %91, %.loopexit ]
  %200 = phi ptr [ %.pre, %.preheader108.._crit_edge123_crit_edge ], [ %105, %.loopexit ]
  %201 = getelementptr inbounds i8, ptr %0, i64 40
  %202 = load ptr, ptr %201, align 8, !tbaa !15
  %203 = getelementptr inbounds i8, ptr %0, i64 88
  %204 = load ptr, ptr %203, align 8, !tbaa !43
  %205 = call i32 @matrixf_mul(ptr noundef %200, i32 noundef %5, i32 noundef %5, ptr noundef %202, i32 noundef %5, i32 noundef %5, ptr noundef %204, i32 noundef %5, i32 noundef %5) #6
  %206 = mul i32 %5, %5
  %.not133 = icmp eq i32 %206, 0
  br i1 %.not133, label %.preheader, label %.lr.ph126

.lr.ph126:                                        ; preds = %._crit_edge123
  %207 = load ptr, ptr %201, align 8, !tbaa !15
  %208 = load ptr, ptr %203, align 8, !tbaa !43
  %209 = getelementptr inbounds i8, ptr %0, i64 48
  %210 = load ptr, ptr %209, align 8, !tbaa !44
  %wide.trip.count169 = zext i32 %206 to i64
  %min.iters.check216 = icmp ult i32 %206, 4
  br i1 %min.iters.check216, label %scalar.ph215.preheader, label %vector.memcheck198

scalar.ph215.preheader:                           ; preds = %middle.block214, %vector.memcheck198, %.lr.ph126
  %indvars.iv166.ph = phi i64 [ 0, %vector.memcheck198 ], [ 0, %.lr.ph126 ], [ %n.vec219, %middle.block214 ]
  %xtraiter271 = and i64 %wide.trip.count169, 1
  %lcmp.mod272.not = icmp eq i64 %xtraiter271, 0
  br i1 %lcmp.mod272.not, label %scalar.ph215.prol.loopexit, label %scalar.ph215.prol

scalar.ph215.prol:                                ; preds = %scalar.ph215.preheader
  %211 = getelementptr inbounds float, ptr %207, i64 %indvars.iv166.ph
  %212 = load float, ptr %211, align 4, !tbaa !16
  %213 = load float, ptr %199, align 4, !tbaa !22
  %214 = fdiv float %212, %213
  %215 = getelementptr inbounds float, ptr %208, i64 %indvars.iv166.ph
  %216 = load float, ptr %215, align 4, !tbaa !16
  %217 = fsub float %214, %216
  %218 = getelementptr inbounds float, ptr %210, i64 %indvars.iv166.ph
  store float %217, ptr %218, align 4, !tbaa !16
  %indvars.iv.next167.prol = or disjoint i64 %indvars.iv166.ph, 1
  br label %scalar.ph215.prol.loopexit

scalar.ph215.prol.loopexit:                       ; preds = %scalar.ph215.prol, %scalar.ph215.preheader
  %indvars.iv166.unr = phi i64 [ %indvars.iv166.ph, %scalar.ph215.preheader ], [ %indvars.iv.next167.prol, %scalar.ph215.prol ]
  %219 = add nsw i64 %wide.trip.count169, -1
  %220 = icmp eq i64 %indvars.iv166.ph, %219
  br i1 %220, label %.preheader, label %scalar.ph215

vector.memcheck198:                               ; preds = %.lr.ph126
  %221 = shl nuw nsw i64 %wide.trip.count169, 2
  %scevgep199 = getelementptr i8, ptr %210, i64 %221
  %scevgep200 = getelementptr i8, ptr %207, i64 %221
  %scevgep201 = getelementptr i8, ptr %199, i64 4
  %scevgep202 = getelementptr i8, ptr %208, i64 %221
  %bound0203 = icmp ult ptr %210, %scevgep200
  %bound1204 = icmp ult ptr %207, %scevgep199
  %found.conflict205 = and i1 %bound0203, %bound1204
  %bound0206 = icmp ult ptr %210, %scevgep201
  %bound1207 = icmp ult ptr %199, %scevgep199
  %found.conflict208 = and i1 %bound0206, %bound1207
  %conflict.rdx209 = or i1 %found.conflict205, %found.conflict208
  %bound0210 = icmp ult ptr %210, %scevgep202
  %bound1211 = icmp ult ptr %208, %scevgep199
  %found.conflict212 = and i1 %bound0210, %bound1211
  %conflict.rdx213 = or i1 %conflict.rdx209, %found.conflict212
  br i1 %conflict.rdx213, label %scalar.ph215.preheader, label %vector.ph217

vector.ph217:                                     ; preds = %vector.memcheck198
  %n.vec219 = and i64 %wide.trip.count169, 4294967292
  %222 = load float, ptr %199, align 4, !tbaa !22, !alias.scope !45
  %broadcast.splatinsert224 = insertelement <4 x float> poison, float %222, i64 0
  %broadcast.splat225 = shufflevector <4 x float> %broadcast.splatinsert224, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body221

vector.body221:                                   ; preds = %vector.body221, %vector.ph217
  %index222 = phi i64 [ 0, %vector.ph217 ], [ %index.next227, %vector.body221 ]
  %223 = getelementptr inbounds float, ptr %207, i64 %index222
  %wide.load223 = load <4 x float>, ptr %223, align 4, !tbaa !16, !alias.scope !48
  %224 = fdiv <4 x float> %wide.load223, %broadcast.splat225
  %225 = getelementptr inbounds float, ptr %208, i64 %index222
  %wide.load226 = load <4 x float>, ptr %225, align 4, !tbaa !16, !alias.scope !50
  %226 = fsub <4 x float> %224, %wide.load226
  %227 = getelementptr inbounds float, ptr %210, i64 %index222
  store <4 x float> %226, ptr %227, align 4, !tbaa !16, !alias.scope !52, !noalias !54
  %index.next227 = add nuw i64 %index222, 4
  %228 = icmp eq i64 %index.next227, %n.vec219
  br i1 %228, label %middle.block214, label %vector.body221, !llvm.loop !55

middle.block214:                                  ; preds = %vector.body221
  %cmp.n228 = icmp eq i64 %n.vec219, %wide.trip.count169
  br i1 %cmp.n228, label %.preheader, label %scalar.ph215.preheader

.preheader:                                       ; preds = %scalar.ph215.prol.loopexit, %scalar.ph215, %middle.block214, %._crit_edge123
  %.phi.trans.insert176 = getelementptr inbounds i8, ptr %0, i64 24
  %.pre177 = load ptr, ptr %.phi.trans.insert176, align 8, !tbaa !56
  %.pre177230 = ptrtoint ptr %.pre177 to i64
  br i1 %.not, label %.preheader.._crit_edge129_crit_edge, label %.lr.ph128

.preheader.._crit_edge129_crit_edge:              ; preds = %.preheader
  %.phi.trans.insert178 = getelementptr inbounds i8, ptr %0, i64 32
  %.pre179 = load ptr, ptr %.phi.trans.insert178, align 8, !tbaa !57
  br label %._crit_edge129

.lr.ph128:                                        ; preds = %.preheader
  %229 = getelementptr inbounds i8, ptr %0, i64 56
  %230 = load ptr, ptr %229, align 8, !tbaa !25
  %231 = getelementptr inbounds i8, ptr %0, i64 32
  %232 = load ptr, ptr %231, align 8, !tbaa !57
  %wide.trip.count174 = zext i32 %5 to i64
  %min.iters.check235 = icmp ult i32 %5, 8
  br i1 %min.iters.check235, label %scalar.ph234.preheader, label %vector.memcheck229

scalar.ph234.preheader:                           ; preds = %middle.block233, %vector.memcheck229, %.lr.ph128
  %indvars.iv171.ph = phi i64 [ 0, %vector.memcheck229 ], [ 0, %.lr.ph128 ], [ %n.vec238, %middle.block233 ]
  %xtraiter273 = and i64 %wide.trip.count174, 1
  %lcmp.mod274.not = icmp eq i64 %xtraiter273, 0
  br i1 %lcmp.mod274.not, label %scalar.ph234.prol.loopexit, label %scalar.ph234.prol

scalar.ph234.prol:                                ; preds = %scalar.ph234.preheader
  %233 = getelementptr inbounds float, ptr %.pre177, i64 %indvars.iv171.ph
  %234 = load float, ptr %233, align 4, !tbaa !16
  %235 = getelementptr inbounds float, ptr %230, i64 %indvars.iv171.ph
  %236 = load float, ptr %235, align 4, !tbaa !16
  %237 = call float @llvm.fmuladd.f32(float %6, float %236, float %234)
  %238 = getelementptr inbounds float, ptr %232, i64 %indvars.iv171.ph
  store float %237, ptr %238, align 4, !tbaa !16
  %indvars.iv.next172.prol = or disjoint i64 %indvars.iv171.ph, 1
  br label %scalar.ph234.prol.loopexit

scalar.ph234.prol.loopexit:                       ; preds = %scalar.ph234.prol, %scalar.ph234.preheader
  %indvars.iv171.unr = phi i64 [ %indvars.iv171.ph, %scalar.ph234.preheader ], [ %indvars.iv.next172.prol, %scalar.ph234.prol ]
  %239 = add nsw i64 %wide.trip.count174, -1
  %240 = icmp eq i64 %indvars.iv171.ph, %239
  br i1 %240, label %._crit_edge129.loopexit, label %scalar.ph234

vector.memcheck229:                               ; preds = %.lr.ph128
  %241 = ptrtoint ptr %232 to i64
  %242 = ptrtoint ptr %230 to i64
  %243 = sub i64 %241, %.pre177230
  %diff.check = icmp ult i64 %243, 32
  %244 = sub i64 %241, %242
  %diff.check231 = icmp ult i64 %244, 32
  %conflict.rdx232 = or i1 %diff.check, %diff.check231
  br i1 %conflict.rdx232, label %scalar.ph234.preheader, label %vector.ph236

vector.ph236:                                     ; preds = %vector.memcheck229
  %n.vec238 = and i64 %wide.trip.count174, 4294967288
  %broadcast.splatinsert246 = insertelement <4 x float> poison, float %6, i64 0
  %broadcast.splat247 = shufflevector <4 x float> %broadcast.splatinsert246, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body240

vector.body240:                                   ; preds = %vector.body240, %vector.ph236
  %index241 = phi i64 [ 0, %vector.ph236 ], [ %index.next248, %vector.body240 ]
  %245 = getelementptr inbounds float, ptr %.pre177, i64 %index241
  %246 = getelementptr inbounds i8, ptr %245, i64 16
  %wide.load242 = load <4 x float>, ptr %245, align 4, !tbaa !16
  %wide.load243 = load <4 x float>, ptr %246, align 4, !tbaa !16
  %247 = getelementptr inbounds float, ptr %230, i64 %index241
  %248 = getelementptr inbounds i8, ptr %247, i64 16
  %wide.load244 = load <4 x float>, ptr %247, align 4, !tbaa !16
  %wide.load245 = load <4 x float>, ptr %248, align 4, !tbaa !16
  %249 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat247, <4 x float> %wide.load244, <4 x float> %wide.load242)
  %250 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat247, <4 x float> %wide.load245, <4 x float> %wide.load243)
  %251 = getelementptr inbounds float, ptr %232, i64 %index241
  %252 = getelementptr inbounds i8, ptr %251, i64 16
  store <4 x float> %249, ptr %251, align 4, !tbaa !16
  store <4 x float> %250, ptr %252, align 4, !tbaa !16
  %index.next248 = add nuw i64 %index241, 8
  %253 = icmp eq i64 %index.next248, %n.vec238
  br i1 %253, label %middle.block233, label %vector.body240, !llvm.loop !58

middle.block233:                                  ; preds = %vector.body240
  %cmp.n249 = icmp eq i64 %n.vec238, %wide.trip.count174
  br i1 %cmp.n249, label %._crit_edge129.loopexit, label %scalar.ph234.preheader

scalar.ph215:                                     ; preds = %scalar.ph215.prol.loopexit, %scalar.ph215
  %indvars.iv166 = phi i64 [ %indvars.iv.next167.1, %scalar.ph215 ], [ %indvars.iv166.unr, %scalar.ph215.prol.loopexit ]
  %254 = getelementptr inbounds float, ptr %207, i64 %indvars.iv166
  %255 = load float, ptr %254, align 4, !tbaa !16
  %256 = load float, ptr %199, align 4, !tbaa !22
  %257 = fdiv float %255, %256
  %258 = getelementptr inbounds float, ptr %208, i64 %indvars.iv166
  %259 = load float, ptr %258, align 4, !tbaa !16
  %260 = fsub float %257, %259
  %261 = getelementptr inbounds float, ptr %210, i64 %indvars.iv166
  store float %260, ptr %261, align 4, !tbaa !16
  %indvars.iv.next167 = add nuw nsw i64 %indvars.iv166, 1
  %262 = getelementptr inbounds float, ptr %207, i64 %indvars.iv.next167
  %263 = load float, ptr %262, align 4, !tbaa !16
  %264 = load float, ptr %199, align 4, !tbaa !22
  %265 = fdiv float %263, %264
  %266 = getelementptr inbounds float, ptr %208, i64 %indvars.iv.next167
  %267 = load float, ptr %266, align 4, !tbaa !16
  %268 = fsub float %265, %267
  %269 = getelementptr inbounds float, ptr %210, i64 %indvars.iv.next167
  store float %268, ptr %269, align 4, !tbaa !16
  %indvars.iv.next167.1 = add nuw nsw i64 %indvars.iv166, 2
  %exitcond170.not.1 = icmp eq i64 %indvars.iv.next167.1, %wide.trip.count169
  br i1 %exitcond170.not.1, label %.preheader, label %scalar.ph215, !llvm.loop !59

scalar.ph234:                                     ; preds = %scalar.ph234.prol.loopexit, %scalar.ph234
  %indvars.iv171 = phi i64 [ %indvars.iv.next172.1, %scalar.ph234 ], [ %indvars.iv171.unr, %scalar.ph234.prol.loopexit ]
  %270 = getelementptr inbounds float, ptr %.pre177, i64 %indvars.iv171
  %271 = load float, ptr %270, align 4, !tbaa !16
  %272 = getelementptr inbounds float, ptr %230, i64 %indvars.iv171
  %273 = load float, ptr %272, align 4, !tbaa !16
  %274 = call float @llvm.fmuladd.f32(float %6, float %273, float %271)
  %275 = getelementptr inbounds float, ptr %232, i64 %indvars.iv171
  store float %274, ptr %275, align 4, !tbaa !16
  %indvars.iv.next172 = add nuw nsw i64 %indvars.iv171, 1
  %276 = getelementptr inbounds float, ptr %.pre177, i64 %indvars.iv.next172
  %277 = load float, ptr %276, align 4, !tbaa !16
  %278 = getelementptr inbounds float, ptr %230, i64 %indvars.iv.next172
  %279 = load float, ptr %278, align 4, !tbaa !16
  %280 = call float @llvm.fmuladd.f32(float %6, float %279, float %277)
  %281 = getelementptr inbounds float, ptr %232, i64 %indvars.iv.next172
  store float %280, ptr %281, align 4, !tbaa !16
  %indvars.iv.next172.1 = add nuw nsw i64 %indvars.iv171, 2
  %exitcond175.not.1 = icmp eq i64 %indvars.iv.next172.1, %wide.trip.count174
  br i1 %exitcond175.not.1, label %._crit_edge129.loopexit, label %scalar.ph234, !llvm.loop !60

._crit_edge129.loopexit:                          ; preds = %scalar.ph234.prol.loopexit, %scalar.ph234, %middle.block233
  %282 = shl nuw nsw i64 %wide.trip.count174, 2
  br label %._crit_edge129

._crit_edge129:                                   ; preds = %.preheader.._crit_edge129_crit_edge, %._crit_edge129.loopexit
  %.pre-phi = phi i64 [ 0, %.preheader.._crit_edge129_crit_edge ], [ %282, %._crit_edge129.loopexit ]
  %283 = phi ptr [ %.pre179, %.preheader.._crit_edge129_crit_edge ], [ %232, %._crit_edge129.loopexit ]
  call void @llvm.memmove.p0.p0.i64(ptr align 4 %.pre177, ptr align 4 %283, i64 %.pre-phi, i1 false)
  %284 = load ptr, ptr %201, align 8, !tbaa !15
  %285 = getelementptr inbounds i8, ptr %0, i64 48
  %286 = load ptr, ptr %285, align 8, !tbaa !44
  %287 = zext i32 %206 to i64
  %288 = shl nuw nsw i64 %287, 2
  call void @llvm.memmove.p0.p0.i64(ptr align 4 %284, ptr align 4 %286, i64 %288, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  ret i32 0
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #4

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"eqrls_rrrf_s", !7, i64 0, !10, i64 4, !10, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !10, i64 72, !11, i64 80, !11, i64 88, !7, i64 96, !11, i64 104}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"float", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!6, !11, i64 104}
!13 = !{!6, !11, i64 64}
!14 = !{!11, !11, i64 0}
!15 = !{!6, !11, i64 40}
!16 = !{!10, !10, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = !{!6, !10, i64 72}
!21 = distinct !{!21, !18}
!22 = !{!6, !10, i64 4}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.unroll.disable"}
!25 = !{!6, !11, i64 56}
!26 = !{!6, !11, i64 80}
!27 = distinct !{!27, !18}
!28 = distinct !{!28, !18}
!29 = !{!30}
!30 = distinct !{!30, !31}
!31 = distinct !{!31, !"LVerDomain"}
!32 = !{!33}
!33 = distinct !{!33, !31}
!34 = !{!35}
!35 = distinct !{!35, !31}
!36 = !{!37}
!37 = distinct !{!37, !31}
!38 = distinct !{!38, !18, !39, !40}
!39 = !{!"llvm.loop.isvectorized", i32 1}
!40 = !{!"llvm.loop.unroll.runtime.disable"}
!41 = distinct !{!41, !18, !39}
!42 = distinct !{!42, !18}
!43 = !{!6, !11, i64 88}
!44 = !{!6, !11, i64 48}
!45 = !{!46}
!46 = distinct !{!46, !47}
!47 = distinct !{!47, !"LVerDomain"}
!48 = !{!49}
!49 = distinct !{!49, !47}
!50 = !{!51}
!51 = distinct !{!51, !47}
!52 = !{!53}
!53 = distinct !{!53, !47}
!54 = !{!49, !46, !51}
!55 = distinct !{!55, !18, !39, !40}
!56 = !{!6, !11, i64 24}
!57 = !{!6, !11, i64 32}
!58 = distinct !{!58, !18, !39, !40}
!59 = distinct !{!59, !18, !39}
!60 = distinct !{!60, !18, !39}


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