; LLVM IR from EntityFX/anybench :: src/benchmarks/generic/linpack (linpack)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

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

; Function Attrs: nounwind uwtable
define dso_local void @dmxpy(i32 noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, ptr noundef %5) #2 {
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  store i32 %0, ptr %7, align 4, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !9
  store i32 %2, ptr %9, align 4, !tbaa !5
  store i32 %3, ptr %10, align 4, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !9
  store ptr %5, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  %16 = load i32, ptr %9, align 4, !tbaa !5
  %17 = srem i32 %16, 2
  store i32 %17, ptr %13, align 4, !tbaa !5
  %18 = load i32, ptr %13, align 4, !tbaa !5
  %19 = icmp sge i32 %18, 1
  br i1 %19, label %20, label %56

20:                                               ; preds = %6
  %21 = load i32, ptr %13, align 4, !tbaa !5
  %22 = sub nsw i32 %21, 1
  store i32 %22, ptr %13, align 4, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %23

23:                                               ; preds = %52, %20
  %24 = load i32, ptr %14, align 4, !tbaa !5
  %25 = load i32, ptr %7, align 4, !tbaa !5
  %26 = icmp slt i32 %24, %25
  br i1 %26, label %27, label %55

27:                                               ; preds = %23
  %28 = load ptr, ptr %8, align 8, !tbaa !9
  %29 = load i32, ptr %14, align 4, !tbaa !5
  %30 = sext i32 %29 to i64
  %31 = getelementptr inbounds double, ptr %28, i64 %30
  %32 = load double, ptr %31, align 8, !tbaa !11
  %33 = load ptr, ptr %11, align 8, !tbaa !9
  %34 = load i32, ptr %13, align 4, !tbaa !5
  %35 = sext i32 %34 to i64
  %36 = getelementptr inbounds double, ptr %33, i64 %35
  %37 = load double, ptr %36, align 8, !tbaa !11
  %38 = load ptr, ptr %12, align 8, !tbaa !9
  %39 = load i32, ptr %10, align 4, !tbaa !5
  %40 = load i32, ptr %13, align 4, !tbaa !5
  %41 = mul nsw i32 %39, %40
  %42 = load i32, ptr %14, align 4, !tbaa !5
  %43 = add nsw i32 %41, %42
  %44 = sext i32 %43 to i64
  %45 = getelementptr inbounds double, ptr %38, i64 %44
  %46 = load double, ptr %45, align 8, !tbaa !11
  %47 = call double @llvm.fmuladd.f64(double %37, double %46, double %32)
  %48 = load ptr, ptr %8, align 8, !tbaa !9
  %49 = load i32, ptr %14, align 4, !tbaa !5
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds double, ptr %48, i64 %50
  store double %47, ptr %51, align 8, !tbaa !11
  br label %52

52:                                               ; preds = %27
  %53 = load i32, ptr %14, align 4, !tbaa !5
  %54 = add nsw i32 %53, 1
  store i32 %54, ptr %14, align 4, !tbaa !5
  br label %23, !llvm.loop !13

55:                                               ; preds = %23
  br label %56

56:                                               ; preds = %55, %6
  %57 = load i32, ptr %9, align 4, !tbaa !5
  %58 = srem i32 %57, 4
  store i32 %58, ptr %13, align 4, !tbaa !5
  %59 = load i32, ptr %13, align 4, !tbaa !5
  %60 = icmp sge i32 %59, 2
  br i1 %60, label %61, label %114

61:                                               ; preds = %56
  %62 = load i32, ptr %13, align 4, !tbaa !5
  %63 = sub nsw i32 %62, 1
  store i32 %63, ptr %13, align 4, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %64

64:                                               ; preds = %110, %61
  %65 = load i32, ptr %14, align 4, !tbaa !5
  %66 = load i32, ptr %7, align 4, !tbaa !5
  %67 = icmp slt i32 %65, %66
  br i1 %67, label %68, label %113

68:                                               ; preds = %64
  %69 = load ptr, ptr %8, align 8, !tbaa !9
  %70 = load i32, ptr %14, align 4, !tbaa !5
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds double, ptr %69, i64 %71
  %73 = load double, ptr %72, align 8, !tbaa !11
  %74 = load ptr, ptr %11, align 8, !tbaa !9
  %75 = load i32, ptr %13, align 4, !tbaa !5
  %76 = sub nsw i32 %75, 1
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds double, ptr %74, i64 %77
  %79 = load double, ptr %78, align 8, !tbaa !11
  %80 = load ptr, ptr %12, align 8, !tbaa !9
  %81 = load i32, ptr %10, align 4, !tbaa !5
  %82 = load i32, ptr %13, align 4, !tbaa !5
  %83 = sub nsw i32 %82, 1
  %84 = mul nsw i32 %81, %83
  %85 = load i32, ptr %14, align 4, !tbaa !5
  %86 = add nsw i32 %84, %85
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds double, ptr %80, i64 %87
  %89 = load double, ptr %88, align 8, !tbaa !11
  %90 = call double @llvm.fmuladd.f64(double %79, double %89, double %73)
  %91 = load ptr, ptr %11, align 8, !tbaa !9
  %92 = load i32, ptr %13, align 4, !tbaa !5
  %93 = sext i32 %92 to i64
  %94 = getelementptr inbounds double, ptr %91, i64 %93
  %95 = load double, ptr %94, align 8, !tbaa !11
  %96 = load ptr, ptr %12, align 8, !tbaa !9
  %97 = load i32, ptr %10, align 4, !tbaa !5
  %98 = load i32, ptr %13, align 4, !tbaa !5
  %99 = mul nsw i32 %97, %98
  %100 = load i32, ptr %14, align 4, !tbaa !5
  %101 = add nsw i32 %99, %100
  %102 = sext i32 %101 to i64
  %103 = getelementptr inbounds double, ptr %96, i64 %102
  %104 = load double, ptr %103, align 8, !tbaa !11
  %105 = call double @llvm.fmuladd.f64(double %95, double %104, double %90)
  %106 = load ptr, ptr %8, align 8, !tbaa !9
  %107 = load i32, ptr %14, align 4, !tbaa !5
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds double, ptr %106, i64 %108
  store double %105, ptr %109, align 8, !tbaa !11
  br label %110

110:                                              ; preds = %68
  %111 = load i32, ptr %14, align 4, !tbaa !5
  %112 = add nsw i32 %111, 1
  store i32 %112, ptr %14, align 4, !tbaa !5
  br label %64, !llvm.loop !15

113:                                              ; preds = %64
  br label %114

114:                                              ; preds = %113, %56
  %115 = load i32, ptr %9, align 4, !tbaa !5
  %116 = srem i32 %115, 8
  store i32 %116, ptr %13, align 4, !tbaa !5
  %117 = load i32, ptr %13, align 4, !tbaa !5
  %118 = icmp sge i32 %117, 4
  br i1 %118, label %119, label %206

119:                                              ; preds = %114
  %120 = load i32, ptr %13, align 4, !tbaa !5
  %121 = sub nsw i32 %120, 1
  store i32 %121, ptr %13, align 4, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %122

122:                                              ; preds = %202, %119
  %123 = load i32, ptr %14, align 4, !tbaa !5
  %124 = load i32, ptr %7, align 4, !tbaa !5
  %125 = icmp slt i32 %123, %124
  br i1 %125, label %126, label %205

126:                                              ; preds = %122
  %127 = load ptr, ptr %8, align 8, !tbaa !9
  %128 = load i32, ptr %14, align 4, !tbaa !5
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds double, ptr %127, i64 %129
  %131 = load double, ptr %130, align 8, !tbaa !11
  %132 = load ptr, ptr %11, align 8, !tbaa !9
  %133 = load i32, ptr %13, align 4, !tbaa !5
  %134 = sub nsw i32 %133, 3
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds double, ptr %132, i64 %135
  %137 = load double, ptr %136, align 8, !tbaa !11
  %138 = load ptr, ptr %12, align 8, !tbaa !9
  %139 = load i32, ptr %10, align 4, !tbaa !5
  %140 = load i32, ptr %13, align 4, !tbaa !5
  %141 = sub nsw i32 %140, 3
  %142 = mul nsw i32 %139, %141
  %143 = load i32, ptr %14, align 4, !tbaa !5
  %144 = add nsw i32 %142, %143
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds double, ptr %138, i64 %145
  %147 = load double, ptr %146, align 8, !tbaa !11
  %148 = call double @llvm.fmuladd.f64(double %137, double %147, double %131)
  %149 = load ptr, ptr %11, align 8, !tbaa !9
  %150 = load i32, ptr %13, align 4, !tbaa !5
  %151 = sub nsw i32 %150, 2
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds double, ptr %149, i64 %152
  %154 = load double, ptr %153, align 8, !tbaa !11
  %155 = load ptr, ptr %12, align 8, !tbaa !9
  %156 = load i32, ptr %10, align 4, !tbaa !5
  %157 = load i32, ptr %13, align 4, !tbaa !5
  %158 = sub nsw i32 %157, 2
  %159 = mul nsw i32 %156, %158
  %160 = load i32, ptr %14, align 4, !tbaa !5
  %161 = add nsw i32 %159, %160
  %162 = sext i32 %161 to i64
  %163 = getelementptr inbounds double, ptr %155, i64 %162
  %164 = load double, ptr %163, align 8, !tbaa !11
  %165 = call double @llvm.fmuladd.f64(double %154, double %164, double %148)
  %166 = load ptr, ptr %11, align 8, !tbaa !9
  %167 = load i32, ptr %13, align 4, !tbaa !5
  %168 = sub nsw i32 %167, 1
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds double, ptr %166, i64 %169
  %171 = load double, ptr %170, align 8, !tbaa !11
  %172 = load ptr, ptr %12, align 8, !tbaa !9
  %173 = load i32, ptr %10, align 4, !tbaa !5
  %174 = load i32, ptr %13, align 4, !tbaa !5
  %175 = sub nsw i32 %174, 1
  %176 = mul nsw i32 %173, %175
  %177 = load i32, ptr %14, align 4, !tbaa !5
  %178 = add nsw i32 %176, %177
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds double, ptr %172, i64 %179
  %181 = load double, ptr %180, align 8, !tbaa !11
  %182 = call double @llvm.fmuladd.f64(double %171, double %181, double %165)
  %183 = load ptr, ptr %11, align 8, !tbaa !9
  %184 = load i32, ptr %13, align 4, !tbaa !5
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds double, ptr %183, i64 %185
  %187 = load double, ptr %186, align 8, !tbaa !11
  %188 = load ptr, ptr %12, align 8, !tbaa !9
  %189 = load i32, ptr %10, align 4, !tbaa !5
  %190 = load i32, ptr %13, align 4, !tbaa !5
  %191 = mul nsw i32 %189, %190
  %192 = load i32, ptr %14, align 4, !tbaa !5
  %193 = add nsw i32 %191, %192
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds double, ptr %188, i64 %194
  %196 = load double, ptr %195, align 8, !tbaa !11
  %197 = call double @llvm.fmuladd.f64(double %187, double %196, double %182)
  %198 = load ptr, ptr %8, align 8, !tbaa !9
  %199 = load i32, ptr %14, align 4, !tbaa !5
  %200 = sext i32 %199 to i64
  %201 = getelementptr inbounds double, ptr %198, i64 %200
  store double %197, ptr %201, align 8, !tbaa !11
  br label %202

202:                                              ; preds = %126
  %203 = load i32, ptr %14, align 4, !tbaa !5
  %204 = add nsw i32 %203, 1
  store i32 %204, ptr %14, align 4, !tbaa !5
  br label %122, !llvm.loop !16

205:                                              ; preds = %122
  br label %206

206:                                              ; preds = %205, %114
  %207 = load i32, ptr %9, align 4, !tbaa !5
  %208 = srem i32 %207, 16
  store i32 %208, ptr %13, align 4, !tbaa !5
  %209 = load i32, ptr %13, align 4, !tbaa !5
  %210 = icmp sge i32 %209, 8
  br i1 %210, label %211, label %366

211:                                              ; preds = %206
  %212 = load i32, ptr %13, align 4, !tbaa !5
  %213 = sub nsw i32 %212, 1
  store i32 %213, ptr %13, align 4, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %214

214:                                              ; preds = %362, %211
  %215 = load i32, ptr %14, align 4, !tbaa !5
  %216 = load i32, ptr %7, align 4, !tbaa !5
  %217 = icmp slt i32 %215, %216
  br i1 %217, label %218, label %365

