; LLVM IR from ermig1979/Simd :: src/Simd/SimdBaseSynetScale.ll (ZN4Simd4Base26SynetScaleLayerForwardNhwcEPKfS2_S2_mmPf)

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

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN4Simd7AlignLoEmm(i64 noundef, i64 noundef) #1

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

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

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

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

23:                                               ; preds = %149, %22
  %24 = load i64, ptr %14, align 8, !tbaa !9
  %25 = load i64, ptr %11, align 8, !tbaa !9
  %26 = icmp ult i64 %24, %25
  br i1 %26, label %28, label %27

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

28:                                               ; preds = %23
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %29

29:                                               ; preds = %114, %28
  %30 = load i64, ptr %15, align 8, !tbaa !9
  %31 = load i64, ptr %13, align 8, !tbaa !9
  %32 = icmp ult i64 %30, %31
  br i1 %32, label %33, label %117

33:                                               ; preds = %29
  %34 = load ptr, ptr %7, align 8, !tbaa !5
  %35 = load i64, ptr %15, align 8, !tbaa !9
  %36 = add i64 %35, 0
  %37 = getelementptr inbounds float, ptr %34, i64 %36
  %38 = load float, ptr %37, align 4, !tbaa !11
  %39 = load ptr, ptr %8, align 8, !tbaa !5
  %40 = load i64, ptr %15, align 8, !tbaa !9
  %41 = add i64 %40, 0
  %42 = getelementptr inbounds float, ptr %39, i64 %41
  %43 = load float, ptr %42, align 4, !tbaa !11
  %44 = load ptr, ptr %9, align 8, !tbaa !5
  %45 = load i64, ptr %15, align 8, !tbaa !9
  %46 = add i64 %45, 0
  %47 = getelementptr inbounds float, ptr %44, i64 %46
  %48 = load float, ptr %47, align 4, !tbaa !11
  %49 = call float @llvm.fmuladd.f32(float %38, float %43, float %48)
  %50 = load ptr, ptr %12, align 8, !tbaa !5
  %51 = load i64, ptr %15, align 8, !tbaa !9
  %52 = add i64 %51, 0
  %53 = getelementptr inbounds float, ptr %50, i64 %52
  store float %49, ptr %53, align 4, !tbaa !11
  %54 = load ptr, ptr %7, align 8, !tbaa !5
  %55 = load i64, ptr %15, align 8, !tbaa !9
  %56 = add i64 %55, 1
  %57 = getelementptr inbounds float, ptr %54, i64 %56
  %58 = load float, ptr %57, align 4, !tbaa !11
  %59 = load ptr, ptr %8, align 8, !tbaa !5
  %60 = load i64, ptr %15, align 8, !tbaa !9
  %61 = add i64 %60, 1
  %62 = getelementptr inbounds float, ptr %59, i64 %61
  %63 = load float, ptr %62, align 4, !tbaa !11
  %64 = load ptr, ptr %9, align 8, !tbaa !5
  %65 = load i64, ptr %15, align 8, !tbaa !9
  %66 = add i64 %65, 1
  %67 = getelementptr inbounds float, ptr %64, i64 %66
  %68 = load float, ptr %67, align 4, !tbaa !11
  %69 = call float @llvm.fmuladd.f32(float %58, float %63, float %68)
  %70 = load ptr, ptr %12, align 8, !tbaa !5
  %71 = load i64, ptr %15, align 8, !tbaa !9
  %72 = add i64 %71, 1
  %73 = getelementptr inbounds float, ptr %70, i64 %72
  store float %69, ptr %73, align 4, !tbaa !11
  %74 = load ptr, ptr %7, align 8, !tbaa !5
  %75 = load i64, ptr %15, align 8, !tbaa !9
  %76 = add i64 %75, 2
  %77 = getelementptr inbounds float, ptr %74, i64 %76
  %78 = load float, ptr %77, align 4, !tbaa !11
  %79 = load ptr, ptr %8, align 8, !tbaa !5
  %80 = load i64, ptr %15, align 8, !tbaa !9
  %81 = add i64 %80, 2
  %82 = getelementptr inbounds float, ptr %79, i64 %81
  %83 = load float, ptr %82, align 4, !tbaa !11
  %84 = load ptr, ptr %9, align 8, !tbaa !5
  %85 = load i64, ptr %15, align 8, !tbaa !9
  %86 = add i64 %85, 2
  %87 = getelementptr inbounds float, ptr %84, i64 %86
  %88 = load float, ptr %87, align 4, !tbaa !11
  %89 = call float @llvm.fmuladd.f32(float %78, float %83, float %88)
  %90 = load ptr, ptr %12, align 8, !tbaa !5
  %91 = load i64, ptr %15, align 8, !tbaa !9
  %92 = add i64 %91, 2
  %93 = getelementptr inbounds float, ptr %90, i64 %92
  store float %89, ptr %93, align 4, !tbaa !11
  %94 = load ptr, ptr %7, align 8, !tbaa !5
  %95 = load i64, ptr %15, align 8, !tbaa !9
  %96 = add i64 %95, 3
  %97 = getelementptr inbounds float, ptr %94, i64 %96
  %98 = load float, ptr %97, align 4, !tbaa !11
  %99 = load ptr, ptr %8, align 8, !tbaa !5
  %100 = load i64, ptr %15, align 8, !tbaa !9
  %101 = add i64 %100, 3
  %102 = getelementptr inbounds float, ptr %99, i64 %101
  %103 = load float, ptr %102, align 4, !tbaa !11
  %104 = load ptr, ptr %9, align 8, !tbaa !5
  %105 = load i64, ptr %15, align 8, !tbaa !9
  %106 = add i64 %105, 3
  %107 = getelementptr inbounds float, ptr %104, i64 %106
  %108 = load float, ptr %107, align 4, !tbaa !11
  %109 = call float @llvm.fmuladd.f32(float %98, float %103, float %108)
  %110 = load ptr, ptr %12, align 8, !tbaa !5
  %111 = load i64, ptr %15, align 8, !tbaa !9
  %112 = add i64 %111, 3
  %113 = getelementptr inbounds float, ptr %110, i64 %112
  store float %109, ptr %113, align 4, !tbaa !11
  br label %114

114:                                              ; preds = %33
  %115 = load i64, ptr %15, align 8, !tbaa !9
  %116 = add i64 %115, 4
  store i64 %116, ptr %15, align 8, !tbaa !9
  br label %29, !llvm.loop !13

117:                                              ; preds = %29
  br label %118

118:                                              ; preds = %139, %117
  %119 = load i64, ptr %15, align 8, !tbaa !9
  %120 = load i64, ptr %10, align 8, !tbaa !9
  %121 = icmp ult i64 %119, %120
  br i1 %121, label %122, label %142

122:                                              ; preds = %118
  %123 = load ptr, ptr %7, align 8, !tbaa !5
  %124 = load i64, ptr %15, align 8, !tbaa !9
  %125 = getelementptr inbounds float, ptr %123, i64 %124
  %126 = load float, ptr %125, align 4, !tbaa !11
  %127 = load ptr, ptr %8, align 8, !tbaa !5
  %128 = load i64, ptr %15, align 8, !tbaa !9
  %129 = getelementptr inbounds float, ptr %127, i64 %128
  %130 = load float, ptr %129, align 4, !tbaa !11
  %131 = load ptr, ptr %9, align 8, !tbaa !5
  %132 = load i64, ptr %15, align 8, !tbaa !9
  %133 = getelementptr inbounds float, ptr %131, i64 %132
  %134 = load float, ptr %133, align 4, !tbaa !11
  %135 = call float @llvm.fmuladd.f32(float %126, float %130, float %134)
  %136 = load ptr, ptr %12, align 8, !tbaa !5
  %137 = load i64, ptr %15, align 8, !tbaa !9
  %138 = getelementptr inbounds float, ptr %136, i64 %137
  store float %135, ptr %138, align 4, !tbaa !11
  br label %139

139:                                              ; preds = %122
  %140 = load i64, ptr %15, align 8, !tbaa !9
  %141 = add i64 %140, 1
  store i64 %141, ptr %15, align 8, !tbaa !9
  br label %118, !llvm.loop !15

142:                                              ; preds = %118
  %143 = load i64, ptr %10, align 8, !tbaa !9
  %144 = load ptr, ptr %7, align 8, !tbaa !5
  %145 = getelementptr inbounds float, ptr %144, i64 %143
  store ptr %145, ptr %7, align 8, !tbaa !5
  %146 = load i64, ptr %10, align 8, !tbaa !9
  %147 = load ptr, ptr %12, align 8, !tbaa !5
  %148 = getelementptr inbounds float, ptr %147, i64 %146
  store ptr %148, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  br label %149

149:                                              ; preds = %142
  %150 = load i64, ptr %14, align 8, !tbaa !9
  %151 = add i64 %150, 1
  store i64 %151, ptr %14, align 8, !tbaa !9
  br label %23, !llvm.loop !16

152:                                              ; preds = %27
  br label %260

153:                                              ; preds = %6
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %154

154:                                              ; preds = %256, %153
  %155 = load i64, ptr %16, align 8, !tbaa !9
  %156 = load i64, ptr %11, align 8, !tbaa !9
  %157 = icmp ult i64 %155, %156
  br i1 %157, label %159, label %158

158:                                              ; preds = %154
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  br label %259

159:                                              ; preds = %154
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  store i64 0, ptr %17, align 8, !tbaa !9
  br label %160

160:                                              ; preds = %225, %159
  %161 = load i64, ptr %17, align 8, !tbaa !9
  %162 = load i64, ptr %13, align 8, !tbaa !9
  %163 = icmp ult i64 %161, %162
  br i1 %163, label %164, label %228

