; LLVM IR from jgaeddert/liquid-dsp :: src/filter/src (filter_cccf)

; 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.iirfiltsos_cccf_s = type { [3 x { float, float }], [3 x { float, float }], [3 x { float, float }], [3 x { float, float }], [3 x { float, float }] }

; 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

declare <2 x float> @__mulsc3(float, float, float, float)

; Function Attrs: nounwind uwtable
define dso_local i32 @iirfiltsos_cccf_execute_df1(ptr noundef %0, <2 x float> noundef %1, ptr noundef %2) #1 {
  %4 = alloca { float, float }, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca { float, float }, align 4
  %8 = alloca { float, float }, align 4
  %9 = alloca { float, float }, align 4
  %10 = alloca { float, float }, align 4
  %11 = alloca { float, float }, align 4
  %12 = alloca { float, float }, align 4
  store <2 x float> %1, ptr %4, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %13 = load ptr, ptr %5, align 8, !tbaa !5
  %14 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %13, i32 0, i32 2
  %15 = getelementptr inbounds [3 x { float, float }], ptr %14, i64 0, i64 1
  %16 = getelementptr inbounds { float, float }, ptr %15, i32 0, i32 0
  %17 = load float, ptr %16, align 4
  %18 = getelementptr inbounds { float, float }, ptr %15, i32 0, i32 1
  %19 = load float, ptr %18, align 4
  %20 = load ptr, ptr %5, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %20, i32 0, i32 2
  %22 = getelementptr inbounds [3 x { float, float }], ptr %21, i64 0, i64 2
  %23 = getelementptr inbounds { float, float }, ptr %22, i32 0, i32 0
  %24 = getelementptr inbounds { float, float }, ptr %22, i32 0, i32 1
  store float %17, ptr %23, align 4
  store float %19, ptr %24, align 4
  %25 = load ptr, ptr %5, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %25, i32 0, i32 2
  %27 = getelementptr inbounds [3 x { float, float }], ptr %26, i64 0, i64 0
  %28 = getelementptr inbounds { float, float }, ptr %27, i32 0, i32 0
  %29 = load float, ptr %28, align 4
  %30 = getelementptr inbounds { float, float }, ptr %27, i32 0, i32 1
  %31 = load float, ptr %30, align 4
  %32 = load ptr, ptr %5, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %32, i32 0, i32 2
  %34 = getelementptr inbounds [3 x { float, float }], ptr %33, i64 0, i64 1
  %35 = getelementptr inbounds { float, float }, ptr %34, i32 0, i32 0
  %36 = getelementptr inbounds { float, float }, ptr %34, i32 0, i32 1
  store float %29, ptr %35, align 4
  store float %31, ptr %36, align 4
  %37 = getelementptr inbounds { float, float }, ptr %4, i32 0, i32 0
  %38 = load float, ptr %37, align 4
  %39 = getelementptr inbounds { float, float }, ptr %4, i32 0, i32 1
  %40 = load float, ptr %39, align 4
  %41 = load ptr, ptr %5, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %41, i32 0, i32 2
  %43 = getelementptr inbounds [3 x { float, float }], ptr %42, i64 0, i64 0
  %44 = getelementptr inbounds { float, float }, ptr %43, i32 0, i32 0
  %45 = getelementptr inbounds { float, float }, ptr %43, i32 0, i32 1
  store float %38, ptr %44, align 4
  store float %40, ptr %45, align 4
  %46 = load ptr, ptr %5, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %46, i32 0, i32 3
  %48 = getelementptr inbounds [3 x { float, float }], ptr %47, i64 0, i64 1
  %49 = getelementptr inbounds { float, float }, ptr %48, i32 0, i32 0
  %50 = load float, ptr %49, align 4
  %51 = getelementptr inbounds { float, float }, ptr %48, i32 0, i32 1
  %52 = load float, ptr %51, align 4
  %53 = load ptr, ptr %5, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %53, i32 0, i32 3
  %55 = getelementptr inbounds [3 x { float, float }], ptr %54, i64 0, i64 2
  %56 = getelementptr inbounds { float, float }, ptr %55, i32 0, i32 0
  %57 = getelementptr inbounds { float, float }, ptr %55, i32 0, i32 1
  store float %50, ptr %56, align 4
  store float %52, ptr %57, align 4
  %58 = load ptr, ptr %5, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %58, i32 0, i32 3
  %60 = getelementptr inbounds [3 x { float, float }], ptr %59, i64 0, i64 0
  %61 = getelementptr inbounds { float, float }, ptr %60, i32 0, i32 0
  %62 = load float, ptr %61, align 4
  %63 = getelementptr inbounds { float, float }, ptr %60, i32 0, i32 1
  %64 = load float, ptr %63, align 4
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %65, i32 0, i32 3
  %67 = getelementptr inbounds [3 x { float, float }], ptr %66, i64 0, i64 1
  %68 = getelementptr inbounds { float, float }, ptr %67, i32 0, i32 0
  %69 = getelementptr inbounds { float, float }, ptr %67, i32 0, i32 1
  store float %62, ptr %68, align 4
  store float %64, ptr %69, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #2
  %70 = load ptr, ptr %5, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %70, i32 0, i32 2
  %72 = getelementptr inbounds [3 x { float, float }], ptr %71, i64 0, i64 0
  %73 = getelementptr inbounds { float, float }, ptr %72, i32 0, i32 0
  %74 = load float, ptr %73, align 4
  %75 = getelementptr inbounds { float, float }, ptr %72, i32 0, i32 1
  %76 = load float, ptr %75, align 4
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %77, i32 0, i32 0
  %79 = getelementptr inbounds [3 x { float, float }], ptr %78, i64 0, i64 0
  %80 = getelementptr inbounds { float, float }, ptr %79, i32 0, i32 0
  %81 = load float, ptr %80, align 4
  %82 = getelementptr inbounds { float, float }, ptr %79, i32 0, i32 1
  %83 = load float, ptr %82, align 4
  %84 = fmul float %74, %81
  %85 = fmul float %76, %83
  %86 = fmul float %74, %83
  %87 = fmul float %76, %81
  %88 = fsub float %84, %85
  %89 = fadd float %86, %87
  %90 = fcmp uno float %88, %88
  br i1 %90, label %91, label %99, !prof !9