218:                                              ; preds = %214
  %219 = load ptr, ptr %8, align 8, !tbaa !9
  %220 = load i32, ptr %14, align 4, !tbaa !5
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds double, ptr %219, i64 %221
  %223 = load double, ptr %222, align 8, !tbaa !11
  %224 = load ptr, ptr %11, align 8, !tbaa !9
  %225 = load i32, ptr %13, align 4, !tbaa !5
  %226 = sub nsw i32 %225, 7
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds double, ptr %224, i64 %227
  %229 = load double, ptr %228, align 8, !tbaa !11
  %230 = load ptr, ptr %12, align 8, !tbaa !9
  %231 = load i32, ptr %10, align 4, !tbaa !5
  %232 = load i32, ptr %13, align 4, !tbaa !5
  %233 = sub nsw i32 %232, 7
  %234 = mul nsw i32 %231, %233
  %235 = load i32, ptr %14, align 4, !tbaa !5
  %236 = add nsw i32 %234, %235
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds double, ptr %230, i64 %237
  %239 = load double, ptr %238, align 8, !tbaa !11
  %240 = call double @llvm.fmuladd.f64(double %229, double %239, double %223)
  %241 = load ptr, ptr %11, align 8, !tbaa !9
  %242 = load i32, ptr %13, align 4, !tbaa !5
  %243 = sub nsw i32 %242, 6
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds double, ptr %241, i64 %244
  %246 = load double, ptr %245, align 8, !tbaa !11
  %247 = load ptr, ptr %12, align 8, !tbaa !9
  %248 = load i32, ptr %10, align 4, !tbaa !5
  %249 = load i32, ptr %13, align 4, !tbaa !5
  %250 = sub nsw i32 %249, 6
  %251 = mul nsw i32 %248, %250
  %252 = load i32, ptr %14, align 4, !tbaa !5
  %253 = add nsw i32 %251, %252
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds double, ptr %247, i64 %254
  %256 = load double, ptr %255, align 8, !tbaa !11
  %257 = call double @llvm.fmuladd.f64(double %246, double %256, double %240)
  %258 = load ptr, ptr %11, align 8, !tbaa !9
  %259 = load i32, ptr %13, align 4, !tbaa !5
  %260 = sub nsw i32 %259, 5
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds double, ptr %258, i64 %261
  %263 = load double, ptr %262, align 8, !tbaa !11
  %264 = load ptr, ptr %12, align 8, !tbaa !9
  %265 = load i32, ptr %10, align 4, !tbaa !5
  %266 = load i32, ptr %13, align 4, !tbaa !5
  %267 = sub nsw i32 %266, 5
  %268 = mul nsw i32 %265, %267
  %269 = load i32, ptr %14, align 4, !tbaa !5
  %270 = add nsw i32 %268, %269
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds double, ptr %264, i64 %271
  %273 = load double, ptr %272, align 8, !tbaa !11
  %274 = call double @llvm.fmuladd.f64(double %263, double %273, double %257)
  %275 = load ptr, ptr %11, align 8, !tbaa !9
  %276 = load i32, ptr %13, align 4, !tbaa !5
  %277 = sub nsw i32 %276, 4
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds double, ptr %275, i64 %278
  %280 = load double, ptr %279, align 8, !tbaa !11
  %281 = load ptr, ptr %12, align 8, !tbaa !9
  %282 = load i32, ptr %10, align 4, !tbaa !5
  %283 = load i32, ptr %13, align 4, !tbaa !5
  %284 = sub nsw i32 %283, 4
  %285 = mul nsw i32 %282, %284
  %286 = load i32, ptr %14, align 4, !tbaa !5
  %287 = add nsw i32 %285, %286
  %288 = sext i32 %287 to i64
  %289 = getelementptr inbounds double, ptr %281, i64 %288
  %290 = load double, ptr %289, align 8, !tbaa !11
  %291 = call double @llvm.fmuladd.f64(double %280, double %290, double %274)
  %292 = load ptr, ptr %11, align 8, !tbaa !9
  %293 = load i32, ptr %13, align 4, !tbaa !5
  %294 = sub nsw i32 %293, 3
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds double, ptr %292, i64 %295
  %297 = load double, ptr %296, align 8, !tbaa !11
  %298 = load ptr, ptr %12, align 8, !tbaa !9
  %299 = load i32, ptr %10, align 4, !tbaa !5
  %300 = load i32, ptr %13, align 4, !tbaa !5
  %301 = sub nsw i32 %300, 3
  %302 = mul nsw i32 %299, %301
  %303 = load i32, ptr %14, align 4, !tbaa !5
  %304 = add nsw i32 %302, %303
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds double, ptr %298, i64 %305
  %307 = load double, ptr %306, align 8, !tbaa !11
  %308 = call double @llvm.fmuladd.f64(double %297, double %307, double %291)
  %309 = load ptr, ptr %11, align 8, !tbaa !9
  %310 = load i32, ptr %13, align 4, !tbaa !5
  %311 = sub nsw i32 %310, 2
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds double, ptr %309, i64 %312
  %314 = load double, ptr %313, align 8, !tbaa !11
  %315 = load ptr, ptr %12, align 8, !tbaa !9
  %316 = load i32, ptr %10, align 4, !tbaa !5
  %317 = load i32, ptr %13, align 4, !tbaa !5
  %318 = sub nsw i32 %317, 2
  %319 = mul nsw i32 %316, %318
  %320 = load i32, ptr %14, align 4, !tbaa !5
  %321 = add nsw i32 %319, %320
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds double, ptr %315, i64 %322
  %324 = load double, ptr %323, align 8, !tbaa !11
  %325 = call double @llvm.fmuladd.f64(double %314, double %324, double %308)
  %326 = load ptr, ptr %11, align 8, !tbaa !9
  %327 = load i32, ptr %13, align 4, !tbaa !5
  %328 = sub nsw i32 %327, 1
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds double, ptr %326, i64 %329
  %331 = load double, ptr %330, align 8, !tbaa !11
  %332 = load ptr, ptr %12, align 8, !tbaa !9
  %333 = load i32, ptr %10, align 4, !tbaa !5
  %334 = load i32, ptr %13, align 4, !tbaa !5
  %335 = sub nsw i32 %334, 1
  %336 = mul nsw i32 %333, %335
  %337 = load i32, ptr %14, align 4, !tbaa !5
  %338 = add nsw i32 %336, %337
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds double, ptr %332, i64 %339
  %341 = load double, ptr %340, align 8, !tbaa !11
  %342 = call double @llvm.fmuladd.f64(double %331, double %341, double %325)
  %343 = load ptr, ptr %11, align 8, !tbaa !9
  %344 = load i32, ptr %13, align 4, !tbaa !5
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds double, ptr %343, i64 %345
  %347 = load double, ptr %346, align 8, !tbaa !11
  %348 = load ptr, ptr %12, align 8, !tbaa !9
  %349 = load i32, ptr %10, align 4, !tbaa !5
  %350 = load i32, ptr %13, align 4, !tbaa !5
  %351 = mul nsw i32 %349, %350
  %352 = load i32, ptr %14, align 4, !tbaa !5
  %353 = add nsw i32 %351, %352
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds double, ptr %348, i64 %354
  %356 = load double, ptr %355, align 8, !tbaa !11
  %357 = call double @llvm.fmuladd.f64(double %347, double %356, double %342)
  %358 = load ptr, ptr %8, align 8, !tbaa !9
  %359 = load i32, ptr %14, align 4, !tbaa !5
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds double, ptr %358, i64 %360
  store double %357, ptr %361, align 8, !tbaa !11
  br label %362

362:                                              ; preds = %218
  %363 = load i32, ptr %14, align 4, !tbaa !5
  %364 = add nsw i32 %363, 1
  store i32 %364, ptr %14, align 4, !tbaa !5
  br label %214, !llvm.loop !17

365:                                              ; preds = %214
  br label %366

366:                                              ; preds = %365, %206
  %367 = load i32, ptr %9, align 4, !tbaa !5
  %368 = srem i32 %367, 16
  %369 = add nsw i32 %368, 16
  store i32 %369, ptr %15, align 4, !tbaa !5
  %370 = load i32, ptr %15, align 4, !tbaa !5
  %371 = sub nsw i32 %370, 1
  store i32 %371, ptr %13, align 4, !tbaa !5
  br label %372

372:                                              ; preds = %665, %366
  %373 = load i32, ptr %13, align 4, !tbaa !5
  %374 = load i32, ptr %9, align 4, !tbaa !5
  %375 = icmp slt i32 %373, %374
  br i1 %375, label %376, label %668

376:                                              ; preds = %372
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %377

377:                                              ; preds = %661, %376
  %378 = load i32, ptr %14, align 4, !tbaa !5
  %379 = load i32, ptr %7, align 4, !tbaa !5
  %380 = icmp slt i32 %378, %379
  br i1 %380, label %381, label %664

381:                                              ; preds = %377
  %382 = load ptr, ptr %8, align 8, !tbaa !9
  %383 = load i32, ptr %14, align 4, !tbaa !5
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds double, ptr %382, i64 %384
  %386 = load double, ptr %385, align 8, !tbaa !11
  %387 = load ptr, ptr %11, align 8, !tbaa !9
  %388 = load i32, ptr %13, align 4, !tbaa !5
  %389 = sub nsw i32 %388, 15
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds double, ptr %387, i64 %390
  %392 = load double, ptr %391, align 8, !tbaa !11
  %393 = load ptr, ptr %12, align 8, !tbaa !9
  %394 = load i32, ptr %10, align 4, !tbaa !5
  %395 = load i32, ptr %13, align 4, !tbaa !5
  %396 = sub nsw i32 %395, 15
  %397 = mul nsw i32 %394, %396
  %398 = load i32, ptr %14, align 4, !tbaa !5
  %399 = add nsw i32 %397, %398
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds double, ptr %393, i64 %400
  %402 = load double, ptr %401, align 8, !tbaa !11
  %403 = call double @llvm.fmuladd.f64(double %392, double %402, double %386)
  %404 = load ptr, ptr %11, align 8, !tbaa !9
  %405 = load i32, ptr %13, align 4, !tbaa !5
  %406 = sub nsw i32 %405, 14
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds double, ptr %404, i64 %407
  %409 = load double, ptr %408, align 8, !tbaa !11
  %410 = load ptr, ptr %12, align 8, !tbaa !9
  %411 = load i32, ptr %10, align 4, !tbaa !5
  %412 = load i32, ptr %13, align 4, !tbaa !5
  %413 = sub nsw i32 %412, 14
  %414 = mul nsw i32 %411, %413
  %415 = load i32, ptr %14, align 4, !tbaa !5
  %416 = add nsw i32 %414, %415
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds double, ptr %410, i64 %417
  %419 = load double, ptr %418, align 8, !tbaa !11
  %420 = call double @llvm.fmuladd.f64(double %409, double %419, double %403)
  %421 = load ptr, ptr %11, align 8, !tbaa !9
  %422 = load i32, ptr %13, align 4, !tbaa !5
  %423 = sub nsw i32 %422, 13
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds double, ptr %421, i64 %424
  %426 = load double, ptr %425, align 8, !tbaa !11
  %427 = load ptr, ptr %12, align 8, !tbaa !9
  %428 = load i32, ptr %10, align 4, !tbaa !5
  %429 = load i32, ptr %13, align 4, !tbaa !5
  %430 = sub nsw i32 %429, 13
  %431 = mul nsw i32 %428, %430
  %432 = load i32, ptr %14, align 4, !tbaa !5
  %433 = add nsw i32 %431, %432
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds double, ptr %427, i64 %434
  %436 = load double, ptr %435, align 8, !tbaa !11
  %437 = call double @llvm.fmuladd.f64(double %426, double %436, double %420)
  %438 = load ptr, ptr %11, align 8, !tbaa !9
  %439 = load i32, ptr %13, align 4, !tbaa !5
  %440 = sub nsw i32 %439, 12
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds double, ptr %438, i64 %441
  %443 = load double, ptr %442, align 8, !tbaa !11
  %444 = load ptr, ptr %12, align 8, !tbaa !9
  %445 = load i32, ptr %10, align 4, !tbaa !5
  %446 = load i32, ptr %13, align 4, !tbaa !5
  %447 = sub nsw i32 %446, 12
  %448 = mul nsw i32 %445, %447
  %449 = load i32, ptr %14, align 4, !tbaa !5
  %450 = add nsw i32 %448, %449
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds double, ptr %444, i64 %451
  %453 = load double, ptr %452, align 8, !tbaa !11
  %454 = call double @llvm.fmuladd.f64(double %443, double %453, double %437)
  %455 = load ptr, ptr %11, align 8, !tbaa !9
  %456 = load i32, ptr %13, align 4, !tbaa !5
  %457 = sub nsw i32 %456, 11
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds double, ptr %455, i64 %458
  %460 = load double, ptr %459, align 8, !tbaa !11
  %461 = load ptr, ptr %12, align 8, !tbaa !9
  %462 = load i32, ptr %10, align 4, !tbaa !5
  %463 = load i32, ptr %13, align 4, !tbaa !5
  %464 = sub nsw i32 %463, 11
  %465 = mul nsw i32 %462, %464
  %466 = load i32, ptr %14, align 4, !tbaa !5
  %467 = add nsw i32 %465, %466
  %468 = sext i32 %467 to i64
  %469 = getelementptr inbounds double, ptr %461, i64 %468
  %470 = load double, ptr %469, align 8, !tbaa !11
  %471 = call double @llvm.fmuladd.f64(double %460, double %470, double %454)
  %472 = load ptr, ptr %11, align 8, !tbaa !9
  %473 = load i32, ptr %13, align 4, !tbaa !5
  %474 = sub nsw i32 %473, 10
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds double, ptr %472, i64 %475
  %477 = load double, ptr %476, align 8, !tbaa !11
  %478 = load ptr, ptr %12, align 8, !tbaa !9
  %479 = load i32, ptr %10, align 4, !tbaa !5
  %480 = load i32, ptr %13, align 4, !tbaa !5
  %481 = sub nsw i32 %480, 10
  %482 = mul nsw i32 %479, %481
  %483 = load i32, ptr %14, align 4, !tbaa !5
  %484 = add nsw i32 %482, %483
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds double, ptr %478, i64 %485
  %487 = load double, ptr %486, align 8, !tbaa !11
  %488 = call double @llvm.fmuladd.f64(double %477, double %487, double %471)
  %489 = load ptr, ptr %11, align 8, !tbaa !9
  %490 = load i32, ptr %13, align 4, !tbaa !5
  %491 = sub nsw i32 %490, 9
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds double, ptr %489, i64 %492
  %494 = load double, ptr %493, align 8, !tbaa !11
  %495 = load ptr, ptr %12, align 8, !tbaa !9
  %496 = load i32, ptr %10, align 4, !tbaa !5
  %497 = load i32, ptr %13, align 4, !tbaa !5
  %498 = sub nsw i32 %497, 9
  %499 = mul nsw i32 %496, %498
  %500 = load i32, ptr %14, align 4, !tbaa !5
  %501 = add nsw i32 %499, %500
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds double, ptr %495, i64 %502
  %504 = load double, ptr %503, align 8, !tbaa !11
  %505 = call double @llvm.fmuladd.f64(double %494, double %504, double %488)
  %506 = load ptr, ptr %11, align 8, !tbaa !9
  %507 = load i32, ptr %13, align 4, !tbaa !5
  %508 = sub nsw i32 %507, 8
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds double, ptr %506, i64 %509
  %511 = load double, ptr %510, align 8, !tbaa !11
  %512 = load ptr, ptr %12, align 8, !tbaa !9
  %513 = load i32, ptr %10, align 4, !tbaa !5
  %514 = load i32, ptr %13, align 4, !tbaa !5
  %515 = sub nsw i32 %514, 8
  %516 = mul nsw i32 %513, %515
  %517 = load i32, ptr %14, align 4, !tbaa !5
  %518 = add nsw i32 %516, %517
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds double, ptr %512, i64 %519
  %521 = load double, ptr %520, align 8, !tbaa !11
  %522 = call double @llvm.fmuladd.f64(double %511, double %521, double %505)
  %523 = load ptr, ptr %11, align 8, !tbaa !9
  %524 = load i32, ptr %13, align 4, !tbaa !5
  %525 = sub nsw i32 %524, 7
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds double, ptr %523, i64 %526
  %528 = load double, ptr %527, align 8, !tbaa !11
  %529 = load ptr, ptr %12, align 8, !tbaa !9
  %530 = load i32, ptr %10, align 4, !tbaa !5
  %531 = load i32, ptr %13, align 4, !tbaa !5
  %532 = sub nsw i32 %531, 7
  %533 = mul nsw i32 %530, %532
  %534 = load i32, ptr %14, align 4, !tbaa !5
  %535 = add nsw i32 %533, %534
  %536 = sext i32 %535 to i64
  %537 = getelementptr inbounds double, ptr %529, i64 %536
  %538 = load double, ptr %537, align 8, !tbaa !11
  %539 = call double @llvm.fmuladd.f64(double %528, double %538, double %522)
  %540 = load ptr, ptr %11, align 8, !tbaa !9
  %541 = load i32, ptr %13, align 4, !tbaa !5
  %542 = sub nsw i32 %541, 6
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds double, ptr %540, i64 %543
  %545 = load double, ptr %544, align 8, !tbaa !11
  %546 = load ptr, ptr %12, align 8, !tbaa !9
  %547 = load i32, ptr %10, align 4, !tbaa !5
  %548 = load i32, ptr %13, align 4, !tbaa !5
  %549 = sub nsw i32 %548, 6
  %550 = mul nsw i32 %547, %549
  %551 = load i32, ptr %14, align 4, !tbaa !5
  %552 = add nsw i32 %550, %551
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds double, ptr %546, i64 %553
  %555 = load double, ptr %554, align 8, !tbaa !11
  %556 = call double @llvm.fmuladd.f64(double %545, double %555, double %539)
  %557 = load ptr, ptr %11, align 8, !tbaa !9
  %558 = load i32, ptr %13, align 4, !tbaa !5
  %559 = sub nsw i32 %558, 5
  %560 = sext i32 %559 to i64
  %561 = getelementptr inbounds double, ptr %557, i64 %560
  %562 = load double, ptr %561, align 8, !tbaa !11
  %563 = load ptr, ptr %12, align 8, !tbaa !9
  %564 = load i32, ptr %10, align 4, !tbaa !5
  %565 = load i32, ptr %13, align 4, !tbaa !5
  %566 = sub nsw i32 %565, 5
  %567 = mul nsw i32 %564, %566
  %568 = load i32, ptr %14, align 4, !tbaa !5
  %569 = add nsw i32 %567, %568
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds double, ptr %563, i64 %570
  %572 = load double, ptr %571, align 8, !tbaa !11
  %573 = call double @llvm.fmuladd.f64(double %562, double %572, double %556)
  %574 = load ptr, ptr %11, align 8, !tbaa !9
  %575 = load i32, ptr %13, align 4, !tbaa !5
  %576 = sub nsw i32 %575, 4
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds double, ptr %574, i64 %577
  %579 = load double, ptr %578, align 8, !tbaa !11
  %580 = load ptr, ptr %12, align 8, !tbaa !9
  %581 = load i32, ptr %10, align 4, !tbaa !5
  %582 = load i32, ptr %13, align 4, !tbaa !5
  %583 = sub nsw i32 %582, 4
  %584 = mul nsw i32 %581, %583
  %585 = load i32, ptr %14, align 4, !tbaa !5
  %586 = add nsw i32 %584, %585
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds double, ptr %580, i64 %587
  %589 = load double, ptr %588, align 8, !tbaa !11
  %590 = call double @llvm.fmuladd.f64(double %579, double %589, double %573)
  %591 = load ptr, ptr %11, align 8, !tbaa !9
  %592 = load i32, ptr %13, align 4, !tbaa !5
  %593 = sub nsw i32 %592, 3
  %594 = sext i32 %593 to i64
  %595 = getelementptr inbounds double, ptr %591, i64 %594
  %596 = load double, ptr %595, align 8, !tbaa !11
  %597 = load ptr, ptr %12, align 8, !tbaa !9
  %598 = load i32, ptr %10, align 4, !tbaa !5
  %599 = load i32, ptr %13, align 4, !tbaa !5
  %600 = sub nsw i32 %599, 3
  %601 = mul nsw i32 %598, %600
  %602 = load i32, ptr %14, align 4, !tbaa !5
  %603 = add nsw i32 %601, %602
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds double, ptr %597, i64 %604
  %606 = load double, ptr %605, align 8, !tbaa !11
  %607 = call double @llvm.fmuladd.f64(double %596, double %606, double %590)
  %608 = load ptr, ptr %11, align 8, !tbaa !9
  %609 = load i32, ptr %13, align 4, !tbaa !5
  %610 = sub nsw i32 %609, 2
  %611 = sext i32 %610 to i64
  %612 = getelementptr inbounds double, ptr %608, i64 %611
  %613 = load double, ptr %612, align 8, !tbaa !11
  %614 = load ptr, ptr %12, align 8, !tbaa !9
  %615 = load i32, ptr %10, align 4, !tbaa !5
  %616 = load i32, ptr %13, align 4, !tbaa !5
  %617 = sub nsw i32 %616, 2
  %618 = mul nsw i32 %615, %617
  %619 = load i32, ptr %14, align 4, !tbaa !5
  %620 = add nsw i32 %618, %619
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds double, ptr %614, i64 %621
  %623 = load double, ptr %622, align 8, !tbaa !11
  %624 = call double @llvm.fmuladd.f64(double %613, double %623, double %607)
  %625 = load ptr, ptr %11, align 8, !tbaa !9
  %626 = load i32, ptr %13, align 4, !tbaa !5
  %627 = sub nsw i32 %626, 1
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds double, ptr %625, i64 %628
  %630 = load double, ptr %629, align 8, !tbaa !11
  %631 = load ptr, ptr %12, align 8, !tbaa !9
  %632 = load i32, ptr %10, align 4, !tbaa !5
  %633 = load i32, ptr %13, align 4, !tbaa !5
  %634 = sub nsw i32 %633, 1
  %635 = mul nsw i32 %632, %634
  %636 = load i32, ptr %14, align 4, !tbaa !5
  %637 = add nsw i32 %635, %636
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds double, ptr %631, i64 %638
  %640 = load double, ptr %639, align 8, !tbaa !11
  %641 = call double @llvm.fmuladd.f64(double %630, double %640, double %624)
  %642 = load ptr, ptr %11, align 8, !tbaa !9
  %643 = load i32, ptr %13, align 4, !tbaa !5
  %644 = sext i32 %643 to i64
  %645 = getelementptr inbounds double, ptr %642, i64 %644
  %646 = load double, ptr %645, align 8, !tbaa !11
  %647 = load ptr, ptr %12, align 8, !tbaa !9
  %648 = load i32, ptr %10, align 4, !tbaa !5
  %649 = load i32, ptr %13, align 4, !tbaa !5
  %650 = mul nsw i32 %648, %649
  %651 = load i32, ptr %14, align 4, !tbaa !5
  %652 = add nsw i32 %650, %651
  %653 = sext i32 %652 to i64
  %654 = getelementptr inbounds double, ptr %647, i64 %653
  %655 = load double, ptr %654, align 8, !tbaa !11
  %656 = call double @llvm.fmuladd.f64(double %646, double %655, double %641)
  %657 = load ptr, ptr %8, align 8, !tbaa !9
  %658 = load i32, ptr %14, align 4, !tbaa !5
  %659 = sext i32 %658 to i64
  %660 = getelementptr inbounds double, ptr %657, i64 %659
  store double %656, ptr %660, align 8, !tbaa !11
  br label %661

661:                                              ; preds = %381
  %662 = load i32, ptr %14, align 4, !tbaa !5
  %663 = add nsw i32 %662, 1
  store i32 %663, ptr %14, align 4, !tbaa !5
  br label %377, !llvm.loop !18

664:                                              ; preds = %377
  br label %665

665:                                              ; preds = %664
  %666 = load i32, ptr %13, align 4, !tbaa !5
  %667 = add nsw i32 %666, 16
  store i32 %667, ptr %13, align 4, !tbaa !5
  br label %372, !llvm.loop !19

668:                                              ; preds = %372
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  ret void
}

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { 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 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}


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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #0

; Function Attrs: nofree norecurse nosync nounwind memory(argmem: readwrite) uwtable
define dso_local void @dmxpy(i32 noundef %0, ptr nocapture noundef %1, i32 noundef %2, i32 noundef %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readonly %5) local_unnamed_addr #1 {
  %7 = and i32 %2, -2147483647
  %8 = icmp eq i32 %7, 1
  %9 = icmp sgt i32 %0, 0
  %or.cond = and i1 %8, %9
  br i1 %or.cond, label %.lr.ph.preheader, label %.loopexit245

.lr.ph.preheader:                                 ; preds = %6
  %wide.trip.count = zext nneg i32 %0 to i64
  %min.iters.check = icmp ult i32 %0, 8
  br i1 %min.iters.check, label %.lr.ph.preheader759, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph.preheader
  %10 = shl nuw nsw i64 %wide.trip.count, 3
  %scevgep = getelementptr i8, ptr %1, i64 %10
  %scevgep344 = getelementptr i8, ptr %4, i64 8
  %scevgep345 = getelementptr i8, ptr %5, i64 %10
  %bound0 = icmp ugt ptr %scevgep344, %1
  %bound1 = icmp ugt ptr %scevgep, %4
  %found.conflict = and i1 %bound0, %bound1
  %bound0346 = icmp ugt ptr %scevgep345, %1
  %bound1347 = icmp ugt ptr %scevgep, %5
  %found.conflict348 = and i1 %bound0346, %bound1347
  %conflict.rdx = or i1 %found.conflict, %found.conflict348
  br i1 %conflict.rdx, label %.lr.ph.preheader759, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %wide.trip.count, 2147483644
  %11 = load double, ptr %4, align 8, !tbaa !5, !alias.scope !9
  %broadcast.splatinsert352 = insertelement <2 x double> poison, double %11, i64 0
  %broadcast.splat353 = shufflevector <2 x double> %broadcast.splatinsert352, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %12 = getelementptr inbounds double, ptr %1, i64 %index
  %13 = getelementptr inbounds i8, ptr %12, i64 16
  %wide.load = load <2 x double>, ptr %12, align 8, !tbaa !5, !alias.scope !12, !noalias !14
  %wide.load349 = load <2 x double>, ptr %13, align 8, !tbaa !5, !alias.scope !12, !noalias !14
  %14 = getelementptr inbounds double, ptr %5, i64 %index
  %15 = getelementptr inbounds i8, ptr %14, i64 16
  %wide.load350 = load <2 x double>, ptr %14, align 8, !tbaa !5, !alias.scope !16
  %wide.load351 = load <2 x double>, ptr %15, align 8, !tbaa !5, !alias.scope !16
  %16 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat353, <2 x double> %wide.load350, <2 x double> %wide.load)
  %17 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat353, <2 x double> %wide.load351, <2 x double> %wide.load349)
  store <2 x double> %16, ptr %12, align 8, !tbaa !5, !alias.scope !12, !noalias !14
  store <2 x double> %17, ptr %13, align 8, !tbaa !5, !alias.scope !12, !noalias !14
  %index.next = add nuw i64 %index, 4
  %18 = icmp eq i64 %index.next, %n.vec
  br i1 %18, label %middle.block, label %vector.body, !llvm.loop !17

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %.loopexit245, label %.lr.ph.preheader759

.lr.ph.preheader759:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  %xtraiter = and i64 %wide.trip.count, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader759
  %19 = getelementptr inbounds double, ptr %1, i64 %indvars.iv.ph
  %20 = load double, ptr %19, align 8, !tbaa !5
  %21 = load double, ptr %4, align 8, !tbaa !5
  %22 = getelementptr inbounds double, ptr %5, i64 %indvars.iv.ph
  %23 = load double, ptr %22, align 8, !tbaa !5
  %24 = tail call double @llvm.fmuladd.f64(double %21, double %23, double %20)
  store double %24, ptr %19, align 8, !tbaa !5
  %indvars.iv.next.prol = or disjoint i64 %indvars.iv.ph, 1
  br label %.lr.ph.prol.loopexit

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader759
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %.lr.ph.preheader759 ], [ %indvars.iv.next.prol, %.lr.ph.prol ]
  %25 = add nsw i64 %wide.trip.count, -1
  %26 = icmp eq i64 %indvars.iv.ph, %25
  br i1 %26, label %.loopexit245, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %.lr.ph ], [ %indvars.iv.unr, %.lr.ph.prol.loopexit ]
  %27 = getelementptr inbounds double, ptr %1, i64 %indvars.iv
  %28 = load double, ptr %27, align 8, !tbaa !5
  %29 = load double, ptr %4, align 8, !tbaa !5
  %30 = getelementptr inbounds double, ptr %5, i64 %indvars.iv
  %31 = load double, ptr %30, align 8, !tbaa !5
  %32 = tail call double @llvm.fmuladd.f64(double %29, double %31, double %28)
  store double %32, ptr %27, align 8, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %33 = getelementptr inbounds double, ptr %1, i64 %indvars.iv.next
  %34 = load double, ptr %33, align 8, !tbaa !5
  %35 = load double, ptr %4, align 8, !tbaa !5
  %36 = getelementptr inbounds double, ptr %5, i64 %indvars.iv.next
  %37 = load double, ptr %36, align 8, !tbaa !5
  %38 = tail call double @llvm.fmuladd.f64(double %35, double %37, double %34)
  store double %38, ptr %33, align 8, !tbaa !5
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %exitcond.not.1 = icmp eq i64 %indvars.iv.next.1, %wide.trip.count
  br i1 %exitcond.not.1, label %.loopexit245, label %.lr.ph, !llvm.loop !21

.loopexit245:                                     ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block, %6
  %39 = srem i32 %2, 4
  %40 = icmp sgt i32 %39, 1
  br i1 %40, label %41, label %.loopexit243

41:                                               ; preds = %.loopexit245
  br i1 %9, label %.lr.ph248, label %.loopexit242

.lr.ph248:                                        ; preds = %41
  %42 = add nsw i32 %39, -1
  %43 = add nsw i32 %39, -2
  %44 = zext nneg i32 %43 to i64
  %45 = getelementptr inbounds double, ptr %4, i64 %44
  %46 = mul nuw nsw i32 %43, %3
  %47 = zext nneg i32 %42 to i64
  %48 = getelementptr inbounds double, ptr %4, i64 %47
  %49 = mul nsw i32 %42, %3
  %50 = sext i32 %46 to i64
  %51 = sext i32 %49 to i64
  %wide.trip.count262 = zext nneg i32 %0 to i64
  %invariant.gep = getelementptr double, ptr %5, i64 %50
  %invariant.gep282 = getelementptr double, ptr %5, i64 %51
  %min.iters.check377 = icmp ult i32 %0, 16
  br i1 %min.iters.check377, label %scalar.ph376.preheader, label %vector.memcheck354

vector.memcheck354:                               ; preds = %.lr.ph248
  %52 = shl nuw nsw i64 %wide.trip.count262, 3
  %scevgep355 = getelementptr i8, ptr %1, i64 %52
  %53 = shl nuw nsw i64 %47, 3
  %54 = getelementptr i8, ptr %4, i64 %53
  %scevgep356 = getelementptr i8, ptr %54, i64 8
  %55 = shl nuw nsw i64 %44, 3
  %56 = getelementptr i8, ptr %4, i64 %55
  %scevgep357 = getelementptr i8, ptr %56, i64 8
  %57 = add nsw i64 %51, %wide.trip.count262
  %58 = shl nsw i64 %57, 3
  %scevgep358 = getelementptr i8, ptr %5, i64 %58
  %59 = add nsw i64 %50, %wide.trip.count262
  %60 = shl nsw i64 %59, 3
  %scevgep359 = getelementptr i8, ptr %5, i64 %60
  %bound0360 = icmp ugt ptr %scevgep356, %1
  %bound1361 = icmp ult ptr %48, %scevgep355
  %found.conflict362 = and i1 %bound0360, %bound1361
  %bound0363 = icmp ugt ptr %scevgep357, %1
  %bound1364 = icmp ult ptr %45, %scevgep355
  %found.conflict365 = and i1 %bound0363, %bound1364
  %conflict.rdx366 = or i1 %found.conflict362, %found.conflict365
  %bound0367 = icmp ugt ptr %scevgep358, %1
  %bound1368 = icmp ult ptr %invariant.gep282, %scevgep355
  %found.conflict369 = and i1 %bound0367, %bound1368
  %conflict.rdx370 = or i1 %conflict.rdx366, %found.conflict369
  %bound0371 = icmp ugt ptr %scevgep359, %1
  %bound1372 = icmp ult ptr %invariant.gep, %scevgep355
  %found.conflict373 = and i1 %bound0371, %bound1372
  %conflict.rdx374 = or i1 %conflict.rdx370, %found.conflict373
  br i1 %conflict.rdx374, label %scalar.ph376.preheader, label %vector.ph378

vector.ph378:                                     ; preds = %vector.memcheck354
  %n.vec380 = and i64 %wide.trip.count262, 2147483644
  %61 = load double, ptr %45, align 8, !tbaa !5, !alias.scope !22
  %broadcast.splatinsert388 = insertelement <2 x double> poison, double %61, i64 0
  %broadcast.splat389 = shufflevector <2 x double> %broadcast.splatinsert388, <2 x double> poison, <2 x i32> zeroinitializer
  %62 = load double, ptr %48, align 8, !tbaa !5, !alias.scope !25
  %broadcast.splatinsert394 = insertelement <2 x double> poison, double %62, i64 0
  %broadcast.splat395 = shufflevector <2 x double> %broadcast.splatinsert394, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body382

vector.body382:                                   ; preds = %vector.body382, %vector.ph378
  %index383 = phi i64 [ 0, %vector.ph378 ], [ %index.next396, %vector.body382 ]
  %63 = getelementptr inbounds double, ptr %1, i64 %index383
  %64 = getelementptr inbounds i8, ptr %63, i64 16
  %wide.load384 = load <2 x double>, ptr %63, align 8, !tbaa !5, !alias.scope !27, !noalias !29
  %wide.load385 = load <2 x double>, ptr %64, align 8, !tbaa !5, !alias.scope !27, !noalias !29
  %65 = getelementptr double, ptr %invariant.gep, i64 %index383
  %66 = getelementptr i8, ptr %65, i64 16
  %wide.load386 = load <2 x double>, ptr %65, align 8, !tbaa !5, !alias.scope !32
  %wide.load387 = load <2 x double>, ptr %66, align 8, !tbaa !5, !alias.scope !32
  %67 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat389, <2 x double> %wide.load386, <2 x double> %wide.load384)
  %68 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat389, <2 x double> %wide.load387, <2 x double> %wide.load385)
  %69 = getelementptr double, ptr %invariant.gep282, i64 %index383
  %70 = getelementptr i8, ptr %69, i64 16
  %wide.load390 = load <2 x double>, ptr %69, align 8, !tbaa !5, !alias.scope !33
  %wide.load391 = load <2 x double>, ptr %70, align 8, !tbaa !5, !alias.scope !33
  %71 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat395, <2 x double> %wide.load390, <2 x double> %67)
  %72 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat395, <2 x double> %wide.load391, <2 x double> %68)
  store <2 x double> %71, ptr %63, align 8, !tbaa !5, !alias.scope !27, !noalias !29
  store <2 x double> %72, ptr %64, align 8, !tbaa !5, !alias.scope !27, !noalias !29
  %index.next396 = add nuw i64 %index383, 4
  %73 = icmp eq i64 %index.next396, %n.vec380
  br i1 %73, label %middle.block375, label %vector.body382, !llvm.loop !34

middle.block375:                                  ; preds = %vector.body382
  %cmp.n397 = icmp eq i64 %n.vec380, %wide.trip.count262
  br i1 %cmp.n397, label %.loopexit243, label %scalar.ph376.preheader

scalar.ph376.preheader:                           ; preds = %middle.block375, %vector.memcheck354, %.lr.ph248
  %indvars.iv259.ph = phi i64 [ 0, %vector.memcheck354 ], [ 0, %.lr.ph248 ], [ %n.vec380, %middle.block375 ]
  %xtraiter760 = and i64 %wide.trip.count262, 1
  %lcmp.mod761.not = icmp eq i64 %xtraiter760, 0
  br i1 %lcmp.mod761.not, label %scalar.ph376.prol.loopexit, label %scalar.ph376.prol

scalar.ph376.prol:                                ; preds = %scalar.ph376.preheader
  %74 = getelementptr inbounds double, ptr %1, i64 %indvars.iv259.ph
  %75 = load double, ptr %74, align 8, !tbaa !5
  %76 = load double, ptr %45, align 8, !tbaa !5
  %gep.prol = getelementptr double, ptr %invariant.gep, i64 %indvars.iv259.ph
  %77 = load double, ptr %gep.prol, align 8, !tbaa !5
  %78 = tail call double @llvm.fmuladd.f64(double %76, double %77, double %75)
  %79 = load double, ptr %48, align 8, !tbaa !5
  %gep283.prol = getelementptr double, ptr %invariant.gep282, i64 %indvars.iv259.ph
  %80 = load double, ptr %gep283.prol, align 8, !tbaa !5
  %81 = tail call double @llvm.fmuladd.f64(double %79, double %80, double %78)
  store double %81, ptr %74, align 8, !tbaa !5
  %indvars.iv.next260.prol = or disjoint i64 %indvars.iv259.ph, 1
  br label %scalar.ph376.prol.loopexit

scalar.ph376.prol.loopexit:                       ; preds = %scalar.ph376.prol, %scalar.ph376.preheader
  %indvars.iv259.unr = phi i64 [ %indvars.iv259.ph, %scalar.ph376.preheader ], [ %indvars.iv.next260.prol, %scalar.ph376.prol ]
  %82 = add nsw i64 %wide.trip.count262, -1
  %83 = icmp eq i64 %indvars.iv259.ph, %82
  br i1 %83, label %.loopexit243, label %scalar.ph376

scalar.ph376:                                     ; preds = %scalar.ph376.prol.loopexit, %scalar.ph376
  %indvars.iv259 = phi i64 [ %indvars.iv.next260.1, %scalar.ph376 ], [ %indvars.iv259.unr, %scalar.ph376.prol.loopexit ]
  %84 = getelementptr inbounds double, ptr %1, i64 %indvars.iv259
  %85 = load double, ptr %84, align 8, !tbaa !5
  %86 = load double, ptr %45, align 8, !tbaa !5
  %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv259
  %87 = load double, ptr %gep, align 8, !tbaa !5
  %88 = tail call double @llvm.fmuladd.f64(double %86, double %87, double %85)
  %89 = load double, ptr %48, align 8, !tbaa !5
  %gep283 = getelementptr double, ptr %invariant.gep282, i64 %indvars.iv259
  %90 = load double, ptr %gep283, align 8, !tbaa !5
  %91 = tail call double @llvm.fmuladd.f64(double %89, double %90, double %88)
  store double %91, ptr %84, align 8, !tbaa !5
  %indvars.iv.next260 = add nuw nsw i64 %indvars.iv259, 1
  %92 = getelementptr inbounds double, ptr %1, i64 %indvars.iv.next260
  %93 = load double, ptr %92, align 8, !tbaa !5
  %94 = load double, ptr %45, align 8, !tbaa !5
  %gep.1 = getelementptr double, ptr %invariant.gep, i64 %indvars.iv.next260
  %95 = load double, ptr %gep.1, align 8, !tbaa !5
  %96 = tail call double @llvm.fmuladd.f64(double %94, double %95, double %93)
  %97 = load double, ptr %48, align 8, !tbaa !5
  %gep283.1 = getelementptr double, ptr %invariant.gep282, i64 %indvars.iv.next260
  %98 = load double, ptr %gep283.1, align 8, !tbaa !5
  %99 = tail call double @llvm.fmuladd.f64(double %97, double %98, double %96)
  store double %99, ptr %92, align 8, !tbaa !5
  %indvars.iv.next260.1 = add nuw nsw i64 %indvars.iv259, 2
  %exitcond263.not.1 = icmp eq i64 %indvars.iv.next260.1, %wide.trip.count262
  br i1 %exitcond263.not.1, label %.loopexit243, label %scalar.ph376, !llvm.loop !35

.loopexit243:                                     ; preds = %scalar.ph376.prol.loopexit, %scalar.ph376, %middle.block375, %.loopexit245
  %100 = srem i32 %2, 8
  %101 = icmp sgt i32 %100, 3
  %brmerge.not = and i1 %101, %9
  br i1 %brmerge.not, label %.lr.ph250, label %.loopexit242

.lr.ph250:                                        ; preds = %.loopexit243
  %102 = add nsw i32 %100, -1
  %103 = add nsw i32 %100, -4
  %104 = zext i32 %103 to i64
  %105 = getelementptr double, ptr %4, i64 %104
  %106 = mul i32 %103, %3
  %107 = add nsw i32 %100, -3
  %108 = zext i32 %107 to i64
  %109 = getelementptr double, ptr %4, i64 %108
  %110 = mul i32 %107, %3
  %111 = add nsw i32 %100, -2
  %112 = zext i32 %111 to i64
  %113 = getelementptr inbounds double, ptr %4, i64 %112
  %114 = mul i32 %111, %3
  %115 = zext nneg i32 %102 to i64
  %116 = getelementptr inbounds double, ptr %4, i64 %115
  %117 = mul i32 %102, %3
  %118 = sext i32 %106 to i64
  %119 = sext i32 %110 to i64
  %120 = sext i32 %114 to i64
  %121 = sext i32 %117 to i64
  %wide.trip.count267 = zext nneg i32 %0 to i64
  %invariant.gep284 = getelementptr double, ptr %5, i64 %118
  %invariant.gep286 = getelementptr double, ptr %5, i64 %119
  %invariant.gep288 = getelementptr double, ptr %5, i64 %120
  %invariant.gep290 = getelementptr double, ptr %5, i64 %121
  %min.iters.check441 = icmp ult i32 %0, 18
  br i1 %min.iters.check441, label %scalar.ph440.preheader, label %vector.memcheck398

vector.memcheck398:                               ; preds = %.lr.ph250
  %122 = shl nuw nsw i64 %wide.trip.count267, 3
  %scevgep399 = getelementptr i8, ptr %1, i64 %122
  %123 = shl nuw nsw i64 %115, 3
  %124 = getelementptr i8, ptr %4, i64 %123
  %125 = shl nuw nsw i64 %112, 3
  %126 = getelementptr i8, ptr %4, i64 %125
  %127 = shl nuw nsw i64 %108, 3
  %128 = getelementptr i8, ptr %4, i64 %127
  %129 = shl nuw nsw i64 %104, 3
  %130 = getelementptr i8, ptr %4, i64 %129
  %131 = insertelement <4 x ptr> poison, ptr %124, i64 0
  %132 = insertelement <4 x ptr> %131, ptr %126, i64 1
  %133 = insertelement <4 x ptr> %132, ptr %128, i64 2
  %134 = insertelement <4 x ptr> %133, ptr %130, i64 3
  %135 = getelementptr i8, <4 x ptr> %134, <4 x i64> <i64 8, i64 8, i64 8, i64 8>
  %136 = add nsw i64 %121, %wide.trip.count267
  %137 = shl nsw i64 %136, 3
  %scevgep404 = getelementptr i8, ptr %5, i64 %137
  %138 = add nsw i64 %120, %wide.trip.count267
  %139 = shl nsw i64 %138, 3
  %scevgep405 = getelementptr i8, ptr %5, i64 %139
  %140 = add nsw i64 %119, %wide.trip.count267
  %141 = shl nsw i64 %140, 3
  %scevgep406 = getelementptr i8, ptr %5, i64 %141
  %142 = add nsw i64 %118, %wide.trip.count267
  %143 = shl nsw i64 %142, 3
  %scevgep407 = getelementptr i8, ptr %5, i64 %143
  %144 = shufflevector <4 x ptr> %135, <4 x ptr> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>
  %145 = insertelement <8 x ptr> %144, ptr %scevgep404, i64 4
  %146 = insertelement <8 x ptr> %145, ptr %scevgep405, i64 5
  %147 = insertelement <8 x ptr> %146, ptr %scevgep406, i64 6
  %148 = insertelement <8 x ptr> %147, ptr %scevgep407, i64 7
  %149 = insertelement <8 x ptr> poison, ptr %1, i64 0
  %150 = shufflevector <8 x ptr> %149, <8 x ptr> poison, <8 x i32> zeroinitializer
  %151 = icmp ugt <8 x ptr> %148, %150
  %152 = insertelement <8 x ptr> poison, ptr %116, i64 0
  %153 = insertelement <8 x ptr> %152, ptr %113, i64 1
  %154 = insertelement <8 x ptr> %153, ptr %109, i64 2
  %155 = insertelement <8 x ptr> %154, ptr %105, i64 3
  %156 = insertelement <8 x ptr> %155, ptr %invariant.gep290, i64 4
  %157 = insertelement <8 x ptr> %156, ptr %invariant.gep288, i64 5
  %158 = insertelement <8 x ptr> %157, ptr %invariant.gep286, i64 6
  %159 = insertelement <8 x ptr> %158, ptr %invariant.gep284, i64 7
  %160 = insertelement <8 x ptr> poison, ptr %scevgep399, i64 0
  %161 = shufflevector <8 x ptr> %160, <8 x ptr> poison, <8 x i32> zeroinitializer
  %162 = icmp ult <8 x ptr> %159, %161
  %163 = and <8 x i1> %151, %162
  %164 = bitcast <8 x i1> %163 to i8
  %.not = icmp eq i8 %164, 0
  br i1 %.not, label %vector.ph442, label %scalar.ph440.preheader

vector.ph442:                                     ; preds = %vector.memcheck398
  %n.vec444 = and i64 %wide.trip.count267, 2147483646
  %165 = load double, ptr %105, align 8, !tbaa !5, !alias.scope !36
  %broadcast.splatinsert = insertelement <2 x double> poison, double %165, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %166 = load double, ptr %109, align 8, !tbaa !5, !alias.scope !39
  %broadcast.splatinsert451 = insertelement <2 x double> poison, double %166, i64 0
  %broadcast.splat452 = shufflevector <2 x double> %broadcast.splatinsert451, <2 x double> poison, <2 x i32> zeroinitializer
  %167 = load double, ptr %113, align 8, !tbaa !5, !alias.scope !41
  %broadcast.splatinsert454 = insertelement <2 x double> poison, double %167, i64 0
  %broadcast.splat455 = shufflevector <2 x double> %broadcast.splatinsert454, <2 x double> poison, <2 x i32> zeroinitializer
  %168 = load double, ptr %116, align 8, !tbaa !5, !alias.scope !43
  %broadcast.splatinsert457 = insertelement <2 x double> poison, double %168, i64 0
  %broadcast.splat458 = shufflevector <2 x double> %broadcast.splatinsert457, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body446

vector.body446:                                   ; preds = %vector.body446, %vector.ph442
  %index447 = phi i64 [ 0, %vector.ph442 ], [ %index.next459, %vector.body446 ]
  %169 = getelementptr inbounds double, ptr %1, i64 %index447
  %wide.load448 = load <2 x double>, ptr %169, align 8, !tbaa !5, !alias.scope !45, !noalias !47
  %170 = getelementptr double, ptr %invariant.gep284, i64 %index447
  %wide.load449 = load <2 x double>, ptr %170, align 8, !tbaa !5, !alias.scope !52
  %171 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load449, <2 x double> %wide.load448)
  %172 = getelementptr double, ptr %invariant.gep286, i64 %index447
  %wide.load450 = load <2 x double>, ptr %172, align 8, !tbaa !5, !alias.scope !53
  %173 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat452, <2 x double> %wide.load450, <2 x double> %171)
  %174 = getelementptr double, ptr %invariant.gep288, i64 %index447
  %wide.load453 = load <2 x double>, ptr %174, align 8, !tbaa !5, !alias.scope !54
  %175 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat455, <2 x double> %wide.load453, <2 x double> %173)
  %176 = getelementptr double, ptr %invariant.gep290, i64 %index447
  %wide.load456 = load <2 x double>, ptr %176, align 8, !tbaa !5, !alias.scope !55
  %177 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat458, <2 x double> %wide.load456, <2 x double> %175)
  store <2 x double> %177, ptr %169, align 8, !tbaa !5, !alias.scope !45, !noalias !47
  %index.next459 = add nuw i64 %index447, 2
  %178 = icmp eq i64 %index.next459, %n.vec444
  br i1 %178, label %middle.block439, label %vector.body446, !llvm.loop !56

middle.block439:                                  ; preds = %vector.body446
  %cmp.n460 = icmp eq i64 %n.vec444, %wide.trip.count267
  br i1 %cmp.n460, label %.loopexit242, label %scalar.ph440.preheader

scalar.ph440.preheader:                           ; preds = %middle.block439, %vector.memcheck398, %.lr.ph250
  %indvars.iv264.ph = phi i64 [ 0, %vector.memcheck398 ], [ 0, %.lr.ph250 ], [ %n.vec444, %middle.block439 ]
  br label %scalar.ph440

scalar.ph440:                                     ; preds = %scalar.ph440.preheader, %scalar.ph440
  %indvars.iv264 = phi i64 [ %indvars.iv.next265, %scalar.ph440 ], [ %indvars.iv264.ph, %scalar.ph440.preheader ]
  %179 = getelementptr inbounds double, ptr %1, i64 %indvars.iv264
  %180 = load double, ptr %179, align 8, !tbaa !5
  %181 = load double, ptr %105, align 8, !tbaa !5
  %gep285 = getelementptr double, ptr %invariant.gep284, i64 %indvars.iv264
  %182 = load double, ptr %gep285, align 8, !tbaa !5
  %183 = tail call double @llvm.fmuladd.f64(double %181, double %182, double %180)
  %184 = load double, ptr %109, align 8, !tbaa !5
  %gep287 = getelementptr double, ptr %invariant.gep286, i64 %indvars.iv264
  %185 = load double, ptr %gep287, align 8, !tbaa !5
  %186 = tail call double @llvm.fmuladd.f64(double %184, double %185, double %183)
  %187 = load double, ptr %113, align 8, !tbaa !5
  %gep289 = getelementptr double, ptr %invariant.gep288, i64 %indvars.iv264
  %188 = load double, ptr %gep289, align 8, !tbaa !5
  %189 = tail call double @llvm.fmuladd.f64(double %187, double %188, double %186)
  %190 = load double, ptr %116, align 8, !tbaa !5
  %gep291 = getelementptr double, ptr %invariant.gep290, i64 %indvars.iv264
  %191 = load double, ptr %gep291, align 8, !tbaa !5
  %192 = tail call double @llvm.fmuladd.f64(double %190, double %191, double %189)
  store double %192, ptr %179, align 8, !tbaa !5
  %indvars.iv.next265 = add nuw nsw i64 %indvars.iv264, 1
  %exitcond268.not = icmp eq i64 %indvars.iv.next265, %wide.trip.count267
  br i1 %exitcond268.not, label %.loopexit242, label %scalar.ph440, !llvm.loop !57

.loopexit242:                                     ; preds = %scalar.ph440, %middle.block439, %.loopexit243, %41
  %193 = srem i32 %2, 16
  %194 = icmp sgt i32 %193, 7
  br i1 %194, label %195, label %.loopexit

195:                                              ; preds = %.loopexit242
  br i1 %9, label %.lr.ph252, label %._crit_edge256

.lr.ph252:                                        ; preds = %195
  %196 = add nsw i32 %193, -1
  %197 = add nsw i32 %193, -8
  %198 = zext i32 %197 to i64
  %199 = getelementptr double, ptr %4, i64 %198
  %200 = mul i32 %197, %3
  %201 = add nsw i32 %193, -7
  %202 = zext i32 %201 to i64
  %203 = getelementptr double, ptr %4, i64 %202
  %204 = mul i32 %201, %3
  %205 = add nsw i32 %193, -6
  %206 = zext i32 %205 to i64
  %207 = getelementptr double, ptr %4, i64 %206
  %208 = mul i32 %205, %3
  %209 = add nsw i32 %193, -5
  %210 = zext i32 %209 to i64
  %211 = getelementptr double, ptr %4, i64 %210
  %212 = mul i32 %209, %3
  %213 = add nsw i32 %193, -4
  %214 = zext i32 %213 to i64
  %215 = getelementptr double, ptr %4, i64 %214
  %216 = mul i32 %213, %3
  %217 = add nsw i32 %193, -3
  %218 = zext i32 %217 to i64
  %219 = getelementptr double, ptr %4, i64 %218
  %220 = mul i32 %217, %3
  %221 = add nsw i32 %193, -2
  %222 = zext i32 %221 to i64
  %223 = getelementptr double, ptr %4, i64 %222
  %224 = mul i32 %221, %3
  %225 = zext i32 %196 to i64
  %226 = getelementptr double, ptr %4, i64 %225
  %227 = mul i32 %196, %3
  %228 = sext i32 %200 to i64
  %229 = sext i32 %204 to i64
  %230 = sext i32 %208 to i64
  %231 = sext i32 %212 to i64
  %232 = sext i32 %216 to i64
  %233 = sext i32 %220 to i64
  %234 = sext i32 %224 to i64
  %235 = sext i32 %227 to i64
  %wide.trip.count272 = zext nneg i32 %0 to i64
  %invariant.gep292 = getelementptr double, ptr %5, i64 %228
  %invariant.gep294 = getelementptr double, ptr %5, i64 %229
  %invariant.gep296 = getelementptr double, ptr %5, i64 %230
  %invariant.gep298 = getelementptr double, ptr %5, i64 %231
  %invariant.gep300 = getelementptr double, ptr %5, i64 %232
  %invariant.gep302 = getelementptr double, ptr %5, i64 %233
  %invariant.gep304 = getelementptr double, ptr %5, i64 %234
  %invariant.gep306 = getelementptr double, ptr %5, i64 %235
  %min.iters.check544 = icmp ult i32 %0, 20
  br i1 %min.iters.check544, label %scalar.ph543.preheader, label %vector.memcheck461

vector.memcheck461:                               ; preds = %.lr.ph252
  %236 = shl nuw nsw i64 %wide.trip.count272, 3
  %scevgep462 = getelementptr i8, ptr %1, i64 %236
  %237 = shl nuw nsw i64 %225, 3
  %238 = getelementptr i8, ptr %4, i64 %237
  %239 = shl nuw nsw i64 %222, 3
  %240 = getelementptr i8, ptr %4, i64 %239
  %241 = shl nuw nsw i64 %218, 3
  %242 = getelementptr i8, ptr %4, i64 %241
  %243 = shl nuw nsw i64 %214, 3
  %244 = getelementptr i8, ptr %4, i64 %243
  %245 = shl nuw nsw i64 %210, 3
  %246 = getelementptr i8, ptr %4, i64 %245
  %247 = shl nuw nsw i64 %206, 3
  %248 = getelementptr i8, ptr %4, i64 %247
  %249 = shl nuw nsw i64 %202, 3
  %250 = getelementptr i8, ptr %4, i64 %249
  %251 = shl nuw nsw i64 %198, 3
  %252 = getelementptr i8, ptr %4, i64 %251
  %253 = insertelement <8 x ptr> poison, ptr %238, i64 0
  %254 = insertelement <8 x ptr> %253, ptr %240, i64 1
  %255 = insertelement <8 x ptr> %254, ptr %242, i64 2
  %256 = insertelement <8 x ptr> %255, ptr %244, i64 3
  %257 = insertelement <8 x ptr> %256, ptr %246, i64 4
  %258 = insertelement <8 x ptr> %257, ptr %248, i64 5
  %259 = insertelement <8 x ptr> %258, ptr %250, i64 6
  %260 = insertelement <8 x ptr> %259, ptr %252, i64 7
  %261 = getelementptr i8, <8 x ptr> %260, <8 x i64> <i64 8, i64 8, i64 8, i64 8, i64 8, i64 8, i64 8, i64 8>
  %262 = add nsw i64 %235, %wide.trip.count272
  %263 = shl nsw i64 %262, 3
  %scevgep471 = getelementptr i8, ptr %5, i64 %263
  %264 = add nsw i64 %234, %wide.trip.count272
  %265 = shl nsw i64 %264, 3
  %scevgep472 = getelementptr i8, ptr %5, i64 %265
  %266 = add nsw i64 %233, %wide.trip.count272
  %267 = shl nsw i64 %266, 3
  %scevgep473 = getelementptr i8, ptr %5, i64 %267
  %268 = add nsw i64 %232, %wide.trip.count272
  %269 = shl nsw i64 %268, 3
  %scevgep474 = getelementptr i8, ptr %5, i64 %269
  %270 = add nsw i64 %231, %wide.trip.count272
  %271 = shl nsw i64 %270, 3
  %scevgep475 = getelementptr i8, ptr %5, i64 %271
  %272 = add nsw i64 %230, %wide.trip.count272
  %273 = shl nsw i64 %272, 3
  %scevgep476 = getelementptr i8, ptr %5, i64 %273
  %274 = add nsw i64 %229, %wide.trip.count272
  %275 = shl nsw i64 %274, 3
  %scevgep477 = getelementptr i8, ptr %5, i64 %275
  %276 = add nsw i64 %228, %wide.trip.count272
  %277 = shl nsw i64 %276, 3
  %scevgep478 = getelementptr i8, ptr %5, i64 %277
  %278 = shufflevector <8 x ptr> %261, <8 x ptr> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
  %279 = insertelement <16 x ptr> %278, ptr %scevgep471, i64 8
  %280 = insertelement <16 x ptr> %279, ptr %scevgep472, i64 9
  %281 = insertelement <16 x ptr> %280, ptr %scevgep473, i64 10
  %282 = insertelement <16 x ptr> %281, ptr %scevgep474, i64 11
  %283 = insertelement <16 x ptr> %282, ptr %scevgep475, i64 12
  %284 = insertelement <16 x ptr> %283, ptr %scevgep476, i64 13
  %285 = insertelement <16 x ptr> %284, ptr %scevgep477, i64 14
  %286 = insertelement <16 x ptr> %285, ptr %scevgep478, i64 15
  %287 = insertelement <16 x ptr> poison, ptr %1, i64 0
  %288 = shufflevector <16 x ptr> %287, <16 x ptr> poison, <16 x i32> zeroinitializer
  %289 = icmp ugt <16 x ptr> %286, %288
  %290 = insertelement <16 x ptr> poison, ptr %226, i64 0
  %291 = insertelement <16 x ptr> %290, ptr %223, i64 1
  %292 = insertelement <16 x ptr> %291, ptr %219, i64 2
  %293 = insertelement <16 x ptr> %292, ptr %215, i64 3
  %294 = insertelement <16 x ptr> %293, ptr %211, i64 4
  %295 = insertelement <16 x ptr> %294, ptr %207, i64 5
  %296 = insertelement <16 x ptr> %295, ptr %203, i64 6
  %297 = insertelement <16 x ptr> %296, ptr %199, i64 7
  %298 = insertelement <16 x ptr> %297, ptr %invariant.gep306, i64 8
  %299 = insertelement <16 x ptr> %298, ptr %invariant.gep304, i64 9
  %300 = insertelement <16 x ptr> %299, ptr %invariant.gep302, i64 10
  %301 = insertelement <16 x ptr> %300, ptr %invariant.gep300, i64 11
  %302 = insertelement <16 x ptr> %301, ptr %invariant.gep298, i64 12
  %303 = insertelement <16 x ptr> %302, ptr %invariant.gep296, i64 13
  %304 = insertelement <16 x ptr> %303, ptr %invariant.gep294, i64 14
  %305 = insertelement <16 x ptr> %304, ptr %invariant.gep292, i64 15
  %306 = insertelement <16 x ptr> poison, ptr %scevgep462, i64 0
  %307 = shufflevector <16 x ptr> %306, <16 x ptr> poison, <16 x i32> zeroinitializer
  %308 = icmp ult <16 x ptr> %305, %307
  %309 = and <16 x i1> %289, %308
  %310 = bitcast <16 x i1> %309 to i16
  %.not758 = icmp eq i16 %310, 0
  br i1 %.not758, label %vector.ph545, label %scalar.ph543.preheader

vector.ph545:                                     ; preds = %vector.memcheck461
  %n.vec547 = and i64 %wide.trip.count272, 2147483646
  %311 = load double, ptr %199, align 8, !tbaa !5, !alias.scope !58
  %broadcast.splatinsert553 = insertelement <2 x double> poison, double %311, i64 0
  %broadcast.splat554 = shufflevector <2 x double> %broadcast.splatinsert553, <2 x double> poison, <2 x i32> zeroinitializer
  %312 = load double, ptr %203, align 8, !tbaa !5, !alias.scope !61
  %broadcast.splatinsert556 = insertelement <2 x double> poison, double %312, i64 0
  %broadcast.splat557 = shufflevector <2 x double> %broadcast.splatinsert556, <2 x double> poison, <2 x i32> zeroinitializer
  %313 = load double, ptr %207, align 8, !tbaa !5, !alias.scope !63
  %broadcast.splatinsert559 = insertelement <2 x double> poison, double %313, i64 0
  %broadcast.splat560 = shufflevector <2 x double> %broadcast.splatinsert559, <2 x double> poison, <2 x i32> zeroinitializer
  %314 = load double, ptr %211, align 8, !tbaa !5, !alias.scope !65
  %broadcast.splatinsert562 = insertelement <2 x double> poison, double %314, i64 0
  %broadcast.splat563 = shufflevector <2 x double> %broadcast.splatinsert562, <2 x double> poison, <2 x i32> zeroinitializer
  %315 = load double, ptr %215, align 8, !tbaa !5, !alias.scope !67
  %broadcast.splatinsert565 = insertelement <2 x double> poison, double %315, i64 0
  %broadcast.splat566 = shufflevector <2 x double> %broadcast.splatinsert565, <2 x double> poison, <2 x i32> zeroinitializer
  %316 = load double, ptr %219, align 8, !tbaa !5, !alias.scope !69
  %broadcast.splatinsert568 = insertelement <2 x double> poison, double %316, i64 0
  %broadcast.splat569 = shufflevector <2 x double> %broadcast.splatinsert568, <2 x double> poison, <2 x i32> zeroinitializer
  %317 = load double, ptr %223, align 8, !tbaa !5, !alias.scope !71
  %broadcast.splatinsert571 = insertelement <2 x double> poison, double %317, i64 0
  %broadcast.splat572 = shufflevector <2 x double> %broadcast.splatinsert571, <2 x double> poison, <2 x i32> zeroinitializer
  %318 = load double, ptr %226, align 8, !tbaa !5, !alias.scope !73
  %broadcast.splatinsert574 = insertelement <2 x double> poison, double %318, i64 0
  %broadcast.splat575 = shufflevector <2 x double> %broadcast.splatinsert574, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body549

vector.body549:                                   ; preds = %vector.body549, %vector.ph545
  %index550 = phi i64 [ 0, %vector.ph545 ], [ %index.next576, %vector.body549 ]
  %319 = getelementptr inbounds double, ptr %1, i64 %index550
  %wide.load551 = load <2 x double>, ptr %319, align 8, !tbaa !5, !alias.scope !75, !noalias !77
  %320 = getelementptr double, ptr %invariant.gep292, i64 %index550
  %wide.load552 = load <2 x double>, ptr %320, align 8, !tbaa !5, !alias.scope !86
  %321 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat554, <2 x double> %wide.load552, <2 x double> %wide.load551)
  %322 = getelementptr double, ptr %invariant.gep294, i64 %index550
  %wide.load555 = load <2 x double>, ptr %322, align 8, !tbaa !5, !alias.scope !87
  %323 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat557, <2 x double> %wide.load555, <2 x double> %321)
  %324 = getelementptr double, ptr %invariant.gep296, i64 %index550
  %wide.load558 = load <2 x double>, ptr %324, align 8, !tbaa !5, !alias.scope !88
  %325 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat560, <2 x double> %wide.load558, <2 x double> %323)
  %326 = getelementptr double, ptr %invariant.gep298, i64 %index550
  %wide.load561 = load <2 x double>, ptr %326, align 8, !tbaa !5, !alias.scope !89
  %327 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat563, <2 x double> %wide.load561, <2 x double> %325)
  %328 = getelementptr double, ptr %invariant.gep300, i64 %index550
  %wide.load564 = load <2 x double>, ptr %328, align 8, !tbaa !5, !alias.scope !90
  %329 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat566, <2 x double> %wide.load564, <2 x double> %327)
  %330 = getelementptr double, ptr %invariant.gep302, i64 %index550
  %wide.load567 = load <2 x double>, ptr %330, align 8, !tbaa !5, !alias.scope !91
  %331 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat569, <2 x double> %wide.load567, <2 x double> %329)
  %332 = getelementptr double, ptr %invariant.gep304, i64 %index550
  %wide.load570 = load <2 x double>, ptr %332, align 8, !tbaa !5, !alias.scope !92
  %333 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat572, <2 x double> %wide.load570, <2 x double> %331)
  %334 = getelementptr double, ptr %invariant.gep306, i64 %index550
  %wide.load573 = load <2 x double>, ptr %334, align 8, !tbaa !5, !alias.scope !93
  %335 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat575, <2 x double> %wide.load573, <2 x double> %333)
  store <2 x double> %335, ptr %319, align 8, !tbaa !5, !alias.scope !75, !noalias !77
  %index.next576 = add nuw i64 %index550, 2
  %336 = icmp eq i64 %index.next576, %n.vec547
  br i1 %336, label %middle.block542, label %vector.body549, !llvm.loop !94

middle.block542:                                  ; preds = %vector.body549
  %cmp.n577 = icmp eq i64 %n.vec547, %wide.trip.count272
  br i1 %cmp.n577, label %.loopexit, label %scalar.ph543.preheader

scalar.ph543.preheader:                           ; preds = %middle.block542, %vector.memcheck461, %.lr.ph252
  %indvars.iv269.ph = phi i64 [ 0, %vector.memcheck461 ], [ 0, %.lr.ph252 ], [ %n.vec547, %middle.block542 ]
  br label %scalar.ph543

scalar.ph543:                                     ; preds = %scalar.ph543.preheader, %scalar.ph543
  %indvars.iv269 = phi i64 [ %indvars.iv.next270, %scalar.ph543 ], [ %indvars.iv269.ph, %scalar.ph543.preheader ]
  %337 = getelementptr inbounds double, ptr %1, i64 %indvars.iv269
  %338 = load double, ptr %337, align 8, !tbaa !5
  %339 = load double, ptr %199, align 8, !tbaa !5
  %gep293 = getelementptr double, ptr %invariant.gep292, i64 %indvars.iv269
  %340 = load double, ptr %gep293, align 8, !tbaa !5
  %341 = tail call double @llvm.fmuladd.f64(double %339, double %340, double %338)
  %342 = load double, ptr %203, align 8, !tbaa !5
  %gep295 = getelementptr double, ptr %invariant.gep294, i64 %indvars.iv269
  %343 = load double, ptr %gep295, align 8, !tbaa !5
  %344 = tail call double @llvm.fmuladd.f64(double %342, double %343, double %341)
  %345 = load double, ptr %207, align 8, !tbaa !5
  %gep297 = getelementptr double, ptr %invariant.gep296, i64 %indvars.iv269
  %346 = load double, ptr %gep297, align 8, !tbaa !5
  %347 = tail call double @llvm.fmuladd.f64(double %345, double %346, double %344)
  %348 = load double, ptr %211, align 8, !tbaa !5
  %gep299 = getelementptr double, ptr %invariant.gep298, i64 %indvars.iv269
  %349 = load double, ptr %gep299, align 8, !tbaa !5
  %350 = tail call double @llvm.fmuladd.f64(double %348, double %349, double %347)
  %351 = load double, ptr %215, align 8, !tbaa !5
  %gep301 = getelementptr double, ptr %invariant.gep300, i64 %indvars.iv269
  %352 = load double, ptr %gep301, align 8, !tbaa !5
  %353 = tail call double @llvm.fmuladd.f64(double %351, double %352, double %350)
  %354 = load double, ptr %219, align 8, !tbaa !5
  %gep303 = getelementptr double, ptr %invariant.gep302, i64 %indvars.iv269
  %355 = load double, ptr %gep303, align 8, !tbaa !5
  %356 = tail call double @llvm.fmuladd.f64(double %354, double %355, double %353)
  %357 = load double, ptr %223, align 8, !tbaa !5
  %gep305 = getelementptr double, ptr %invariant.gep304, i64 %indvars.iv269
  %358 = load double, ptr %gep305, align 8, !tbaa !5
  %359 = tail call double @llvm.fmuladd.f64(double %357, double %358, double %356)
  %360 = load double, ptr %226, align 8, !tbaa !5
  %gep307 = getelementptr double, ptr %invariant.gep306, i64 %indvars.iv269
  %361 = load double, ptr %gep307, align 8, !tbaa !5
  %362 = tail call double @llvm.fmuladd.f64(double %360, double %361, double %359)
  store double %362, ptr %337, align 8, !tbaa !5
  %indvars.iv.next270 = add nuw nsw i64 %indvars.iv269, 1
  %exitcond273.not = icmp eq i64 %indvars.iv.next270, %wide.trip.count272
  br i1 %exitcond273.not, label %.loopexit, label %scalar.ph543, !llvm.loop !95

.loopexit:                                        ; preds = %scalar.ph543, %middle.block542, %.loopexit242
  %363 = add nsw i32 %193, 15
  %364 = icmp slt i32 %363, %2
  %brmerge343.not = and i1 %364, %9
  br i1 %brmerge343.not, label %.preheader.us.preheader, label %._crit_edge256

.preheader.us.preheader:                          ; preds = %.loopexit
  %narrow = add nsw i32 %193, 15
  %365 = sext i32 %narrow to i64
  %366 = sext i32 %2 to i64
  %367 = sext i32 %3 to i64
  %wide.trip.count277 = zext nneg i32 %0 to i64
  %368 = shl nuw nsw i64 %wide.trip.count277, 3
  %scevgep579 = getelementptr i8, ptr %1, i64 %368
  %369 = sext i32 %193 to i64
  %370 = shl nsw i64 %369, 3
  %scevgep580 = getelementptr i8, ptr %4, i64 %370
  %371 = add nsw i64 %366, 2305843009213693936
  %372 = sub nsw i64 %371, %369
  %373 = shl i64 %372, 3
  %374 = and i64 %373, -128
  %375 = add i64 %374, %370
  %376 = getelementptr i8, ptr %4, i64 %375
  %scevgep581 = getelementptr i8, ptr %376, i64 128
  %377 = mul nsw i64 %365, %367
  %378 = shl nsw i64 %377, 3
  %scevgep582 = getelementptr i8, ptr %5, i64 %378
  %379 = add i64 %375, 120
  %380 = mul i64 %379, %367
  %381 = getelementptr i8, ptr %5, i64 %380
  %scevgep583 = getelementptr i8, ptr %381, i64 %368
  %382 = add nsw i64 %369, 14
  %383 = mul nsw i64 %382, %367
  %384 = shl nsw i64 %383, 3
  %scevgep584 = getelementptr i8, ptr %5, i64 %384
  %385 = add i64 %374, %370
  %386 = add i64 %385, 112
  %387 = mul i64 %386, %367
  %388 = getelementptr i8, ptr %5, i64 %387
  %scevgep585 = getelementptr i8, ptr %388, i64 %368
  %389 = add nsw i64 %369, 13
  %390 = mul nsw i64 %389, %367
  %391 = shl nsw i64 %390, 3
  %scevgep586 = getelementptr i8, ptr %5, i64 %391
  %392 = add i64 %374, %370
  %393 = add i64 %392, 104
  %394 = mul i64 %393, %367
  %395 = getelementptr i8, ptr %5, i64 %394
  %scevgep587 = getelementptr i8, ptr %395, i64 %368
  %396 = add nsw i64 %369, 12
  %397 = mul nsw i64 %396, %367
  %398 = shl nsw i64 %397, 3
  %scevgep588 = getelementptr i8, ptr %5, i64 %398
  %399 = add i64 %374, %370
  %400 = add i64 %399, 96
  %401 = mul i64 %400, %367
  %402 = getelementptr i8, ptr %5, i64 %401
  %scevgep589 = getelementptr i8, ptr %402, i64 %368
  %403 = add nsw i64 %369, 11
  %404 = mul nsw i64 %403, %367
  %405 = shl nsw i64 %404, 3
  %scevgep590 = getelementptr i8, ptr %5, i64 %405
  %406 = add i64 %374, %370
  %407 = add i64 %406, 88
  %408 = mul i64 %407, %367
  %409 = getelementptr i8, ptr %5, i64 %408
  %scevgep591 = getelementptr i8, ptr %409, i64 %368
  %410 = add nsw i64 %369, 10
  %411 = mul nsw i64 %410, %367
  %412 = shl nsw i64 %411, 3
  %scevgep592 = getelementptr i8, ptr %5, i64 %412
  %413 = add i64 %374, %370
  %414 = add i64 %413, 80
  %415 = mul i64 %414, %367
  %416 = getelementptr i8, ptr %5, i64 %415
  %scevgep593 = getelementptr i8, ptr %416, i64 %368
  %417 = add nsw i64 %369, 9
  %418 = mul nsw i64 %417, %367
  %419 = shl nsw i64 %418, 3
  %scevgep594 = getelementptr i8, ptr %5, i64 %419
  %420 = add i64 %374, %370
  %421 = add i64 %420, 72
  %422 = mul i64 %421, %367
  %423 = getelementptr i8, ptr %5, i64 %422
  %scevgep595 = getelementptr i8, ptr %423, i64 %368
  %424 = add nsw i64 %369, 8
  %425 = mul nsw i64 %424, %367
  %426 = shl nsw i64 %425, 3
  %scevgep596 = getelementptr i8, ptr %5, i64 %426
  %427 = add i64 %374, %370
  %428 = add i64 %427, 64
  %429 = mul i64 %428, %367
  %430 = getelementptr i8, ptr %5, i64 %429
  %scevgep597 = getelementptr i8, ptr %430, i64 %368
  %431 = add nsw i64 %369, 7
  %432 = mul nsw i64 %431, %367
  %433 = shl nsw i64 %432, 3
  %scevgep598 = getelementptr i8, ptr %5, i64 %433
  %434 = add i64 %374, %370
  %435 = add i64 %434, 56
  %436 = mul i64 %435, %367
  %437 = getelementptr i8, ptr %5, i64 %436
  %scevgep599 = getelementptr i8, ptr %437, i64 %368
  %438 = add nsw i64 %369, 6
  %439 = mul nsw i64 %438, %367
  %440 = shl nsw i64 %439, 3
  %scevgep600 = getelementptr i8, ptr %5, i64 %440
  %441 = add i64 %374, %370
  %442 = add i64 %441, 48
  %443 = mul i64 %442, %367
  %444 = getelementptr i8, ptr %5, i64 %443
  %scevgep601 = getelementptr i8, ptr %444, i64 %368
  %445 = add nsw i64 %369, 5
  %446 = mul nsw i64 %445, %367
  %447 = shl nsw i64 %446, 3
  %scevgep602 = getelementptr i8, ptr %5, i64 %447
  %448 = add i64 %374, %370
  %449 = add i64 %448, 40
  %450 = mul i64 %449, %367
  %451 = getelementptr i8, ptr %5, i64 %450
  %scevgep603 = getelementptr i8, ptr %451, i64 %368
  %452 = add nsw i64 %369, 4
  %453 = mul nsw i64 %452, %367
  %454 = shl nsw i64 %453, 3
  %scevgep604 = getelementptr i8, ptr %5, i64 %454
  %455 = add i64 %374, %370
  %456 = add i64 %455, 32
  %457 = mul i64 %456, %367
  %458 = getelementptr i8, ptr %5, i64 %457
  %scevgep605 = getelementptr i8, ptr %458, i64 %368
  %459 = add nsw i64 %369, 3
  %460 = mul nsw i64 %459, %367
  %461 = shl nsw i64 %460, 3
  %scevgep606 = getelementptr i8, ptr %5, i64 %461
  %462 = add i64 %374, %370
  %463 = add i64 %462, 24
  %464 = mul i64 %463, %367
  %465 = getelementptr i8, ptr %5, i64 %464
  %scevgep607 = getelementptr i8, ptr %465, i64 %368
  %466 = add nsw i64 %369, 2
  %467 = mul nsw i64 %466, %367
  %468 = shl nsw i64 %467, 3
  %scevgep608 = getelementptr i8, ptr %5, i64 %468
  %469 = add i64 %374, %370
  %470 = add i64 %469, 16
  %471 = mul i64 %470, %367
  %472 = getelementptr i8, ptr %5, i64 %471
  %scevgep609 = getelementptr i8, ptr %472, i64 %368
  %473 = add nsw i64 %369, 1
  %474 = mul nsw i64 %473, %367
  %475 = shl nsw i64 %474, 3
  %scevgep610 = getelementptr i8, ptr %5, i64 %475
  %476 = add i64 %374, %370
  %477 = add i64 %476, 8
  %478 = mul i64 %477, %367
  %479 = getelementptr i8, ptr %5, i64 %478
  %scevgep611 = getelementptr i8, ptr %479, i64 %368
  %480 = mul nsw i64 %369, %367
  %481 = shl nsw i64 %480, 3
  %scevgep612 = getelementptr i8, ptr %5, i64 %481
  %482 = add i64 %374, %370
  %483 = mul i64 %482, %367
  %484 = getelementptr i8, ptr %5, i64 %483
  %scevgep613 = getelementptr i8, ptr %484, i64 %368
  %485 = insertelement <16 x ptr> poison, ptr %scevgep583, i64 0
  %486 = insertelement <16 x ptr> %485, ptr %scevgep581, i64 1
  %487 = insertelement <16 x ptr> %486, ptr %scevgep585, i64 2
  %488 = insertelement <16 x ptr> %487, ptr %scevgep587, i64 3
  %489 = insertelement <16 x ptr> %488, ptr %scevgep589, i64 4
  %490 = insertelement <16 x ptr> %489, ptr %scevgep591, i64 5
  %491 = insertelement <16 x ptr> %490, ptr %scevgep593, i64 6
  %492 = insertelement <16 x ptr> %491, ptr %scevgep595, i64 7
  %493 = insertelement <16 x ptr> %492, ptr %scevgep597, i64 8
  %494 = insertelement <16 x ptr> %493, ptr %scevgep599, i64 9
  %495 = insertelement <16 x ptr> %494, ptr %scevgep601, i64 10
  %496 = insertelement <16 x ptr> %495, ptr %scevgep603, i64 11
  %497 = insertelement <16 x ptr> %496, ptr %scevgep605, i64 12
  %498 = insertelement <16 x ptr> %497, ptr %scevgep607, i64 13
  %499 = insertelement <16 x ptr> %498, ptr %scevgep609, i64 14
  %500 = insertelement <16 x ptr> %499, ptr %scevgep611, i64 15
  %501 = insertelement <16 x ptr> poison, ptr %1, i64 0
  %502 = shufflevector <16 x ptr> %501, <16 x ptr> poison, <16 x i32> zeroinitializer
  %503 = insertelement <16 x ptr> poison, ptr %scevgep582, i64 0
  %504 = insertelement <16 x ptr> %503, ptr %scevgep580, i64 1
  %505 = insertelement <16 x ptr> %504, ptr %scevgep584, i64 2
  %506 = insertelement <16 x ptr> %505, ptr %scevgep586, i64 3
  %507 = insertelement <16 x ptr> %506, ptr %scevgep588, i64 4
  %508 = insertelement <16 x ptr> %507, ptr %scevgep590, i64 5
  %509 = insertelement <16 x ptr> %508, ptr %scevgep592, i64 6
  %510 = insertelement <16 x ptr> %509, ptr %scevgep594, i64 7
  %511 = insertelement <16 x ptr> %510, ptr %scevgep596, i64 8
  %512 = insertelement <16 x ptr> %511, ptr %scevgep598, i64 9
  %513 = insertelement <16 x ptr> %512, ptr %scevgep600, i64 10
  %514 = insertelement <16 x ptr> %513, ptr %scevgep602, i64 11
  %515 = insertelement <16 x ptr> %514, ptr %scevgep604, i64 12
  %516 = insertelement <16 x ptr> %515, ptr %scevgep606, i64 13
  %517 = insertelement <16 x ptr> %516, ptr %scevgep608, i64 14
  %518 = insertelement <16 x ptr> %517, ptr %scevgep610, i64 15
  %519 = insertelement <16 x ptr> poison, ptr %scevgep579, i64 0
  %520 = shufflevector <16 x ptr> %519, <16 x ptr> poison, <16 x i32> zeroinitializer
  %min.iters.check698 = icmp ult i32 %0, 6
  %521 = icmp ugt <16 x ptr> %500, %502
  %522 = icmp ult <16 x ptr> %518, %520
  %stride.check = icmp slt i32 %3, 0
  %523 = and <16 x i1> %521, %522
  %bound0691 = icmp ugt ptr %scevgep613, %1
  %bound1692 = icmp ult ptr %scevgep612, %scevgep579
  %found.conflict693 = and i1 %bound0691, %bound1692
  %524 = bitcast <16 x i1> %523 to i16
  %525 = icmp ne i16 %524, 0
  %op.rdx = or i1 %525, %found.conflict693
  %op.rdx757 = or i1 %op.rdx, %stride.check
  %n.vec701 = and i64 %wide.trip.count277, 2147483646
  %cmp.n755 = icmp eq i64 %n.vec701, %wide.trip.count277
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge.us
  %indvars.iv279 = phi i64 [ %365, %.preheader.us.preheader ], [ %indvars.iv.next280, %._crit_edge.us ]
  %526 = add nsw i64 %indvars.iv279, -15
  %527 = getelementptr inbounds double, ptr %4, i64 %526
  %528 = mul nsw i64 %526, %367
  %529 = add nsw i64 %indvars.iv279, -14
  %530 = getelementptr inbounds double, ptr %4, i64 %529
  %531 = mul nsw i64 %529, %367
  %532 = add nsw i64 %indvars.iv279, -13
  %533 = getelementptr inbounds double, ptr %4, i64 %532
  %534 = mul nsw i64 %532, %367
  %535 = add nsw i64 %indvars.iv279, -12
  %536 = getelementptr inbounds double, ptr %4, i64 %535
  %537 = mul nsw i64 %535, %367
  %538 = add nsw i64 %indvars.iv279, -11
  %539 = getelementptr inbounds double, ptr %4, i64 %538
  %540 = mul nsw i64 %538, %367
  %541 = add nsw i64 %indvars.iv279, -10
  %542 = getelementptr inbounds double, ptr %4, i64 %541
  %543 = mul nsw i64 %541, %367
  %544 = add nsw i64 %indvars.iv279, -9
  %545 = getelementptr inbounds double, ptr %4, i64 %544
  %546 = mul nsw i64 %544, %367
  %547 = add nsw i64 %indvars.iv279, -8
  %548 = getelementptr inbounds double, ptr %4, i64 %547
  %549 = mul nsw i64 %547, %367
  %550 = add nsw i64 %indvars.iv279, -7
  %551 = getelementptr inbounds double, ptr %4, i64 %550
  %552 = mul nsw i64 %550, %367
  %553 = add nsw i64 %indvars.iv279, -6
  %554 = getelementptr inbounds double, ptr %4, i64 %553
  %555 = mul nsw i64 %553, %367
  %556 = add nsw i64 %indvars.iv279, -5
  %557 = getelementptr inbounds double, ptr %4, i64 %556
  %558 = mul nsw i64 %556, %367
  %559 = add nsw i64 %indvars.iv279, -4
  %560 = getelementptr inbounds double, ptr %4, i64 %559
  %561 = mul nsw i64 %559, %367
  %562 = add nsw i64 %indvars.iv279, -3
  %563 = getelementptr inbounds double, ptr %4, i64 %562
  %564 = mul nsw i64 %562, %367
  %565 = add nsw i64 %indvars.iv279, -2
  %566 = getelementptr inbounds double, ptr %4, i64 %565
  %567 = mul nsw i64 %565, %367
  %568 = add nsw i64 %indvars.iv279, -1
  %569 = getelementptr inbounds double, ptr %4, i64 %568
  %570 = mul nsw i64 %568, %367
  %571 = getelementptr inbounds double, ptr %4, i64 %indvars.iv279
  %572 = mul nsw i64 %indvars.iv279, %367
  %invariant.gep308 = getelementptr double, ptr %5, i64 %528
  %invariant.gep310 = getelementptr double, ptr %5, i64 %531
  %invariant.gep312 = getelementptr double, ptr %5, i64 %534
  %invariant.gep314 = getelementptr double, ptr %5, i64 %537
  %invariant.gep316 = getelementptr double, ptr %5, i64 %540
  %invariant.gep318 = getelementptr double, ptr %5, i64 %543
  %invariant.gep320 = getelementptr double, ptr %5, i64 %546
  %invariant.gep322 = getelementptr double, ptr %5, i64 %549
  %invariant.gep324 = getelementptr double, ptr %5, i64 %552
  %invariant.gep326 = getelementptr double, ptr %5, i64 %555
  %invariant.gep328 = getelementptr double, ptr %5, i64 %558
  %invariant.gep330 = getelementptr double, ptr %5, i64 %561
  %invariant.gep332 = getelementptr double, ptr %5, i64 %564
  %invariant.gep334 = getelementptr double, ptr %5, i64 %567
  %invariant.gep336 = getelementptr double, ptr %5, i64 %570
  %invariant.gep338 = getelementptr double, ptr %5, i64 %572
  %brmerge = select i1 %min.iters.check698, i1 true, i1 %op.rdx757
  br i1 %brmerge, label %scalar.ph697.preheader, label %vector.ph699

vector.ph699:                                     ; preds = %.preheader.us
  %573 = load double, ptr %527, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert707 = insertelement <2 x double> poison, double %573, i64 0
  %broadcast.splat708 = shufflevector <2 x double> %broadcast.splatinsert707, <2 x double> poison, <2 x i32> zeroinitializer
  %574 = load double, ptr %530, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert710 = insertelement <2 x double> poison, double %574, i64 0
  %broadcast.splat711 = shufflevector <2 x double> %broadcast.splatinsert710, <2 x double> poison, <2 x i32> zeroinitializer
  %575 = load double, ptr %533, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert713 = insertelement <2 x double> poison, double %575, i64 0
  %broadcast.splat714 = shufflevector <2 x double> %broadcast.splatinsert713, <2 x double> poison, <2 x i32> zeroinitializer
  %576 = load double, ptr %536, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert716 = insertelement <2 x double> poison, double %576, i64 0
  %broadcast.splat717 = shufflevector <2 x double> %broadcast.splatinsert716, <2 x double> poison, <2 x i32> zeroinitializer
  %577 = load double, ptr %539, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert719 = insertelement <2 x double> poison, double %577, i64 0
  %broadcast.splat720 = shufflevector <2 x double> %broadcast.splatinsert719, <2 x double> poison, <2 x i32> zeroinitializer
  %578 = load double, ptr %542, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert722 = insertelement <2 x double> poison, double %578, i64 0
  %broadcast.splat723 = shufflevector <2 x double> %broadcast.splatinsert722, <2 x double> poison, <2 x i32> zeroinitializer
  %579 = load double, ptr %545, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert725 = insertelement <2 x double> poison, double %579, i64 0
  %broadcast.splat726 = shufflevector <2 x double> %broadcast.splatinsert725, <2 x double> poison, <2 x i32> zeroinitializer
  %580 = load double, ptr %548, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert728 = insertelement <2 x double> poison, double %580, i64 0
  %broadcast.splat729 = shufflevector <2 x double> %broadcast.splatinsert728, <2 x double> poison, <2 x i32> zeroinitializer
  %581 = load double, ptr %551, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert731 = insertelement <2 x double> poison, double %581, i64 0
  %broadcast.splat732 = shufflevector <2 x double> %broadcast.splatinsert731, <2 x double> poison, <2 x i32> zeroinitializer
  %582 = load double, ptr %554, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert734 = insertelement <2 x double> poison, double %582, i64 0
  %broadcast.splat735 = shufflevector <2 x double> %broadcast.splatinsert734, <2 x double> poison, <2 x i32> zeroinitializer
  %583 = load double, ptr %557, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert737 = insertelement <2 x double> poison, double %583, i64 0
  %broadcast.splat738 = shufflevector <2 x double> %broadcast.splatinsert737, <2 x double> poison, <2 x i32> zeroinitializer
  %584 = load double, ptr %560, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert740 = insertelement <2 x double> poison, double %584, i64 0
  %broadcast.splat741 = shufflevector <2 x double> %broadcast.splatinsert740, <2 x double> poison, <2 x i32> zeroinitializer
  %585 = load double, ptr %563, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert743 = insertelement <2 x double> poison, double %585, i64 0
  %broadcast.splat744 = shufflevector <2 x double> %broadcast.splatinsert743, <2 x double> poison, <2 x i32> zeroinitializer
  %586 = load double, ptr %566, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert746 = insertelement <2 x double> poison, double %586, i64 0
  %broadcast.splat747 = shufflevector <2 x double> %broadcast.splatinsert746, <2 x double> poison, <2 x i32> zeroinitializer
  %587 = load double, ptr %569, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert749 = insertelement <2 x double> poison, double %587, i64 0
  %broadcast.splat750 = shufflevector <2 x double> %broadcast.splatinsert749, <2 x double> poison, <2 x i32> zeroinitializer
  %588 = load double, ptr %571, align 8, !tbaa !5, !alias.scope !96
  %broadcast.splatinsert752 = insertelement <2 x double> poison, double %588, i64 0
  %broadcast.splat753 = shufflevector <2 x double> %broadcast.splatinsert752, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body703

vector.body703:                                   ; preds = %vector.body703, %vector.ph699
  %index704 = phi i64 [ 0, %vector.ph699 ], [ %index.next754, %vector.body703 ]
  %589 = getelementptr inbounds double, ptr %1, i64 %index704
  %wide.load705 = load <2 x double>, ptr %589, align 8, !tbaa !5, !alias.scope !99, !noalias !101
  %590 = getelementptr double, ptr %invariant.gep308, i64 %index704
  %wide.load706 = load <2 x double>, ptr %590, align 8, !tbaa !5, !alias.scope !118
  %591 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat708, <2 x double> %wide.load706, <2 x double> %wide.load705)
  %592 = getelementptr double, ptr %invariant.gep310, i64 %index704
  %wide.load709 = load <2 x double>, ptr %592, align 8, !tbaa !5, !alias.scope !119
  %593 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat711, <2 x double> %wide.load709, <2 x double> %591)
  %594 = getelementptr double, ptr %invariant.gep312, i64 %index704
  %wide.load712 = load <2 x double>, ptr %594, align 8, !tbaa !5, !alias.scope !120
  %595 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat714, <2 x double> %wide.load712, <2 x double> %593)
  %596 = getelementptr double, ptr %invariant.gep314, i64 %index704
  %wide.load715 = load <2 x double>, ptr %596, align 8, !tbaa !5, !alias.scope !121
  %597 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat717, <2 x double> %wide.load715, <2 x double> %595)
  %598 = getelementptr double, ptr %invariant.gep316, i64 %index704
  %wide.load718 = load <2 x double>, ptr %598, align 8, !tbaa !5, !alias.scope !122
  %599 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat720, <2 x double> %wide.load718, <2 x double> %597)
  %600 = getelementptr double, ptr %invariant.gep318, i64 %index704
  %wide.load721 = load <2 x double>, ptr %600, align 8, !tbaa !5, !alias.scope !123
  %601 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat723, <2 x double> %wide.load721, <2 x double> %599)
  %602 = getelementptr double, ptr %invariant.gep320, i64 %index704
  %wide.load724 = load <2 x double>, ptr %602, align 8, !tbaa !5, !alias.scope !124
  %603 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat726, <2 x double> %wide.load724, <2 x double> %601)
  %604 = getelementptr double, ptr %invariant.gep322, i64 %index704
  %wide.load727 = load <2 x double>, ptr %604, align 8, !tbaa !5, !alias.scope !125
  %605 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat729, <2 x double> %wide.load727, <2 x double> %603)
  %606 = getelementptr double, ptr %invariant.gep324, i64 %index704
  %wide.load730 = load <2 x double>, ptr %606, align 8, !tbaa !5, !alias.scope !126
  %607 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat732, <2 x double> %wide.load730, <2 x double> %605)
  %608 = getelementptr double, ptr %invariant.gep326, i64 %index704
  %wide.load733 = load <2 x double>, ptr %608, align 8, !tbaa !5, !alias.scope !127
  %609 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat735, <2 x double> %wide.load733, <2 x double> %607)
  %610 = getelementptr double, ptr %invariant.gep328, i64 %index704
  %wide.load736 = load <2 x double>, ptr %610, align 8, !tbaa !5, !alias.scope !128
  %611 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat738, <2 x double> %wide.load736, <2 x double> %609)
  %612 = getelementptr double, ptr %invariant.gep330, i64 %index704
  %wide.load739 = load <2 x double>, ptr %612, align 8, !tbaa !5, !alias.scope !129
  %613 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat741, <2 x double> %wide.load739, <2 x double> %611)
  %614 = getelementptr double, ptr %invariant.gep332, i64 %index704
  %wide.load742 = load <2 x double>, ptr %614, align 8, !tbaa !5, !alias.scope !130
  %615 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat744, <2 x double> %wide.load742, <2 x double> %613)
  %616 = getelementptr double, ptr %invariant.gep334, i64 %index704
  %wide.load745 = load <2 x double>, ptr %616, align 8, !tbaa !5, !alias.scope !131
  %617 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat747, <2 x double> %wide.load745, <2 x double> %615)
  %618 = getelementptr double, ptr %invariant.gep336, i64 %index704
  %wide.load748 = load <2 x double>, ptr %618, align 8, !tbaa !5, !alias.scope !132
  %619 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat750, <2 x double> %wide.load748, <2 x double> %617)
  %620 = getelementptr double, ptr %invariant.gep338, i64 %index704
  %wide.load751 = load <2 x double>, ptr %620, align 8, !tbaa !5, !alias.scope !133
  %621 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat753, <2 x double> %wide.load751, <2 x double> %619)
  store <2 x double> %621, ptr %589, align 8, !tbaa !5, !alias.scope !99, !noalias !101
  %index.next754 = add nuw i64 %index704, 2
  %622 = icmp eq i64 %index.next754, %n.vec701
  br i1 %622, label %middle.block696, label %vector.body703, !llvm.loop !134

middle.block696:                                  ; preds = %vector.body703
  br i1 %cmp.n755, label %._crit_edge.us, label %scalar.ph697.preheader

scalar.ph697.preheader:                           ; preds = %.preheader.us, %middle.block696
  %indvars.iv274.ph = phi i64 [ 0, %.preheader.us ], [ %n.vec701, %middle.block696 ]
  br label %scalar.ph697

scalar.ph697:                                     ; preds = %scalar.ph697.preheader, %scalar.ph697
  %indvars.iv274 = phi i64 [ %indvars.iv.next275, %scalar.ph697 ], [ %indvars.iv274.ph, %scalar.ph697.preheader ]
  %623 = getelementptr inbounds double, ptr %1, i64 %indvars.iv274
  %624 = load double, ptr %623, align 8, !tbaa !5
  %625 = load double, ptr %527, align 8, !tbaa !5
  %gep309 = getelementptr double, ptr %invariant.gep308, i64 %indvars.iv274
  %626 = load double, ptr %gep309, align 8, !tbaa !5
  %627 = tail call double @llvm.fmuladd.f64(double %625, double %626, double %624)
  %628 = load double, ptr %530, align 8, !tbaa !5
  %gep311 = getelementptr double, ptr %invariant.gep310, i64 %indvars.iv274
  %629 = load double, ptr %gep311, align 8, !tbaa !5
  %630 = tail call double @llvm.fmuladd.f64(double %628, double %629, double %627)
  %631 = load double, ptr %533, align 8, !tbaa !5
  %gep313 = getelementptr double, ptr %invariant.gep312, i64 %indvars.iv274
  %632 = load double, ptr %gep313, align 8, !tbaa !5
  %633 = tail call double @llvm.fmuladd.f64(double %631, double %632, double %630)
  %634 = load double, ptr %536, align 8, !tbaa !5
  %gep315 = getelementptr double, ptr %invariant.gep314, i64 %indvars.iv274
  %635 = load double, ptr %gep315, align 8, !tbaa !5
  %636 = tail call double @llvm.fmuladd.f64(double %634, double %635, double %633)
  %637 = load double, ptr %539, align 8, !tbaa !5
  %gep317 = getelementptr double, ptr %invariant.gep316, i64 %indvars.iv274
  %638 = load double, ptr %gep317, align 8, !tbaa !5
  %639 = tail call double @llvm.fmuladd.f64(double %637, double %638, double %636)
  %640 = load double, ptr %542, align 8, !tbaa !5
  %gep319 = getelementptr double, ptr %invariant.gep318, i64 %indvars.iv274
  %641 = load double, ptr %gep319, align 8, !tbaa !5
  %642 = tail call double @llvm.fmuladd.f64(double %640, double %641, double %639)
  %643 = load double, ptr %545, align 8, !tbaa !5
  %gep321 = getelementptr double, ptr %invariant.gep320, i64 %indvars.iv274
  %644 = load double, ptr %gep321, align 8, !tbaa !5
  %645 = tail call double @llvm.fmuladd.f64(double %643, double %644, double %642)
  %646 = load double, ptr %548, align 8, !tbaa !5
  %gep323 = getelementptr double, ptr %invariant.gep322, i64 %indvars.iv274
  %647 = load double, ptr %gep323, align 8, !tbaa !5
  %648 = tail call double @llvm.fmuladd.f64(double %646, double %647, double %645)
  %649 = load double, ptr %551, align 8, !tbaa !5
  %gep325 = getelementptr double, ptr %invariant.gep324, i64 %indvars.iv274
  %650 = load double, ptr %gep325, align 8, !tbaa !5
  %651 = tail call double @llvm.fmuladd.f64(double %649, double %650, double %648)
  %652 = load double, ptr %554, align 8, !tbaa !5
  %gep327 = getelementptr double, ptr %invariant.gep326, i64 %indvars.iv274
  %653 = load double, ptr %gep327, align 8, !tbaa !5
  %654 = tail call double @llvm.fmuladd.f64(double %652, double %653, double %651)
  %655 = load double, ptr %557, align 8, !tbaa !5
  %gep329 = getelementptr double, ptr %invariant.gep328, i64 %indvars.iv274
  %656 = load double, ptr %gep329, align 8, !tbaa !5
  %657 = tail call double @llvm.fmuladd.f64(double %655, double %656, double %654)
  %658 = load double, ptr %560, align 8, !tbaa !5
  %gep331 = getelementptr double, ptr %invariant.gep330, i64 %indvars.iv274
  %659 = load double, ptr %gep331, align 8, !tbaa !5
  %660 = tail call double @llvm.fmuladd.f64(double %658, double %659, double %657)
  %661 = load double, ptr %563, align 8, !tbaa !5
  %gep333 = getelementptr double, ptr %invariant.gep332, i64 %indvars.iv274
  %662 = load double, ptr %gep333, align 8, !tbaa !5
  %663 = tail call double @llvm.fmuladd.f64(double %661, double %662, double %660)
  %664 = load double, ptr %566, align 8, !tbaa !5
  %gep335 = getelementptr double, ptr %invariant.gep334, i64 %indvars.iv274
  %665 = load double, ptr %gep335, align 8, !tbaa !5
  %666 = tail call double @llvm.fmuladd.f64(double %664, double %665, double %663)
  %667 = load double, ptr %569, align 8, !tbaa !5
  %gep337 = getelementptr double, ptr %invariant.gep336, i64 %indvars.iv274
  %668 = load double, ptr %gep337, align 8, !tbaa !5
  %669 = tail call double @llvm.fmuladd.f64(double %667, double %668, double %666)
  %670 = load double, ptr %571, align 8, !tbaa !5
  %gep339 = getelementptr double, ptr %invariant.gep338, i64 %indvars.iv274
  %671 = load double, ptr %gep339, align 8, !tbaa !5
  %672 = tail call double @llvm.fmuladd.f64(double %670, double %671, double %669)
  store double %672, ptr %623, align 8, !tbaa !5
  %indvars.iv.next275 = add nuw nsw i64 %indvars.iv274, 1
  %exitcond278.not = icmp eq i64 %indvars.iv.next275, %wide.trip.count277
  br i1 %exitcond278.not, label %._crit_edge.us, label %scalar.ph697, !llvm.loop !135

._crit_edge.us:                                   ; preds = %scalar.ph697, %middle.block696
  %indvars.iv.next280 = add nsw i64 %indvars.iv279, 16
  %673 = icmp slt i64 %indvars.iv.next280, %366
  br i1 %673, label %.preheader.us, label %._crit_edge256, !llvm.loop !136

._crit_edge256:                                   ; preds = %._crit_edge.us, %.loopexit, %195
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #2

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

!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 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10}
!10 = distinct !{!10, !11}
!11 = distinct !{!11, !"LVerDomain"}
!12 = !{!13}
!13 = distinct !{!13, !11}
!14 = !{!10, !15}
!15 = distinct !{!15, !11}
!16 = !{!15}
!17 = distinct !{!17, !18, !19, !20}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!"llvm.loop.isvectorized", i32 1}
!20 = !{!"llvm.loop.unroll.runtime.disable"}
!21 = distinct !{!21, !18, !19}
!22 = !{!23}
!23 = distinct !{!23, !24}
!24 = distinct !{!24, !"LVerDomain"}
!25 = !{!26}
!26 = distinct !{!26, !24}
!27 = !{!28}
!28 = distinct !{!28, !24}
!29 = !{!26, !23, !30, !31}
!30 = distinct !{!30, !24}
!31 = distinct !{!31, !24}
!32 = !{!31}
!33 = !{!30}
!34 = distinct !{!34, !18, !19, !20}
!35 = distinct !{!35, !18, !19}
!36 = !{!37}
!37 = distinct !{!37, !38}
!38 = distinct !{!38, !"LVerDomain"}
!39 = !{!40}
!40 = distinct !{!40, !38}
!41 = !{!42}
!42 = distinct !{!42, !38}
!43 = !{!44}
!44 = distinct !{!44, !38}
!45 = !{!46}
!46 = distinct !{!46, !38}
!47 = !{!44, !42, !40, !37, !48, !49, !50, !51}
!48 = distinct !{!48, !38}
!49 = distinct !{!49, !38}
!50 = distinct !{!50, !38}
!51 = distinct !{!51, !38}
!52 = !{!51}
!53 = !{!50}
!54 = !{!49}
!55 = !{!48}
!56 = distinct !{!56, !18, !19, !20}
!57 = distinct !{!57, !18, !19}
!58 = !{!59}
!59 = distinct !{!59, !60}
!60 = distinct !{!60, !"LVerDomain"}
!61 = !{!62}
!62 = distinct !{!62, !60}
!63 = !{!64}
!64 = distinct !{!64, !60}
!65 = !{!66}
!66 = distinct !{!66, !60}
!67 = !{!68}
!68 = distinct !{!68, !60}
!69 = !{!70}
!70 = distinct !{!70, !60}
!71 = !{!72}
!72 = distinct !{!72, !60}
!73 = !{!74}
!74 = distinct !{!74, !60}
!75 = !{!76}
!76 = distinct !{!76, !60}
!77 = !{!74, !72, !70, !68, !66, !64, !62, !59, !78, !79, !80, !81, !82, !83, !84, !85}
!78 = distinct !{!78, !60}
!79 = distinct !{!79, !60}
!80 = distinct !{!80, !60}
!81 = distinct !{!81, !60}
!82 = distinct !{!82, !60}
!83 = distinct !{!83, !60}
!84 = distinct !{!84, !60}
!85 = distinct !{!85, !60}
!86 = !{!85}
!87 = !{!84}
!88 = !{!83}
!89 = !{!82}
!90 = !{!81}
!91 = !{!80}
!92 = !{!79}
!93 = !{!78}
!94 = distinct !{!94, !18, !19, !20}
!95 = distinct !{!95, !18, !19}
!96 = !{!97}
!97 = distinct !{!97, !98}
!98 = distinct !{!98, !"LVerDomain"}
!99 = !{!100}
!100 = distinct !{!100, !98}
!101 = !{!97, !102, !103, !104, !105, !106, !107, !108, !109, !110, !111, !112, !113, !114, !115, !116, !117}
!102 = distinct !{!102, !98}
!103 = distinct !{!103, !98}
!104 = distinct !{!104, !98}
!105 = distinct !{!105, !98}
!106 = distinct !{!106, !98}
!107 = distinct !{!107, !98}
!108 = distinct !{!108, !98}
!109 = distinct !{!109, !98}
!110 = distinct !{!110, !98}
!111 = distinct !{!111, !98}
!112 = distinct !{!112, !98}
!113 = distinct !{!113, !98}
!114 = distinct !{!114, !98}
!115 = distinct !{!115, !98}
!116 = distinct !{!116, !98}
!117 = distinct !{!117, !98}
!118 = !{!117}
!119 = !{!116}
!120 = !{!115}
!121 = !{!114}
!122 = !{!113}
!123 = !{!112}
!124 = !{!111}
!125 = !{!110}
!126 = !{!109}
!127 = !{!108}
!128 = !{!107}
!129 = !{!106}
!130 = !{!105}
!131 = !{!104}
!132 = !{!103}
!133 = !{!102}
!134 = distinct !{!134, !18, !19, !20}
!135 = distinct !{!135, !18, !19}
!136 = distinct !{!136, !18}


; Effective O3 passes: ADCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass