; LLVM IR from ermig1979/Simd :: src/Simd (SimdBaseSynetNormalize)

; 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.Simd::Array" = type { ptr, i64 }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [84 x i8], align 1
@__PRETTY_FUNCTION__._ZN4Simd4Base28SynetNormalizeLayerForwardV3EPKfmmmS2_S2_S2_20SimdTensorFormatTypePfS4_ = external hidden unnamed_addr constant [170 x i8], align 1

; 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 float @_ZN4Simd6SquareIfEET_S1_(float noundef) #1

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) #2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd5ArrayIfEC2Embm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i1 noundef zeroext, i64 noundef) unnamed_addr #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd5ArrayIfE6ResizeEmbm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i1 noundef zeroext, i64 noundef) #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN4Simd5ArrayIfED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4Simd4Base28SynetNormalizeLayerForwardV3EPKfmmmS2_S2_S2_20SimdTensorFormatTypePfS4_(ptr noundef %0, i64 noundef %1, i64 noundef %2, i64 noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, i32 noundef %7, ptr noundef %8, ptr noundef %9) #6 personality ptr @__gxx_personality_v0 {
  %11 = alloca ptr, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca float, align 4
  %22 = alloca float, align 4
  %23 = alloca i64, align 8
  %24 = alloca i32, align 4
  %25 = alloca i64, align 8
  %26 = alloca float, align 4
  %27 = alloca i64, align 8
  %28 = alloca float, align 4
  %29 = alloca i64, align 8
  %30 = alloca float, align 4
  %31 = alloca i64, align 8
  %32 = alloca float, align 4
  %33 = alloca i64, align 8
  %34 = alloca %"struct.Simd::Array", align 8
  %35 = alloca ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca i64, align 8
  %48 = alloca i64, align 8
  %49 = alloca i64, align 8
  %50 = alloca i64, align 8
  %51 = alloca i64, align 8
  %52 = alloca i64, align 8
  %53 = alloca i64, align 8
  store ptr %0, ptr %11, align 8, !tbaa !5
  store i64 %1, ptr %12, align 8, !tbaa !9
  store i64 %2, ptr %13, align 8, !tbaa !9
  store i64 %3, ptr %14, align 8, !tbaa !9
  store ptr %4, ptr %15, align 8, !tbaa !5
  store ptr %5, ptr %16, align 8, !tbaa !5
  store ptr %6, ptr %17, align 8, !tbaa !5
  store i32 %7, ptr %18, align 4, !tbaa !11
  store ptr %8, ptr %19, align 8, !tbaa !5
  store ptr %9, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %54 = load i64, ptr %14, align 8, !tbaa !9
  %55 = uitofp i64 %54 to float
  %56 = fdiv float 1.000000e+00, %55
  store float %56, ptr %21, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  %57 = load ptr, ptr %17, align 8, !tbaa !5
  %58 = load float, ptr %57, align 4, !tbaa !13
  store float %58, ptr %22, align 4, !tbaa !13
  %59 = load i32, ptr %18, align 4, !tbaa !11
  %60 = icmp eq i32 %59, 0
  br i1 %60, label %61, label %177

61:                                               ; preds = %10
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %62

62:                                               ; preds = %173, %61
  %63 = load i64, ptr %23, align 8, !tbaa !9
  %64 = load i64, ptr %12, align 8, !tbaa !9
  %65 = icmp ult i64 %63, %64
  br i1 %65, label %67, label %66

66:                                               ; preds = %62
  store i32 2, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  br label %176

67:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  store i64 0, ptr %25, align 8, !tbaa !9
  br label %68

68:                                               ; preds = %169, %67
  %69 = load i64, ptr %25, align 8, !tbaa !9
  %70 = load i64, ptr %13, align 8, !tbaa !9
  %71 = icmp ult i64 %69, %70
  br i1 %71, label %73, label %72

72:                                               ; preds = %68
  store i32 5, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  br label %172

73:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  store float 0.000000e+00, ptr %26, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  store i64 0, ptr %27, align 8, !tbaa !9
  br label %74

74:                                               ; preds = %86, %73
  %75 = load i64, ptr %27, align 8, !tbaa !9
  %76 = load i64, ptr %14, align 8, !tbaa !9
  %77 = icmp ult i64 %75, %76
  br i1 %77, label %79, label %78

78:                                               ; preds = %74
  store i32 8, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  br label %89

79:                                               ; preds = %74
  %80 = load ptr, ptr %11, align 8, !tbaa !5
  %81 = load i64, ptr %27, align 8, !tbaa !9
  %82 = getelementptr inbounds float, ptr %80, i64 %81
  %83 = load float, ptr %82, align 4, !tbaa !13
  %84 = load float, ptr %26, align 4, !tbaa !13
  %85 = fadd float %84, %83
  store float %85, ptr %26, align 4, !tbaa !13
  br label %86

86:                                               ; preds = %79
  %87 = load i64, ptr %27, align 8, !tbaa !9
  %88 = add i64 %87, 1
  store i64 %88, ptr %27, align 8, !tbaa !9
  br label %74, !llvm.loop !15

89:                                               ; preds = %78
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %90 = load float, ptr %26, align 4, !tbaa !13
  %91 = load float, ptr %21, align 4, !tbaa !13
  %92 = fmul float %90, %91
  store float %92, ptr %28, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  store i64 0, ptr %29, align 8, !tbaa !9
  br label %93

93:                                               ; preds = %108, %89
  %94 = load i64, ptr %29, align 8, !tbaa !9
  %95 = load i64, ptr %14, align 8, !tbaa !9
  %96 = icmp ult i64 %94, %95
  br i1 %96, label %98, label %97

97:                                               ; preds = %93
  store i32 11, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  br label %111

98:                                               ; preds = %93
  %99 = load ptr, ptr %11, align 8, !tbaa !5
  %100 = load i64, ptr %29, align 8, !tbaa !9
  %101 = getelementptr inbounds float, ptr %99, i64 %100
  %102 = load float, ptr %101, align 4, !tbaa !13
  %103 = load float, ptr %28, align 4, !tbaa !13
  %104 = fsub float %102, %103
  %105 = load ptr, ptr %20, align 8, !tbaa !5
  %106 = load i64, ptr %29, align 8, !tbaa !9
  %107 = getelementptr inbounds float, ptr %105, i64 %106
  store float %104, ptr %107, align 4, !tbaa !13
  br label %108

108:                                              ; preds = %98
  %109 = load i64, ptr %29, align 8, !tbaa !9
  %110 = add i64 %109, 1
  store i64 %110, ptr %29, align 8, !tbaa !9
  br label %93, !llvm.loop !17

111:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  store float 0.000000e+00, ptr %30, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  store i64 0, ptr %31, align 8, !tbaa !9
  br label %112

112:                                              ; preds = %125, %111
  %113 = load i64, ptr %31, align 8, !tbaa !9
  %114 = load i64, ptr %14, align 8, !tbaa !9
  %115 = icmp ult i64 %113, %114
  br i1 %115, label %117, label %116

116:                                              ; preds = %112
  store i32 14, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  br label %128

117:                                              ; preds = %112
  %118 = load ptr, ptr %20, align 8, !tbaa !5
  %119 = load i64, ptr %31, align 8, !tbaa !9
  %120 = getelementptr inbounds float, ptr %118, i64 %119
  %121 = load float, ptr %120, align 4, !tbaa !13
  %122 = call noundef float @_ZN4Simd6SquareIfEET_S1_(float noundef %121)
  %123 = load float, ptr %30, align 4, !tbaa !13
  %124 = fadd float %123, %122
  store float %124, ptr %30, align 4, !tbaa !13
  br label %125

125:                                              ; preds = %117
  %126 = load i64, ptr %31, align 8, !tbaa !9
  %127 = add i64 %126, 1
  store i64 %127, ptr %31, align 8, !tbaa !9
  br label %112, !llvm.loop !18

128:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  %129 = load float, ptr %30, align 4, !tbaa !13
  %130 = load float, ptr %21, align 4, !tbaa !13
  %131 = load float, ptr %22, align 4, !tbaa !13
  %132 = call float @llvm.fmuladd.f32(float %129, float %130, float %131)
  %133 = call noundef float @_ZSt4sqrtf(float noundef %132)
  %134 = fdiv float 1.000000e+00, %133
  store float %134, ptr %32, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  store i64 0, ptr %33, align 8, !tbaa !9
  br label %135

135:                                              ; preds = %159, %128
  %136 = load i64, ptr %33, align 8, !tbaa !9
  %137 = load i64, ptr %14, align 8, !tbaa !9
  %138 = icmp ult i64 %136, %137
  br i1 %138, label %140, label %139

139:                                              ; preds = %135
  store i32 17, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  br label %162

140:                                              ; preds = %135
  %141 = load ptr, ptr %20, align 8, !tbaa !5
  %142 = load i64, ptr %33, align 8, !tbaa !9
  %143 = getelementptr inbounds float, ptr %141, i64 %142
  %144 = load float, ptr %143, align 4, !tbaa !13
  %145 = load float, ptr %32, align 4, !tbaa !13
  %146 = fmul float %144, %145
  %147 = load ptr, ptr %15, align 8, !tbaa !5
  %148 = load i64, ptr %25, align 8, !tbaa !9
  %149 = getelementptr inbounds float, ptr %147, i64 %148
  %150 = load float, ptr %149, align 4, !tbaa !13
  %151 = load ptr, ptr %16, align 8, !tbaa !5
  %152 = load i64, ptr %25, align 8, !tbaa !9
  %153 = getelementptr inbounds float, ptr %151, i64 %152
  %154 = load float, ptr %153, align 4, !tbaa !13
  %155 = call float @llvm.fmuladd.f32(float %146, float %150, float %154)
  %156 = load ptr, ptr %20, align 8, !tbaa !5
  %157 = load i64, ptr %33, align 8, !tbaa !9
  %158 = getelementptr inbounds float, ptr %156, i64 %157
  store float %155, ptr %158, align 4, !tbaa !13
  br label %159

159:                                              ; preds = %140
  %160 = load i64, ptr %33, align 8, !tbaa !9
  %161 = add i64 %160, 1
  store i64 %161, ptr %33, align 8, !tbaa !9
  br label %135, !llvm.loop !19

162:                                              ; preds = %139
  %163 = load i64, ptr %14, align 8, !tbaa !9
  %164 = load ptr, ptr %20, align 8, !tbaa !5
  %165 = getelementptr inbounds float, ptr %164, i64 %163
  store ptr %165, ptr %20, align 8, !tbaa !5
  %166 = load i64, ptr %14, align 8, !tbaa !9
  %167 = load ptr, ptr %11, align 8, !tbaa !5
  %168 = getelementptr inbounds float, ptr %167, i64 %166
  store ptr %168, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %169

169:                                              ; preds = %162
  %170 = load i64, ptr %25, align 8, !tbaa !9
  %171 = add i64 %170, 1
  store i64 %171, ptr %25, align 8, !tbaa !9
  br label %68, !llvm.loop !20

172:                                              ; preds = %72
  br label %173

173:                                              ; preds = %172
  %174 = load i64, ptr %23, align 8, !tbaa !9
  %175 = add i64 %174, 1
  store i64 %175, ptr %23, align 8, !tbaa !9
  br label %62, !llvm.loop !21

176:                                              ; preds = %66
  br label %434

177:                                              ; preds = %10
  %178 = load i32, ptr %18, align 4, !tbaa !11
  %179 = icmp eq i32 %178, 1
  br i1 %179, label %180, label %432

180:                                              ; preds = %177
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #7
  call void @_ZN4Simd5ArrayIfEC2Embm(ptr noundef nonnull align 8 dereferenceable(16) %34, i64 noundef 0, i1 noundef zeroext false, i64 noundef 8)
  %181 = load ptr, ptr %19, align 8, !tbaa !5
  %182 = icmp eq ptr %181, null
  br i1 %182, label %183, label %192

183:                                              ; preds = %180
  %184 = load i64, ptr %13, align 8, !tbaa !9
  invoke void @_ZN4Simd5ArrayIfE6ResizeEmbm(ptr noundef nonnull align 8 dereferenceable(16) %34, i64 noundef %184, i1 noundef zeroext false, i64 noundef 8)
          to label %185 unwind label %188

185:                                              ; preds = %183
  %186 = getelementptr inbounds %"struct.Simd::Array", ptr %34, i32 0, i32 0
  %187 = load ptr, ptr %186, align 8, !tbaa !22
  store ptr %187, ptr %19, align 8, !tbaa !5
  br label %192

188:                                              ; preds = %183
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %35, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %36, align 4
  br label %431

192:                                              ; preds = %185, %180
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  store i64 0, ptr %37, align 8, !tbaa !9
  br label %193

193:                                              ; preds = %426, %192
  %194 = load i64, ptr %37, align 8, !tbaa !9
  %195 = load i64, ptr %12, align 8, !tbaa !9
  %196 = icmp ult i64 %194, %195
  br i1 %196, label %198, label %197

197:                                              ; preds = %193
  store i32 20, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  br label %430

198:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  store i64 0, ptr %38, align 8, !tbaa !9
  br label %199

199:                                              ; preds = %208, %198
  %200 = load i64, ptr %38, align 8, !tbaa !9
  %201 = load i64, ptr %13, align 8, !tbaa !9
  %202 = icmp ult i64 %200, %201
  br i1 %202, label %204, label %203

203:                                              ; preds = %199
  store i32 23, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  br label %211

204:                                              ; preds = %199
  %205 = load ptr, ptr %19, align 8, !tbaa !5
  %206 = load i64, ptr %38, align 8, !tbaa !9
  %207 = getelementptr inbounds float, ptr %205, i64 %206
  store float 0.000000e+00, ptr %207, align 4, !tbaa !13
  br label %208

208:                                              ; preds = %204
  %209 = load i64, ptr %38, align 8, !tbaa !9
  %210 = add i64 %209, 1
  store i64 %210, ptr %38, align 8, !tbaa !9
  br label %199, !llvm.loop !24

211:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  store i64 0, ptr %39, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #7
  store i64 0, ptr %40, align 8, !tbaa !9
  br label %212

212:                                              ; preds = %239, %211
  %213 = load i64, ptr %39, align 8, !tbaa !9
  %214 = load i64, ptr %14, align 8, !tbaa !9
  %215 = icmp ult i64 %213, %214
  br i1 %215, label %217, label %216

216:                                              ; preds = %212
  store i32 26, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  br label %242

217:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  store i64 0, ptr %41, align 8, !tbaa !9
  br label %218

218:                                              ; preds = %233, %217
  %219 = load i64, ptr %41, align 8, !tbaa !9
  %220 = load i64, ptr %13, align 8, !tbaa !9
  %221 = icmp ult i64 %219, %220
  br i1 %221, label %223, label %222

222:                                              ; preds = %218
  store i32 29, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  br label %238

223:                                              ; preds = %218
  %224 = load ptr, ptr %11, align 8, !tbaa !5
  %225 = load i64, ptr %40, align 8, !tbaa !9
  %226 = getelementptr inbounds float, ptr %224, i64 %225
  %227 = load float, ptr %226, align 4, !tbaa !13
  %228 = load ptr, ptr %19, align 8, !tbaa !5
  %229 = load i64, ptr %41, align 8, !tbaa !9
  %230 = getelementptr inbounds float, ptr %228, i64 %229
  %231 = load float, ptr %230, align 4, !tbaa !13
  %232 = fadd float %231, %227
  store float %232, ptr %230, align 4, !tbaa !13
  br label %233

233:                                              ; preds = %223
  %234 = load i64, ptr %41, align 8, !tbaa !9
  %235 = add i64 %234, 1
  store i64 %235, ptr %41, align 8, !tbaa !9
  %236 = load i64, ptr %40, align 8, !tbaa !9
  %237 = add i64 %236, 1
  store i64 %237, ptr %40, align 8, !tbaa !9
  br label %218, !llvm.loop !25

238:                                              ; preds = %222
  br label %239

239:                                              ; preds = %238
  %240 = load i64, ptr %39, align 8, !tbaa !9
  %241 = add i64 %240, 1
  store i64 %241, ptr %39, align 8, !tbaa !9
  br label %212, !llvm.loop !26

242:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #7
  store i64 0, ptr %42, align 8, !tbaa !9
  br label %243

243:                                              ; preds = %258, %242
  %244 = load i64, ptr %42, align 8, !tbaa !9
  %245 = load i64, ptr %13, align 8, !tbaa !9
  %246 = icmp ult i64 %244, %245
  br i1 %246, label %248, label %247

247:                                              ; preds = %243
  store i32 32, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  br label %261

248:                                              ; preds = %243
  %249 = load ptr, ptr %19, align 8, !tbaa !5
  %250 = load i64, ptr %42, align 8, !tbaa !9
  %251 = getelementptr inbounds float, ptr %249, i64 %250
  %252 = load float, ptr %251, align 4, !tbaa !13
  %253 = load float, ptr %21, align 4, !tbaa !13
  %254 = fmul float %252, %253
  %255 = load ptr, ptr %19, align 8, !tbaa !5
  %256 = load i64, ptr %42, align 8, !tbaa !9
  %257 = getelementptr inbounds float, ptr %255, i64 %256
  store float %254, ptr %257, align 4, !tbaa !13
  br label %258

258:                                              ; preds = %248
  %259 = load i64, ptr %42, align 8, !tbaa !9
  %260 = add i64 %259, 1
  store i64 %260, ptr %42, align 8, !tbaa !9
  br label %243, !llvm.loop !27

261:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #7
  store i64 0, ptr %43, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #7
  store i64 0, ptr %44, align 8, !tbaa !9
  br label %262

262:                                              ; preds = %292, %261
  %263 = load i64, ptr %43, align 8, !tbaa !9
  %264 = load i64, ptr %14, align 8, !tbaa !9
  %265 = icmp ult i64 %263, %264
  br i1 %265, label %267, label %266

266:                                              ; preds = %262
  store i32 35, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  br label %295

267:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #7
  store i64 0, ptr %45, align 8, !tbaa !9
  br label %268

268:                                              ; preds = %286, %267
  %269 = load i64, ptr %45, align 8, !tbaa !9
  %270 = load i64, ptr %13, align 8, !tbaa !9
  %271 = icmp ult i64 %269, %270
  br i1 %271, label %273, label %272

272:                                              ; preds = %268
  store i32 38, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  br label %291

273:                                              ; preds = %268
  %274 = load ptr, ptr %11, align 8, !tbaa !5
  %275 = load i64, ptr %44, align 8, !tbaa !9
  %276 = getelementptr inbounds float, ptr %274, i64 %275
  %277 = load float, ptr %276, align 4, !tbaa !13
  %278 = load ptr, ptr %19, align 8, !tbaa !5
  %279 = load i64, ptr %45, align 8, !tbaa !9
  %280 = getelementptr inbounds float, ptr %278, i64 %279
  %281 = load float, ptr %280, align 4, !tbaa !13
  %282 = fsub float %277, %281
  %283 = load ptr, ptr %20, align 8, !tbaa !5
  %284 = load i64, ptr %44, align 8, !tbaa !9
  %285 = getelementptr inbounds float, ptr %283, i64 %284
  store float %282, ptr %285, align 4, !tbaa !13
  br label %286

286:                                              ; preds = %273
  %287 = load i64, ptr %45, align 8, !tbaa !9
  %288 = add i64 %287, 1
  store i64 %288, ptr %45, align 8, !tbaa !9
  %289 = load i64, ptr %44, align 8, !tbaa !9
  %290 = add i64 %289, 1
  store i64 %290, ptr %44, align 8, !tbaa !9
  br label %268, !llvm.loop !28

291:                                              ; preds = %272
  br label %292

292:                                              ; preds = %291
  %293 = load i64, ptr %43, align 8, !tbaa !9
  %294 = add i64 %293, 1
  store i64 %294, ptr %43, align 8, !tbaa !9
  br label %262, !llvm.loop !29

295:                                              ; preds = %266
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #7
  store i64 0, ptr %46, align 8, !tbaa !9
  br label %296

296:                                              ; preds = %305, %295
  %297 = load i64, ptr %46, align 8, !tbaa !9
  %298 = load i64, ptr %13, align 8, !tbaa !9
  %299 = icmp ult i64 %297, %298
  br i1 %299, label %301, label %300

300:                                              ; preds = %296
  store i32 41, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #7
  br label %308

301:                                              ; preds = %296
  %302 = load ptr, ptr %19, align 8, !tbaa !5
  %303 = load i64, ptr %46, align 8, !tbaa !9
  %304 = getelementptr inbounds float, ptr %302, i64 %303
  store float 0.000000e+00, ptr %304, align 4, !tbaa !13
  br label %305

305:                                              ; preds = %301
  %306 = load i64, ptr %46, align 8, !tbaa !9
  %307 = add i64 %306, 1
  store i64 %307, ptr %46, align 8, !tbaa !9
  br label %296, !llvm.loop !30

308:                                              ; preds = %300
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #7
  store i64 0, ptr %47, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #7
  store i64 0, ptr %48, align 8, !tbaa !9
  br label %309

309:                                              ; preds = %342, %308
  %310 = load i64, ptr %47, align 8, !tbaa !9
  %311 = load i64, ptr %14, align 8, !tbaa !9
  %312 = icmp ult i64 %310, %311
  br i1 %312, label %314, label %313

313:                                              ; preds = %309
  store i32 44, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  br label %345

314:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  store i64 0, ptr %49, align 8, !tbaa !9
  br label %315

315:                                              ; preds = %332, %314
  %316 = load i64, ptr %49, align 8, !tbaa !9
  %317 = load i64, ptr %13, align 8, !tbaa !9
  %318 = icmp ult i64 %316, %317
  br i1 %318, label %320, label %319

319:                                              ; preds = %315
  store i32 47, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  br label %341

320:                                              ; preds = %315
  %321 = load ptr, ptr %20, align 8, !tbaa !5
  %322 = load i64, ptr %48, align 8, !tbaa !9
  %323 = getelementptr inbounds float, ptr %321, i64 %322
  %324 = load float, ptr %323, align 4, !tbaa !13
  %325 = invoke noundef float @_ZN4Simd6SquareIfEET_S1_(float noundef %324)
          to label %326 unwind label %337

326:                                              ; preds = %320
  %327 = load ptr, ptr %19, align 8, !tbaa !5
  %328 = load i64, ptr %49, align 8, !tbaa !9
  %329 = getelementptr inbounds float, ptr %327, i64 %328
  %330 = load float, ptr %329, align 4, !tbaa !13
  %331 = fadd float %330, %325
  store float %331, ptr %329, align 4, !tbaa !13
  br label %332

332:                                              ; preds = %326
  %333 = load i64, ptr %49, align 8, !tbaa !9
  %334 = add i64 %333, 1
  store i64 %334, ptr %49, align 8, !tbaa !9
  %335 = load i64, ptr %48, align 8, !tbaa !9
  %336 = add i64 %335, 1
  store i64 %336, ptr %48, align 8, !tbaa !9
  br label %315, !llvm.loop !31

337:                                              ; preds = %320
  %338 = landingpad { ptr, i32 }
          cleanup
  %339 = extractvalue { ptr, i32 } %338, 0
  store ptr %339, ptr %35, align 8
  %340 = extractvalue { ptr, i32 } %338, 1
  store i32 %340, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  br label %429

341:                                              ; preds = %319
  br label %342

342:                                              ; preds = %341
  %343 = load i64, ptr %47, align 8, !tbaa !9
  %344 = add i64 %343, 1
  store i64 %344, ptr %47, align 8, !tbaa !9
  br label %309, !llvm.loop !32

345:                                              ; preds = %313
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #7
  store i64 0, ptr %50, align 8, !tbaa !9
  br label %346

346:                                              ; preds = %365, %345
  %347 = load i64, ptr %50, align 8, !tbaa !9
  %348 = load i64, ptr %13, align 8, !tbaa !9
  %349 = icmp ult i64 %347, %348
  br i1 %349, label %351, label %350

350:                                              ; preds = %346
  store i32 50, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #7
  br label %372

351:                                              ; preds = %346
  %352 = load ptr, ptr %19, align 8, !tbaa !5
  %353 = load i64, ptr %50, align 8, !tbaa !9
  %354 = getelementptr inbounds float, ptr %352, i64 %353
  %355 = load float, ptr %354, align 4, !tbaa !13
  %356 = load float, ptr %21, align 4, !tbaa !13
  %357 = load float, ptr %22, align 4, !tbaa !13
  %358 = call float @llvm.fmuladd.f32(float %355, float %356, float %357)
  %359 = invoke noundef float @_ZSt4sqrtf(float noundef %358)
          to label %360 unwind label %368

360:                                              ; preds = %351
  %361 = fdiv float 1.000000e+00, %359
  %362 = load ptr, ptr %19, align 8, !tbaa !5
  %363 = load i64, ptr %50, align 8, !tbaa !9
  %364 = getelementptr inbounds float, ptr %362, i64 %363
  store float %361, ptr %364, align 4, !tbaa !13
  br label %365

365:                                              ; preds = %360
  %366 = load i64, ptr %50, align 8, !tbaa !9
  %367 = add i64 %366, 1
  store i64 %367, ptr %50, align 8, !tbaa !9
  br label %346, !llvm.loop !33

368:                                              ; preds = %351
  %369 = landingpad { ptr, i32 }
          cleanup
  %370 = extractvalue { ptr, i32 } %369, 0
  store ptr %370, ptr %35, align 8
  %371 = extractvalue { ptr, i32 } %369, 1
  store i32 %371, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #7
  br label %429

372:                                              ; preds = %350
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #7
  store i64 0, ptr %51, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #7
  store i64 0, ptr %52, align 8, !tbaa !9
  br label %373

373:                                              ; preds = %412, %372
  %374 = load i64, ptr %51, align 8, !tbaa !9
  %375 = load i64, ptr %14, align 8, !tbaa !9
  %376 = icmp ult i64 %374, %375
  br i1 %376, label %378, label %377

377:                                              ; preds = %373
  store i32 53, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #7
  br label %415

378:                                              ; preds = %373
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #7
  store i64 0, ptr %53, align 8, !tbaa !9
  br label %379

379:                                              ; preds = %406, %378
  %380 = load i64, ptr %53, align 8, !tbaa !9
  %381 = load i64, ptr %13, align 8, !tbaa !9
  %382 = icmp ult i64 %380, %381
  br i1 %382, label %384, label %383

383:                                              ; preds = %379
  store i32 56, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #7
  br label %411

384:                                              ; preds = %379
  %385 = load ptr, ptr %20, align 8, !tbaa !5
  %386 = load i64, ptr %52, align 8, !tbaa !9
  %387 = getelementptr inbounds float, ptr %385, i64 %386
  %388 = load float, ptr %387, align 4, !tbaa !13
  %389 = load ptr, ptr %19, align 8, !tbaa !5
  %390 = load i64, ptr %53, align 8, !tbaa !9
  %391 = getelementptr inbounds float, ptr %389, i64 %390
  %392 = load float, ptr %391, align 4, !tbaa !13
  %393 = fmul float %388, %392
  %394 = load ptr, ptr %15, align 8, !tbaa !5
  %395 = load i64, ptr %53, align 8, !tbaa !9
  %396 = getelementptr inbounds float, ptr %394, i64 %395
  %397 = load float, ptr %396, align 4, !tbaa !13
  %398 = load ptr, ptr %16, align 8, !tbaa !5
  %399 = load i64, ptr %53, align 8, !tbaa !9
  %400 = getelementptr inbounds float, ptr %398, i64 %399
  %401 = load float, ptr %400, align 4, !tbaa !13
  %402 = call float @llvm.fmuladd.f32(float %393, float %397, float %401)
  %403 = load ptr, ptr %20, align 8, !tbaa !5
  %404 = load i64, ptr %52, align 8, !tbaa !9
  %405 = getelementptr inbounds float, ptr %403, i64 %404
  store float %402, ptr %405, align 4, !tbaa !13
  br label %406

406:                                              ; preds = %384
  %407 = load i64, ptr %53, align 8, !tbaa !9
  %408 = add i64 %407, 1
  store i64 %408, ptr %53, align 8, !tbaa !9
  %409 = load i64, ptr %52, align 8, !tbaa !9
  %410 = add i64 %409, 1
  store i64 %410, ptr %52, align 8, !tbaa !9
  br label %379, !llvm.loop !34

411:                                              ; preds = %383
  br label %412

412:                                              ; preds = %411
  %413 = load i64, ptr %51, align 8, !tbaa !9
  %414 = add i64 %413, 1
  store i64 %414, ptr %51, align 8, !tbaa !9
  br label %373, !llvm.loop !35

415:                                              ; preds = %377
  %416 = load i64, ptr %13, align 8, !tbaa !9
  %417 = load i64, ptr %14, align 8, !tbaa !9
  %418 = mul i64 %416, %417
  %419 = load ptr, ptr %11, align 8, !tbaa !5
  %420 = getelementptr inbounds float, ptr %419, i64 %418
  store ptr %420, ptr %11, align 8, !tbaa !5
  %421 = load i64, ptr %13, align 8, !tbaa !9
  %422 = load i64, ptr %14, align 8, !tbaa !9
  %423 = mul i64 %421, %422
  %424 = load ptr, ptr %20, align 8, !tbaa !5
  %425 = getelementptr inbounds float, ptr %424, i64 %423
  store ptr %425, ptr %20, align 8, !tbaa !5
  br label %426

426:                                              ; preds = %415
  %427 = load i64, ptr %37, align 8, !tbaa !9
  %428 = add i64 %427, 1
  store i64 %428, ptr %37, align 8, !tbaa !9
  br label %193, !llvm.loop !36

429:                                              ; preds = %368, %337
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  br label %431

430:                                              ; preds = %197
  call void @_ZN4Simd5ArrayIfED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #7
  br label %433

431:                                              ; preds = %429, %188
  call void @_ZN4Simd5ArrayIfED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %435

432:                                              ; preds = %177
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 287, ptr noundef @__PRETTY_FUNCTION__._ZN4Simd4Base28SynetNormalizeLayerForwardV3EPKfmmmS2_S2_S2_20SimdTensorFormatTypePfS4_) #8
  unreachable

433:                                              ; preds = %430
  br label %434

434:                                              ; preds = %433, %176
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  ret void

435:                                              ; preds = %431
  %436 = load ptr, ptr %35, align 8
  %437 = load i32, ptr %36, align 4
  %438 = insertvalue { ptr, i32 } poison, ptr %436, 0
  %439 = insertvalue { ptr, i32 } %438, i32 %437, 1
  resume { ptr, i32 } %439
}

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 = { inlinehint 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 = { alwaysinline 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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 #7 = { nounwind }
attributes #8 = { noreturn 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 = !{!"_ZTS20SimdTensorFormatType", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = !{!23, !6, i64 0}
!23 = !{!"_ZTSN4Simd5ArrayIfEE", !6, i64 0, !10, i64 8}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !16}
!27 = distinct !{!27, !16}
!28 = distinct !{!28, !16}
!29 = distinct !{!29, !16}
!30 = distinct !{!30, !16}
!31 = distinct !{!31, !16}
!32 = distinct !{!32, !16}
!33 = distinct !{!33, !16}
!34 = distinct !{!34, !16}
!35 = distinct !{!35, !16}
!36 = distinct !{!36, !16}


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

%"struct.Simd::Array" = type { ptr, i64 }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [84 x i8], align 1
@__PRETTY_FUNCTION__._ZN4Simd4Base28SynetNormalizeLayerForwardV3EPKfmmmS2_S2_S2_20SimdTensorFormatTypePfS4_ = external hidden unnamed_addr constant [170 x i8], align 1

; Function Attrs: mustprogress 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 float @_ZN4Simd6SquareIfEET_S1_(float noundef) local_unnamed_addr #1

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) local_unnamed_addr #2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd5ArrayIfEC2Embm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i1 noundef zeroext, i64 noundef) unnamed_addr #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd5ArrayIfE6ResizeEmbm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i1 noundef zeroext, i64 noundef) local_unnamed_addr #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN4Simd5ArrayIfED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4Simd4Base28SynetNormalizeLayerForwardV3EPKfmmmS2_S2_S2_20SimdTensorFormatTypePfS4_(ptr nocapture noundef readonly %0, i64 noundef %1, i64 noundef %2, i64 noundef %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readonly %5, ptr nocapture noundef readonly %6, i32 noundef %7, ptr noundef %8, ptr nocapture noundef %9) local_unnamed_addr #6 personality ptr @__gxx_personality_v0 {
  %11 = ptrtoint ptr %0 to i64
  %12 = ptrtoint ptr %9 to i64
  %13 = alloca %"struct.Simd::Array", align 8
  %14 = uitofp i64 %3 to float
  %15 = fdiv float 1.000000e+00, %14
  %16 = load float, ptr %6, align 4, !tbaa !5
  switch i32 %7, label %322 [
    i32 0, label %.preheader181
    i32 1, label %145
  ]

.preheader181:                                    ; preds = %10
  %.not299 = icmp eq i64 %1, 0
  %.not300 = icmp eq i64 %2, 0
  %or.cond = or i1 %.not299, %.not300
  br i1 %or.cond, label %.loopexit, label %.preheader180.lr.ph.split.us

.preheader180.lr.ph.split.us:                     ; preds = %.preheader181
  %.not301 = icmp eq i64 %3, 0
  br i1 %.not301, label %.preheader180.us.preheader, label %.preheader180.us.us.us.us.us.preheader

.preheader180.us.us.us.us.us.preheader:           ; preds = %.preheader180.lr.ph.split.us
  %17 = mul i64 %3, %2
  %18 = shl i64 %17, 2
  %19 = shl i64 %2, 2
  %scevgep443 = getelementptr i8, ptr %4, i64 %19
  %scevgep444 = getelementptr i8, ptr %5, i64 %19
  %20 = add i64 %3, -1
  %xtraiter509 = and i64 %3, 7
  %21 = icmp ult i64 %20, 7
  %unroll_iter = and i64 %3, -8
  %lcmp.mod510.not = icmp eq i64 %xtraiter509, 0
  %min.iters.check482 = icmp ult i64 %3, 8
  %n.vec485 = and i64 %3, -8
  %cmp.n494 = icmp eq i64 %n.vec485, %3
  %xtraiter512 = and i64 %3, 3
  %lcmp.mod513.not = icmp eq i64 %xtraiter512, 0
  %min.iters.check455 = icmp ult i64 %3, 8
  %.mask = and i64 %3, 2305843009213693952
  %stride.check451 = icmp ne i64 %.mask, 0
  %n.vec458 = and i64 %3, -2305843009213693960
  %cmp.n475 = icmp eq i64 %n.vec458, %3
  %xtraiter514 = and i64 %3, 1
  %lcmp.mod515.not = icmp eq i64 %xtraiter514, 0
  %22 = add i64 %3, -1
  br label %.preheader180.us.us.us.us.us

.preheader180.us.preheader:                       ; preds = %.preheader180.lr.ph.split.us
  %23 = tail call float @llvm.fmuladd.f32(float %15, float 0.000000e+00, float %16)
  br label %.preheader180.us

.preheader180.us.us.us.us.us:                     ; preds = %.preheader180.us.us.us.us.us.preheader, %._crit_edge252.split.us.us.us.split.us.us.split.us.us.split.us.us
  %.0161259.us.us.us.us.us = phi ptr [ %139, %._crit_edge252.split.us.us.us.split.us.us.split.us.us.split.us.us ], [ %0, %.preheader180.us.us.us.us.us.preheader ]
  %.0165258.us.us.us.us.us = phi ptr [ %138, %._crit_edge252.split.us.us.us.split.us.us.split.us.us.split.us.us ], [ %9, %.preheader180.us.us.us.us.us.preheader ]
  %.0171257.us.us.us.us.us = phi i64 [ %141, %._crit_edge252.split.us.us.us.split.us.us.split.us.us.split.us.us ], [ 0, %.preheader180.us.us.us.us.us.preheader ]
  %.0165258.us.us.us.us.us477 = ptrtoint ptr %.0165258.us.us.us.us.us to i64
  %.0161259.us.us.us.us.us478 = ptrtoint ptr %.0161259.us.us.us.us.us to i64
  %scevgep442 = getelementptr i8, ptr %.0165258.us.us.us.us.us, i64 %18
  %24 = sub i64 %.0165258.us.us.us.us.us477, %.0161259.us.us.us.us.us478
  %diff.check479 = icmp ult i64 %24, 32
  %or.cond495 = select i1 %min.iters.check482, i1 true, i1 %diff.check479
  %bound0445 = icmp ult ptr %.0165258.us.us.us.us.us, %scevgep443
  %bound1446 = icmp ugt ptr %scevgep442, %4
  %found.conflict447 = and i1 %bound0445, %bound1446
  %bound0448 = icmp ult ptr %.0165258.us.us.us.us.us, %scevgep444
  %bound1449 = icmp ugt ptr %scevgep442, %5
  %found.conflict450 = and i1 %bound0448, %bound1449
  %25 = or i1 %found.conflict450, %stride.check451
  %conflict.rdx452 = or i1 %found.conflict447, %25
  br label %.preheader179.us.us.us.us.us.us.us.us.us

.preheader179.us.us.us.us.us.us.us.us.us:         ; preds = %._crit_edge248.us.us.us.us.us.us.us.us.us, %.preheader180.us.us.us.us.us
  %.1162251.us.us.us.us.us.us.us.us.us = phi ptr [ %.0161259.us.us.us.us.us, %.preheader180.us.us.us.us.us ], [ %139, %._crit_edge248.us.us.us.us.us.us.us.us.us ]
  %.1166250.us.us.us.us.us.us.us.us.us = phi ptr [ %.0165258.us.us.us.us.us, %.preheader180.us.us.us.us.us ], [ %138, %._crit_edge248.us.us.us.us.us.us.us.us.us ]
  %.0174249.us.us.us.us.us.us.us.us.us = phi i64 [ 0, %.preheader180.us.us.us.us.us ], [ %140, %._crit_edge248.us.us.us.us.us.us.us.us.us ]
  br i1 %21, label %._crit_edge236.us.us.us.us.us.us.us.us.us.unr-lcssa, label %.preheader179.us.us.us.us.us.us.us.us.us.new

scalar.ph454:                                     ; preds = %scalar.ph454.prol.loopexit, %scalar.ph454
  %.0164245.us.us.us.us.us.us.us.us.us = phi i64 [ %39, %scalar.ph454 ], [ %.0164245.us.us.us.us.us.us.us.us.us.unr, %scalar.ph454.prol.loopexit ]
  %26 = getelementptr inbounds float, ptr %.1166250.us.us.us.us.us.us.us.us.us, i64 %.0164245.us.us.us.us.us.us.us.us.us
  %27 = load float, ptr %26, align 4, !tbaa !5
  %28 = fmul float %118, %27
  %29 = load float, ptr %119, align 4, !tbaa !5
  %30 = load float, ptr %120, align 4, !tbaa !5
  %31 = tail call float @llvm.fmuladd.f32(float %28, float %29, float %30)
  store float %31, ptr %26, align 4, !tbaa !5
  %32 = add nuw i64 %.0164245.us.us.us.us.us.us.us.us.us, 1
  %33 = getelementptr inbounds float, ptr %.1166250.us.us.us.us.us.us.us.us.us, i64 %32
  %34 = load float, ptr %33, align 4, !tbaa !5
  %35 = fmul float %118, %34
  %36 = load float, ptr %119, align 4, !tbaa !5
  %37 = load float, ptr %120, align 4, !tbaa !5
  %38 = tail call float @llvm.fmuladd.f32(float %35, float %36, float %37)
  store float %38, ptr %33, align 4, !tbaa !5
  %39 = add nuw i64 %.0164245.us.us.us.us.us.us.us.us.us, 2
  %exitcond335.not.1 = icmp eq i64 %39, %3
  br i1 %exitcond335.not.1, label %._crit_edge248.us.us.us.us.us.us.us.us.us, label %scalar.ph454, !llvm.loop !9

..preheader_crit_edge.us.us.us.us.us.us.us.us.us: ; preds = %..preheader_crit_edge.us.us.us.us.us.us.us.us.us.preheader, %..preheader_crit_edge.us.us.us.us.us.us.us.us.us
  %.0168241.us.us.us.us.us.us.us.us.us = phi i64 [ %44, %..preheader_crit_edge.us.us.us.us.us.us.us.us.us ], [ 0, %..preheader_crit_edge.us.us.us.us.us.us.us.us.us.preheader ]
  %.0169240.us.us.us.us.us.us.us.us.us = phi float [ %43, %..preheader_crit_edge.us.us.us.us.us.us.us.us.us ], [ 0.000000e+00, %..preheader_crit_edge.us.us.us.us.us.us.us.us.us.preheader ]
  %40 = getelementptr inbounds float, ptr %.1166250.us.us.us.us.us.us.us.us.us, i64 %.0168241.us.us.us.us.us.us.us.us.us
  %41 = load float, ptr %40, align 4, !tbaa !5
  %42 = tail call noundef float @_ZN4Simd6SquareIfEET_S1_(float noundef %41)
  %43 = fadd float %.0169240.us.us.us.us.us.us.us.us.us, %42
  %44 = add nuw i64 %.0168241.us.us.us.us.us.us.us.us.us, 1
  %exitcond334.not = icmp eq i64 %44, %3
  br i1 %exitcond334.not, label %._crit_edge243.us.us.us.us.us.us.us.us.us, label %..preheader_crit_edge.us.us.us.us.us.us.us.us.us, !llvm.loop !12

scalar.ph481:                                     ; preds = %scalar.ph481.prol.loopexit, %scalar.ph481
  %.0170237.us.us.us.us.us.us.us.us.us = phi i64 [ %64, %scalar.ph481 ], [ %.0170237.us.us.us.us.us.us.us.us.us.unr, %scalar.ph481.prol.loopexit ]
  %45 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %.0170237.us.us.us.us.us.us.us.us.us
  %46 = load float, ptr %45, align 4, !tbaa !5
  %47 = fsub float %46, %101
  %48 = getelementptr inbounds float, ptr %.1166250.us.us.us.us.us.us.us.us.us, i64 %.0170237.us.us.us.us.us.us.us.us.us
  store float %47, ptr %48, align 4, !tbaa !5
  %49 = add nuw i64 %.0170237.us.us.us.us.us.us.us.us.us, 1
  %50 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %49
  %51 = load float, ptr %50, align 4, !tbaa !5
  %52 = fsub float %51, %101
  %53 = getelementptr inbounds float, ptr %.1166250.us.us.us.us.us.us.us.us.us, i64 %49
  store float %52, ptr %53, align 4, !tbaa !5
  %54 = add nuw i64 %.0170237.us.us.us.us.us.us.us.us.us, 2
  %55 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %54
  %56 = load float, ptr %55, align 4, !tbaa !5
  %57 = fsub float %56, %101
  %58 = getelementptr inbounds float, ptr %.1166250.us.us.us.us.us.us.us.us.us, i64 %54
  store float %57, ptr %58, align 4, !tbaa !5
  %59 = add nuw i64 %.0170237.us.us.us.us.us.us.us.us.us, 3
  %60 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %59
  %61 = load float, ptr %60, align 4, !tbaa !5
  %62 = fsub float %61, %101
  %63 = getelementptr inbounds float, ptr %.1166250.us.us.us.us.us.us.us.us.us, i64 %59
  store float %62, ptr %63, align 4, !tbaa !5
  %64 = add nuw i64 %.0170237.us.us.us.us.us.us.us.us.us, 4
  %exitcond333.not.3 = icmp eq i64 %64, %3
  br i1 %exitcond333.not.3, label %..preheader_crit_edge.us.us.us.us.us.us.us.us.us.preheader, label %scalar.ph481, !llvm.loop !13

.preheader179.us.us.us.us.us.us.us.us.us.new:     ; preds = %.preheader179.us.us.us.us.us.us.us.us.us, %.preheader179.us.us.us.us.us.us.us.us.us.new
  %.0172234.us.us.us.us.us.us.us.us.us = phi i64 [ %96, %.preheader179.us.us.us.us.us.us.us.us.us.new ], [ 0, %.preheader179.us.us.us.us.us.us.us.us.us ]
  %.0173233.us.us.us.us.us.us.us.us.us = phi float [ %95, %.preheader179.us.us.us.us.us.us.us.us.us.new ], [ 0.000000e+00, %.preheader179.us.us.us.us.us.us.us.us.us ]
  %niter = phi i64 [ %niter.next.7, %.preheader179.us.us.us.us.us.us.us.us.us.new ], [ 0, %.preheader179.us.us.us.us.us.us.us.us.us ]
  %65 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %.0172234.us.us.us.us.us.us.us.us.us
  %66 = load float, ptr %65, align 4, !tbaa !5
  %67 = fadd float %.0173233.us.us.us.us.us.us.us.us.us, %66
  %68 = or disjoint i64 %.0172234.us.us.us.us.us.us.us.us.us, 1
  %69 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %68
  %70 = load float, ptr %69, align 4, !tbaa !5
  %71 = fadd float %67, %70
  %72 = or disjoint i64 %.0172234.us.us.us.us.us.us.us.us.us, 2
  %73 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %72
  %74 = load float, ptr %73, align 4, !tbaa !5
  %75 = fadd float %71, %74
  %76 = or disjoint i64 %.0172234.us.us.us.us.us.us.us.us.us, 3
  %77 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %76
  %78 = load float, ptr %77, align 4, !tbaa !5
  %79 = fadd float %75, %78
  %80 = or disjoint i64 %.0172234.us.us.us.us.us.us.us.us.us, 4
  %81 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %80
  %82 = load float, ptr %81, align 4, !tbaa !5
  %83 = fadd float %79, %82
  %84 = or disjoint i64 %.0172234.us.us.us.us.us.us.us.us.us, 5
  %85 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %84
  %86 = load float, ptr %85, align 4, !tbaa !5
  %87 = fadd float %83, %86
  %88 = or disjoint i64 %.0172234.us.us.us.us.us.us.us.us.us, 6
  %89 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %88
  %90 = load float, ptr %89, align 4, !tbaa !5
  %91 = fadd float %87, %90
  %92 = or disjoint i64 %.0172234.us.us.us.us.us.us.us.us.us, 7
  %93 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %92
  %94 = load float, ptr %93, align 4, !tbaa !5
  %95 = fadd float %91, %94
  %96 = add nuw i64 %.0172234.us.us.us.us.us.us.us.us.us, 8
  %niter.next.7 = add i64 %niter, 8
  %niter.ncmp.7 = icmp eq i64 %niter.next.7, %unroll_iter
  br i1 %niter.ncmp.7, label %._crit_edge236.us.us.us.us.us.us.us.us.us.unr-lcssa, label %.preheader179.us.us.us.us.us.us.us.us.us.new, !llvm.loop !14

._crit_edge236.us.us.us.us.us.us.us.us.us.unr-lcssa: ; preds = %.preheader179.us.us.us.us.us.us.us.us.us.new, %.preheader179.us.us.us.us.us.us.us.us.us
  %.lcssa.ph = phi float [ poison, %.preheader179.us.us.us.us.us.us.us.us.us ], [ %95, %.preheader179.us.us.us.us.us.us.us.us.us.new ]
  %.0172234.us.us.us.us.us.us.us.us.us.unr = phi i64 [ 0, %.preheader179.us.us.us.us.us.us.us.us.us ], [ %96, %.preheader179.us.us.us.us.us.us.us.us.us.new ]
  %.0173233.us.us.us.us.us.us.us.us.us.unr = phi float [ 0.000000e+00, %.preheader179.us.us.us.us.us.us.us.us.us ], [ %95, %.preheader179.us.us.us.us.us.us.us.us.us.new ]
  br i1 %lcmp.mod510.not, label %._crit_edge236.us.us.us.us.us.us.us.us.us, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge236.us.us.us.us.us.us.us.us.us.unr-lcssa, %.epil.preheader
  %.0172234.us.us.us.us.us.us.us.us.us.epil = phi i64 [ %100, %.epil.preheader ], [ %.0172234.us.us.us.us.us.us.us.us.us.unr, %._crit_edge236.us.us.us.us.us.us.us.us.us.unr-lcssa ]
  %.0173233.us.us.us.us.us.us.us.us.us.epil = phi float [ %99, %.epil.preheader ], [ %.0173233.us.us.us.us.us.us.us.us.us.unr, %._crit_edge236.us.us.us.us.us.us.us.us.us.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge236.us.us.us.us.us.us.us.us.us.unr-lcssa ]
  %97 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %.0172234.us.us.us.us.us.us.us.us.us.epil
  %98 = load float, ptr %97, align 4, !tbaa !5
  %99 = fadd float %.0173233.us.us.us.us.us.us.us.us.us.epil, %98
  %100 = add nuw i64 %.0172234.us.us.us.us.us.us.us.us.us.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter509
  br i1 %epil.iter.cmp.not, label %._crit_edge236.us.us.us.us.us.us.us.us.us, label %.epil.preheader, !llvm.loop !15

._crit_edge236.us.us.us.us.us.us.us.us.us:        ; preds = %.epil.preheader, %._crit_edge236.us.us.us.us.us.us.us.us.us.unr-lcssa
  %.lcssa = phi float [ %.lcssa.ph, %._crit_edge236.us.us.us.us.us.us.us.us.us.unr-lcssa ], [ %99, %.epil.preheader ]
  %101 = fmul float %15, %.lcssa
  br i1 %or.cond495, label %scalar.ph481.preheader, label %vector.ph483

scalar.ph481.preheader:                           ; preds = %middle.block480, %._crit_edge236.us.us.us.us.us.us.us.us.us
  %.0170237.us.us.us.us.us.us.us.us.us.ph = phi i64 [ 0, %._crit_edge236.us.us.us.us.us.us.us.us.us ], [ %n.vec485, %middle.block480 ]
  br i1 %lcmp.mod513.not, label %scalar.ph481.prol.loopexit, label %scalar.ph481.prol

scalar.ph481.prol:                                ; preds = %scalar.ph481.preheader, %scalar.ph481.prol
  %.0170237.us.us.us.us.us.us.us.us.us.prol = phi i64 [ %106, %scalar.ph481.prol ], [ %.0170237.us.us.us.us.us.us.us.us.us.ph, %scalar.ph481.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph481.prol ], [ 0, %scalar.ph481.preheader ]
  %102 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %.0170237.us.us.us.us.us.us.us.us.us.prol
  %103 = load float, ptr %102, align 4, !tbaa !5
  %104 = fsub float %103, %101
  %105 = getelementptr inbounds float, ptr %.1166250.us.us.us.us.us.us.us.us.us, i64 %.0170237.us.us.us.us.us.us.us.us.us.prol
  store float %104, ptr %105, align 4, !tbaa !5
  %106 = add nuw i64 %.0170237.us.us.us.us.us.us.us.us.us.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter512
  br i1 %prol.iter.cmp.not, label %scalar.ph481.prol.loopexit, label %scalar.ph481.prol, !llvm.loop !17

scalar.ph481.prol.loopexit:                       ; preds = %scalar.ph481.prol, %scalar.ph481.preheader
  %.0170237.us.us.us.us.us.us.us.us.us.unr = phi i64 [ %.0170237.us.us.us.us.us.us.us.us.us.ph, %scalar.ph481.preheader ], [ %106, %scalar.ph481.prol ]
  %107 = sub i64 %.0170237.us.us.us.us.us.us.us.us.us.ph, %3
  %108 = icmp ugt i64 %107, -4
  br i1 %108, label %..preheader_crit_edge.us.us.us.us.us.us.us.us.us.preheader, label %scalar.ph481

vector.ph483:                                     ; preds = %._crit_edge236.us.us.us.us.us.us.us.us.us
  %broadcast.splatinsert491 = insertelement <4 x float> poison, float %101, i64 0
  %broadcast.splat492 = shufflevector <4 x float> %broadcast.splatinsert491, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body487

vector.body487:                                   ; preds = %vector.body487, %vector.ph483
  %index488 = phi i64 [ 0, %vector.ph483 ], [ %index.next493, %vector.body487 ]
  %109 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %index488
  %110 = getelementptr inbounds i8, ptr %109, i64 16
  %wide.load489 = load <4 x float>, ptr %109, align 4, !tbaa !5
  %wide.load490 = load <4 x float>, ptr %110, align 4, !tbaa !5
  %111 = fsub <4 x float> %wide.load489, %broadcast.splat492
  %112 = fsub <4 x float> %wide.load490, %broadcast.splat492
  %113 = getelementptr inbounds float, ptr %.1166250.us.us.us.us.us.us.us.us.us, i64 %index488
  %114 = getelementptr inbounds i8, ptr %113, i64 16
  store <4 x float> %111, ptr %113, align 4, !tbaa !5
  store <4 x float> %112, ptr %114, align 4, !tbaa !5
  %index.next493 = add nuw i64 %index488, 8
  %115 = icmp eq i64 %index.next493, %n.vec485
  br i1 %115, label %middle.block480, label %vector.body487, !llvm.loop !18

middle.block480:                                  ; preds = %vector.body487
  br i1 %cmp.n494, label %..preheader_crit_edge.us.us.us.us.us.us.us.us.us.preheader, label %scalar.ph481.preheader

..preheader_crit_edge.us.us.us.us.us.us.us.us.us.preheader: ; preds = %scalar.ph481.prol.loopexit, %scalar.ph481, %middle.block480
  br label %..preheader_crit_edge.us.us.us.us.us.us.us.us.us

._crit_edge243.us.us.us.us.us.us.us.us.us:        ; preds = %..preheader_crit_edge.us.us.us.us.us.us.us.us.us
  %116 = tail call float @llvm.fmuladd.f32(float %43, float %15, float %16)
  %117 = tail call noundef float @_ZSt4sqrtf(float noundef %116)
  %118 = fdiv float 1.000000e+00, %117
  %119 = getelementptr inbounds float, ptr %4, i64 %.0174249.us.us.us.us.us.us.us.us.us
  %120 = getelementptr inbounds float, ptr %5, i64 %.0174249.us.us.us.us.us.us.us.us.us
  %brmerge = select i1 %min.iters.check455, i1 true, i1 %conflict.rdx452
  br i1 %brmerge, label %scalar.ph454.preheader, label %vector.ph456

scalar.ph454.preheader:                           ; preds = %._crit_edge243.us.us.us.us.us.us.us.us.us, %middle.block453
  %.0164245.us.us.us.us.us.us.us.us.us.ph = phi i64 [ 0, %._crit_edge243.us.us.us.us.us.us.us.us.us ], [ %n.vec458, %middle.block453 ]
  br i1 %lcmp.mod515.not, label %scalar.ph454.prol.loopexit, label %scalar.ph454.prol

scalar.ph454.prol:                                ; preds = %scalar.ph454.preheader
  %121 = getelementptr inbounds float, ptr %.1166250.us.us.us.us.us.us.us.us.us, i64 %.0164245.us.us.us.us.us.us.us.us.us.ph
  %122 = load float, ptr %121, align 4, !tbaa !5
  %123 = fmul float %118, %122
  %124 = load float, ptr %119, align 4, !tbaa !5
  %125 = load float, ptr %120, align 4, !tbaa !5
  %126 = tail call float @llvm.fmuladd.f32(float %123, float %124, float %125)
  store float %126, ptr %121, align 4, !tbaa !5
  %127 = or disjoint i64 %.0164245.us.us.us.us.us.us.us.us.us.ph, 1
  br label %scalar.ph454.prol.loopexit

scalar.ph454.prol.loopexit:                       ; preds = %scalar.ph454.prol, %scalar.ph454.preheader
  %.0164245.us.us.us.us.us.us.us.us.us.unr = phi i64 [ %.0164245.us.us.us.us.us.us.us.us.us.ph, %scalar.ph454.preheader ], [ %127, %scalar.ph454.prol ]
  %128 = icmp eq i64 %.0164245.us.us.us.us.us.us.us.us.us.ph, %22
  br i1 %128, label %._crit_edge248.us.us.us.us.us.us.us.us.us, label %scalar.ph454

vector.ph456:                                     ; preds = %._crit_edge243.us.us.us.us.us.us.us.us.us
  %broadcast.splatinsert464 = insertelement <4 x float> poison, float %118, i64 0
  %broadcast.splat465 = shufflevector <4 x float> %broadcast.splatinsert464, <4 x float> poison, <4 x i32> zeroinitializer
  %129 = load float, ptr %119, align 4, !tbaa !5, !alias.scope !20
  %broadcast.splatinsert470 = insertelement <4 x float> poison, float %129, i64 0
  %broadcast.splat471 = shufflevector <4 x float> %broadcast.splatinsert470, <4 x float> poison, <4 x i32> zeroinitializer
  %130 = load float, ptr %120, align 4, !tbaa !5, !alias.scope !23
  %broadcast.splatinsert472 = insertelement <4 x float> poison, float %130, i64 0
  %broadcast.splat473 = shufflevector <4 x float> %broadcast.splatinsert472, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body460

vector.body460:                                   ; preds = %vector.body460, %vector.ph456
  %index461 = phi i64 [ 0, %vector.ph456 ], [ %index.next474, %vector.body460 ]
  %131 = getelementptr inbounds float, ptr %.1166250.us.us.us.us.us.us.us.us.us, i64 %index461
  %132 = getelementptr inbounds i8, ptr %131, i64 16
  %wide.load462 = load <4 x float>, ptr %131, align 4, !tbaa !5, !alias.scope !25, !noalias !27
  %wide.load463 = load <4 x float>, ptr %132, align 4, !tbaa !5, !alias.scope !25, !noalias !27
  %133 = fmul <4 x float> %broadcast.splat465, %wide.load462
  %134 = fmul <4 x float> %broadcast.splat465, %wide.load463
  %135 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %133, <4 x float> %broadcast.splat471, <4 x float> %broadcast.splat473)
  %136 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %134, <4 x float> %broadcast.splat471, <4 x float> %broadcast.splat473)
  store <4 x float> %135, ptr %131, align 4, !tbaa !5, !alias.scope !25, !noalias !27
  store <4 x float> %136, ptr %132, align 4, !tbaa !5, !alias.scope !25, !noalias !27
  %index.next474 = add nuw i64 %index461, 8
  %137 = icmp eq i64 %index.next474, %n.vec458
  br i1 %137, label %middle.block453, label %vector.body460, !llvm.loop !28

middle.block453:                                  ; preds = %vector.body460
  br i1 %cmp.n475, label %._crit_edge248.us.us.us.us.us.us.us.us.us, label %scalar.ph454.preheader

._crit_edge248.us.us.us.us.us.us.us.us.us:        ; preds = %scalar.ph454.prol.loopexit, %scalar.ph454, %middle.block453
  %138 = getelementptr inbounds float, ptr %.1166250.us.us.us.us.us.us.us.us.us, i64 %3
  %139 = getelementptr inbounds float, ptr %.1162251.us.us.us.us.us.us.us.us.us, i64 %3
  %140 = add nuw i64 %.0174249.us.us.us.us.us.us.us.us.us, 1
  %exitcond336.not = icmp eq i64 %140, %2
  br i1 %exitcond336.not, label %._crit_edge252.split.us.us.us.split.us.us.split.us.us.split.us.us, label %.preheader179.us.us.us.us.us.us.us.us.us, !llvm.loop !29

._crit_edge252.split.us.us.us.split.us.us.split.us.us.split.us.us: ; preds = %._crit_edge248.us.us.us.us.us.us.us.us.us
  %141 = add nuw i64 %.0171257.us.us.us.us.us, 1
  %exitcond337.not = icmp eq i64 %141, %1
  br i1 %exitcond337.not, label %.loopexit, label %.preheader180.us.us.us.us.us, !llvm.loop !30

.preheader180.us:                                 ; preds = %.preheader180.us.preheader, %._crit_edge252.split.us280
  %.0171257.us = phi i64 [ %144, %._crit_edge252.split.us280 ], [ 0, %.preheader180.us.preheader ]
  br label %._crit_edge243.us278

._crit_edge243.us278:                             ; preds = %.preheader180.us, %._crit_edge243.us278
  %.0174249.us271 = phi i64 [ 0, %.preheader180.us ], [ %143, %._crit_edge243.us278 ]
  %142 = tail call noundef float @_ZSt4sqrtf(float noundef %23)
  %143 = add nuw i64 %.0174249.us271, 1
  %exitcond338.not = icmp eq i64 %143, %2
  br i1 %exitcond338.not, label %._crit_edge252.split.us280, label %._crit_edge243.us278, !llvm.loop !29

._crit_edge252.split.us280:                       ; preds = %._crit_edge243.us278
  %144 = add nuw i64 %.0171257.us, 1
  %exitcond339.not = icmp eq i64 %144, %1
  br i1 %exitcond339.not, label %.loopexit, label %.preheader180.us, !llvm.loop !30

145:                                              ; preds = %10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #9
  call void @_ZN4Simd5ArrayIfEC2Embm(ptr noundef nonnull align 8 dereferenceable(16) %13, i64 noundef 0, i1 noundef zeroext false, i64 noundef 8)
  %146 = icmp eq ptr %8, null
  br i1 %146, label %147, label %152

147:                                              ; preds = %145
  invoke void @_ZN4Simd5ArrayIfE6ResizeEmbm(ptr noundef nonnull align 8 dereferenceable(16) %13, i64 noundef %2, i1 noundef zeroext false, i64 noundef 8)
          to label %148 unwind label %150

148:                                              ; preds = %147
  %149 = load ptr, ptr %13, align 8, !tbaa !31
  br label %152

150:                                              ; preds = %147
  %151 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN4Simd5ArrayIfED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #9
  resume { ptr, i32 } %151

152:                                              ; preds = %148, %145
  %.0163 = phi ptr [ %149, %148 ], [ %8, %145 ]
  %.not = icmp eq i64 %1, 0
  br i1 %.not, label %._crit_edge, label %.preheader193.lr.ph

.preheader193.lr.ph:                              ; preds = %152
  %.0163381 = ptrtoint ptr %.0163 to i64
  %.not287 = icmp eq i64 %2, 0
  %.not288 = icmp eq i64 %3, 0
  %153 = mul i64 %3, %2
  %154 = shl nuw i64 %2, 2
  %155 = shl i64 %2, 2
  %156 = mul i64 %3, %2
  %157 = shl i64 %156, 2
  %scevgep362 = getelementptr i8, ptr %.0163, i64 %155
  %scevgep363 = getelementptr i8, ptr %4, i64 %155
  %scevgep364 = getelementptr i8, ptr %5, i64 %155
  %158 = sub i64 %12, %11
  %159 = sub i64 %12, %.0163381
  %160 = mul i64 %3, %2
  %161 = shl i64 %160, 2
  %162 = shl i64 %2, 2
  %scevgep416 = getelementptr i8, ptr %.0163, i64 %162
  %163 = mul i64 %3, %2
  %164 = shl i64 %163, 2
  %165 = getelementptr i8, ptr %0, i64 %162
  %166 = getelementptr i8, ptr %9, i64 %155
  %min.iters.check425 = icmp ult i64 %2, 8
  %n.vec428 = and i64 %2, -8
  %cmp.n440 = icmp eq i64 %n.vec428, %2
  %xtraiter = and i64 %2, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %167 = add i64 %2, -1
  %min.iters.check404 = icmp ult i64 %2, 8
  %n.vec407 = and i64 %2, -8
  %broadcast.splatinsert = insertelement <4 x float> poison, float %15, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %cmp.n414 = icmp eq i64 %n.vec407, %2
  %min.iters.check386 = icmp ult i64 %2, 8
  %diff.check = icmp ult i64 %158, 32
  %n.vec389 = and i64 %2, -8
  %cmp.n401 = icmp eq i64 %n.vec389, %2
  %xtraiter505 = and i64 %2, 1
  %lcmp.mod506.not = icmp eq i64 %xtraiter505, 0
  %168 = add i64 %2, -1
  %min.iters.check = icmp ult i64 %2, 8
  %n.vec = and i64 %2, -8
  %cmp.n = icmp eq i64 %n.vec, %2
  %xtraiter507 = and i64 %2, 1
  %lcmp.mod508.not = icmp eq i64 %xtraiter507, 0
  %169 = add i64 %2, -1
  br label %.preheader193

.preheader193:                                    ; preds = %.preheader193.lr.ph, %._crit_edge225
  %.0160232 = phi i64 [ 0, %.preheader193.lr.ph ], [ %321, %._crit_edge225 ]
  %.2230 = phi ptr [ %0, %.preheader193.lr.ph ], [ %319, %._crit_edge225 ]
  %.2167228 = phi ptr [ %9, %.preheader193.lr.ph ], [ %320, %._crit_edge225 ]
  %170 = mul i64 %164, %.0160232
  %scevgep418 = getelementptr i8, ptr %165, i64 %170
  %171 = mul i64 %161, %.0160232
  %172 = add i64 %159, %171
  %173 = mul i64 %157, %.0160232
  %scevgep360 = getelementptr i8, ptr %166, i64 %173
  br i1 %.not287, label %._crit_edge225, label %.preheader192.thread

._crit_edge:                                      ; preds = %._crit_edge225, %152
  call void @_ZN4Simd5ArrayIfED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #9
  br label %.loopexit

.preheader192.thread:                             ; preds = %.preheader193
  call void @llvm.memset.p0.i64(ptr align 4 %.0163, i8 0, i64 %154, i1 false), !tbaa !5
  br i1 %.not288, label %.lr.ph201.preheader, label %.preheader185.us

.preheader185.us:                                 ; preds = %.preheader192.thread, %._crit_edge.us
  %.0156199.us = phi i64 [ %.lcssa356, %._crit_edge.us ], [ 0, %.preheader192.thread ]
  %.0158198.us = phi i64 [ %204, %._crit_edge.us ], [ 0, %.preheader192.thread ]
  br i1 %min.iters.check425, label %scalar.ph424.preheader, label %vector.memcheck415

vector.memcheck415:                               ; preds = %.preheader185.us
  %174 = shl i64 %.0156199.us, 2
  %scevgep417 = getelementptr i8, ptr %.2230, i64 %174
  %scevgep419 = getelementptr i8, ptr %scevgep418, i64 %174
  %bound0420 = icmp ult ptr %.0163, %scevgep419
  %bound1421 = icmp ult ptr %scevgep417, %scevgep416
  %found.conflict422 = and i1 %bound0420, %bound1421
  br i1 %found.conflict422, label %scalar.ph424.preheader, label %vector.ph426

vector.ph426:                                     ; preds = %vector.memcheck415
  %ind.end430 = add i64 %.0156199.us, %n.vec428
  br label %vector.body432

vector.body432:                                   ; preds = %vector.body432, %vector.ph426
  %index433 = phi i64 [ 0, %vector.ph426 ], [ %index.next439, %vector.body432 ]
  %offset.idx434 = add i64 %.0156199.us, %index433
  %175 = getelementptr inbounds float, ptr %.2230, i64 %offset.idx434
  %176 = getelementptr inbounds i8, ptr %175, i64 16
  %wide.load435 = load <4 x float>, ptr %175, align 4, !tbaa !5, !alias.scope !35
  %wide.load436 = load <4 x float>, ptr %176, align 4, !tbaa !5, !alias.scope !35
  %177 = getelementptr inbounds float, ptr %.0163, i64 %index433
  %178 = getelementptr inbounds i8, ptr %177, i64 16
  %wide.load437 = load <4 x float>, ptr %177, align 4, !tbaa !5, !alias.scope !38, !noalias !35
  %wide.load438 = load <4 x float>, ptr %178, align 4, !tbaa !5, !alias.scope !38, !noalias !35
  %179 = fadd <4 x float> %wide.load435, %wide.load437
  %180 = fadd <4 x float> %wide.load436, %wide.load438
  store <4 x float> %179, ptr %177, align 4, !tbaa !5, !alias.scope !38, !noalias !35
  store <4 x float> %180, ptr %178, align 4, !tbaa !5, !alias.scope !38, !noalias !35
  %index.next439 = add nuw i64 %index433, 8
  %181 = icmp eq i64 %index.next439, %n.vec428
  br i1 %181, label %middle.block423, label %vector.body432, !llvm.loop !40

middle.block423:                                  ; preds = %vector.body432
  br i1 %cmp.n440, label %._crit_edge.us, label %scalar.ph424.preheader

scalar.ph424.preheader:                           ; preds = %middle.block423, %vector.memcheck415, %.preheader185.us
  %.0155196.us.ph = phi i64 [ 0, %vector.memcheck415 ], [ 0, %.preheader185.us ], [ %n.vec428, %middle.block423 ]
  %.1157195.us.ph = phi i64 [ %.0156199.us, %vector.memcheck415 ], [ %.0156199.us, %.preheader185.us ], [ %ind.end430, %middle.block423 ]
  br i1 %lcmp.mod.not, label %scalar.ph424.prol.loopexit, label %scalar.ph424.prol

scalar.ph424.prol:                                ; preds = %scalar.ph424.preheader
  %182 = getelementptr inbounds float, ptr %.2230, i64 %.1157195.us.ph
  %183 = load float, ptr %182, align 4, !tbaa !5
  %184 = getelementptr inbounds float, ptr %.0163, i64 %.0155196.us.ph
  %185 = load float, ptr %184, align 4, !tbaa !5
  %186 = fadd float %183, %185
  store float %186, ptr %184, align 4, !tbaa !5
  %187 = or disjoint i64 %.0155196.us.ph, 1
  %188 = add i64 %.1157195.us.ph, 1
  br label %scalar.ph424.prol.loopexit

scalar.ph424.prol.loopexit:                       ; preds = %scalar.ph424.prol, %scalar.ph424.preheader
  %.lcssa501.unr = phi i64 [ poison, %scalar.ph424.preheader ], [ %188, %scalar.ph424.prol ]
  %.0155196.us.unr = phi i64 [ %.0155196.us.ph, %scalar.ph424.preheader ], [ %187, %scalar.ph424.prol ]
  %.1157195.us.unr = phi i64 [ %.1157195.us.ph, %scalar.ph424.preheader ], [ %188, %scalar.ph424.prol ]
  %189 = icmp eq i64 %.0155196.us.ph, %167
  br i1 %189, label %._crit_edge.us, label %scalar.ph424

scalar.ph424:                                     ; preds = %scalar.ph424.prol.loopexit, %scalar.ph424
  %.0155196.us = phi i64 [ %202, %scalar.ph424 ], [ %.0155196.us.unr, %scalar.ph424.prol.loopexit ]
  %.1157195.us = phi i64 [ %203, %scalar.ph424 ], [ %.1157195.us.unr, %scalar.ph424.prol.loopexit ]
  %190 = getelementptr inbounds float, ptr %.2230, i64 %.1157195.us
  %191 = load float, ptr %190, align 4, !tbaa !5
  %192 = getelementptr inbounds float, ptr %.0163, i64 %.0155196.us
  %193 = load float, ptr %192, align 4, !tbaa !5
  %194 = fadd float %191, %193
  store float %194, ptr %192, align 4, !tbaa !5
  %195 = add nuw i64 %.0155196.us, 1
  %196 = add i64 %.1157195.us, 1
  %197 = getelementptr inbounds float, ptr %.2230, i64 %196
  %198 = load float, ptr %197, align 4, !tbaa !5
  %199 = getelementptr inbounds float, ptr %.0163, i64 %195
  %200 = load float, ptr %199, align 4, !tbaa !5
  %201 = fadd float %198, %200
  store float %201, ptr %199, align 4, !tbaa !5
  %202 = add nuw i64 %.0155196.us, 2
  %203 = add i64 %.1157195.us, 2
  %exitcond.not.1 = icmp eq i64 %202, %2
  br i1 %exitcond.not.1, label %._crit_edge.us, label %scalar.ph424, !llvm.loop !41

._crit_edge.us:                                   ; preds = %scalar.ph424.prol.loopexit, %scalar.ph424, %middle.block423
  %.lcssa356 = phi i64 [ %ind.end430, %middle.block423 ], [ %.lcssa501.unr, %scalar.ph424.prol.loopexit ], [ %203, %scalar.ph424 ]
  %204 = add nuw i64 %.0158198.us, 1
  %exitcond322.not = icmp eq i64 %204, %3
  br i1 %exitcond322.not, label %.lr.ph201.preheader, label %.preheader185.us, !llvm.loop !42

.lr.ph201.preheader:                              ; preds = %._crit_edge.us, %.preheader192.thread
  br i1 %min.iters.check404, label %.lr.ph201.preheader500, label %vector.body409

.lr.ph201.preheader500:                           ; preds = %middle.block402, %.lr.ph201.preheader
  %.0154200.ph = phi i64 [ 0, %.lr.ph201.preheader ], [ %n.vec407, %middle.block402 ]
  br label %.lr.ph201

vector.body409:                                   ; preds = %.lr.ph201.preheader, %vector.body409
  %index410 = phi i64 [ %index.next413, %vector.body409 ], [ 0, %.lr.ph201.preheader ]
  %205 = getelementptr inbounds float, ptr %.0163, i64 %index410
  %206 = getelementptr inbounds i8, ptr %205, i64 16
  %wide.load411 = load <4 x float>, ptr %205, align 4, !tbaa !5
  %wide.load412 = load <4 x float>, ptr %206, align 4, !tbaa !5
  %207 = fmul <4 x float> %broadcast.splat, %wide.load411
  %208 = fmul <4 x float> %broadcast.splat, %wide.load412
  store <4 x float> %207, ptr %205, align 4, !tbaa !5
  store <4 x float> %208, ptr %206, align 4, !tbaa !5
  %index.next413 = add nuw i64 %index410, 8
  %209 = icmp eq i64 %index.next413, %n.vec407
  br i1 %209, label %middle.block402, label %vector.body409, !llvm.loop !43

middle.block402:                                  ; preds = %vector.body409
  br i1 %cmp.n414, label %.preheader190, label %.lr.ph201.preheader500

.preheader190:                                    ; preds = %.lr.ph201, %middle.block402
  br i1 %.not288, label %.preheader187, label %.preheader184.us

.preheader184.us:                                 ; preds = %.preheader190, %._crit_edge.us207
  %.0151206.us = phi i64 [ %.lcssa357, %._crit_edge.us207 ], [ 0, %.preheader190 ]
  %.0153205.us = phi i64 [ %246, %._crit_edge.us207 ], [ 0, %.preheader190 ]
  br i1 %min.iters.check386, label %scalar.ph385.preheader, label %vector.memcheck380

vector.memcheck380:                               ; preds = %.preheader184.us
  %210 = shl i64 %.0151206.us, 2
  %211 = add i64 %172, %210
  %diff.check382 = icmp ult i64 %211, 32
  %conflict.rdx383 = or i1 %diff.check, %diff.check382
  br i1 %conflict.rdx383, label %scalar.ph385.preheader, label %vector.ph387

vector.ph387:                                     ; preds = %vector.memcheck380
  %ind.end391 = add i64 %.0151206.us, %n.vec389
  br label %vector.body393

vector.body393:                                   ; preds = %vector.body393, %vector.ph387
  %index394 = phi i64 [ 0, %vector.ph387 ], [ %index.next400, %vector.body393 ]
  %offset.idx395 = add i64 %.0151206.us, %index394
  %212 = getelementptr inbounds float, ptr %.2230, i64 %offset.idx395
  %213 = getelementptr inbounds i8, ptr %212, i64 16
  %wide.load396 = load <4 x float>, ptr %212, align 4, !tbaa !5
  %wide.load397 = load <4 x float>, ptr %213, align 4, !tbaa !5
  %214 = getelementptr inbounds float, ptr %.0163, i64 %index394
  %215 = getelementptr inbounds i8, ptr %214, i64 16
  %wide.load398 = load <4 x float>, ptr %214, align 4, !tbaa !5
  %wide.load399 = load <4 x float>, ptr %215, align 4, !tbaa !5
  %216 = fsub <4 x float> %wide.load396, %wide.load398
  %217 = fsub <4 x float> %wide.load397, %wide.load399
  %218 = getelementptr inbounds float, ptr %.2167228, i64 %offset.idx395
  %219 = getelementptr inbounds i8, ptr %218, i64 16
  store <4 x float> %216, ptr %218, align 4, !tbaa !5
  store <4 x float> %217, ptr %219, align 4, !tbaa !5
  %index.next400 = add nuw i64 %index394, 8
  %220 = icmp eq i64 %index.next400, %n.vec389
  br i1 %220, label %middle.block384, label %vector.body393, !llvm.loop !44

middle.block384:                                  ; preds = %vector.body393
  br i1 %cmp.n401, label %._crit_edge.us207, label %scalar.ph385.preheader

scalar.ph385.preheader:                           ; preds = %middle.block384, %vector.memcheck380, %.preheader184.us
  %.0150203.us.ph = phi i64 [ 0, %vector.memcheck380 ], [ 0, %.preheader184.us ], [ %n.vec389, %middle.block384 ]
  %.1152202.us.ph = phi i64 [ %.0151206.us, %vector.memcheck380 ], [ %.0151206.us, %.preheader184.us ], [ %ind.end391, %middle.block384 ]
  br i1 %lcmp.mod506.not, label %scalar.ph385.prol.loopexit, label %scalar.ph385.prol

scalar.ph385.prol:                                ; preds = %scalar.ph385.preheader
  %221 = getelementptr inbounds float, ptr %.2230, i64 %.1152202.us.ph
  %222 = load float, ptr %221, align 4, !tbaa !5
  %223 = getelementptr inbounds float, ptr %.0163, i64 %.0150203.us.ph
  %224 = load float, ptr %223, align 4, !tbaa !5
  %225 = fsub float %222, %224
  %226 = getelementptr inbounds float, ptr %.2167228, i64 %.1152202.us.ph
  store float %225, ptr %226, align 4, !tbaa !5
  %227 = or disjoint i64 %.0150203.us.ph, 1
  %228 = add i64 %.1152202.us.ph, 1
  br label %scalar.ph385.prol.loopexit

scalar.ph385.prol.loopexit:                       ; preds = %scalar.ph385.prol, %scalar.ph385.preheader
  %.lcssa502.unr = phi i64 [ poison, %scalar.ph385.preheader ], [ %228, %scalar.ph385.prol ]
  %.0150203.us.unr = phi i64 [ %.0150203.us.ph, %scalar.ph385.preheader ], [ %227, %scalar.ph385.prol ]
  %.1152202.us.unr = phi i64 [ %.1152202.us.ph, %scalar.ph385.preheader ], [ %228, %scalar.ph385.prol ]
  %229 = icmp eq i64 %.0150203.us.ph, %168
  br i1 %229, label %._crit_edge.us207, label %scalar.ph385

scalar.ph385:                                     ; preds = %scalar.ph385.prol.loopexit, %scalar.ph385
  %.0150203.us = phi i64 [ %244, %scalar.ph385 ], [ %.0150203.us.unr, %scalar.ph385.prol.loopexit ]
  %.1152202.us = phi i64 [ %245, %scalar.ph385 ], [ %.1152202.us.unr, %scalar.ph385.prol.loopexit ]
  %230 = getelementptr inbounds float, ptr %.2230, i64 %.1152202.us
  %231 = load float, ptr %230, align 4, !tbaa !5
  %232 = getelementptr inbounds float, ptr %.0163, i64 %.0150203.us
  %233 = load float, ptr %232, align 4, !tbaa !5
  %234 = fsub float %231, %233
  %235 = getelementptr inbounds float, ptr %.2167228, i64 %.1152202.us
  store float %234, ptr %235, align 4, !tbaa !5
  %236 = add nuw i64 %.0150203.us, 1
  %237 = add i64 %.1152202.us, 1
  %238 = getelementptr inbounds float, ptr %.2230, i64 %237
  %239 = load float, ptr %238, align 4, !tbaa !5
  %240 = getelementptr inbounds float, ptr %.0163, i64 %236
  %241 = load float, ptr %240, align 4, !tbaa !5
  %242 = fsub float %239, %241
  %243 = getelementptr inbounds float, ptr %.2167228, i64 %237
  store float %242, ptr %243, align 4, !tbaa !5
  %244 = add nuw i64 %.0150203.us, 2
  %245 = add i64 %.1152202.us, 2
  %exitcond324.not.1 = icmp eq i64 %244, %2
  br i1 %exitcond324.not.1, label %._crit_edge.us207, label %scalar.ph385, !llvm.loop !45

._crit_edge.us207:                                ; preds = %scalar.ph385.prol.loopexit, %scalar.ph385, %middle.block384
  %.lcssa357 = phi i64 [ %ind.end391, %middle.block384 ], [ %.lcssa502.unr, %scalar.ph385.prol.loopexit ], [ %245, %scalar.ph385 ]
  %246 = add nuw i64 %.0153205.us, 1
  %exitcond325.not = icmp eq i64 %246, %3
  br i1 %exitcond325.not, label %.preheader183.us.preheader, label %.preheader184.us, !llvm.loop !46

.lr.ph201:                                        ; preds = %.lr.ph201.preheader500, %.lr.ph201
  %.0154200 = phi i64 [ %250, %.lr.ph201 ], [ %.0154200.ph, %.lr.ph201.preheader500 ]
  %247 = getelementptr inbounds float, ptr %.0163, i64 %.0154200
  %248 = load float, ptr %247, align 4, !tbaa !5
  %249 = fmul float %15, %248
  store float %249, ptr %247, align 4, !tbaa !5
  %250 = add nuw i64 %.0154200, 1
  %exitcond323.not = icmp eq i64 %250, %2
  br i1 %exitcond323.not, label %.preheader190, label %.lr.ph201, !llvm.loop !47

.preheader183.us.preheader:                       ; preds = %._crit_edge.us207
  call void @llvm.memset.p0.i64(ptr nonnull align 4 %.0163, i8 0, i64 %154, i1 false), !tbaa !5
  br label %.preheader183.us

.preheader183.us:                                 ; preds = %.preheader183.us.preheader, %._crit_edge.us216
  %.0146215.us = phi i64 [ %259, %._crit_edge.us216 ], [ 0, %.preheader183.us.preheader ]
  %.0148214.us = phi i64 [ %260, %._crit_edge.us216 ], [ 0, %.preheader183.us.preheader ]
  br label %251

251:                                              ; preds = %.preheader183.us, %251
  %.0145212.us = phi i64 [ 0, %.preheader183.us ], [ %258, %251 ]
  %.1147211.us = phi i64 [ %.0146215.us, %.preheader183.us ], [ %259, %251 ]
  %252 = getelementptr inbounds float, ptr %.2167228, i64 %.1147211.us
  %253 = load float, ptr %252, align 4, !tbaa !5
  %254 = call noundef float @_ZN4Simd6SquareIfEET_S1_(float noundef %253)
  %255 = getelementptr inbounds float, ptr %.0163, i64 %.0145212.us
  %256 = load float, ptr %255, align 4, !tbaa !5
  %257 = fadd float %254, %256
  store float %257, ptr %255, align 4, !tbaa !5
  %258 = add nuw i64 %.0145212.us, 1
  %259 = add i64 %.1147211.us, 1
  %exitcond326.not = icmp eq i64 %258, %2
  br i1 %exitcond326.not, label %._crit_edge.us216, label %251, !llvm.loop !48

._crit_edge.us216:                                ; preds = %251
  %260 = add nuw i64 %.0148214.us, 1
  %exitcond327.not = icmp eq i64 %260, %3
  br i1 %exitcond327.not, label %.lr.ph219.preheader, label %.preheader183.us, !llvm.loop !49

.preheader187:                                    ; preds = %.preheader190
  call void @llvm.memset.p0.i64(ptr nonnull align 4 %.0163, i8 0, i64 %154, i1 false), !tbaa !5
  br label %.lr.ph219.preheader

.lr.ph219.preheader:                              ; preds = %._crit_edge.us216, %.preheader187
  br label %.lr.ph219

.preheader186:                                    ; preds = %.lr.ph219
  br i1 %.not288, label %._crit_edge225, label %.preheader182.us

.preheader182.us:                                 ; preds = %.preheader186, %._crit_edge.us226
  %.0142224.us = phi i64 [ %.lcssa359, %._crit_edge.us226 ], [ 0, %.preheader186 ]
  %.0143223.us = phi i64 [ %312, %._crit_edge.us226 ], [ 0, %.preheader186 ]
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.preheader182.us
  %261 = shl i64 %.0142224.us, 2
  %scevgep = getelementptr i8, ptr %.2167228, i64 %261
  %scevgep361 = getelementptr i8, ptr %scevgep360, i64 %261
  %bound0 = icmp ult ptr %scevgep, %scevgep362
  %bound1 = icmp ult ptr %.0163, %scevgep361
  %found.conflict = and i1 %bound0, %bound1
  %bound0365 = icmp ult ptr %scevgep, %scevgep363
  %bound1366 = icmp ugt ptr %scevgep361, %4
  %found.conflict367 = and i1 %bound0365, %bound1366
  %conflict.rdx = or i1 %found.conflict, %found.conflict367
  %bound0368 = icmp ult ptr %scevgep, %scevgep364
  %bound1369 = icmp ugt ptr %scevgep361, %5
  %found.conflict370 = and i1 %bound0368, %bound1369
  %conflict.rdx371 = or i1 %conflict.rdx, %found.conflict370
  br i1 %conflict.rdx371, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %ind.end = add i64 %.0142224.us, %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 %.0142224.us, %index
  %262 = getelementptr inbounds float, ptr %.2167228, i64 %offset.idx
  %263 = getelementptr inbounds i8, ptr %262, i64 16
  %wide.load = load <4 x float>, ptr %262, align 4, !tbaa !5, !alias.scope !50, !noalias !53
  %wide.load373 = load <4 x float>, ptr %263, align 4, !tbaa !5, !alias.scope !50, !noalias !53
  %264 = getelementptr inbounds float, ptr %.0163, i64 %index
  %265 = getelementptr inbounds i8, ptr %264, i64 16
  %wide.load374 = load <4 x float>, ptr %264, align 4, !tbaa !5, !alias.scope !57
  %wide.load375 = load <4 x float>, ptr %265, align 4, !tbaa !5, !alias.scope !57
  %266 = fmul <4 x float> %wide.load, %wide.load374
  %267 = fmul <4 x float> %wide.load373, %wide.load375
  %268 = getelementptr inbounds float, ptr %4, i64 %index
  %269 = getelementptr inbounds i8, ptr %268, i64 16
  %wide.load376 = load <4 x float>, ptr %268, align 4, !tbaa !5, !alias.scope !58
  %wide.load377 = load <4 x float>, ptr %269, align 4, !tbaa !5, !alias.scope !58
  %270 = getelementptr inbounds float, ptr %5, i64 %index
  %271 = getelementptr inbounds i8, ptr %270, i64 16
  %wide.load378 = load <4 x float>, ptr %270, align 4, !tbaa !5, !alias.scope !59
  %wide.load379 = load <4 x float>, ptr %271, align 4, !tbaa !5, !alias.scope !59
  %272 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %266, <4 x float> %wide.load376, <4 x float> %wide.load378)
  %273 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %267, <4 x float> %wide.load377, <4 x float> %wide.load379)
  store <4 x float> %272, ptr %262, align 4, !tbaa !5, !alias.scope !50, !noalias !53
  store <4 x float> %273, ptr %263, align 4, !tbaa !5, !alias.scope !50, !noalias !53
  %index.next = add nuw i64 %index, 8
  %274 = icmp eq i64 %index.next, %n.vec
  br i1 %274, label %middle.block, label %vector.body, !llvm.loop !60

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

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.preheader182.us
  %.0221.us.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.preheader182.us ], [ %n.vec, %middle.block ]
  %.1220.us.ph = phi i64 [ %.0142224.us, %vector.memcheck ], [ %.0142224.us, %.preheader182.us ], [ %ind.end, %middle.block ]
  br i1 %lcmp.mod508.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %275 = getelementptr inbounds float, ptr %.2167228, i64 %.1220.us.ph
  %276 = load float, ptr %275, align 4, !tbaa !5
  %277 = getelementptr inbounds float, ptr %.0163, i64 %.0221.us.ph
  %278 = load float, ptr %277, align 4, !tbaa !5
  %279 = fmul float %276, %278
  %280 = getelementptr inbounds float, ptr %4, i64 %.0221.us.ph
  %281 = load float, ptr %280, align 4, !tbaa !5
  %282 = getelementptr inbounds float, ptr %5, i64 %.0221.us.ph
  %283 = load float, ptr %282, align 4, !tbaa !5
  %284 = call float @llvm.fmuladd.f32(float %279, float %281, float %283)
  store float %284, ptr %275, align 4, !tbaa !5
  %285 = or disjoint i64 %.0221.us.ph, 1
  %286 = add i64 %.1220.us.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.lcssa504.unr = phi i64 [ poison, %scalar.ph.preheader ], [ %286, %scalar.ph.prol ]
  %.0221.us.unr = phi i64 [ %.0221.us.ph, %scalar.ph.preheader ], [ %285, %scalar.ph.prol ]
  %.1220.us.unr = phi i64 [ %.1220.us.ph, %scalar.ph.preheader ], [ %286, %scalar.ph.prol ]
  %287 = icmp eq i64 %.0221.us.ph, %169
  br i1 %287, label %._crit_edge.us226, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.0221.us = phi i64 [ %310, %scalar.ph ], [ %.0221.us.unr, %scalar.ph.prol.loopexit ]
  %.1220.us = phi i64 [ %311, %scalar.ph ], [ %.1220.us.unr, %scalar.ph.prol.loopexit ]
  %288 = getelementptr inbounds float, ptr %.2167228, i64 %.1220.us
  %289 = load float, ptr %288, align 4, !tbaa !5
  %290 = getelementptr inbounds float, ptr %.0163, i64 %.0221.us
  %291 = load float, ptr %290, align 4, !tbaa !5
  %292 = fmul float %289, %291
  %293 = getelementptr inbounds float, ptr %4, i64 %.0221.us
  %294 = load float, ptr %293, align 4, !tbaa !5
  %295 = getelementptr inbounds float, ptr %5, i64 %.0221.us
  %296 = load float, ptr %295, align 4, !tbaa !5
  %297 = call float @llvm.fmuladd.f32(float %292, float %294, float %296)
  store float %297, ptr %288, align 4, !tbaa !5
  %298 = add nuw i64 %.0221.us, 1
  %299 = add i64 %.1220.us, 1
  %300 = getelementptr inbounds float, ptr %.2167228, i64 %299
  %301 = load float, ptr %300, align 4, !tbaa !5
  %302 = getelementptr inbounds float, ptr %.0163, i64 %298
  %303 = load float, ptr %302, align 4, !tbaa !5
  %304 = fmul float %301, %303
  %305 = getelementptr inbounds float, ptr %4, i64 %298
  %306 = load float, ptr %305, align 4, !tbaa !5
  %307 = getelementptr inbounds float, ptr %5, i64 %298
  %308 = load float, ptr %307, align 4, !tbaa !5
  %309 = call float @llvm.fmuladd.f32(float %304, float %306, float %308)
  store float %309, ptr %300, align 4, !tbaa !5
  %310 = add nuw i64 %.0221.us, 2
  %311 = add i64 %.1220.us, 2
  %exitcond329.not.1 = icmp eq i64 %310, %2
  br i1 %exitcond329.not.1, label %._crit_edge.us226, label %scalar.ph, !llvm.loop !61

._crit_edge.us226:                                ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %.lcssa359 = phi i64 [ %ind.end, %middle.block ], [ %.lcssa504.unr, %scalar.ph.prol.loopexit ], [ %311, %scalar.ph ]
  %312 = add nuw i64 %.0143223.us, 1
  %exitcond330.not = icmp eq i64 %312, %3
  br i1 %exitcond330.not, label %._crit_edge225, label %.preheader182.us, !llvm.loop !62

.lr.ph219:                                        ; preds = %.lr.ph219.preheader, %.lr.ph219
  %.0144218 = phi i64 [ %318, %.lr.ph219 ], [ 0, %.lr.ph219.preheader ]
  %313 = getelementptr inbounds float, ptr %.0163, i64 %.0144218
  %314 = load float, ptr %313, align 4, !tbaa !5
  %315 = call float @llvm.fmuladd.f32(float %314, float %15, float %16)
  %316 = call noundef float @_ZSt4sqrtf(float noundef %315)
  %317 = fdiv float 1.000000e+00, %316
  store float %317, ptr %313, align 4, !tbaa !5
  %318 = add nuw i64 %.0144218, 1
  %exitcond328.not = icmp eq i64 %318, %2
  br i1 %exitcond328.not, label %.preheader186, label %.lr.ph219, !llvm.loop !63

._crit_edge225:                                   ; preds = %._crit_edge.us226, %.preheader193, %.preheader186
  %319 = getelementptr float, ptr %.2230, i64 %153
  %320 = getelementptr float, ptr %.2167228, i64 %153
  %321 = add nuw i64 %.0160232, 1
  %exitcond331.not = icmp eq i64 %321, %1
  br i1 %exitcond331.not, label %._crit_edge, label %.preheader193, !llvm.loop !64

322:                                              ; preds = %10
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 287, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN4Simd4Base28SynetNormalizeLayerForwardV3EPKfmmmS2_S2_S2_20SimdTensorFormatTypePfS4_) #10
  unreachable

.loopexit:                                        ; preds = %._crit_edge252.split.us.us.us.split.us.us.split.us.us.split.us.us, %._crit_edge252.split.us280, %.preheader181, %._crit_edge
  ret void
}

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #7

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

attributes #0 = { mustprogress 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 = { inlinehint 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 = { alwaysinline 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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 #7 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nounwind }
attributes #10 = { noreturn 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 = !{!"float", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10, !11}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!"llvm.loop.isvectorized", i32 1}
!12 = distinct !{!12, !10}
!13 = distinct !{!13, !10, !11}
!14 = distinct !{!14, !10}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.unroll.disable"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !10, !11, !19}
!19 = !{!"llvm.loop.unroll.runtime.disable"}
!20 = !{!21}
!21 = distinct !{!21, !22}
!22 = distinct !{!22, !"LVerDomain"}
!23 = !{!24}
!24 = distinct !{!24, !22}
!25 = !{!26}
!26 = distinct !{!26, !22}
!27 = !{!21, !24}
!28 = distinct !{!28, !10, !11, !19}
!29 = distinct !{!29, !10}
!30 = distinct !{!30, !10}
!31 = !{!32, !33, i64 0}
!32 = !{!"_ZTSN4Simd5ArrayIfEE", !33, i64 0, !34, i64 8}
!33 = !{!"any pointer", !7, i64 0}
!34 = !{!"long", !7, i64 0}
!35 = !{!36}
!36 = distinct !{!36, !37}
!37 = distinct !{!37, !"LVerDomain"}
!38 = !{!39}
!39 = distinct !{!39, !37}
!40 = distinct !{!40, !10, !11, !19}
!41 = distinct !{!41, !10, !11}
!42 = distinct !{!42, !10}
!43 = distinct !{!43, !10, !11, !19}
!44 = distinct !{!44, !10, !11, !19}
!45 = distinct !{!45, !10, !11}
!46 = distinct !{!46, !10}
!47 = distinct !{!47, !10, !19, !11}
!48 = distinct !{!48, !10}
!49 = distinct !{!49, !10}
!50 = !{!51}
!51 = distinct !{!51, !52}
!52 = distinct !{!52, !"LVerDomain"}
!53 = !{!54, !55, !56}
!54 = distinct !{!54, !52}
!55 = distinct !{!55, !52}
!56 = distinct !{!56, !52}
!57 = !{!54}
!58 = !{!55}
!59 = !{!56}
!60 = distinct !{!60, !10, !11, !19}
!61 = distinct !{!61, !10, !11}
!62 = distinct !{!62, !10}
!63 = distinct !{!63, !10}
!64 = distinct !{!64, !10}


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