91:                                               ; preds = %3
  %92 = fcmp uno float %89, %89
  br i1 %92, label %93, label %99, !prof !9

93:                                               ; preds = %91
  %94 = call <2 x float> @__mulsc3(float noundef %74, float noundef %76, float noundef %81, float noundef %83) #2
  store <2 x float> %94, ptr %8, align 4
  %95 = getelementptr inbounds { float, float }, ptr %8, i32 0, i32 0
  %96 = load float, ptr %95, align 4
  %97 = getelementptr inbounds { float, float }, ptr %8, i32 0, i32 1
  %98 = load float, ptr %97, align 4
  br label %99

99:                                               ; preds = %93, %91, %3
  %100 = phi float [ %88, %3 ], [ %88, %91 ], [ %96, %93 ]
  %101 = phi float [ %89, %3 ], [ %89, %91 ], [ %98, %93 ]
  %102 = load ptr, ptr %5, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %102, i32 0, i32 2
  %104 = getelementptr inbounds [3 x { float, float }], ptr %103, i64 0, i64 1
  %105 = getelementptr inbounds { float, float }, ptr %104, i32 0, i32 0
  %106 = load float, ptr %105, align 4
  %107 = getelementptr inbounds { float, float }, ptr %104, i32 0, i32 1
  %108 = load float, ptr %107, align 4
  %109 = load ptr, ptr %5, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %109, i32 0, i32 0
  %111 = getelementptr inbounds [3 x { float, float }], ptr %110, i64 0, i64 1
  %112 = getelementptr inbounds { float, float }, ptr %111, i32 0, i32 0
  %113 = load float, ptr %112, align 4
  %114 = getelementptr inbounds { float, float }, ptr %111, i32 0, i32 1
  %115 = load float, ptr %114, align 4
  %116 = fmul float %106, %113
  %117 = fmul float %108, %115
  %118 = fmul float %106, %115
  %119 = fmul float %108, %113
  %120 = fsub float %116, %117
  %121 = fadd float %118, %119
  %122 = fcmp uno float %120, %120
  br i1 %122, label %123, label %131, !prof !9

123:                                              ; preds = %99
  %124 = fcmp uno float %121, %121
  br i1 %124, label %125, label %131, !prof !9

125:                                              ; preds = %123
  %126 = call <2 x float> @__mulsc3(float noundef %106, float noundef %108, float noundef %113, float noundef %115) #2
  store <2 x float> %126, ptr %9, align 4
  %127 = getelementptr inbounds { float, float }, ptr %9, i32 0, i32 0
  %128 = load float, ptr %127, align 4
  %129 = getelementptr inbounds { float, float }, ptr %9, i32 0, i32 1
  %130 = load float, ptr %129, align 4
  br label %131

131:                                              ; preds = %125, %123, %99
  %132 = phi float [ %120, %99 ], [ %120, %123 ], [ %128, %125 ]
  %133 = phi float [ %121, %99 ], [ %121, %123 ], [ %130, %125 ]
  %134 = fadd float %100, %132
  %135 = fadd float %101, %133
  %136 = load ptr, ptr %5, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %136, i32 0, i32 2
  %138 = getelementptr inbounds [3 x { float, float }], ptr %137, i64 0, i64 2
  %139 = getelementptr inbounds { float, float }, ptr %138, i32 0, i32 0
  %140 = load float, ptr %139, align 4
  %141 = getelementptr inbounds { float, float }, ptr %138, i32 0, i32 1
  %142 = load float, ptr %141, align 4
  %143 = load ptr, ptr %5, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %143, i32 0, i32 0
  %145 = getelementptr inbounds [3 x { float, float }], ptr %144, i64 0, i64 2
  %146 = getelementptr inbounds { float, float }, ptr %145, i32 0, i32 0
  %147 = load float, ptr %146, align 4
  %148 = getelementptr inbounds { float, float }, ptr %145, i32 0, i32 1
  %149 = load float, ptr %148, align 4
  %150 = fmul float %140, %147
  %151 = fmul float %142, %149
  %152 = fmul float %140, %149
  %153 = fmul float %142, %147
  %154 = fsub float %150, %151
  %155 = fadd float %152, %153
  %156 = fcmp uno float %154, %154
  br i1 %156, label %157, label %165, !prof !9

157:                                              ; preds = %131
  %158 = fcmp uno float %155, %155
  br i1 %158, label %159, label %165, !prof !9

159:                                              ; preds = %157
  %160 = call <2 x float> @__mulsc3(float noundef %140, float noundef %142, float noundef %147, float noundef %149) #2
  store <2 x float> %160, ptr %10, align 4
  %161 = getelementptr inbounds { float, float }, ptr %10, i32 0, i32 0
  %162 = load float, ptr %161, align 4
  %163 = getelementptr inbounds { float, float }, ptr %10, i32 0, i32 1
  %164 = load float, ptr %163, align 4
  br label %165

165:                                              ; preds = %159, %157, %131
  %166 = phi float [ %154, %131 ], [ %154, %157 ], [ %162, %159 ]
  %167 = phi float [ %155, %131 ], [ %155, %157 ], [ %164, %159 ]
  %168 = fadd float %134, %166
  %169 = fadd float %135, %167
  %170 = getelementptr inbounds { float, float }, ptr %7, i32 0, i32 0
  %171 = getelementptr inbounds { float, float }, ptr %7, i32 0, i32 1
  store float %168, ptr %170, align 4
  store float %169, ptr %171, align 4
  %172 = getelementptr inbounds { float, float }, ptr %7, i32 0, i32 0
  %173 = load float, ptr %172, align 4
  %174 = getelementptr inbounds { float, float }, ptr %7, i32 0, i32 1
  %175 = load float, ptr %174, align 4
  %176 = load ptr, ptr %5, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %176, i32 0, i32 3
  %178 = getelementptr inbounds [3 x { float, float }], ptr %177, i64 0, i64 1
  %179 = getelementptr inbounds { float, float }, ptr %178, i32 0, i32 0
  %180 = load float, ptr %179, align 4
  %181 = getelementptr inbounds { float, float }, ptr %178, i32 0, i32 1
  %182 = load float, ptr %181, align 4
  %183 = load ptr, ptr %5, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %183, i32 0, i32 1
  %185 = getelementptr inbounds [3 x { float, float }], ptr %184, i64 0, i64 1
  %186 = getelementptr inbounds { float, float }, ptr %185, i32 0, i32 0
  %187 = load float, ptr %186, align 4
  %188 = getelementptr inbounds { float, float }, ptr %185, i32 0, i32 1
  %189 = load float, ptr %188, align 4
  %190 = fmul float %180, %187
  %191 = fmul float %182, %189
  %192 = fmul float %180, %189
  %193 = fmul float %182, %187
  %194 = fsub float %190, %191
  %195 = fadd float %192, %193
  %196 = fcmp uno float %194, %194
  br i1 %196, label %197, label %205, !prof !9

197:                                              ; preds = %165
  %198 = fcmp uno float %195, %195
  br i1 %198, label %199, label %205, !prof !9

199:                                              ; preds = %197
  %200 = call <2 x float> @__mulsc3(float noundef %180, float noundef %182, float noundef %187, float noundef %189) #2
  store <2 x float> %200, ptr %11, align 4
  %201 = getelementptr inbounds { float, float }, ptr %11, i32 0, i32 0
  %202 = load float, ptr %201, align 4
  %203 = getelementptr inbounds { float, float }, ptr %11, i32 0, i32 1
  %204 = load float, ptr %203, align 4
  br label %205

205:                                              ; preds = %199, %197, %165
  %206 = phi float [ %194, %165 ], [ %194, %197 ], [ %202, %199 ]
  %207 = phi float [ %195, %165 ], [ %195, %197 ], [ %204, %199 ]
  %208 = fsub float %173, %206
  %209 = fsub float %175, %207
  %210 = load ptr, ptr %5, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %210, i32 0, i32 3
  %212 = getelementptr inbounds [3 x { float, float }], ptr %211, i64 0, i64 2
  %213 = getelementptr inbounds { float, float }, ptr %212, i32 0, i32 0
  %214 = load float, ptr %213, align 4
  %215 = getelementptr inbounds { float, float }, ptr %212, i32 0, i32 1
  %216 = load float, ptr %215, align 4
  %217 = load ptr, ptr %5, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %217, i32 0, i32 1
  %219 = getelementptr inbounds [3 x { float, float }], ptr %218, i64 0, i64 2
  %220 = getelementptr inbounds { float, float }, ptr %219, i32 0, i32 0
  %221 = load float, ptr %220, align 4
  %222 = getelementptr inbounds { float, float }, ptr %219, i32 0, i32 1
  %223 = load float, ptr %222, align 4
  %224 = fmul float %214, %221
  %225 = fmul float %216, %223
  %226 = fmul float %214, %223
  %227 = fmul float %216, %221
  %228 = fsub float %224, %225
  %229 = fadd float %226, %227
  %230 = fcmp uno float %228, %228
  br i1 %230, label %231, label %239, !prof !9

231:                                              ; preds = %205
  %232 = fcmp uno float %229, %229
  br i1 %232, label %233, label %239, !prof !9

233:                                              ; preds = %231
  %234 = call <2 x float> @__mulsc3(float noundef %214, float noundef %216, float noundef %221, float noundef %223) #2
  store <2 x float> %234, ptr %12, align 4
  %235 = getelementptr inbounds { float, float }, ptr %12, i32 0, i32 0
  %236 = load float, ptr %235, align 4
  %237 = getelementptr inbounds { float, float }, ptr %12, i32 0, i32 1
  %238 = load float, ptr %237, align 4
  br label %239

239:                                              ; preds = %233, %231, %205
  %240 = phi float [ %228, %205 ], [ %228, %231 ], [ %236, %233 ]
  %241 = phi float [ %229, %205 ], [ %229, %231 ], [ %238, %233 ]
  %242 = fsub float %208, %240
  %243 = fsub float %209, %241
  %244 = load ptr, ptr %5, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %244, i32 0, i32 3
  %246 = getelementptr inbounds [3 x { float, float }], ptr %245, i64 0, i64 0
  %247 = getelementptr inbounds { float, float }, ptr %246, i32 0, i32 0
  %248 = getelementptr inbounds { float, float }, ptr %246, i32 0, i32 1
  store float %242, ptr %247, align 4
  store float %243, ptr %248, align 4
  %249 = load ptr, ptr %5, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.iirfiltsos_cccf_s, ptr %249, i32 0, i32 3
  %251 = getelementptr inbounds [3 x { float, float }], ptr %250, i64 0, i64 0
  %252 = getelementptr inbounds { float, float }, ptr %251, i32 0, i32 0
  %253 = load float, ptr %252, align 4
  %254 = getelementptr inbounds { float, float }, ptr %251, i32 0, i32 1
  %255 = load float, ptr %254, align 4
  %256 = load ptr, ptr %6, align 8, !tbaa !5
  %257 = getelementptr inbounds { float, float }, ptr %256, i32 0, i32 0
  %258 = getelementptr inbounds { float, float }, ptr %256, i32 0, i32 1
  store float %253, ptr %257, align 4
  store float %255, ptr %258, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #2
  ret i32 0
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="64" "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 = { 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 = !{!"branch_weights", i32 1, i32 1048575}


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

declare <2 x float> @__mulsc3(float, float, float, float) local_unnamed_addr

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @iirfiltsos_cccf_execute_df1(ptr nocapture noundef %0, <2 x float> noundef %1, ptr nocapture noundef writeonly %2) local_unnamed_addr #0 {
  %4 = extractelement <2 x float> %1, i64 1
  %5 = extractelement <2 x float> %1, i64 0
  %6 = getelementptr inbounds i8, ptr %0, i64 48
  %7 = getelementptr inbounds i8, ptr %0, i64 56
  %8 = getelementptr inbounds i8, ptr %0, i64 64
  %9 = load <2 x float>, ptr %7, align 4
  store <2 x float> %9, ptr %8, align 4
  %10 = load <2 x float>, ptr %6, align 4
  %11 = shufflevector <2 x float> %1, <2 x float> %10, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  store <4 x float> %11, ptr %6, align 4
  %12 = getelementptr inbounds i8, ptr %0, i64 72
  %13 = getelementptr inbounds i8, ptr %0, i64 80
  %14 = getelementptr inbounds i8, ptr %0, i64 88
  %15 = load <4 x float>, ptr %12, align 4
  store <4 x float> %15, ptr %13, align 4
  %16 = load float, ptr %0, align 4
  %17 = getelementptr inbounds i8, ptr %0, i64 4
  %18 = load float, ptr %17, align 4
  %19 = insertelement <2 x float> poison, float %18, i64 0
  %20 = shufflevector <2 x float> %19, <2 x float> poison, <2 x i32> zeroinitializer
  %21 = fmul <2 x float> %20, %1
  %22 = shufflevector <2 x float> %21, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %23 = insertelement <2 x float> poison, float %16, i64 0
  %24 = shufflevector <2 x float> %23, <2 x float> poison, <2 x i32> zeroinitializer
  %25 = fmul <2 x float> %24, %1
  %26 = fsub <2 x float> %25, %22
  %27 = fadd <2 x float> %25, %22
  %28 = shufflevector <2 x float> %26, <2 x float> %27, <2 x i32> <i32 0, i32 3>
  %29 = extractelement <2 x float> %26, i64 0
  %30 = fcmp uno float %29, 0.000000e+00
  br i1 %30, label %31, label %37, !prof !5

31:                                               ; preds = %3
  %32 = extractelement <2 x float> %27, i64 1
  %33 = fcmp uno float %32, 0.000000e+00
  br i1 %33, label %34, label %37, !prof !5

34:                                               ; preds = %31
  %35 = tail call <2 x float> @__mulsc3(float noundef %5, float noundef %4, float noundef %16, float noundef %18) #1
  %36 = load <2 x float>, ptr %7, align 4
  br label %37

37:                                               ; preds = %34, %31, %3
  %38 = phi <2 x float> [ %28, %3 ], [ %28, %31 ], [ %35, %34 ]
  %39 = phi <2 x float> [ %10, %3 ], [ %10, %31 ], [ %36, %34 ]
  %40 = getelementptr inbounds i8, ptr %0, i64 8
  %41 = load <2 x float>, ptr %40, align 4
  %42 = shufflevector <2 x float> %39, <2 x float> poison, <2 x i32> zeroinitializer
  %43 = fmul <2 x float> %42, %41
  %44 = shufflevector <2 x float> %39, <2 x float> poison, <2 x i32> <i32 1, i32 1>
  %45 = fmul <2 x float> %44, %41
  %46 = shufflevector <2 x float> %45, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %47 = fsub <2 x float> %43, %46
  %48 = fadd <2 x float> %43, %46
  %49 = shufflevector <2 x float> %47, <2 x float> %48, <2 x i32> <i32 0, i32 3>
  %50 = extractelement <2 x float> %47, i64 0
  %51 = fcmp uno float %50, 0.000000e+00
  br i1 %51, label %52, label %61, !prof !5

52:                                               ; preds = %37
  %53 = extractelement <2 x float> %48, i64 1
  %54 = fcmp uno float %53, 0.000000e+00
  br i1 %54, label %55, label %61, !prof !5

55:                                               ; preds = %52
  %56 = extractelement <2 x float> %41, i64 0
  %57 = extractelement <2 x float> %41, i64 1
  %58 = extractelement <2 x float> %39, i64 0
  %59 = extractelement <2 x float> %39, i64 1
  %60 = tail call <2 x float> @__mulsc3(float noundef %58, float noundef %59, float noundef %56, float noundef %57) #1
  br label %61

61:                                               ; preds = %55, %52, %37
  %62 = phi <2 x float> [ %49, %37 ], [ %49, %52 ], [ %60, %55 ]
  %63 = getelementptr inbounds i8, ptr %0, i64 16
  %64 = load float, ptr %63, align 4
  %65 = getelementptr inbounds i8, ptr %0, i64 20
  %66 = load float, ptr %65, align 4
  %67 = load <2 x float>, ptr %8, align 4
  %68 = insertelement <2 x float> poison, float %66, i64 0
  %69 = shufflevector <2 x float> %68, <2 x float> poison, <2 x i32> zeroinitializer
  %70 = fmul <2 x float> %67, %69
  %71 = shufflevector <2 x float> %70, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %72 = insertelement <2 x float> poison, float %64, i64 0
  %73 = shufflevector <2 x float> %72, <2 x float> poison, <2 x i32> zeroinitializer
  %74 = fmul <2 x float> %67, %73
  %75 = fsub <2 x float> %74, %71
  %76 = fadd <2 x float> %74, %71
  %77 = shufflevector <2 x float> %75, <2 x float> %76, <2 x i32> <i32 0, i32 3>
  %78 = extractelement <2 x float> %75, i64 0
  %79 = fcmp uno float %78, 0.000000e+00
  br i1 %79, label %80, label %87, !prof !5

80:                                               ; preds = %61
  %81 = extractelement <2 x float> %76, i64 1
  %82 = fcmp uno float %81, 0.000000e+00
  br i1 %82, label %83, label %87, !prof !5

83:                                               ; preds = %80
  %84 = extractelement <2 x float> %67, i64 0
  %85 = extractelement <2 x float> %67, i64 1
  %86 = tail call <2 x float> @__mulsc3(float noundef %84, float noundef %85, float noundef %64, float noundef %66) #1
  br label %87

87:                                               ; preds = %83, %80, %61
  %88 = phi <2 x float> [ %77, %61 ], [ %77, %80 ], [ %86, %83 ]
  %89 = getelementptr inbounds i8, ptr %0, i64 32
  %90 = load float, ptr %89, align 4
  %91 = getelementptr inbounds i8, ptr %0, i64 36
  %92 = load float, ptr %91, align 4
  %93 = load <2 x float>, ptr %13, align 4
  %94 = insertelement <2 x float> poison, float %92, i64 0
  %95 = shufflevector <2 x float> %94, <2 x float> poison, <2 x i32> zeroinitializer
  %96 = fmul <2 x float> %93, %95
  %97 = shufflevector <2 x float> %96, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %98 = insertelement <2 x float> poison, float %90, i64 0
  %99 = shufflevector <2 x float> %98, <2 x float> poison, <2 x i32> zeroinitializer
  %100 = fmul <2 x float> %93, %99
  %101 = fsub <2 x float> %100, %97
  %102 = fadd <2 x float> %100, %97
  %103 = shufflevector <2 x float> %101, <2 x float> %102, <2 x i32> <i32 0, i32 3>
  %104 = extractelement <2 x float> %101, i64 0
  %105 = fcmp uno float %104, 0.000000e+00
  br i1 %105, label %106, label %113, !prof !5

106:                                              ; preds = %87
  %107 = extractelement <2 x float> %102, i64 1
  %108 = fcmp uno float %107, 0.000000e+00
  br i1 %108, label %109, label %113, !prof !5

109:                                              ; preds = %106
  %110 = extractelement <2 x float> %93, i64 0
  %111 = extractelement <2 x float> %93, i64 1
  %112 = tail call <2 x float> @__mulsc3(float noundef %110, float noundef %111, float noundef %90, float noundef %92) #1
  br label %113

113:                                              ; preds = %109, %106, %87
  %114 = phi <2 x float> [ %103, %87 ], [ %103, %106 ], [ %112, %109 ]
  %115 = getelementptr inbounds i8, ptr %0, i64 40
  %116 = load float, ptr %115, align 4
  %117 = getelementptr inbounds i8, ptr %0, i64 44
  %118 = load float, ptr %117, align 4
  %119 = load <2 x float>, ptr %14, align 4
  %120 = insertelement <2 x float> poison, float %118, i64 0
  %121 = shufflevector <2 x float> %120, <2 x float> poison, <2 x i32> zeroinitializer
  %122 = fmul <2 x float> %119, %121
  %123 = shufflevector <2 x float> %122, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %124 = insertelement <2 x float> poison, float %116, i64 0
  %125 = shufflevector <2 x float> %124, <2 x float> poison, <2 x i32> zeroinitializer
  %126 = fmul <2 x float> %119, %125
  %127 = fsub <2 x float> %126, %123
  %128 = fadd <2 x float> %126, %123
  %129 = shufflevector <2 x float> %127, <2 x float> %128, <2 x i32> <i32 0, i32 3>
  %130 = extractelement <2 x float> %127, i64 0
  %131 = fcmp uno float %130, 0.000000e+00
  br i1 %131, label %132, label %139, !prof !5

132:                                              ; preds = %113
  %133 = extractelement <2 x float> %128, i64 1
  %134 = fcmp uno float %133, 0.000000e+00
  br i1 %134, label %135, label %139, !prof !5

135:                                              ; preds = %132
  %136 = extractelement <2 x float> %119, i64 0
  %137 = extractelement <2 x float> %119, i64 1
  %138 = tail call <2 x float> @__mulsc3(float noundef %136, float noundef %137, float noundef %116, float noundef %118) #1
  br label %139

139:                                              ; preds = %135, %132, %113
  %140 = phi <2 x float> [ %129, %113 ], [ %129, %132 ], [ %138, %135 ]
  %141 = fadd <2 x float> %38, %62
  %142 = fadd <2 x float> %141, %88
  %143 = fsub <2 x float> %142, %114
  %144 = fsub <2 x float> %143, %140
  store <2 x float> %144, ptr %12, align 4
  store <2 x float> %144, ptr %2, align 4
  ret i32 0
}

attributes #0 = { nounwind uwtable "min-legal-vector-width"="64" "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 = { 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 = !{!"branch_weights", i32 1, i32 1048575}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,TailCallElimPass