164:                                              ; preds = %160
  %165 = load ptr, ptr %7, align 8, !tbaa !5
  %166 = load i64, ptr %17, align 8, !tbaa !9
  %167 = add i64 %166, 0
  %168 = getelementptr inbounds float, ptr %165, i64 %167
  %169 = load float, ptr %168, align 4, !tbaa !11
  %170 = load ptr, ptr %8, align 8, !tbaa !5
  %171 = load i64, ptr %17, align 8, !tbaa !9
  %172 = add i64 %171, 0
  %173 = getelementptr inbounds float, ptr %170, i64 %172
  %174 = load float, ptr %173, align 4, !tbaa !11
  %175 = fmul float %169, %174
  %176 = load ptr, ptr %12, align 8, !tbaa !5
  %177 = load i64, ptr %17, align 8, !tbaa !9
  %178 = add i64 %177, 0
  %179 = getelementptr inbounds float, ptr %176, i64 %178
  store float %175, ptr %179, align 4, !tbaa !11
  %180 = load ptr, ptr %7, align 8, !tbaa !5
  %181 = load i64, ptr %17, align 8, !tbaa !9
  %182 = add i64 %181, 1
  %183 = getelementptr inbounds float, ptr %180, i64 %182
  %184 = load float, ptr %183, align 4, !tbaa !11
  %185 = load ptr, ptr %8, align 8, !tbaa !5
  %186 = load i64, ptr %17, align 8, !tbaa !9
  %187 = add i64 %186, 1
  %188 = getelementptr inbounds float, ptr %185, i64 %187
  %189 = load float, ptr %188, align 4, !tbaa !11
  %190 = fmul float %184, %189
  %191 = load ptr, ptr %12, align 8, !tbaa !5
  %192 = load i64, ptr %17, align 8, !tbaa !9
  %193 = add i64 %192, 1
  %194 = getelementptr inbounds float, ptr %191, i64 %193
  store float %190, ptr %194, align 4, !tbaa !11
  %195 = load ptr, ptr %7, align 8, !tbaa !5
  %196 = load i64, ptr %17, align 8, !tbaa !9
  %197 = add i64 %196, 2
  %198 = getelementptr inbounds float, ptr %195, i64 %197
  %199 = load float, ptr %198, align 4, !tbaa !11
  %200 = load ptr, ptr %8, align 8, !tbaa !5
  %201 = load i64, ptr %17, align 8, !tbaa !9
  %202 = add i64 %201, 2
  %203 = getelementptr inbounds float, ptr %200, i64 %202
  %204 = load float, ptr %203, align 4, !tbaa !11
  %205 = fmul float %199, %204
  %206 = load ptr, ptr %12, align 8, !tbaa !5
  %207 = load i64, ptr %17, align 8, !tbaa !9
  %208 = add i64 %207, 2
  %209 = getelementptr inbounds float, ptr %206, i64 %208
  store float %205, ptr %209, align 4, !tbaa !11
  %210 = load ptr, ptr %7, align 8, !tbaa !5
  %211 = load i64, ptr %17, align 8, !tbaa !9
  %212 = add i64 %211, 3
  %213 = getelementptr inbounds float, ptr %210, i64 %212
  %214 = load float, ptr %213, align 4, !tbaa !11
  %215 = load ptr, ptr %8, align 8, !tbaa !5
  %216 = load i64, ptr %17, align 8, !tbaa !9
  %217 = add i64 %216, 3
  %218 = getelementptr inbounds float, ptr %215, i64 %217
  %219 = load float, ptr %218, align 4, !tbaa !11
  %220 = fmul float %214, %219
  %221 = load ptr, ptr %12, align 8, !tbaa !5
  %222 = load i64, ptr %17, align 8, !tbaa !9
  %223 = add i64 %222, 3
  %224 = getelementptr inbounds float, ptr %221, i64 %223
  store float %220, ptr %224, align 4, !tbaa !11
  br label %225

225:                                              ; preds = %164
  %226 = load i64, ptr %17, align 8, !tbaa !9
  %227 = add i64 %226, 4
  store i64 %227, ptr %17, align 8, !tbaa !9
  br label %160, !llvm.loop !17

228:                                              ; preds = %160
  br label %229

229:                                              ; preds = %246, %228
  %230 = load i64, ptr %17, align 8, !tbaa !9
  %231 = load i64, ptr %10, align 8, !tbaa !9
  %232 = icmp ult i64 %230, %231
  br i1 %232, label %233, label %249

233:                                              ; preds = %229
  %234 = load ptr, ptr %7, align 8, !tbaa !5
  %235 = load i64, ptr %17, align 8, !tbaa !9
  %236 = getelementptr inbounds float, ptr %234, i64 %235
  %237 = load float, ptr %236, align 4, !tbaa !11
  %238 = load ptr, ptr %8, align 8, !tbaa !5
  %239 = load i64, ptr %17, align 8, !tbaa !9
  %240 = getelementptr inbounds float, ptr %238, i64 %239
  %241 = load float, ptr %240, align 4, !tbaa !11
  %242 = fmul float %237, %241
  %243 = load ptr, ptr %12, align 8, !tbaa !5
  %244 = load i64, ptr %17, align 8, !tbaa !9
  %245 = getelementptr inbounds float, ptr %243, i64 %244
  store float %242, ptr %245, align 4, !tbaa !11
  br label %246

246:                                              ; preds = %233
  %247 = load i64, ptr %17, align 8, !tbaa !9
  %248 = add i64 %247, 1
  store i64 %248, ptr %17, align 8, !tbaa !9
  br label %229, !llvm.loop !18

249:                                              ; preds = %229
  %250 = load i64, ptr %10, align 8, !tbaa !9
  %251 = load ptr, ptr %7, align 8, !tbaa !5
  %252 = getelementptr inbounds float, ptr %251, i64 %250
  store ptr %252, ptr %7, align 8, !tbaa !5
  %253 = load i64, ptr %10, align 8, !tbaa !9
  %254 = load ptr, ptr %12, align 8, !tbaa !5
  %255 = getelementptr inbounds float, ptr %254, i64 %253
  store ptr %255, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  br label %256

256:                                              ; preds = %249
  %257 = load i64, ptr %16, align 8, !tbaa !9
  %258 = add i64 %257, 1
  store i64 %258, ptr %16, align 8, !tbaa !9
  br label %154, !llvm.loop !19

259:                                              ; preds = %158
  br label %260

260:                                              ; preds = %259, %152
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  ret void
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}


; 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: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN4Simd7AlignLoEmm(i64 noundef, i64 noundef) local_unnamed_addr #0

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_ZN4Simd4Base26SynetScaleLayerForwardNhwcEPKfS2_S2_mmPf(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, ptr noundef readonly %2, i64 noundef %3, i64 noundef %4, ptr nocapture noundef writeonly %5) local_unnamed_addr #2 {
  %7 = ptrtoint ptr %1 to i64
  %8 = ptrtoint ptr %0 to i64
  %9 = ptrtoint ptr %5 to i64
  %10 = ptrtoint ptr %1 to i64
  %11 = ptrtoint ptr %0 to i64
  %12 = ptrtoint ptr %5 to i64
  %13 = ptrtoint ptr %2 to i64
  %14 = ptrtoint ptr %1 to i64
  %15 = ptrtoint ptr %0 to i64
  %16 = ptrtoint ptr %5 to i64
  %17 = ptrtoint ptr %2 to i64
  %18 = ptrtoint ptr %1 to i64
  %19 = ptrtoint ptr %0 to i64
  %20 = ptrtoint ptr %5 to i64
  %21 = tail call noundef i64 @_ZN4Simd7AlignLoEmm(i64 noundef %3, i64 noundef 4)
  %.not = icmp eq ptr %2, null
  %.not145 = icmp eq i64 %4, 0
  br i1 %.not, label %.preheader109, label %.preheader112

.preheader112:                                    ; preds = %6
  br i1 %.not145, label %.loopexit, label %.preheader111.lr.ph

.preheader111.lr.ph:                              ; preds = %.preheader112
  %.not143 = icmp eq i64 %21, 0
  br i1 %.not143, label %.preheader111.lr.ph.split, label %.preheader111.us.preheader

.preheader111.us.preheader:                       ; preds = %.preheader111.lr.ph
  %22 = sub i64 %20, %19
  %23 = sub i64 %20, %18
  %24 = shl i64 %3, 2
  %25 = sub i64 %20, %17
  %26 = add i64 %21, -1
  %27 = and i64 %26, -4
  %28 = add i64 %27, 5
  %umax = tail call i64 @llvm.umax.i64(i64 %3, i64 %28)
  %29 = add i64 %umax, -4
  %30 = sub i64 %29, %27
  %31 = add i64 %21, -1
  %32 = lshr i64 %31, 2
  %33 = shl i64 %3, 2
  %34 = add i64 %4, 4611686018427387903
  %35 = mul i64 %34, %3
  %36 = shl i64 %35, 2
  %37 = shl i64 %32, 4
  %38 = add i64 %36, %37
  %39 = add i64 %38, 16
  %scevgep187 = getelementptr i8, ptr %5, i64 %39
  %scevgep188 = getelementptr i8, ptr %0, i64 %39
  %40 = add i64 %37, 16
  %scevgep189 = getelementptr i8, ptr %1, i64 %40
  %scevgep190 = getelementptr i8, ptr %2, i64 %40
  %41 = add i64 %21, -1
  %42 = lshr i64 %41, 2
  %43 = add nuw nsw i64 %42, 1
  %min.iters.check204 = icmp ult i64 %21, 45
  %invariant.gep336 = getelementptr i8, ptr %5, i64 4
  %invariant.gep338 = getelementptr i8, ptr %5, i64 12
  %invariant.gep340 = getelementptr i8, ptr %5, i64 8
  %mul.result = shl i64 %32, 4
  %mul.result177 = shl i64 %32, 4
  %mul.overflow178 = icmp ugt i64 %31, 4611686018427387903
  %mul.result181 = shl i64 %32, 4
  %mul.result184 = shl i64 %32, 4
  %bound0 = icmp ugt ptr %scevgep188, %5
  %bound1 = icmp ugt ptr %scevgep187, %0
  %found.conflict = and i1 %bound0, %bound1
  %bound0192 = icmp ugt ptr %scevgep189, %5
  %bound1193 = icmp ugt ptr %scevgep187, %1
  %found.conflict194 = and i1 %bound0192, %bound1193
  %.mask = and i64 %3, 2305843009213693952
  %stride.check195 = icmp ne i64 %.mask, 0
  %44 = or i1 %found.conflict194, %stride.check195
  %conflict.rdx196 = or i1 %found.conflict, %44
  %bound0197 = icmp ugt ptr %scevgep190, %5
  %bound1198 = icmp ugt ptr %scevgep187, %2
  %found.conflict199 = and i1 %bound0197, %bound1198
  %conflict.rdx201 = or i1 %found.conflict199, %conflict.rdx196
  %n.vec207 = and i64 %43, 9223372036854775804
  %ind.end208 = shl i64 %n.vec207, 2
  %cmp.n214 = icmp eq i64 %43, %n.vec207
  %min.iters.check = icmp ult i64 %30, 8
  %diff.check = icmp ult i64 %22, 32
  %n.vec = and i64 %30, -8
  %cmp.n = icmp eq i64 %30, %n.vec
  br label %.preheader111.us

.preheader111.us:                                 ; preds = %.preheader111.us.preheader, %._crit_edge.us
  %.0100119.us = phi i64 [ %229, %._crit_edge.us ], [ 0, %.preheader111.us.preheader ]
  %.0101118.us = phi ptr [ %227, %._crit_edge.us ], [ %0, %.preheader111.us.preheader ]
  %.0103117.us = phi ptr [ %228, %._crit_edge.us ], [ %5, %.preheader111.us.preheader ]
  %45 = mul i64 %24, %.0100119.us
  %46 = add i64 %23, %45
  %47 = add i64 %25, %45
  br i1 %min.iters.check204, label %scalar.ph203.preheader, label %vector.scevcheck

scalar.ph203.preheader:                           ; preds = %vector.scevcheck, %middle.block202, %.preheader111.us
  %.098114.us.ph = phi i64 [ 0, %vector.scevcheck ], [ 0, %.preheader111.us ], [ %ind.end208, %middle.block202 ]
  br label %scalar.ph203

vector.scevcheck:                                 ; preds = %.preheader111.us
  %48 = mul i64 %33, %.0100119.us
  %gep337 = getelementptr i8, ptr %invariant.gep336, i64 %48
  %gep339 = getelementptr i8, ptr %invariant.gep338, i64 %48
  %gep341 = getelementptr i8, ptr %invariant.gep340, i64 %48
  %49 = getelementptr i8, ptr %gep341, i64 %mul.result
  %50 = icmp ult ptr %49, %gep341
  %51 = getelementptr i8, ptr %gep339, i64 %mul.result177
  %52 = icmp ult ptr %51, %gep339
  %53 = or i1 %52, %mul.overflow178
  %54 = getelementptr i8, ptr %gep337, i64 %mul.result181
  %55 = icmp ult ptr %54, %gep337
  %56 = getelementptr i8, ptr %.0103117.us, i64 %mul.result184
  %57 = icmp ult ptr %56, %.0103117.us
  %58 = or i1 %50, %53
  %59 = or i1 %55, %58
  %60 = or i1 %57, %59
  %brmerge = select i1 %60, i1 true, i1 %conflict.rdx201
  br i1 %brmerge, label %scalar.ph203.preheader, label %vector.ph205

vector.ph205:                                     ; preds = %vector.scevcheck
  %invariant.gep = getelementptr i8, ptr %.0103117.us, i64 -12
  br label %vector.body210

vector.body210:                                   ; preds = %vector.body210, %vector.ph205
  %index211 = phi i64 [ 0, %vector.ph205 ], [ %index.next213, %vector.body210 ]
  %offset.idx212 = shl i64 %index211, 2
  %61 = or disjoint i64 %offset.idx212, 4
  %62 = or disjoint i64 %offset.idx212, 8
  %63 = or disjoint i64 %offset.idx212, 12
  %64 = getelementptr inbounds float, ptr %.0101118.us, i64 %offset.idx212
  %65 = getelementptr inbounds float, ptr %.0101118.us, i64 %61
  %66 = getelementptr inbounds float, ptr %.0101118.us, i64 %62
  %67 = getelementptr inbounds float, ptr %.0101118.us, i64 %63
  %68 = load float, ptr %64, align 4, !tbaa !5, !alias.scope !9
  %69 = load float, ptr %65, align 4, !tbaa !5, !alias.scope !9
  %70 = load float, ptr %66, align 4, !tbaa !5, !alias.scope !9
  %71 = load float, ptr %67, align 4, !tbaa !5, !alias.scope !9
  %72 = insertelement <4 x float> poison, float %68, i64 0
  %73 = insertelement <4 x float> %72, float %69, i64 1
  %74 = insertelement <4 x float> %73, float %70, i64 2
  %75 = insertelement <4 x float> %74, float %71, i64 3
  %76 = getelementptr inbounds float, ptr %1, i64 %offset.idx212
  %77 = getelementptr inbounds float, ptr %1, i64 %61
  %78 = getelementptr inbounds float, ptr %1, i64 %62
  %79 = getelementptr inbounds float, ptr %1, i64 %63
  %80 = load float, ptr %76, align 4, !tbaa !5, !alias.scope !12
  %81 = load float, ptr %77, align 4, !tbaa !5, !alias.scope !12
  %82 = load float, ptr %78, align 4, !tbaa !5, !alias.scope !12
  %83 = load float, ptr %79, align 4, !tbaa !5, !alias.scope !12
  %84 = insertelement <4 x float> poison, float %80, i64 0
  %85 = insertelement <4 x float> %84, float %81, i64 1
  %86 = insertelement <4 x float> %85, float %82, i64 2
  %87 = insertelement <4 x float> %86, float %83, i64 3
  %88 = getelementptr inbounds float, ptr %2, i64 %offset.idx212
  %89 = getelementptr inbounds float, ptr %2, i64 %61
  %90 = getelementptr inbounds float, ptr %2, i64 %62
  %91 = getelementptr inbounds float, ptr %2, i64 %63
  %92 = load float, ptr %88, align 4, !tbaa !5, !alias.scope !14
  %93 = load float, ptr %89, align 4, !tbaa !5, !alias.scope !14
  %94 = load float, ptr %90, align 4, !tbaa !5, !alias.scope !14
  %95 = load float, ptr %91, align 4, !tbaa !5, !alias.scope !14
  %96 = insertelement <4 x float> poison, float %92, i64 0
  %97 = insertelement <4 x float> %96, float %93, i64 1
  %98 = insertelement <4 x float> %97, float %94, i64 2
  %99 = insertelement <4 x float> %98, float %95, i64 3
  %100 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %75, <4 x float> %87, <4 x float> %99)
  %101 = or disjoint i64 %offset.idx212, 1
  %102 = or disjoint i64 %offset.idx212, 5
  %103 = or disjoint i64 %offset.idx212, 9
  %104 = or disjoint i64 %offset.idx212, 13
  %105 = getelementptr inbounds float, ptr %.0101118.us, i64 %101
  %106 = getelementptr inbounds float, ptr %.0101118.us, i64 %102
  %107 = getelementptr inbounds float, ptr %.0101118.us, i64 %103
  %108 = getelementptr inbounds float, ptr %.0101118.us, i64 %104
  %109 = load float, ptr %105, align 4, !tbaa !5, !alias.scope !9
  %110 = load float, ptr %106, align 4, !tbaa !5, !alias.scope !9
  %111 = load float, ptr %107, align 4, !tbaa !5, !alias.scope !9
  %112 = load float, ptr %108, align 4, !tbaa !5, !alias.scope !9
  %113 = insertelement <4 x float> poison, float %109, i64 0
  %114 = insertelement <4 x float> %113, float %110, i64 1
  %115 = insertelement <4 x float> %114, float %111, i64 2
  %116 = insertelement <4 x float> %115, float %112, i64 3
  %117 = getelementptr inbounds float, ptr %1, i64 %101
  %118 = getelementptr inbounds float, ptr %1, i64 %102
  %119 = getelementptr inbounds float, ptr %1, i64 %103
  %120 = getelementptr inbounds float, ptr %1, i64 %104
  %121 = load float, ptr %117, align 4, !tbaa !5, !alias.scope !12
  %122 = load float, ptr %118, align 4, !tbaa !5, !alias.scope !12
  %123 = load float, ptr %119, align 4, !tbaa !5, !alias.scope !12
  %124 = load float, ptr %120, align 4, !tbaa !5, !alias.scope !12
  %125 = insertelement <4 x float> poison, float %121, i64 0
  %126 = insertelement <4 x float> %125, float %122, i64 1
  %127 = insertelement <4 x float> %126, float %123, i64 2
  %128 = insertelement <4 x float> %127, float %124, i64 3
  %129 = getelementptr inbounds float, ptr %2, i64 %101
  %130 = getelementptr inbounds float, ptr %2, i64 %102
  %131 = getelementptr inbounds float, ptr %2, i64 %103
  %132 = getelementptr inbounds float, ptr %2, i64 %104
  %133 = load float, ptr %129, align 4, !tbaa !5, !alias.scope !14
  %134 = load float, ptr %130, align 4, !tbaa !5, !alias.scope !14
  %135 = load float, ptr %131, align 4, !tbaa !5, !alias.scope !14
  %136 = load float, ptr %132, align 4, !tbaa !5, !alias.scope !14
  %137 = insertelement <4 x float> poison, float %133, i64 0
  %138 = insertelement <4 x float> %137, float %134, i64 1
  %139 = insertelement <4 x float> %138, float %135, i64 2
  %140 = insertelement <4 x float> %139, float %136, i64 3
  %141 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %116, <4 x float> %128, <4 x float> %140)
  %142 = or disjoint i64 %offset.idx212, 2
  %143 = or disjoint i64 %offset.idx212, 6
  %144 = or disjoint i64 %offset.idx212, 10
  %145 = or disjoint i64 %offset.idx212, 14
  %146 = getelementptr inbounds float, ptr %.0101118.us, i64 %142
  %147 = getelementptr inbounds float, ptr %.0101118.us, i64 %143
  %148 = getelementptr inbounds float, ptr %.0101118.us, i64 %144
  %149 = getelementptr inbounds float, ptr %.0101118.us, i64 %145
  %150 = load float, ptr %146, align 4, !tbaa !5, !alias.scope !9
  %151 = load float, ptr %147, align 4, !tbaa !5, !alias.scope !9
  %152 = load float, ptr %148, align 4, !tbaa !5, !alias.scope !9
  %153 = load float, ptr %149, align 4, !tbaa !5, !alias.scope !9
  %154 = insertelement <4 x float> poison, float %150, i64 0
  %155 = insertelement <4 x float> %154, float %151, i64 1
  %156 = insertelement <4 x float> %155, float %152, i64 2
  %157 = insertelement <4 x float> %156, float %153, i64 3
  %158 = getelementptr inbounds float, ptr %1, i64 %142
  %159 = getelementptr inbounds float, ptr %1, i64 %143
  %160 = getelementptr inbounds float, ptr %1, i64 %144
  %161 = getelementptr inbounds float, ptr %1, i64 %145
  %162 = load float, ptr %158, align 4, !tbaa !5, !alias.scope !12
  %163 = load float, ptr %159, align 4, !tbaa !5, !alias.scope !12
  %164 = load float, ptr %160, align 4, !tbaa !5, !alias.scope !12
  %165 = load float, ptr %161, align 4, !tbaa !5, !alias.scope !12
  %166 = insertelement <4 x float> poison, float %162, i64 0
  %167 = insertelement <4 x float> %166, float %163, i64 1
  %168 = insertelement <4 x float> %167, float %164, i64 2
  %169 = insertelement <4 x float> %168, float %165, i64 3
  %170 = getelementptr inbounds float, ptr %2, i64 %142
  %171 = getelementptr inbounds float, ptr %2, i64 %143
  %172 = getelementptr inbounds float, ptr %2, i64 %144
  %173 = getelementptr inbounds float, ptr %2, i64 %145
  %174 = load float, ptr %170, align 4, !tbaa !5, !alias.scope !14
  %175 = load float, ptr %171, align 4, !tbaa !5, !alias.scope !14
  %176 = load float, ptr %172, align 4, !tbaa !5, !alias.scope !14
  %177 = load float, ptr %173, align 4, !tbaa !5, !alias.scope !14
  %178 = insertelement <4 x float> poison, float %174, i64 0
  %179 = insertelement <4 x float> %178, float %175, i64 1
  %180 = insertelement <4 x float> %179, float %176, i64 2
  %181 = insertelement <4 x float> %180, float %177, i64 3
  %182 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %157, <4 x float> %169, <4 x float> %181)
  %183 = or disjoint i64 %offset.idx212, 3
  %184 = or disjoint i64 %offset.idx212, 7
  %185 = or disjoint i64 %offset.idx212, 11
  %186 = or disjoint i64 %offset.idx212, 15
  %187 = getelementptr inbounds float, ptr %.0101118.us, i64 %183
  %188 = getelementptr inbounds float, ptr %.0101118.us, i64 %184
  %189 = getelementptr inbounds float, ptr %.0101118.us, i64 %185
  %190 = getelementptr inbounds float, ptr %.0101118.us, i64 %186
  %191 = load float, ptr %187, align 4, !tbaa !5, !alias.scope !9
  %192 = load float, ptr %188, align 4, !tbaa !5, !alias.scope !9
  %193 = load float, ptr %189, align 4, !tbaa !5, !alias.scope !9
  %194 = load float, ptr %190, align 4, !tbaa !5, !alias.scope !9
  %195 = insertelement <4 x float> poison, float %191, i64 0
  %196 = insertelement <4 x float> %195, float %192, i64 1
  %197 = insertelement <4 x float> %196, float %193, i64 2
  %198 = insertelement <4 x float> %197, float %194, i64 3
  %199 = getelementptr inbounds float, ptr %1, i64 %183
  %200 = getelementptr inbounds float, ptr %1, i64 %184
  %201 = getelementptr inbounds float, ptr %1, i64 %185
  %202 = getelementptr inbounds float, ptr %1, i64 %186
  %203 = load float, ptr %199, align 4, !tbaa !5, !alias.scope !12
  %204 = load float, ptr %200, align 4, !tbaa !5, !alias.scope !12
  %205 = load float, ptr %201, align 4, !tbaa !5, !alias.scope !12
  %206 = load float, ptr %202, align 4, !tbaa !5, !alias.scope !12
  %207 = insertelement <4 x float> poison, float %203, i64 0
  %208 = insertelement <4 x float> %207, float %204, i64 1
  %209 = insertelement <4 x float> %208, float %205, i64 2
  %210 = insertelement <4 x float> %209, float %206, i64 3
  %211 = getelementptr inbounds float, ptr %2, i64 %183
  %212 = getelementptr inbounds float, ptr %2, i64 %184
  %213 = getelementptr inbounds float, ptr %2, i64 %185
  %214 = getelementptr inbounds float, ptr %2, i64 %186
  %215 = load float, ptr %211, align 4, !tbaa !5, !alias.scope !14
  %216 = load float, ptr %212, align 4, !tbaa !5, !alias.scope !14
  %217 = load float, ptr %213, align 4, !tbaa !5, !alias.scope !14
  %218 = load float, ptr %214, align 4, !tbaa !5, !alias.scope !14
  %219 = insertelement <4 x float> poison, float %215, i64 0
  %220 = insertelement <4 x float> %219, float %216, i64 1
  %221 = insertelement <4 x float> %220, float %217, i64 2
  %222 = insertelement <4 x float> %221, float %218, i64 3
  %223 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %198, <4 x float> %210, <4 x float> %222)
  %gep = getelementptr float, ptr %invariant.gep, i64 %183
  %224 = shufflevector <4 x float> %100, <4 x float> %141, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %225 = shufflevector <4 x float> %182, <4 x float> %223, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %interleaved.vec = shufflevector <8 x float> %224, <8 x float> %225, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 1, i32 5, i32 9, i32 13, i32 2, i32 6, i32 10, i32 14, i32 3, i32 7, i32 11, i32 15>
  store <16 x float> %interleaved.vec, ptr %gep, align 4, !tbaa !5
  %index.next213 = add nuw i64 %index211, 4
  %226 = icmp eq i64 %index.next213, %n.vec207
  br i1 %226, label %middle.block202, label %vector.body210, !llvm.loop !16

middle.block202:                                  ; preds = %vector.body210
  br i1 %cmp.n214, label %..preheader110_crit_edge.us, label %scalar.ph203.preheader

._crit_edge.us:                                   ; preds = %.lr.ph116.us, %middle.block, %..preheader110_crit_edge.us
  %227 = getelementptr inbounds float, ptr %.0101118.us, i64 %3
  %228 = getelementptr float, ptr %.0103117.us, i64 %3
  %229 = add nuw i64 %.0100119.us, 1
  %exitcond.not = icmp eq i64 %229, %4
  br i1 %exitcond.not, label %.loopexit, label %.preheader111.us, !llvm.loop !20

.lr.ph116.us:                                     ; preds = %.lr.ph116.us.preheader328, %.lr.ph116.us
  %.199115.us = phi i64 [ %238, %.lr.ph116.us ], [ %.199115.us.ph, %.lr.ph116.us.preheader328 ]
  %230 = getelementptr inbounds float, ptr %.0101118.us, i64 %.199115.us
  %231 = load float, ptr %230, align 4, !tbaa !5
  %232 = getelementptr inbounds float, ptr %1, i64 %.199115.us
  %233 = load float, ptr %232, align 4, !tbaa !5
  %234 = getelementptr inbounds float, ptr %2, i64 %.199115.us
  %235 = load float, ptr %234, align 4, !tbaa !5
  %236 = tail call float @llvm.fmuladd.f32(float %231, float %233, float %235)
  %237 = getelementptr inbounds float, ptr %.0103117.us, i64 %.199115.us
  store float %236, ptr %237, align 4, !tbaa !5
  %238 = add nuw i64 %.199115.us, 1
  %239 = icmp ult i64 %238, %3
  br i1 %239, label %.lr.ph116.us, label %._crit_edge.us, !llvm.loop !21

scalar.ph203:                                     ; preds = %scalar.ph203.preheader, %scalar.ph203
  %.098114.us = phi i64 [ %275, %scalar.ph203 ], [ %.098114.us.ph, %scalar.ph203.preheader ]
  %240 = getelementptr inbounds float, ptr %.0101118.us, i64 %.098114.us
  %241 = load float, ptr %240, align 4, !tbaa !5
  %242 = getelementptr inbounds float, ptr %1, i64 %.098114.us
  %243 = load float, ptr %242, align 4, !tbaa !5
  %244 = getelementptr inbounds float, ptr %2, i64 %.098114.us
  %245 = load float, ptr %244, align 4, !tbaa !5
  %246 = tail call float @llvm.fmuladd.f32(float %241, float %243, float %245)
  %247 = getelementptr inbounds float, ptr %.0103117.us, i64 %.098114.us
  store float %246, ptr %247, align 4, !tbaa !5
  %248 = or disjoint i64 %.098114.us, 1
  %249 = getelementptr inbounds float, ptr %.0101118.us, i64 %248
  %250 = load float, ptr %249, align 4, !tbaa !5
  %251 = getelementptr inbounds float, ptr %1, i64 %248
  %252 = load float, ptr %251, align 4, !tbaa !5
  %253 = getelementptr inbounds float, ptr %2, i64 %248
  %254 = load float, ptr %253, align 4, !tbaa !5
  %255 = tail call float @llvm.fmuladd.f32(float %250, float %252, float %254)
  %256 = getelementptr inbounds float, ptr %.0103117.us, i64 %248
  store float %255, ptr %256, align 4, !tbaa !5
  %257 = or disjoint i64 %.098114.us, 2
  %258 = getelementptr inbounds float, ptr %.0101118.us, i64 %257
  %259 = load float, ptr %258, align 4, !tbaa !5
  %260 = getelementptr inbounds float, ptr %1, i64 %257
  %261 = load float, ptr %260, align 4, !tbaa !5
  %262 = getelementptr inbounds float, ptr %2, i64 %257
  %263 = load float, ptr %262, align 4, !tbaa !5
  %264 = tail call float @llvm.fmuladd.f32(float %259, float %261, float %263)
  %265 = getelementptr inbounds float, ptr %.0103117.us, i64 %257
  store float %264, ptr %265, align 4, !tbaa !5
  %266 = or disjoint i64 %.098114.us, 3
  %267 = getelementptr inbounds float, ptr %.0101118.us, i64 %266
  %268 = load float, ptr %267, align 4, !tbaa !5
  %269 = getelementptr inbounds float, ptr %1, i64 %266
  %270 = load float, ptr %269, align 4, !tbaa !5
  %271 = getelementptr inbounds float, ptr %2, i64 %266
  %272 = load float, ptr %271, align 4, !tbaa !5
  %273 = tail call float @llvm.fmuladd.f32(float %268, float %270, float %272)
  %274 = getelementptr inbounds float, ptr %.0103117.us, i64 %266
  store float %273, ptr %274, align 4, !tbaa !5
  %275 = add nuw i64 %.098114.us, 4
  %276 = icmp ult i64 %275, %21
  br i1 %276, label %scalar.ph203, label %..preheader110_crit_edge.us, !llvm.loop !22

..preheader110_crit_edge.us:                      ; preds = %scalar.ph203, %middle.block202
  %.lcssa166 = phi i64 [ %ind.end208, %middle.block202 ], [ %275, %scalar.ph203 ]
  %277 = icmp ult i64 %.lcssa166, %3
  br i1 %277, label %.lr.ph116.us.preheader, label %._crit_edge.us

.lr.ph116.us.preheader:                           ; preds = %..preheader110_crit_edge.us
  br i1 %min.iters.check, label %.lr.ph116.us.preheader328, label %vector.memcheck

.lr.ph116.us.preheader328:                        ; preds = %middle.block, %vector.memcheck, %.lr.ph116.us.preheader
  %.199115.us.ph = phi i64 [ %.lcssa166, %vector.memcheck ], [ %.lcssa166, %.lr.ph116.us.preheader ], [ %ind.end, %middle.block ]
  br label %.lr.ph116.us

vector.memcheck:                                  ; preds = %.lr.ph116.us.preheader
  %diff.check167 = icmp ult i64 %46, 32
  %conflict.rdx = or i1 %diff.check, %diff.check167
  %diff.check168 = icmp ult i64 %47, 32
  %conflict.rdx169 = or i1 %conflict.rdx, %diff.check168
  br i1 %conflict.rdx169, label %.lr.ph116.us.preheader328, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %ind.end = add i64 %.lcssa166, %n.vec
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = add i64 %.lcssa166, %index
  %278 = getelementptr inbounds float, ptr %.0101118.us, i64 %offset.idx
  %279 = getelementptr inbounds i8, ptr %278, i64 16
  %wide.load = load <4 x float>, ptr %278, align 4, !tbaa !5
  %wide.load170 = load <4 x float>, ptr %279, align 4, !tbaa !5
  %280 = getelementptr inbounds float, ptr %1, i64 %offset.idx
  %281 = getelementptr inbounds i8, ptr %280, i64 16
  %wide.load171 = load <4 x float>, ptr %280, align 4, !tbaa !5
  %wide.load172 = load <4 x float>, ptr %281, align 4, !tbaa !5
  %282 = getelementptr inbounds float, ptr %2, i64 %offset.idx
  %283 = getelementptr inbounds i8, ptr %282, i64 16
  %wide.load173 = load <4 x float>, ptr %282, align 4, !tbaa !5
  %wide.load174 = load <4 x float>, ptr %283, align 4, !tbaa !5
  %284 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %wide.load, <4 x float> %wide.load171, <4 x float> %wide.load173)
  %285 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %wide.load170, <4 x float> %wide.load172, <4 x float> %wide.load174)
  %286 = getelementptr inbounds float, ptr %.0103117.us, i64 %offset.idx
  %287 = getelementptr inbounds i8, ptr %286, i64 16
  store <4 x float> %284, ptr %286, align 4, !tbaa !5
  store <4 x float> %285, ptr %287, align 4, !tbaa !5
  %index.next = add nuw i64 %index, 8
  %288 = icmp eq i64 %index.next, %n.vec
  br i1 %288, label %middle.block, label %vector.body, !llvm.loop !23

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge.us, label %.lr.ph116.us.preheader328

.preheader111.lr.ph.split:                        ; preds = %.preheader111.lr.ph
  %.not144 = icmp eq i64 %3, 0
  br i1 %.not144, label %.loopexit, label %.preheader111.us120.preheader

.preheader111.us120.preheader:                    ; preds = %.preheader111.lr.ph.split
  %289 = sub i64 %16, %15
  %290 = sub i64 %16, %14
  %291 = shl i64 %3, 2
  %292 = sub i64 %16, %13
  %min.iters.check223 = icmp ult i64 %3, 8
  %diff.check216 = icmp ult i64 %289, 32
  %n.vec226 = and i64 %3, -8
  %cmp.n237 = icmp eq i64 %n.vec226, %3
  %xtraiter = and i64 %3, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %293 = add i64 %3, -1
  br label %.preheader111.us120

.preheader111.us120:                              ; preds = %.preheader111.us120.preheader, %._crit_edge.us126
  %.0100119.us121 = phi i64 [ %338, %._crit_edge.us126 ], [ 0, %.preheader111.us120.preheader ]
  %.0101118.us122 = phi ptr [ %336, %._crit_edge.us126 ], [ %0, %.preheader111.us120.preheader ]
  %.0103117.us123 = phi ptr [ %337, %._crit_edge.us126 ], [ %5, %.preheader111.us120.preheader ]
  br i1 %min.iters.check223, label %scalar.ph222.preheader, label %vector.memcheck215

vector.memcheck215:                               ; preds = %.preheader111.us120
  %294 = mul i64 %291, %.0100119.us121
  %295 = add i64 %292, %294
  %296 = add i64 %290, %294
  %diff.check217 = icmp ult i64 %296, 32
  %conflict.rdx218 = or i1 %diff.check216, %diff.check217
  %diff.check219 = icmp ult i64 %295, 32
  %conflict.rdx220 = or i1 %conflict.rdx218, %diff.check219
  br i1 %conflict.rdx220, label %scalar.ph222.preheader, label %vector.body228

vector.body228:                                   ; preds = %vector.memcheck215, %vector.body228
  %index229 = phi i64 [ %index.next236, %vector.body228 ], [ 0, %vector.memcheck215 ]
  %297 = getelementptr inbounds float, ptr %.0101118.us122, i64 %index229
  %298 = getelementptr inbounds i8, ptr %297, i64 16
  %wide.load230 = load <4 x float>, ptr %297, align 4, !tbaa !5
  %wide.load231 = load <4 x float>, ptr %298, align 4, !tbaa !5
  %299 = getelementptr inbounds float, ptr %1, i64 %index229
  %300 = getelementptr inbounds i8, ptr %299, i64 16
  %wide.load232 = load <4 x float>, ptr %299, align 4, !tbaa !5
  %wide.load233 = load <4 x float>, ptr %300, align 4, !tbaa !5
  %301 = getelementptr inbounds float, ptr %2, i64 %index229
  %302 = getelementptr inbounds i8, ptr %301, i64 16
  %wide.load234 = load <4 x float>, ptr %301, align 4, !tbaa !5
  %wide.load235 = load <4 x float>, ptr %302, align 4, !tbaa !5
  %303 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %wide.load230, <4 x float> %wide.load232, <4 x float> %wide.load234)
  %304 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %wide.load231, <4 x float> %wide.load233, <4 x float> %wide.load235)
  %305 = getelementptr inbounds float, ptr %.0103117.us123, i64 %index229
  %306 = getelementptr inbounds i8, ptr %305, i64 16
  store <4 x float> %303, ptr %305, align 4, !tbaa !5
  store <4 x float> %304, ptr %306, align 4, !tbaa !5
  %index.next236 = add nuw i64 %index229, 8
  %307 = icmp eq i64 %index.next236, %n.vec226
  br i1 %307, label %middle.block221, label %vector.body228, !llvm.loop !24

middle.block221:                                  ; preds = %vector.body228
  br i1 %cmp.n237, label %._crit_edge.us126, label %scalar.ph222.preheader

scalar.ph222.preheader:                           ; preds = %middle.block221, %vector.memcheck215, %.preheader111.us120
  %.199115.us124.ph = phi i64 [ 0, %vector.memcheck215 ], [ 0, %.preheader111.us120 ], [ %n.vec226, %middle.block221 ]
  br i1 %lcmp.mod.not, label %scalar.ph222.prol.loopexit, label %scalar.ph222.prol

scalar.ph222.prol:                                ; preds = %scalar.ph222.preheader
  %308 = getelementptr inbounds float, ptr %.0101118.us122, i64 %.199115.us124.ph
  %309 = load float, ptr %308, align 4, !tbaa !5
  %310 = getelementptr inbounds float, ptr %1, i64 %.199115.us124.ph
  %311 = load float, ptr %310, align 4, !tbaa !5
  %312 = getelementptr inbounds float, ptr %2, i64 %.199115.us124.ph
  %313 = load float, ptr %312, align 4, !tbaa !5
  %314 = tail call float @llvm.fmuladd.f32(float %309, float %311, float %313)
  %315 = getelementptr inbounds float, ptr %.0103117.us123, i64 %.199115.us124.ph
  store float %314, ptr %315, align 4, !tbaa !5
  %316 = or disjoint i64 %.199115.us124.ph, 1
  br label %scalar.ph222.prol.loopexit

scalar.ph222.prol.loopexit:                       ; preds = %scalar.ph222.prol, %scalar.ph222.preheader
  %.199115.us124.unr = phi i64 [ %.199115.us124.ph, %scalar.ph222.preheader ], [ %316, %scalar.ph222.prol ]
  %317 = icmp eq i64 %.199115.us124.ph, %293
  br i1 %317, label %._crit_edge.us126, label %scalar.ph222

scalar.ph222:                                     ; preds = %scalar.ph222.prol.loopexit, %scalar.ph222
  %.199115.us124 = phi i64 [ %335, %scalar.ph222 ], [ %.199115.us124.unr, %scalar.ph222.prol.loopexit ]
  %318 = getelementptr inbounds float, ptr %.0101118.us122, i64 %.199115.us124
  %319 = load float, ptr %318, align 4, !tbaa !5
  %320 = getelementptr inbounds float, ptr %1, i64 %.199115.us124
  %321 = load float, ptr %320, align 4, !tbaa !5
  %322 = getelementptr inbounds float, ptr %2, i64 %.199115.us124
  %323 = load float, ptr %322, align 4, !tbaa !5
  %324 = tail call float @llvm.fmuladd.f32(float %319, float %321, float %323)
  %325 = getelementptr inbounds float, ptr %.0103117.us123, i64 %.199115.us124
  store float %324, ptr %325, align 4, !tbaa !5
  %326 = add nuw i64 %.199115.us124, 1
  %327 = getelementptr inbounds float, ptr %.0101118.us122, i64 %326
  %328 = load float, ptr %327, align 4, !tbaa !5
  %329 = getelementptr inbounds float, ptr %1, i64 %326
  %330 = load float, ptr %329, align 4, !tbaa !5
  %331 = getelementptr inbounds float, ptr %2, i64 %326
  %332 = load float, ptr %331, align 4, !tbaa !5
  %333 = tail call float @llvm.fmuladd.f32(float %328, float %330, float %332)
  %334 = getelementptr inbounds float, ptr %.0103117.us123, i64 %326
  store float %333, ptr %334, align 4, !tbaa !5
  %335 = add nuw i64 %.199115.us124, 2
  %exitcond154.not.1 = icmp eq i64 %335, %3
  br i1 %exitcond154.not.1, label %._crit_edge.us126, label %scalar.ph222, !llvm.loop !25

._crit_edge.us126:                                ; preds = %scalar.ph222.prol.loopexit, %scalar.ph222, %middle.block221
  %336 = getelementptr inbounds float, ptr %.0101118.us122, i64 %3
  %337 = getelementptr inbounds float, ptr %.0103117.us123, i64 %3
  %338 = add nuw i64 %.0100119.us121, 1
  %exitcond155.not = icmp eq i64 %338, %4
  br i1 %exitcond155.not, label %.loopexit, label %.preheader111.us120, !llvm.loop !20

.preheader109:                                    ; preds = %6
  br i1 %.not145, label %.loopexit, label %.preheader108.lr.ph

.preheader108.lr.ph:                              ; preds = %.preheader109
  %.not146 = icmp eq i64 %21, 0
  br i1 %.not146, label %.preheader108.lr.ph.split, label %.preheader108.us.preheader

.preheader108.us.preheader:                       ; preds = %.preheader108.lr.ph
  %339 = sub i64 %12, %11
  %340 = sub i64 %12, %10
  %341 = shl i64 %3, 2
  %342 = add i64 %21, -1
  %343 = and i64 %342, -4
  %344 = add i64 %343, 5
  %umax242 = tail call i64 @llvm.umax.i64(i64 %3, i64 %344)
  %345 = add i64 %umax242, -4
  %346 = sub i64 %345, %343
  %347 = add i64 %21, -1
  %348 = lshr i64 %347, 2
  %349 = shl i64 %3, 2
  %350 = add i64 %4, 4611686018427387903
  %351 = mul i64 %350, %3
  %352 = shl i64 %351, 2
  %353 = shl i64 %348, 4
  %354 = add i64 %352, %353
  %355 = add i64 %354, 16
  %scevgep277 = getelementptr i8, ptr %5, i64 %355
  %scevgep278 = getelementptr i8, ptr %0, i64 %355
  %356 = getelementptr i8, ptr %1, i64 %353
  %scevgep279 = getelementptr i8, ptr %356, i64 16
  %357 = add i64 %21, -1
  %358 = lshr i64 %357, 2
  %359 = add nuw nsw i64 %358, 1
  %min.iters.check292 = icmp ult i64 %21, 117
  %invariant.gep344 = getelementptr i8, ptr %5, i64 4
  %invariant.gep346 = getelementptr i8, ptr %5, i64 12
  %invariant.gep348 = getelementptr i8, ptr %5, i64 8
  %mul.result263 = shl i64 %348, 4
  %mul.result267 = shl i64 %348, 4
  %mul.overflow268 = icmp ugt i64 %347, 4611686018427387903
  %mul.result271 = shl i64 %348, 4
  %mul.result274 = shl i64 %348, 4
  %bound0280 = icmp ugt ptr %scevgep278, %5
  %bound1281 = icmp ugt ptr %scevgep277, %0
  %found.conflict282 = and i1 %bound0280, %bound1281
  %bound0285 = icmp ugt ptr %scevgep279, %5
  %bound1286 = icmp ugt ptr %scevgep277, %1
  %found.conflict287 = and i1 %bound0285, %bound1286
  %.mask323 = and i64 %3, 2305843009213693952
  %stride.check288 = icmp ne i64 %.mask323, 0
  %360 = or i1 %found.conflict287, %stride.check288
  %conflict.rdx289 = or i1 %found.conflict282, %360
  %n.vec295 = and i64 %359, 9223372036854775806
  %ind.end296 = shl i64 %n.vec295, 2
  %cmp.n303 = icmp eq i64 %359, %n.vec295
  %min.iters.check245 = icmp ult i64 %346, 8
  %diff.check239 = icmp ult i64 %339, 32
  %n.vec248 = and i64 %346, -8
  %cmp.n259 = icmp eq i64 %346, %n.vec248
  br label %.preheader108.us

.preheader108.us:                                 ; preds = %.preheader108.us.preheader, %._crit_edge.us134
  %.097132.us = phi i64 [ %440, %._crit_edge.us134 ], [ 0, %.preheader108.us.preheader ]
  %.1102131.us = phi ptr [ %438, %._crit_edge.us134 ], [ %0, %.preheader108.us.preheader ]
  %.1104130.us = phi ptr [ %439, %._crit_edge.us134 ], [ %5, %.preheader108.us.preheader ]
  %361 = mul i64 %341, %.097132.us
  %362 = add i64 %340, %361
  br i1 %min.iters.check292, label %scalar.ph291.preheader, label %vector.scevcheck260

scalar.ph291.preheader:                           ; preds = %vector.scevcheck260, %middle.block290, %.preheader108.us
  %.0127.us.ph = phi i64 [ 0, %vector.scevcheck260 ], [ 0, %.preheader108.us ], [ %ind.end296, %middle.block290 ]
  br label %scalar.ph291

vector.scevcheck260:                              ; preds = %.preheader108.us
  %363 = mul i64 %349, %.097132.us
  %gep345 = getelementptr i8, ptr %invariant.gep344, i64 %363
  %gep347 = getelementptr i8, ptr %invariant.gep346, i64 %363
  %gep349 = getelementptr i8, ptr %invariant.gep348, i64 %363
  %364 = getelementptr i8, ptr %gep349, i64 %mul.result263
  %365 = icmp ult ptr %364, %gep349
  %366 = getelementptr i8, ptr %gep347, i64 %mul.result267
  %367 = icmp ult ptr %366, %gep347
  %368 = or i1 %367, %mul.overflow268
  %369 = getelementptr i8, ptr %gep345, i64 %mul.result271
  %370 = icmp ult ptr %369, %gep345
  %371 = getelementptr i8, ptr %.1104130.us, i64 %mul.result274
  %372 = icmp ult ptr %371, %.1104130.us
  %373 = or i1 %365, %368
  %374 = or i1 %370, %373
  %375 = or i1 %372, %374
  %brmerge350 = select i1 %375, i1 true, i1 %conflict.rdx289
  br i1 %brmerge350, label %scalar.ph291.preheader, label %vector.ph293

vector.ph293:                                     ; preds = %vector.scevcheck260
  %invariant.gep342 = getelementptr i8, ptr %.1104130.us, i64 -12
  br label %vector.body298

vector.body298:                                   ; preds = %vector.body298, %vector.ph293
  %index299 = phi i64 [ 0, %vector.ph293 ], [ %index.next302, %vector.body298 ]
  %offset.idx300 = shl i64 %index299, 2
  %376 = or disjoint i64 %offset.idx300, 4
  %377 = getelementptr inbounds float, ptr %.1102131.us, i64 %offset.idx300
  %378 = getelementptr inbounds float, ptr %.1102131.us, i64 %376
  %379 = load float, ptr %377, align 4, !tbaa !5, !alias.scope !26
  %380 = load float, ptr %378, align 4, !tbaa !5, !alias.scope !26
  %381 = insertelement <2 x float> poison, float %379, i64 0
  %382 = insertelement <2 x float> %381, float %380, i64 1
  %383 = getelementptr inbounds float, ptr %1, i64 %offset.idx300
  %384 = getelementptr inbounds float, ptr %1, i64 %376
  %385 = load float, ptr %383, align 4, !tbaa !5, !alias.scope !29
  %386 = load float, ptr %384, align 4, !tbaa !5, !alias.scope !29
  %387 = insertelement <2 x float> poison, float %385, i64 0
  %388 = insertelement <2 x float> %387, float %386, i64 1
  %389 = fmul <2 x float> %382, %388
  %390 = or disjoint i64 %offset.idx300, 1
  %391 = or disjoint i64 %offset.idx300, 5
  %392 = getelementptr inbounds float, ptr %.1102131.us, i64 %390
  %393 = getelementptr inbounds float, ptr %.1102131.us, i64 %391
  %394 = load float, ptr %392, align 4, !tbaa !5, !alias.scope !26
  %395 = load float, ptr %393, align 4, !tbaa !5, !alias.scope !26
  %396 = insertelement <2 x float> poison, float %394, i64 0
  %397 = insertelement <2 x float> %396, float %395, i64 1
  %398 = getelementptr inbounds float, ptr %1, i64 %390
  %399 = getelementptr inbounds float, ptr %1, i64 %391
  %400 = load float, ptr %398, align 4, !tbaa !5, !alias.scope !29
  %401 = load float, ptr %399, align 4, !tbaa !5, !alias.scope !29
  %402 = insertelement <2 x float> poison, float %400, i64 0
  %403 = insertelement <2 x float> %402, float %401, i64 1
  %404 = fmul <2 x float> %397, %403
  %405 = or disjoint i64 %offset.idx300, 2
  %406 = or disjoint i64 %offset.idx300, 6
  %407 = getelementptr inbounds float, ptr %.1102131.us, i64 %405
  %408 = getelementptr inbounds float, ptr %.1102131.us, i64 %406
  %409 = load float, ptr %407, align 4, !tbaa !5, !alias.scope !26
  %410 = load float, ptr %408, align 4, !tbaa !5, !alias.scope !26
  %411 = insertelement <2 x float> poison, float %409, i64 0
  %412 = insertelement <2 x float> %411, float %410, i64 1
  %413 = getelementptr inbounds float, ptr %1, i64 %405
  %414 = getelementptr inbounds float, ptr %1, i64 %406
  %415 = load float, ptr %413, align 4, !tbaa !5, !alias.scope !29
  %416 = load float, ptr %414, align 4, !tbaa !5, !alias.scope !29
  %417 = insertelement <2 x float> poison, float %415, i64 0
  %418 = insertelement <2 x float> %417, float %416, i64 1
  %419 = fmul <2 x float> %412, %418
  %420 = or disjoint i64 %offset.idx300, 3
  %421 = or disjoint i64 %offset.idx300, 7
  %422 = getelementptr inbounds float, ptr %.1102131.us, i64 %420
  %423 = getelementptr inbounds float, ptr %.1102131.us, i64 %421
  %424 = load float, ptr %422, align 4, !tbaa !5, !alias.scope !26
  %425 = load float, ptr %423, align 4, !tbaa !5, !alias.scope !26
  %426 = insertelement <2 x float> poison, float %424, i64 0
  %427 = insertelement <2 x float> %426, float %425, i64 1
  %428 = getelementptr inbounds float, ptr %1, i64 %420
  %429 = getelementptr inbounds float, ptr %1, i64 %421
  %430 = load float, ptr %428, align 4, !tbaa !5, !alias.scope !29
  %431 = load float, ptr %429, align 4, !tbaa !5, !alias.scope !29
  %432 = insertelement <2 x float> poison, float %430, i64 0
  %433 = insertelement <2 x float> %432, float %431, i64 1
  %434 = fmul <2 x float> %427, %433
  %gep343 = getelementptr float, ptr %invariant.gep342, i64 %420
  %435 = shufflevector <2 x float> %389, <2 x float> %404, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %436 = shufflevector <2 x float> %419, <2 x float> %434, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
  %interleaved.vec301 = shufflevector <4 x float> %435, <4 x float> %436, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 1, i32 3, i32 5, i32 7>
  store <8 x float> %interleaved.vec301, ptr %gep343, align 4, !tbaa !5
  %index.next302 = add nuw i64 %index299, 2
  %437 = icmp eq i64 %index.next302, %n.vec295
  br i1 %437, label %middle.block290, label %vector.body298, !llvm.loop !31

middle.block290:                                  ; preds = %vector.body298
  br i1 %cmp.n303, label %..preheader_crit_edge.us, label %scalar.ph291.preheader

._crit_edge.us134:                                ; preds = %.lr.ph129.us, %middle.block243, %..preheader_crit_edge.us
  %438 = getelementptr inbounds float, ptr %.1102131.us, i64 %3
  %439 = getelementptr float, ptr %.1104130.us, i64 %3
  %440 = add nuw i64 %.097132.us, 1
  %exitcond156.not = icmp eq i64 %440, %4
  br i1 %exitcond156.not, label %.loopexit, label %.preheader108.us, !llvm.loop !32

.lr.ph129.us:                                     ; preds = %.lr.ph129.us.preheader324, %.lr.ph129.us
  %.1128.us = phi i64 [ %447, %.lr.ph129.us ], [ %.1128.us.ph, %.lr.ph129.us.preheader324 ]
  %441 = getelementptr inbounds float, ptr %.1102131.us, i64 %.1128.us
  %442 = load float, ptr %441, align 4, !tbaa !5
  %443 = getelementptr inbounds float, ptr %1, i64 %.1128.us
  %444 = load float, ptr %443, align 4, !tbaa !5
  %445 = fmul float %442, %444
  %446 = getelementptr inbounds float, ptr %.1104130.us, i64 %.1128.us
  store float %445, ptr %446, align 4, !tbaa !5
  %447 = add nuw i64 %.1128.us, 1
  %448 = icmp ult i64 %447, %3
  br i1 %448, label %.lr.ph129.us, label %._crit_edge.us134, !llvm.loop !33

scalar.ph291:                                     ; preds = %scalar.ph291.preheader, %scalar.ph291
  %.0127.us = phi i64 [ %476, %scalar.ph291 ], [ %.0127.us.ph, %scalar.ph291.preheader ]
  %449 = getelementptr inbounds float, ptr %.1102131.us, i64 %.0127.us
  %450 = load float, ptr %449, align 4, !tbaa !5
  %451 = getelementptr inbounds float, ptr %1, i64 %.0127.us
  %452 = load float, ptr %451, align 4, !tbaa !5
  %453 = fmul float %450, %452
  %454 = getelementptr inbounds float, ptr %.1104130.us, i64 %.0127.us
  store float %453, ptr %454, align 4, !tbaa !5
  %455 = or disjoint i64 %.0127.us, 1
  %456 = getelementptr inbounds float, ptr %.1102131.us, i64 %455
  %457 = load float, ptr %456, align 4, !tbaa !5
  %458 = getelementptr inbounds float, ptr %1, i64 %455
  %459 = load float, ptr %458, align 4, !tbaa !5
  %460 = fmul float %457, %459
  %461 = getelementptr inbounds float, ptr %.1104130.us, i64 %455
  store float %460, ptr %461, align 4, !tbaa !5
  %462 = or disjoint i64 %.0127.us, 2
  %463 = getelementptr inbounds float, ptr %.1102131.us, i64 %462
  %464 = load float, ptr %463, align 4, !tbaa !5
  %465 = getelementptr inbounds float, ptr %1, i64 %462
  %466 = load float, ptr %465, align 4, !tbaa !5
  %467 = fmul float %464, %466
  %468 = getelementptr inbounds float, ptr %.1104130.us, i64 %462
  store float %467, ptr %468, align 4, !tbaa !5
  %469 = or disjoint i64 %.0127.us, 3
  %470 = getelementptr inbounds float, ptr %.1102131.us, i64 %469
  %471 = load float, ptr %470, align 4, !tbaa !5
  %472 = getelementptr inbounds float, ptr %1, i64 %469
  %473 = load float, ptr %472, align 4, !tbaa !5
  %474 = fmul float %471, %473
  %475 = getelementptr inbounds float, ptr %.1104130.us, i64 %469
  store float %474, ptr %475, align 4, !tbaa !5
  %476 = add nuw i64 %.0127.us, 4
  %477 = icmp ult i64 %476, %21
  br i1 %477, label %scalar.ph291, label %..preheader_crit_edge.us, !llvm.loop !34

..preheader_crit_edge.us:                         ; preds = %scalar.ph291, %middle.block290
  %.lcssa = phi i64 [ %ind.end296, %middle.block290 ], [ %476, %scalar.ph291 ]
  %478 = icmp ult i64 %.lcssa, %3
  br i1 %478, label %.lr.ph129.us.preheader, label %._crit_edge.us134

.lr.ph129.us.preheader:                           ; preds = %..preheader_crit_edge.us
  %diff.check240 = icmp ult i64 %362, 32
  %conflict.rdx241 = or i1 %diff.check239, %diff.check240
  %or.cond = or i1 %min.iters.check245, %conflict.rdx241
  br i1 %or.cond, label %.lr.ph129.us.preheader324, label %vector.ph246

.lr.ph129.us.preheader324:                        ; preds = %middle.block243, %.lr.ph129.us.preheader
  %.1128.us.ph = phi i64 [ %.lcssa, %.lr.ph129.us.preheader ], [ %ind.end249, %middle.block243 ]
  br label %.lr.ph129.us

vector.ph246:                                     ; preds = %.lr.ph129.us.preheader
  %ind.end249 = add i64 %.lcssa, %n.vec248
  br label %vector.body251

vector.body251:                                   ; preds = %vector.body251, %vector.ph246
  %index252 = phi i64 [ 0, %vector.ph246 ], [ %index.next258, %vector.body251 ]
  %offset.idx253 = add i64 %.lcssa, %index252
  %479 = getelementptr inbounds float, ptr %.1102131.us, i64 %offset.idx253
  %480 = getelementptr inbounds i8, ptr %479, i64 16
  %wide.load254 = load <4 x float>, ptr %479, align 4, !tbaa !5
  %wide.load255 = load <4 x float>, ptr %480, align 4, !tbaa !5
  %481 = getelementptr inbounds float, ptr %1, i64 %offset.idx253
  %482 = getelementptr inbounds i8, ptr %481, i64 16
  %wide.load256 = load <4 x float>, ptr %481, align 4, !tbaa !5
  %wide.load257 = load <4 x float>, ptr %482, align 4, !tbaa !5
  %483 = fmul <4 x float> %wide.load254, %wide.load256
  %484 = fmul <4 x float> %wide.load255, %wide.load257
  %485 = getelementptr inbounds float, ptr %.1104130.us, i64 %offset.idx253
  %486 = getelementptr inbounds i8, ptr %485, i64 16
  store <4 x float> %483, ptr %485, align 4, !tbaa !5
  store <4 x float> %484, ptr %486, align 4, !tbaa !5
  %index.next258 = add nuw i64 %index252, 8
  %487 = icmp eq i64 %index.next258, %n.vec248
  br i1 %487, label %middle.block243, label %vector.body251, !llvm.loop !35

middle.block243:                                  ; preds = %vector.body251
  br i1 %cmp.n259, label %._crit_edge.us134, label %.lr.ph129.us.preheader324

.preheader108.lr.ph.split:                        ; preds = %.preheader108.lr.ph
  %.not147 = icmp eq i64 %3, 0
  br i1 %.not147, label %.loopexit, label %.preheader108.us135.preheader

.preheader108.us135.preheader:                    ; preds = %.preheader108.lr.ph.split
  %488 = sub i64 %9, %8
  %489 = sub i64 %9, %7
  %490 = shl i64 %3, 2
  %min.iters.check310 = icmp ult i64 %3, 8
  %diff.check305 = icmp ult i64 %488, 32
  %n.vec313 = and i64 %3, -8
  %cmp.n322 = icmp eq i64 %n.vec313, %3
  %xtraiter331 = and i64 %3, 3
  %lcmp.mod332.not = icmp eq i64 %xtraiter331, 0
  br label %.preheader108.us135

.preheader108.us135:                              ; preds = %.preheader108.us135.preheader, %._crit_edge.us141
  %.097132.us136 = phi i64 [ %541, %._crit_edge.us141 ], [ 0, %.preheader108.us135.preheader ]
  %.1102131.us137 = phi ptr [ %539, %._crit_edge.us141 ], [ %0, %.preheader108.us135.preheader ]
  %.1104130.us138 = phi ptr [ %540, %._crit_edge.us141 ], [ %5, %.preheader108.us135.preheader ]
  br i1 %min.iters.check310, label %scalar.ph309.preheader, label %vector.memcheck304

vector.memcheck304:                               ; preds = %.preheader108.us135
  %491 = mul i64 %490, %.097132.us136
  %492 = add i64 %489, %491
  %diff.check306 = icmp ult i64 %492, 32
  %conflict.rdx307 = or i1 %diff.check305, %diff.check306
  br i1 %conflict.rdx307, label %scalar.ph309.preheader, label %vector.body315

vector.body315:                                   ; preds = %vector.memcheck304, %vector.body315
  %index316 = phi i64 [ %index.next321, %vector.body315 ], [ 0, %vector.memcheck304 ]
  %493 = getelementptr inbounds float, ptr %.1102131.us137, i64 %index316
  %494 = getelementptr inbounds i8, ptr %493, i64 16
  %wide.load317 = load <4 x float>, ptr %493, align 4, !tbaa !5
  %wide.load318 = load <4 x float>, ptr %494, align 4, !tbaa !5
  %495 = getelementptr inbounds float, ptr %1, i64 %index316
  %496 = getelementptr inbounds i8, ptr %495, i64 16
  %wide.load319 = load <4 x float>, ptr %495, align 4, !tbaa !5
  %wide.load320 = load <4 x float>, ptr %496, align 4, !tbaa !5
  %497 = fmul <4 x float> %wide.load317, %wide.load319
  %498 = fmul <4 x float> %wide.load318, %wide.load320
  %499 = getelementptr inbounds float, ptr %.1104130.us138, i64 %index316
  %500 = getelementptr inbounds i8, ptr %499, i64 16
  store <4 x float> %497, ptr %499, align 4, !tbaa !5
  store <4 x float> %498, ptr %500, align 4, !tbaa !5
  %index.next321 = add nuw i64 %index316, 8
  %501 = icmp eq i64 %index.next321, %n.vec313
  br i1 %501, label %middle.block308, label %vector.body315, !llvm.loop !36

middle.block308:                                  ; preds = %vector.body315
  br i1 %cmp.n322, label %._crit_edge.us141, label %scalar.ph309.preheader

scalar.ph309.preheader:                           ; preds = %middle.block308, %vector.memcheck304, %.preheader108.us135
  %.1128.us139.ph = phi i64 [ 0, %vector.memcheck304 ], [ 0, %.preheader108.us135 ], [ %n.vec313, %middle.block308 ]
  br i1 %lcmp.mod332.not, label %scalar.ph309.prol.loopexit, label %scalar.ph309.prol

scalar.ph309.prol:                                ; preds = %scalar.ph309.preheader, %scalar.ph309.prol
  %.1128.us139.prol = phi i64 [ %508, %scalar.ph309.prol ], [ %.1128.us139.ph, %scalar.ph309.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph309.prol ], [ 0, %scalar.ph309.preheader ]
  %502 = getelementptr inbounds float, ptr %.1102131.us137, i64 %.1128.us139.prol
  %503 = load float, ptr %502, align 4, !tbaa !5
  %504 = getelementptr inbounds float, ptr %1, i64 %.1128.us139.prol
  %505 = load float, ptr %504, align 4, !tbaa !5
  %506 = fmul float %503, %505
  %507 = getelementptr inbounds float, ptr %.1104130.us138, i64 %.1128.us139.prol
  store float %506, ptr %507, align 4, !tbaa !5
  %508 = add nuw i64 %.1128.us139.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter331
  br i1 %prol.iter.cmp.not, label %scalar.ph309.prol.loopexit, label %scalar.ph309.prol, !llvm.loop !37

scalar.ph309.prol.loopexit:                       ; preds = %scalar.ph309.prol, %scalar.ph309.preheader
  %.1128.us139.unr = phi i64 [ %.1128.us139.ph, %scalar.ph309.preheader ], [ %508, %scalar.ph309.prol ]
  %509 = sub i64 %.1128.us139.ph, %3
  %510 = icmp ugt i64 %509, -4
  br i1 %510, label %._crit_edge.us141, label %scalar.ph309

scalar.ph309:                                     ; preds = %scalar.ph309.prol.loopexit, %scalar.ph309
  %.1128.us139 = phi i64 [ %538, %scalar.ph309 ], [ %.1128.us139.unr, %scalar.ph309.prol.loopexit ]
  %511 = getelementptr inbounds float, ptr %.1102131.us137, i64 %.1128.us139
  %512 = load float, ptr %511, align 4, !tbaa !5
  %513 = getelementptr inbounds float, ptr %1, i64 %.1128.us139
  %514 = load float, ptr %513, align 4, !tbaa !5
  %515 = fmul float %512, %514
  %516 = getelementptr inbounds float, ptr %.1104130.us138, i64 %.1128.us139
  store float %515, ptr %516, align 4, !tbaa !5
  %517 = add nuw i64 %.1128.us139, 1
  %518 = getelementptr inbounds float, ptr %.1102131.us137, i64 %517
  %519 = load float, ptr %518, align 4, !tbaa !5
  %520 = getelementptr inbounds float, ptr %1, i64 %517
  %521 = load float, ptr %520, align 4, !tbaa !5
  %522 = fmul float %519, %521
  %523 = getelementptr inbounds float, ptr %.1104130.us138, i64 %517
  store float %522, ptr %523, align 4, !tbaa !5
  %524 = add nuw i64 %.1128.us139, 2
  %525 = getelementptr inbounds float, ptr %.1102131.us137, i64 %524
  %526 = load float, ptr %525, align 4, !tbaa !5
  %527 = getelementptr inbounds float, ptr %1, i64 %524
  %528 = load float, ptr %527, align 4, !tbaa !5
  %529 = fmul float %526, %528
  %530 = getelementptr inbounds float, ptr %.1104130.us138, i64 %524
  store float %529, ptr %530, align 4, !tbaa !5
  %531 = add nuw i64 %.1128.us139, 3
  %532 = getelementptr inbounds float, ptr %.1102131.us137, i64 %531
  %533 = load float, ptr %532, align 4, !tbaa !5
  %534 = getelementptr inbounds float, ptr %1, i64 %531
  %535 = load float, ptr %534, align 4, !tbaa !5
  %536 = fmul float %533, %535
  %537 = getelementptr inbounds float, ptr %.1104130.us138, i64 %531
  store float %536, ptr %537, align 4, !tbaa !5
  %538 = add nuw i64 %.1128.us139, 4
  %exitcond157.not.3 = icmp eq i64 %538, %3
  br i1 %exitcond157.not.3, label %._crit_edge.us141, label %scalar.ph309, !llvm.loop !39

._crit_edge.us141:                                ; preds = %scalar.ph309.prol.loopexit, %scalar.ph309, %middle.block308
  %539 = getelementptr inbounds float, ptr %.1102131.us137, i64 %3
  %540 = getelementptr inbounds float, ptr %.1104130.us138, i64 %3
  %541 = add nuw i64 %.097132.us136, 1
  %exitcond158.not = icmp eq i64 %541, %4
  br i1 %exitcond158.not, label %.loopexit, label %.preheader108.us135, !llvm.loop !32

.loopexit:                                        ; preds = %._crit_edge.us, %._crit_edge.us126, %._crit_edge.us134, %._crit_edge.us141, %.preheader108.lr.ph.split, %.preheader111.lr.ph.split, %.preheader112, %.preheader109
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umax.i64(i64, i64) #3

; 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>) #3

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

!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 = !{!"float", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10}
!10 = distinct !{!10, !11}
!11 = distinct !{!11, !"LVerDomain"}
!12 = !{!13}
!13 = distinct !{!13, !11}
!14 = !{!15}
!15 = distinct !{!15, !11}
!16 = distinct !{!16, !17, !18, !19}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!"llvm.loop.isvectorized", i32 1}
!19 = !{!"llvm.loop.unroll.runtime.disable"}
!20 = distinct !{!20, !17}
!21 = distinct !{!21, !17, !18}
!22 = distinct !{!22, !17, !18}
!23 = distinct !{!23, !17, !18, !19}
!24 = distinct !{!24, !17, !18, !19}
!25 = distinct !{!25, !17, !18}
!26 = !{!27}
!27 = distinct !{!27, !28}
!28 = distinct !{!28, !"LVerDomain"}
!29 = !{!30}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !17, !18, !19}
!32 = distinct !{!32, !17}
!33 = distinct !{!33, !17, !18}
!34 = distinct !{!34, !17, !18}
!35 = distinct !{!35, !17, !18, !19}
!36 = distinct !{!36, !17, !18, !19}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.unroll.disable"}
!39 = distinct !{!39, !17, !18}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass