; LLVM IR from romerojosh/zefr :: src (gimmik_cpu)

; 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: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nounwind uwtable
define dso_local void @gimmik_mm_cpu_16172576604416450277_b1(i32 noundef %0, ptr noalias noundef %1, i32 noundef %2, ptr noalias noundef %3, i32 noundef %4) #2 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca double, align 8
  %12 = alloca i32, align 4
  store i32 %0, ptr %6, align 4, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !9
  store i32 %2, ptr %8, align 4, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !9
  store i32 %4, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %13

13:                                               ; preds = %571, %5
  %14 = load i32, ptr %12, align 4, !tbaa !5
  %15 = load i32, ptr %6, align 4, !tbaa !5
  %16 = icmp slt i32 %14, %15
  br i1 %16, label %18, label %17

17:                                               ; preds = %13
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  br label %574

18:                                               ; preds = %13
  %19 = load ptr, ptr %7, align 8, !tbaa !9
  %20 = load i32, ptr %12, align 4, !tbaa !5
  %21 = load i32, ptr %8, align 4, !tbaa !5
  %22 = mul nsw i32 0, %21
  %23 = add nsw i32 %20, %22
  %24 = sext i32 %23 to i64
  %25 = getelementptr inbounds double, ptr %19, i64 %24
  %26 = load double, ptr %25, align 8, !tbaa !11
  %27 = load ptr, ptr %7, align 8, !tbaa !9
  %28 = load i32, ptr %12, align 4, !tbaa !5
  %29 = load i32, ptr %8, align 4, !tbaa !5
  %30 = mul nsw i32 1, %29
  %31 = add nsw i32 %28, %30
  %32 = sext i32 %31 to i64
  %33 = getelementptr inbounds double, ptr %27, i64 %32
  %34 = load double, ptr %33, align 8, !tbaa !11
  %35 = fmul double 0x3FC0B7B21CDB9CBF, %34
  %36 = call double @llvm.fmuladd.f64(double 0x3FF2FEE52CA73390, double %26, double %35)
  %37 = load ptr, ptr %7, align 8, !tbaa !9
  %38 = load i32, ptr %12, align 4, !tbaa !5
  %39 = load i32, ptr %8, align 4, !tbaa !5
  %40 = mul nsw i32 2, %39
  %41 = add nsw i32 %38, %40
  %42 = sext i32 %41 to i64
  %43 = getelementptr inbounds double, ptr %37, i64 %42
  %44 = load double, ptr %43, align 8, !tbaa !11
  %45 = call double @llvm.fmuladd.f64(double 0x3FC0B7B21CDB9CC2, double %44, double %36)
  %46 = load ptr, ptr %7, align 8, !tbaa !9
  %47 = load i32, ptr %12, align 4, !tbaa !5
  %48 = load i32, ptr %8, align 4, !tbaa !5
  %49 = mul nsw i32 3, %48
  %50 = add nsw i32 %47, %49
  %51 = sext i32 %50 to i64
  %52 = getelementptr inbounds double, ptr %46, i64 %51
  %53 = load double, ptr %52, align 8, !tbaa !11
  %54 = call double @llvm.fmuladd.f64(double 0xBFD5E231C8DD9B2B, double %53, double %45)
  store double %54, ptr %11, align 8, !tbaa !11
  %55 = load double, ptr %11, align 8, !tbaa !11
  %56 = load ptr, ptr %9, align 8, !tbaa !9
  %57 = load i32, ptr %12, align 4, !tbaa !5
  %58 = load i32, ptr %10, align 4, !tbaa !5
  %59 = mul nsw i32 0, %58
  %60 = add nsw i32 %57, %59
  %61 = sext i32 %60 to i64
  %62 = getelementptr inbounds double, ptr %56, i64 %61
  %63 = load double, ptr %62, align 8, !tbaa !11
  %64 = fadd double %63, %55
  store double %64, ptr %62, align 8, !tbaa !11
  %65 = load ptr, ptr %7, align 8, !tbaa !9
  %66 = load i32, ptr %12, align 4, !tbaa !5
  %67 = load i32, ptr %8, align 4, !tbaa !5
  %68 = mul nsw i32 0, %67
  %69 = add nsw i32 %66, %68
  %70 = sext i32 %69 to i64
  %71 = getelementptr inbounds double, ptr %65, i64 %70
  %72 = load double, ptr %71, align 8, !tbaa !11
  %73 = load ptr, ptr %7, align 8, !tbaa !9
  %74 = load i32, ptr %12, align 4, !tbaa !5
  %75 = load i32, ptr %8, align 4, !tbaa !5
  %76 = mul nsw i32 1, %75
  %77 = add nsw i32 %74, %76
  %78 = sext i32 %77 to i64
  %79 = getelementptr inbounds double, ptr %73, i64 %78
  %80 = load double, ptr %79, align 8, !tbaa !11
  %81 = fmul double 0x3FB1B6D910F3F440, %80
  %82 = call double @llvm.fmuladd.f64(double 0xBFEF9902AFF901FD, double %72, double %81)
  %83 = load ptr, ptr %7, align 8, !tbaa !9
  %84 = load i32, ptr %12, align 4, !tbaa !5
  %85 = load i32, ptr %8, align 4, !tbaa !5
  %86 = mul nsw i32 2, %85
  %87 = add nsw i32 %84, %86
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds double, ptr %83, i64 %88
  %90 = load double, ptr %89, align 8, !tbaa !11
  %91 = call double @llvm.fmuladd.f64(double 0xBFEF9902AFF901F5, double %90, double %82)
  %92 = load ptr, ptr %7, align 8, !tbaa !9
  %93 = load i32, ptr %12, align 4, !tbaa !5
  %94 = load i32, ptr %8, align 4, !tbaa !5
  %95 = mul nsw i32 3, %94
  %96 = add nsw i32 %93, %95
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds double, ptr %92, i64 %97
  %99 = load double, ptr %98, align 8, !tbaa !11
  %100 = call double @llvm.fmuladd.f64(double 0xBFF75C040DCF5B60, double %99, double %91)
  store double %100, ptr %11, align 8, !tbaa !11
  %101 = load double, ptr %11, align 8, !tbaa !11
  %102 = load ptr, ptr %9, align 8, !tbaa !9
  %103 = load i32, ptr %12, align 4, !tbaa !5
  %104 = load i32, ptr %10, align 4, !tbaa !5
  %105 = mul nsw i32 1, %104
  %106 = add nsw i32 %103, %105
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds double, ptr %102, i64 %107
  %109 = load double, ptr %108, align 8, !tbaa !11
  %110 = fadd double %109, %101
  store double %110, ptr %108, align 8, !tbaa !11
  %111 = load ptr, ptr %7, align 8, !tbaa !9
  %112 = load i32, ptr %12, align 4, !tbaa !5
  %113 = load i32, ptr %8, align 4, !tbaa !5
  %114 = mul nsw i32 0, %113
  %115 = add nsw i32 %112, %114
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds double, ptr %111, i64 %116
  %118 = load double, ptr %117, align 8, !tbaa !11
  %119 = load ptr, ptr %7, align 8, !tbaa !9
  %120 = load i32, ptr %12, align 4, !tbaa !5
  %121 = load i32, ptr %8, align 4, !tbaa !5
  %122 = mul nsw i32 1, %121
  %123 = add nsw i32 %120, %122
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds double, ptr %119, i64 %124
  %126 = load double, ptr %125, align 8, !tbaa !11
  %127 = fmul double 0x3FC0B7B21CDB9CAD, %126
  %128 = call double @llvm.fmuladd.f64(double 0x3FC0B7B21CDB9CF8, double %118, double %127)
  %129 = load ptr, ptr %7, align 8, !tbaa !9
  %130 = load i32, ptr %12, align 4, !tbaa !5
  %131 = load i32, ptr %8, align 4, !tbaa !5
  %132 = mul nsw i32 2, %131
  %133 = add nsw i32 %130, %132
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds double, ptr %129, i64 %134
  %136 = load double, ptr %135, align 8, !tbaa !11
  %137 = call double @llvm.fmuladd.f64(double 0x3FF2FEE52CA73390, double %136, double %128)
  %138 = load ptr, ptr %7, align 8, !tbaa !9
  %139 = load i32, ptr %12, align 4, !tbaa !5
  %140 = load i32, ptr %8, align 4, !tbaa !5
  %141 = mul nsw i32 3, %140
  %142 = add nsw i32 %139, %141
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds double, ptr %138, i64 %143
  %145 = load double, ptr %144, align 8, !tbaa !11
  %146 = call double @llvm.fmuladd.f64(double 0xBFD5E231C8DD9B31, double %145, double %137)
  store double %146, ptr %11, align 8, !tbaa !11
  %147 = load double, ptr %11, align 8, !tbaa !11
  %148 = load ptr, ptr %9, align 8, !tbaa !9
  %149 = load i32, ptr %12, align 4, !tbaa !5
  %150 = load i32, ptr %10, align 4, !tbaa !5
  %151 = mul nsw i32 2, %150
  %152 = add nsw i32 %149, %151
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds double, ptr %148, i64 %153
  %155 = load double, ptr %154, align 8, !tbaa !11
  %156 = fadd double %155, %147
  store double %156, ptr %154, align 8, !tbaa !11
  %157 = load ptr, ptr %7, align 8, !tbaa !9
  %158 = load i32, ptr %12, align 4, !tbaa !5
  %159 = load i32, ptr %8, align 4, !tbaa !5
  %160 = mul nsw i32 0, %159
  %161 = add nsw i32 %158, %160
  %162 = sext i32 %161 to i64
  %163 = getelementptr inbounds double, ptr %157, i64 %162
  %164 = load double, ptr %163, align 8, !tbaa !11
  %165 = load ptr, ptr %7, align 8, !tbaa !9
  %166 = load i32, ptr %12, align 4, !tbaa !5
  %167 = load i32, ptr %8, align 4, !tbaa !5
  %168 = mul nsw i32 1, %167
  %169 = add nsw i32 %166, %168
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds double, ptr %165, i64 %170
  %172 = load double, ptr %171, align 8, !tbaa !11
  %173 = fmul double 0x3FE8D5D652C11BAC, %172
  %174 = call double @llvm.fmuladd.f64(double 0x3FE8D5D652C11BB7, double %164, double %173)
  %175 = load ptr, ptr %7, align 8, !tbaa !9
  %176 = load i32, ptr %12, align 4, !tbaa !5
  %177 = load i32, ptr %8, align 4, !tbaa !5
  %178 = mul nsw i32 2, %177
  %179 = add nsw i32 %176, %178
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds double, ptr %175, i64 %180
  %182 = load double, ptr %181, align 8, !tbaa !11
  %183 = call double @llvm.fmuladd.f64(double 0x3FE8D5D652C11BA6, double %182, double %174)
  %184 = load ptr, ptr %7, align 8, !tbaa !9
  %185 = load i32, ptr %12, align 4, !tbaa !5
  %186 = load i32, ptr %8, align 4, !tbaa !5
  %187 = mul nsw i32 3, %186
  %188 = add nsw i32 %185, %187
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds double, ptr %184, i64 %189
  %191 = load double, ptr %190, align 8, !tbaa !11
  %192 = call double @llvm.fmuladd.f64(double 0x3FF5C3575C997337, double %191, double %183)
  store double %192, ptr %11, align 8, !tbaa !11
  %193 = load double, ptr %11, align 8, !tbaa !11
  %194 = load ptr, ptr %9, align 8, !tbaa !9
  %195 = load i32, ptr %12, align 4, !tbaa !5
  %196 = load i32, ptr %10, align 4, !tbaa !5
  %197 = mul nsw i32 3, %196
  %198 = add nsw i32 %195, %197
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds double, ptr %194, i64 %199
  %201 = load double, ptr %200, align 8, !tbaa !11
  %202 = fadd double %201, %193
  store double %202, ptr %200, align 8, !tbaa !11
  %203 = load ptr, ptr %7, align 8, !tbaa !9
  %204 = load i32, ptr %12, align 4, !tbaa !5
  %205 = load i32, ptr %8, align 4, !tbaa !5
  %206 = mul nsw i32 0, %205
  %207 = add nsw i32 %204, %206
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds double, ptr %203, i64 %208
  %210 = load double, ptr %209, align 8, !tbaa !11
  %211 = load ptr, ptr %7, align 8, !tbaa !9
  %212 = load i32, ptr %12, align 4, !tbaa !5
  %213 = load i32, ptr %8, align 4, !tbaa !5
  %214 = mul nsw i32 1, %213
  %215 = add nsw i32 %212, %214
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds double, ptr %211, i64 %216
  %218 = load double, ptr %217, align 8, !tbaa !11
  %219 = fmul double 0x3FC0B7B21CDB9CDF, %218
  %220 = call double @llvm.fmuladd.f64(double 0x3FF2FEE52CA73387, double %210, double %219)
  %221 = load ptr, ptr %7, align 8, !tbaa !9
  %222 = load i32, ptr %12, align 4, !tbaa !5
  %223 = load i32, ptr %8, align 4, !tbaa !5
  %224 = mul nsw i32 2, %223
  %225 = add nsw i32 %222, %224
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds double, ptr %221, i64 %226
  %228 = load double, ptr %227, align 8, !tbaa !11
  %229 = call double @llvm.fmuladd.f64(double 0x3FC0B7B21CDB9CB0, double %228, double %220)
  %230 = load ptr, ptr %7, align 8, !tbaa !9
  %231 = load i32, ptr %12, align 4, !tbaa !5
  %232 = load i32, ptr %8, align 4, !tbaa !5
  %233 = mul nsw i32 3, %232
  %234 = add nsw i32 %231, %233
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds double, ptr %230, i64 %235
  %237 = load double, ptr %236, align 8, !tbaa !11
  %238 = call double @llvm.fmuladd.f64(double 0xBFD5E231C8DD9B28, double %237, double %229)
  store double %238, ptr %11, align 8, !tbaa !11
  %239 = load double, ptr %11, align 8, !tbaa !11
  %240 = load ptr, ptr %9, align 8, !tbaa !9
  %241 = load i32, ptr %12, align 4, !tbaa !5
  %242 = load i32, ptr %10, align 4, !tbaa !5
  %243 = mul nsw i32 4, %242
  %244 = add nsw i32 %241, %243
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds double, ptr %240, i64 %245
  %247 = load double, ptr %246, align 8, !tbaa !11
  %248 = fadd double %247, %239
  store double %248, ptr %246, align 8, !tbaa !11
  %249 = load ptr, ptr %7, align 8, !tbaa !9
  %250 = load i32, ptr %12, align 4, !tbaa !5
  %251 = load i32, ptr %8, align 4, !tbaa !5
  %252 = mul nsw i32 0, %251
  %253 = add nsw i32 %250, %252
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds double, ptr %249, i64 %254
  %256 = load double, ptr %255, align 8, !tbaa !11
  %257 = load ptr, ptr %7, align 8, !tbaa !9
  %258 = load i32, ptr %12, align 4, !tbaa !5
  %259 = load i32, ptr %8, align 4, !tbaa !5
  %260 = mul nsw i32 1, %259
  %261 = add nsw i32 %258, %260
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds double, ptr %257, i64 %262
  %264 = load double, ptr %263, align 8, !tbaa !11
  %265 = fmul double 0x3FF2FEE52CA73390, %264
  %266 = call double @llvm.fmuladd.f64(double 0x3FC0B7B21CDB9CE3, double %256, double %265)
  %267 = load ptr, ptr %7, align 8, !tbaa !9
  %268 = load i32, ptr %12, align 4, !tbaa !5
  %269 = load i32, ptr %8, align 4, !tbaa !5
  %270 = mul nsw i32 2, %269
  %271 = add nsw i32 %268, %270
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds double, ptr %267, i64 %272
  %274 = load double, ptr %273, align 8, !tbaa !11
  %275 = call double @llvm.fmuladd.f64(double 0x3FC0B7B21CDB9CBB, double %274, double %266)
  %276 = load ptr, ptr %7, align 8, !tbaa !9
  %277 = load i32, ptr %12, align 4, !tbaa !5
  %278 = load i32, ptr %8, align 4, !tbaa !5
  %279 = mul nsw i32 3, %278
  %280 = add nsw i32 %277, %279
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds double, ptr %276, i64 %281
  %283 = load double, ptr %282, align 8, !tbaa !11
  %284 = call double @llvm.fmuladd.f64(double 0xBFD5E231C8DD9B2B, double %283, double %275)
  store double %284, ptr %11, align 8, !tbaa !11
  %285 = load double, ptr %11, align 8, !tbaa !11
  %286 = load ptr, ptr %9, align 8, !tbaa !9
  %287 = load i32, ptr %12, align 4, !tbaa !5
  %288 = load i32, ptr %10, align 4, !tbaa !5
  %289 = mul nsw i32 5, %288
  %290 = add nsw i32 %287, %289
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds double, ptr %286, i64 %291
  %293 = load double, ptr %292, align 8, !tbaa !11
  %294 = fadd double %293, %285
  store double %294, ptr %292, align 8, !tbaa !11
  %295 = load ptr, ptr %7, align 8, !tbaa !9
  %296 = load i32, ptr %12, align 4, !tbaa !5
  %297 = load i32, ptr %8, align 4, !tbaa !5
  %298 = mul nsw i32 0, %297
  %299 = add nsw i32 %296, %298
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds double, ptr %295, i64 %300
  %302 = load double, ptr %301, align 8, !tbaa !11
  %303 = load ptr, ptr %7, align 8, !tbaa !9
  %304 = load i32, ptr %12, align 4, !tbaa !5
  %305 = load i32, ptr %8, align 4, !tbaa !5
  %306 = mul nsw i32 1, %305
  %307 = add nsw i32 %304, %306
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds double, ptr %303, i64 %308
  %310 = load double, ptr %309, align 8, !tbaa !11
  %311 = fmul double 0xBFEF9902AFF901FB, %310
  %312 = call double @llvm.fmuladd.f64(double 0xBFEF9902AFF901F7, double %302, double %311)
  %313 = load ptr, ptr %7, align 8, !tbaa !9
  %314 = load i32, ptr %12, align 4, !tbaa !5
  %315 = load i32, ptr %8, align 4, !tbaa !5
  %316 = mul nsw i32 2, %315
  %317 = add nsw i32 %314, %316
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds double, ptr %313, i64 %318
  %320 = load double, ptr %319, align 8, !tbaa !11
  %321 = call double @llvm.fmuladd.f64(double 0x3FB1B6D910F3F3D0, double %320, double %312)
  %322 = load ptr, ptr %7, align 8, !tbaa !9
  %323 = load i32, ptr %12, align 4, !tbaa !5
  %324 = load i32, ptr %8, align 4, !tbaa !5
  %325 = mul nsw i32 3, %324
  %326 = add nsw i32 %323, %325
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds double, ptr %322, i64 %327
  %329 = load double, ptr %328, align 8, !tbaa !11
  %330 = call double @llvm.fmuladd.f64(double 0xBFF75C040DCF5B60, double %329, double %321)
  store double %330, ptr %11, align 8, !tbaa !11
  %331 = load double, ptr %11, align 8, !tbaa !11
  %332 = load ptr, ptr %9, align 8, !tbaa !9
  %333 = load i32, ptr %12, align 4, !tbaa !5
  %334 = load i32, ptr %10, align 4, !tbaa !5
  %335 = mul nsw i32 6, %334
  %336 = add nsw i32 %333, %335
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds double, ptr %332, i64 %337
  %339 = load double, ptr %338, align 8, !tbaa !11
  %340 = fadd double %339, %331
  store double %340, ptr %338, align 8, !tbaa !11
  %341 = load ptr, ptr %7, align 8, !tbaa !9
  %342 = load i32, ptr %12, align 4, !tbaa !5
  %343 = load i32, ptr %8, align 4, !tbaa !5
  %344 = mul nsw i32 0, %343
  %345 = add nsw i32 %342, %344
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds double, ptr %341, i64 %346
  %348 = load double, ptr %347, align 8, !tbaa !11
  %349 = load ptr, ptr %7, align 8, !tbaa !9
  %350 = load i32, ptr %12, align 4, !tbaa !5
  %351 = load i32, ptr %8, align 4, !tbaa !5
  %352 = mul nsw i32 1, %351
  %353 = add nsw i32 %350, %352
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds double, ptr %349, i64 %354
  %356 = load double, ptr %355, align 8, !tbaa !11
  %357 = fmul double 0x3FE8D5D652C11BBD, %356
  %358 = call double @llvm.fmuladd.f64(double 0x3FE8D5D652C11BB8, double %348, double %357)
  %359 = load ptr, ptr %7, align 8, !tbaa !9
  %360 = load i32, ptr %12, align 4, !tbaa !5
  %361 = load i32, ptr %8, align 4, !tbaa !5
  %362 = mul nsw i32 2, %361
  %363 = add nsw i32 %360, %362
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds double, ptr %359, i64 %364
  %366 = load double, ptr %365, align 8, !tbaa !11
  %367 = call double @llvm.fmuladd.f64(double 0x3FE8D5D652C11BA9, double %366, double %358)
  %368 = load ptr, ptr %7, align 8, !tbaa !9
  %369 = load i32, ptr %12, align 4, !tbaa !5
  %370 = load i32, ptr %8, align 4, !tbaa !5
  %371 = mul nsw i32 3, %370
  %372 = add nsw i32 %369, %371
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds double, ptr %368, i64 %373
  %375 = load double, ptr %374, align 8, !tbaa !11
  %376 = call double @llvm.fmuladd.f64(double 0x3FF5C3575C997332, double %375, double %367)
  store double %376, ptr %11, align 8, !tbaa !11
  %377 = load double, ptr %11, align 8, !tbaa !11
  %378 = load ptr, ptr %9, align 8, !tbaa !9
  %379 = load i32, ptr %12, align 4, !tbaa !5
  %380 = load i32, ptr %10, align 4, !tbaa !5
  %381 = mul nsw i32 7, %380
  %382 = add nsw i32 %379, %381
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds double, ptr %378, i64 %383
  %385 = load double, ptr %384, align 8, !tbaa !11
  %386 = fadd double %385, %377
  store double %386, ptr %384, align 8, !tbaa !11
  %387 = load ptr, ptr %7, align 8, !tbaa !9
  %388 = load i32, ptr %12, align 4, !tbaa !5
  %389 = load i32, ptr %8, align 4, !tbaa !5
  %390 = mul nsw i32 0, %389
  %391 = add nsw i32 %388, %390
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds double, ptr %387, i64 %392
  %394 = load double, ptr %393, align 8, !tbaa !11
  %395 = load ptr, ptr %7, align 8, !tbaa !9
  %396 = load i32, ptr %12, align 4, !tbaa !5
  %397 = load i32, ptr %8, align 4, !tbaa !5
  %398 = mul nsw i32 1, %397
  %399 = add nsw i32 %396, %398
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds double, ptr %395, i64 %400
  %402 = load double, ptr %401, align 8, !tbaa !11
  %403 = fmul double 0xBFEF9902AFF901F4, %402
  %404 = call double @llvm.fmuladd.f64(double 0x3FB1B6D910F3F3E0, double %394, double %403)
  %405 = load ptr, ptr %7, align 8, !tbaa !9
  %406 = load i32, ptr %12, align 4, !tbaa !5
  %407 = load i32, ptr %8, align 4, !tbaa !5
  %408 = mul nsw i32 2, %407
  %409 = add nsw i32 %406, %408
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds double, ptr %405, i64 %410
  %412 = load double, ptr %411, align 8, !tbaa !11
  %413 = call double @llvm.fmuladd.f64(double 0xBFEF9902AFF901F4, double %412, double %404)
  %414 = load ptr, ptr %7, align 8, !tbaa !9
  %415 = load i32, ptr %12, align 4, !tbaa !5
  %416 = load i32, ptr %8, align 4, !tbaa !5
  %417 = mul nsw i32 3, %416
  %418 = add nsw i32 %415, %417
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds double, ptr %414, i64 %419
  %421 = load double, ptr %420, align 8, !tbaa !11
  %422 = call double @llvm.fmuladd.f64(double 0xBFF75C040DCF5B5B, double %421, double %413)
  store double %422, ptr %11, align 8, !tbaa !11
  %423 = load double, ptr %11, align 8, !tbaa !11
  %424 = load ptr, ptr %9, align 8, !tbaa !9
  %425 = load i32, ptr %12, align 4, !tbaa !5
  %426 = load i32, ptr %10, align 4, !tbaa !5
  %427 = mul nsw i32 8, %426
  %428 = add nsw i32 %425, %427
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds double, ptr %424, i64 %429
  %431 = load double, ptr %430, align 8, !tbaa !11
  %432 = fadd double %431, %423
  store double %432, ptr %430, align 8, !tbaa !11
  %433 = load ptr, ptr %7, align 8, !tbaa !9
  %434 = load i32, ptr %12, align 4, !tbaa !5
  %435 = load i32, ptr %8, align 4, !tbaa !5
  %436 = mul nsw i32 0, %435
  %437 = add nsw i32 %434, %436
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds double, ptr %433, i64 %438
  %440 = load double, ptr %439, align 8, !tbaa !11
  %441 = load ptr, ptr %7, align 8, !tbaa !9
  %442 = load i32, ptr %12, align 4, !tbaa !5
  %443 = load i32, ptr %8, align 4, !tbaa !5
  %444 = mul nsw i32 1, %443
  %445 = add nsw i32 %442, %444
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds double, ptr %441, i64 %446
  %448 = load double, ptr %447, align 8, !tbaa !11
  %449 = fmul double 0x3FF2FEE52CA7338C, %448
  %450 = call double @llvm.fmuladd.f64(double 0x3FC0B7B21CDB9CE3, double %440, double %449)
  %451 = load ptr, ptr %7, align 8, !tbaa !9
  %452 = load i32, ptr %12, align 4, !tbaa !5
  %453 = load i32, ptr %8, align 4, !tbaa !5
  %454 = mul nsw i32 2, %453
  %455 = add nsw i32 %452, %454
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds double, ptr %451, i64 %456
  %458 = load double, ptr %457, align 8, !tbaa !11
  %459 = call double @llvm.fmuladd.f64(double 0x3FC0B7B21CDB9CBB, double %458, double %450)
  %460 = load ptr, ptr %7, align 8, !tbaa !9
  %461 = load i32, ptr %12, align 4, !tbaa !5
  %462 = load i32, ptr %8, align 4, !tbaa !5
  %463 = mul nsw i32 3, %462
  %464 = add nsw i32 %461, %463
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds double, ptr %460, i64 %465
  %467 = load double, ptr %466, align 8, !tbaa !11
  %468 = call double @llvm.fmuladd.f64(double 0xBFD5E231C8DD9B34, double %467, double %459)
  store double %468, ptr %11, align 8, !tbaa !11
  %469 = load double, ptr %11, align 8, !tbaa !11
  %470 = load ptr, ptr %9, align 8, !tbaa !9
  %471 = load i32, ptr %12, align 4, !tbaa !5
  %472 = load i32, ptr %10, align 4, !tbaa !5
  %473 = mul nsw i32 9, %472
  %474 = add nsw i32 %471, %473
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds double, ptr %470, i64 %475
  %477 = load double, ptr %476, align 8, !tbaa !11
  %478 = fadd double %477, %469
  store double %478, ptr %476, align 8, !tbaa !11
  %479 = load ptr, ptr %7, align 8, !tbaa !9
  %480 = load i32, ptr %12, align 4, !tbaa !5
  %481 = load i32, ptr %8, align 4, !tbaa !5
  %482 = mul nsw i32 0, %481
  %483 = add nsw i32 %480, %482
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds double, ptr %479, i64 %484
  %486 = load double, ptr %485, align 8, !tbaa !11
  %487 = load ptr, ptr %7, align 8, !tbaa !9
  %488 = load i32, ptr %12, align 4, !tbaa !5
  %489 = load i32, ptr %8, align 4, !tbaa !5
  %490 = mul nsw i32 1, %489
  %491 = add nsw i32 %488, %490
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds double, ptr %487, i64 %492
  %494 = load double, ptr %493, align 8, !tbaa !11
  %495 = fmul double 0x3FC0B7B21CDB9CBB, %494
  %496 = call double @llvm.fmuladd.f64(double 0x3FC0B7B21CDB9CF1, double %486, double %495)
  %497 = load ptr, ptr %7, align 8, !tbaa !9
  %498 = load i32, ptr %12, align 4, !tbaa !5
  %499 = load i32, ptr %8, align 4, !tbaa !5
  %500 = mul nsw i32 2, %499
  %501 = add nsw i32 %498, %500
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds double, ptr %497, i64 %502
  %504 = load double, ptr %503, align 8, !tbaa !11
  %505 = call double @llvm.fmuladd.f64(double 0x3FF2FEE52CA73387, double %504, double %496)
  %506 = load ptr, ptr %7, align 8, !tbaa !9
  %507 = load i32, ptr %12, align 4, !tbaa !5
  %508 = load i32, ptr %8, align 4, !tbaa !5
  %509 = mul nsw i32 3, %508
  %510 = add nsw i32 %507, %509
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds double, ptr %506, i64 %511
  %513 = load double, ptr %512, align 8, !tbaa !11
  %514 = call double @llvm.fmuladd.f64(double 0xBFD5E231C8DD9B41, double %513, double %505)
  store double %514, ptr %11, align 8, !tbaa !11
  %515 = load double, ptr %11, align 8, !tbaa !11
  %516 = load ptr, ptr %9, align 8, !tbaa !9
  %517 = load i32, ptr %12, align 4, !tbaa !5
  %518 = load i32, ptr %10, align 4, !tbaa !5
  %519 = mul nsw i32 10, %518
  %520 = add nsw i32 %517, %519
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds double, ptr %516, i64 %521
  %523 = load double, ptr %522, align 8, !tbaa !11
  %524 = fadd double %523, %515
  store double %524, ptr %522, align 8, !tbaa !11
  %525 = load ptr, ptr %7, align 8, !tbaa !9
  %526 = load i32, ptr %12, align 4, !tbaa !5
  %527 = load i32, ptr %8, align 4, !tbaa !5
  %528 = mul nsw i32 0, %527
  %529 = add nsw i32 %526, %528
  %530 = sext i32 %529 to i64
  %531 = getelementptr inbounds double, ptr %525, i64 %530
  %532 = load double, ptr %531, align 8, !tbaa !11
  %533 = load ptr, ptr %7, align 8, !tbaa !9
  %534 = load i32, ptr %12, align 4, !tbaa !5
  %535 = load i32, ptr %8, align 4, !tbaa !5
  %536 = mul nsw i32 1, %535
  %537 = add nsw i32 %534, %536
  %538 = sext i32 %537 to i64
  %539 = getelementptr inbounds double, ptr %533, i64 %538
  %540 = load double, ptr %539, align 8, !tbaa !11
  %541 = fmul double 0x3FE8D5D652C11BB6, %540
  %542 = call double @llvm.fmuladd.f64(double 0x3FE8D5D652C11BB7, double %532, double %541)
  %543 = load ptr, ptr %7, align 8, !tbaa !9
  %544 = load i32, ptr %12, align 4, !tbaa !5
  %545 = load i32, ptr %8, align 4, !tbaa !5
  %546 = mul nsw i32 2, %545
  %547 = add nsw i32 %544, %546
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds double, ptr %543, i64 %548
  %550 = load double, ptr %549, align 8, !tbaa !11
  %551 = call double @llvm.fmuladd.f64(double 0x3FE8D5D652C11BA8, double %550, double %542)
  %552 = load ptr, ptr %7, align 8, !tbaa !9
  %553 = load i32, ptr %12, align 4, !tbaa !5
  %554 = load i32, ptr %8, align 4, !tbaa !5
  %555 = mul nsw i32 3, %554
  %556 = add nsw i32 %553, %555
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds double, ptr %552, i64 %557
  %559 = load double, ptr %558, align 8, !tbaa !11
  %560 = call double @llvm.fmuladd.f64(double 0x3FF5C3575C997332, double %559, double %551)
  store double %560, ptr %11, align 8, !tbaa !11
  %561 = load double, ptr %11, align 8, !tbaa !11
  %562 = load ptr, ptr %9, align 8, !tbaa !9
  %563 = load i32, ptr %12, align 4, !tbaa !5
  %564 = load i32, ptr %10, align 4, !tbaa !5
  %565 = mul nsw i32 11, %564
  %566 = add nsw i32 %563, %565
  %567 = sext i32 %566 to i64
  %568 = getelementptr inbounds double, ptr %562, i64 %567
  %569 = load double, ptr %568, align 8, !tbaa !11
  %570 = fadd double %569, %561
  store double %570, ptr %568, align 8, !tbaa !11
  br label %571

571:                                              ; preds = %18
  %572 = load i32, ptr %12, align 4, !tbaa !5
  %573 = add nsw i32 %572, 1
  store i32 %573, ptr %12, align 4, !tbaa !5
  br label %13, !llvm.loop !13

574:                                              ; preds = %17
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  ret void
}

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


; 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 @gimmik_mm_cpu_16172576604416450277_b1(i32 noundef %0, ptr noalias nocapture noundef readonly %1, i32 noundef %2, ptr noalias nocapture noundef %3, i32 noundef %4) local_unnamed_addr #1 {
  %6 = icmp sgt i32 %0, 0
  br i1 %6, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %5
  %7 = shl nsw i32 %2, 1
  %8 = mul nsw i32 %2, 3
  %9 = shl i32 %4, 1
  %10 = mul i32 %4, 3
  %11 = shl i32 %4, 2
  %12 = mul i32 %4, 5
  %13 = mul i32 %4, 6
  %14 = mul i32 %4, 7
  %15 = shl i32 %4, 3
  %16 = mul i32 %4, 9
  %17 = mul i32 %4, 10
  %18 = mul i32 %4, 11
  %19 = sext i32 %2 to i64
  %20 = sext i32 %7 to i64
  %21 = sext i32 %8 to i64
  %22 = sext i32 %4 to i64
  %23 = sext i32 %9 to i64
  %24 = sext i32 %10 to i64
  %25 = sext i32 %11 to i64
  %26 = sext i32 %12 to i64
  %27 = sext i32 %13 to i64
  %28 = sext i32 %14 to i64
  %29 = sext i32 %15 to i64
  %30 = sext i32 %16 to i64
  %31 = sext i32 %17 to i64
  %32 = sext i32 %18 to i64
  %wide.trip.count = zext nneg i32 %0 to i64
  %invariant.gep = getelementptr double, ptr %1, i64 %19
  %invariant.gep196 = getelementptr double, ptr %1, i64 %20
  %invariant.gep198 = getelementptr double, ptr %1, i64 %21
  %invariant.gep200 = getelementptr double, ptr %3, i64 %22
  %invariant.gep202 = getelementptr double, ptr %3, i64 %23
  %invariant.gep204 = getelementptr double, ptr %3, i64 %24
  %invariant.gep206 = getelementptr double, ptr %3, i64 %25
  %invariant.gep208 = getelementptr double, ptr %3, i64 %26
  %invariant.gep210 = getelementptr double, ptr %3, i64 %27
  %invariant.gep212 = getelementptr double, ptr %3, i64 %28
  %invariant.gep214 = getelementptr double, ptr %3, i64 %29
  %invariant.gep216 = getelementptr double, ptr %3, i64 %30
  %invariant.gep218 = getelementptr double, ptr %3, i64 %31
  %invariant.gep220 = getelementptr double, ptr %3, i64 %32
  %min.iters.check = icmp ult i32 %0, 14
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph
  %indvars.iv.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph ], [ %n.vec, %middle.block ]
  br label %scalar.ph

vector.memcheck:                                  ; preds = %.lr.ph
  %33 = shl nuw nsw i64 %wide.trip.count, 3
  %scevgep = getelementptr i8, ptr %3, i64 %33
  %34 = add nsw i64 %22, %wide.trip.count
  %35 = shl nsw i64 %34, 3
  %scevgep222 = getelementptr i8, ptr %3, i64 %35
  %36 = add nsw i64 %23, %wide.trip.count
  %37 = shl nsw i64 %36, 3
  %scevgep223 = getelementptr i8, ptr %3, i64 %37
  %38 = add nsw i64 %24, %wide.trip.count
  %39 = shl nsw i64 %38, 3
  %scevgep224 = getelementptr i8, ptr %3, i64 %39
  %40 = add nsw i64 %25, %wide.trip.count
  %41 = shl nsw i64 %40, 3
  %scevgep225 = getelementptr i8, ptr %3, i64 %41
  %42 = add nsw i64 %26, %wide.trip.count
  %43 = shl nsw i64 %42, 3
  %scevgep226 = getelementptr i8, ptr %3, i64 %43
  %44 = add nsw i64 %27, %wide.trip.count
  %45 = shl nsw i64 %44, 3
  %scevgep227 = getelementptr i8, ptr %3, i64 %45
  %46 = add nsw i64 %28, %wide.trip.count
  %47 = shl nsw i64 %46, 3
  %scevgep228 = getelementptr i8, ptr %3, i64 %47
  %48 = add nsw i64 %29, %wide.trip.count
  %49 = shl nsw i64 %48, 3
  %scevgep229 = getelementptr i8, ptr %3, i64 %49
  %50 = add nsw i64 %30, %wide.trip.count
  %51 = shl nsw i64 %50, 3
  %scevgep230 = getelementptr i8, ptr %3, i64 %51
  %52 = add nsw i64 %31, %wide.trip.count
  %53 = shl nsw i64 %52, 3
  %scevgep231 = getelementptr i8, ptr %3, i64 %53
  %54 = add nsw i64 %32, %wide.trip.count
  %55 = shl nsw i64 %54, 3
  %scevgep232 = getelementptr i8, ptr %3, i64 %55
  %56 = insertelement <8 x ptr> poison, ptr %scevgep222, i64 0
  %57 = insertelement <8 x ptr> %56, ptr %scevgep223, i64 1
  %58 = insertelement <8 x ptr> %57, ptr %scevgep224, i64 2
  %59 = insertelement <8 x ptr> %58, ptr %scevgep225, i64 3
  %60 = insertelement <8 x ptr> %59, ptr %scevgep226, i64 4
  %61 = insertelement <8 x ptr> %60, ptr %scevgep227, i64 5
  %62 = insertelement <8 x ptr> %61, ptr %scevgep228, i64 6
  %63 = insertelement <8 x ptr> %62, ptr %scevgep229, i64 7
  %64 = insertelement <8 x ptr> poison, ptr %3, i64 0
  %65 = shufflevector <8 x ptr> %64, <8 x ptr> poison, <8 x i32> zeroinitializer
  %66 = icmp ugt <8 x ptr> %63, %65
  %67 = insertelement <8 x ptr> poison, ptr %invariant.gep200, i64 0
  %68 = insertelement <8 x ptr> %67, ptr %invariant.gep202, i64 1
  %69 = insertelement <8 x ptr> %68, ptr %invariant.gep204, i64 2
  %70 = insertelement <8 x ptr> %69, ptr %invariant.gep206, i64 3
  %71 = insertelement <8 x ptr> %70, ptr %invariant.gep208, i64 4
  %72 = insertelement <8 x ptr> %71, ptr %invariant.gep210, i64 5
  %73 = insertelement <8 x ptr> %72, ptr %invariant.gep212, i64 6
  %74 = insertelement <8 x ptr> %73, ptr %invariant.gep214, i64 7
  %75 = insertelement <8 x ptr> poison, ptr %scevgep, i64 0
  %76 = shufflevector <8 x ptr> %75, <8 x ptr> poison, <8 x i32> zeroinitializer
  %77 = icmp ult <8 x ptr> %74, %76
  %78 = and <8 x i1> %66, %77
  %bound0352 = icmp ult ptr %invariant.gep204, %scevgep226
  %bound1353 = icmp ult ptr %invariant.gep208, %scevgep224
  %found.conflict354 = and i1 %bound0352, %bound1353
  %bound0356 = icmp ult ptr %invariant.gep204, %scevgep227
  %bound1357 = icmp ult ptr %invariant.gep210, %scevgep224
  %found.conflict358 = and i1 %bound0356, %bound1357
  %bound0360 = icmp ult ptr %invariant.gep204, %scevgep228
  %bound1361 = icmp ult ptr %invariant.gep212, %scevgep224
  %found.conflict362 = and i1 %bound0360, %bound1361
  %bound0364 = icmp ult ptr %invariant.gep204, %scevgep229
  %bound1365 = icmp ult ptr %invariant.gep214, %scevgep224
  %found.conflict366 = and i1 %bound0364, %bound1365
  %bound0368 = icmp ult ptr %invariant.gep204, %scevgep230
  %bound1369 = icmp ult ptr %invariant.gep216, %scevgep224
  %found.conflict370 = and i1 %bound0368, %bound1369
  %bound0372 = icmp ult ptr %invariant.gep204, %scevgep231
  %bound1373 = icmp ult ptr %invariant.gep218, %scevgep224
  %found.conflict374 = and i1 %bound0372, %bound1373
  %bound0376 = icmp ult ptr %invariant.gep204, %scevgep232
  %bound1377 = icmp ult ptr %invariant.gep220, %scevgep224
  %found.conflict378 = and i1 %bound0376, %bound1377
  %bound0380 = icmp ult ptr %invariant.gep206, %scevgep226
  %bound1381 = icmp ult ptr %invariant.gep208, %scevgep225
  %found.conflict382 = and i1 %bound0380, %bound1381
  %bound0392 = icmp ult ptr %invariant.gep206, %scevgep229
  %bound1393 = icmp ult ptr %invariant.gep214, %scevgep225
  %found.conflict394 = and i1 %bound0392, %bound1393
  %bound0480 = icmp ult ptr %invariant.gep216, %scevgep231
  %bound1481 = icmp ult ptr %invariant.gep218, %scevgep230
  %found.conflict482 = and i1 %bound0480, %bound1481
  %bound0484 = icmp ult ptr %invariant.gep216, %scevgep232
  %bound1485 = icmp ult ptr %invariant.gep220, %scevgep230
  %found.conflict486 = and i1 %bound0484, %bound1485
  %bound0488 = icmp ult ptr %invariant.gep218, %scevgep232
  %bound1489 = icmp ult ptr %invariant.gep220, %scevgep231
  %found.conflict490 = and i1 %bound0488, %bound1489
  %79 = bitcast <8 x i1> %78 to i8
  %80 = icmp ne i8 %79, 0
  %op.rdx518 = or i1 %found.conflict354, %found.conflict358
  %op.rdx519 = or i1 %found.conflict362, %found.conflict366
  %op.rdx520 = or i1 %found.conflict370, %found.conflict374
  %op.rdx521 = or i1 %found.conflict378, %found.conflict382
  %op.rdx542 = or i1 %op.rdx520, %op.rdx521
  %81 = insertelement <2 x ptr> poison, ptr %invariant.gep218, i64 0
  %82 = insertelement <2 x ptr> %81, ptr %invariant.gep206, i64 1
  %83 = insertelement <2 x ptr> poison, ptr %scevgep, i64 0
  %84 = insertelement <2 x ptr> %83, ptr %scevgep227, i64 1
  %85 = icmp ult <2 x ptr> %82, %84
  %86 = insertelement <2 x ptr> poison, ptr %scevgep231, i64 0
  %87 = insertelement <2 x ptr> %86, ptr %scevgep225, i64 1
  %88 = insertelement <2 x ptr> poison, ptr %3, i64 0
  %89 = insertelement <2 x ptr> %88, ptr %invariant.gep210, i64 1
  %90 = icmp ugt <2 x ptr> %87, %89
  %91 = and <2 x i1> %85, %90
  %92 = insertelement <2 x ptr> poison, ptr %invariant.gep220, i64 0
  %93 = insertelement <2 x ptr> %92, ptr %invariant.gep206, i64 1
  %94 = insertelement <2 x ptr> %84, ptr %scevgep228, i64 1
  %95 = icmp ult <2 x ptr> %93, %94
  %96 = insertelement <2 x ptr> poison, ptr %scevgep232, i64 0
  %97 = insertelement <2 x ptr> %96, ptr %scevgep225, i64 1
  %98 = insertelement <2 x ptr> %89, ptr %invariant.gep212, i64 1
  %99 = icmp ugt <2 x ptr> %97, %98
  %100 = and <2 x i1> %95, %99
  %101 = insertelement <2 x ptr> poison, ptr %invariant.gep216, i64 0
  %102 = insertelement <2 x ptr> %101, ptr %invariant.gep206, i64 1
  %103 = insertelement <2 x ptr> %84, ptr %scevgep230, i64 1
  %104 = icmp ult <2 x ptr> %102, %103
  %105 = insertelement <2 x ptr> poison, ptr %scevgep230, i64 0
  %106 = insertelement <2 x ptr> %105, ptr %scevgep225, i64 1
  %107 = insertelement <2 x ptr> %88, ptr %invariant.gep216, i64 1
  %108 = icmp ugt <2 x ptr> %106, %107
  %109 = and <2 x i1> %104, %108
  %110 = insertelement <2 x ptr> poison, ptr %invariant.gep200, i64 0
  %111 = insertelement <2 x ptr> %110, ptr %invariant.gep206, i64 1
  %112 = shufflevector <2 x ptr> %87, <2 x ptr> poison, <2 x i32> <i32 1, i32 0>
  %113 = insertelement <2 x ptr> %112, ptr %scevgep223, i64 0
  %114 = icmp ult <2 x ptr> %111, %113
  %115 = insertelement <2 x ptr> poison, ptr %invariant.gep202, i64 0
  %116 = insertelement <2 x ptr> %115, ptr %invariant.gep218, i64 1
  %117 = insertelement <2 x ptr> %87, ptr %scevgep222, i64 0
  %118 = icmp ult <2 x ptr> %116, %117
  %119 = and <2 x i1> %114, %118
  %120 = insertelement <2 x ptr> poison, ptr %scevgep224, i64 0
  %121 = insertelement <2 x ptr> %120, ptr %scevgep232, i64 1
  %122 = icmp ult <2 x ptr> %111, %121
  %123 = insertelement <2 x ptr> poison, ptr %invariant.gep204, i64 0
  %124 = insertelement <2 x ptr> %123, ptr %invariant.gep220, i64 1
  %125 = icmp ult <2 x ptr> %124, %117
  %126 = and <2 x i1> %122, %125
  %127 = insertelement <2 x ptr> %110, ptr %invariant.gep208, i64 1
  %128 = insertelement <2 x ptr> poison, ptr %scevgep225, i64 0
  %129 = insertelement <2 x ptr> %128, ptr %scevgep227, i64 1
  %130 = icmp ult <2 x ptr> %127, %129
  %131 = insertelement <2 x ptr> poison, ptr %invariant.gep206, i64 0
  %132 = insertelement <2 x ptr> %131, ptr %invariant.gep210, i64 1
  %133 = insertelement <2 x ptr> %117, ptr %scevgep226, i64 1
  %134 = icmp ult <2 x ptr> %132, %133
  %135 = and <2 x i1> %130, %134
  %136 = insertelement <2 x ptr> poison, ptr %scevgep226, i64 0
  %137 = insertelement <2 x ptr> %136, ptr %scevgep228, i64 1
  %138 = icmp ult <2 x ptr> %127, %137
  %139 = insertelement <2 x ptr> poison, ptr %invariant.gep208, i64 0
  %140 = insertelement <2 x ptr> %139, ptr %invariant.gep212, i64 1
  %141 = icmp ult <2 x ptr> %140, %133
  %142 = and <2 x i1> %138, %141
  %143 = insertelement <2 x ptr> poison, ptr %scevgep227, i64 0
  %144 = insertelement <2 x ptr> %143, ptr %scevgep229, i64 1
  %145 = icmp ult <2 x ptr> %127, %144
  %146 = insertelement <2 x ptr> poison, ptr %invariant.gep210, i64 0
  %147 = insertelement <2 x ptr> %146, ptr %invariant.gep214, i64 1
  %148 = icmp ult <2 x ptr> %147, %133
  %149 = and <2 x i1> %145, %148
  %150 = insertelement <2 x ptr> poison, ptr %scevgep228, i64 0
  %151 = insertelement <2 x ptr> %150, ptr %scevgep230, i64 1
  %152 = icmp ult <2 x ptr> %127, %151
  %153 = insertelement <2 x ptr> poison, ptr %invariant.gep212, i64 0
  %154 = insertelement <2 x ptr> %153, ptr %invariant.gep216, i64 1
  %155 = icmp ult <2 x ptr> %154, %133
  %156 = and <2 x i1> %152, %155
  %157 = insertelement <2 x ptr> poison, ptr %scevgep229, i64 0
  %158 = insertelement <2 x ptr> %157, ptr %scevgep231, i64 1
  %159 = icmp ult <2 x ptr> %127, %158
  %160 = insertelement <2 x ptr> poison, ptr %invariant.gep214, i64 0
  %161 = insertelement <2 x ptr> %160, ptr %invariant.gep218, i64 1
  %162 = icmp ult <2 x ptr> %161, %133
  %163 = and <2 x i1> %159, %162
  %164 = insertelement <2 x ptr> %105, ptr %scevgep232, i64 1
  %165 = icmp ult <2 x ptr> %127, %164
  %166 = insertelement <2 x ptr> %101, ptr %invariant.gep220, i64 1
  %167 = icmp ult <2 x ptr> %166, %133
  %168 = and <2 x i1> %165, %167
  %169 = insertelement <2 x ptr> %110, ptr %invariant.gep210, i64 1
  %170 = insertelement <2 x ptr> %86, ptr %scevgep228, i64 1
  %171 = icmp ult <2 x ptr> %169, %170
  %172 = insertelement <2 x ptr> %81, ptr %invariant.gep212, i64 1
  %173 = insertelement <2 x ptr> %84, ptr %scevgep222, i64 0
  %174 = icmp ult <2 x ptr> %172, %173
  %175 = and <2 x i1> %171, %174
  %176 = insertelement <2 x ptr> %96, ptr %scevgep229, i64 1
  %177 = icmp ult <2 x ptr> %169, %176
  %178 = insertelement <2 x ptr> %92, ptr %invariant.gep214, i64 1
  %179 = icmp ult <2 x ptr> %178, %173
  %180 = and <2 x i1> %177, %179
  %181 = insertelement <2 x ptr> %115, ptr %invariant.gep210, i64 1
  %182 = insertelement <2 x ptr> %120, ptr %scevgep230, i64 1
  %183 = icmp ult <2 x ptr> %181, %182
  %184 = insertelement <2 x ptr> %123, ptr %invariant.gep216, i64 1
  %185 = insertelement <2 x ptr> %84, ptr %scevgep223, i64 0
  %186 = icmp ult <2 x ptr> %184, %185
  %187 = and <2 x i1> %183, %186
  %188 = icmp ult <2 x ptr> %181, %112
  %189 = shufflevector <2 x ptr> %82, <2 x ptr> poison, <2 x i32> <i32 1, i32 0>
  %190 = icmp ult <2 x ptr> %189, %185
  %191 = and <2 x i1> %188, %190
  %192 = insertelement <2 x ptr> %136, ptr %scevgep232, i64 1
  %193 = icmp ult <2 x ptr> %181, %192
  %194 = insertelement <2 x ptr> %139, ptr %invariant.gep220, i64 1
  %195 = icmp ult <2 x ptr> %194, %185
  %196 = and <2 x i1> %193, %195
  %197 = insertelement <2 x ptr> %115, ptr %invariant.gep212, i64 1
  %198 = icmp ult <2 x ptr> %197, %144
  %199 = insertelement <2 x ptr> %94, ptr %scevgep223, i64 0
  %200 = icmp ult <2 x ptr> %147, %199
  %201 = and <2 x i1> %198, %200
  %202 = icmp ult <2 x ptr> %197, %151
  %203 = icmp ult <2 x ptr> %154, %199
  %204 = and <2 x i1> %202, %203
  %205 = icmp ult <2 x ptr> %197, %158
  %206 = icmp ult <2 x ptr> %161, %199
  %207 = and <2 x i1> %205, %206
  %208 = icmp ult <2 x ptr> %197, %164
  %209 = icmp ult <2 x ptr> %166, %199
  %210 = and <2 x i1> %208, %209
  %211 = insertelement <2 x ptr> %115, ptr %invariant.gep214, i64 1
  %212 = insertelement <2 x ptr> %86, ptr %scevgep230, i64 1
  %213 = icmp ult <2 x ptr> %211, %212
  %214 = insertelement <2 x ptr> %81, ptr %invariant.gep216, i64 1
  %215 = insertelement <2 x ptr> %144, ptr %scevgep223, i64 0
  %216 = icmp ult <2 x ptr> %214, %215
  %217 = and <2 x i1> %213, %216
  %218 = insertelement <2 x ptr> %96, ptr %scevgep231, i64 1
  %219 = icmp ult <2 x ptr> %211, %218
  %220 = insertelement <2 x ptr> %92, ptr %invariant.gep218, i64 1
  %221 = icmp ult <2 x ptr> %220, %215
  %222 = and <2 x i1> %219, %221
  %223 = insertelement <2 x ptr> %160, ptr %invariant.gep204, i64 1
  %224 = icmp ult <2 x ptr> %223, %97
  %225 = insertelement <2 x ptr> %157, ptr %scevgep224, i64 1
  %226 = icmp ult <2 x ptr> %93, %225
  %227 = and <2 x i1> %224, %226
  %228 = shufflevector <2 x i1> %227, <2 x i1> poison, <2 x i32> <i32 1, i32 0>
  %229 = or <2 x i1> %91, %100
  %230 = insertelement <2 x i1> poison, i1 %80, i64 0
  %231 = insertelement <2 x i1> %230, i1 %found.conflict394, i64 1
  %232 = or <2 x i1> %231, %109
  %233 = or <2 x i1> %119, %126
  %234 = or <2 x i1> %135, %142
  %235 = or <2 x i1> %149, %156
  %236 = or <2 x i1> %163, %168
  %237 = or <2 x i1> %175, %180
  %238 = or <2 x i1> %187, %191
  %239 = or <2 x i1> %196, %201
  %240 = or <2 x i1> %204, %207
  %241 = or <2 x i1> %210, %217
  %242 = or <2 x i1> %222, %228
  %243 = insertelement <2 x i1> poison, i1 %op.rdx518, i64 0
  %244 = insertelement <2 x i1> %243, i1 %found.conflict482, i64 1
  %245 = insertelement <2 x i1> poison, i1 %op.rdx519, i64 0
  %246 = insertelement <2 x i1> %245, i1 %found.conflict486, i64 1
  %247 = or <2 x i1> %244, %246
  %248 = or <2 x i1> %229, %232
  %249 = or <2 x i1> %233, %234
  %250 = or <2 x i1> %235, %236
  %251 = or <2 x i1> %237, %238
  %252 = or <2 x i1> %239, %240
  %253 = or <2 x i1> %241, %242
  %254 = insertelement <2 x i1> poison, i1 %op.rdx542, i64 0
  %255 = insertelement <2 x i1> %254, i1 %found.conflict490, i64 1
  %256 = or <2 x i1> %247, %255
  %257 = or <2 x i1> %248, %249
  %258 = or <2 x i1> %250, %251
  %259 = or <2 x i1> %252, %253
  %260 = or <2 x i1> %257, %258
  %261 = or <2 x i1> %259, %256
  %262 = or <2 x i1> %260, %261
  %shift = shufflevector <2 x i1> %262, <2 x i1> poison, <2 x i32> <i32 1, i32 poison>
  %263 = or <2 x i1> %262, %shift
  %op.rdx563 = extractelement <2 x i1> %263, i64 0
  br i1 %op.rdx563, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %wide.trip.count, 2147483646
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %264 = getelementptr inbounds double, ptr %1, i64 %index
  %wide.load = load <2 x double>, ptr %264, align 8, !tbaa !5
  %265 = getelementptr double, ptr %invariant.gep, i64 %index
  %wide.load492 = load <2 x double>, ptr %265, align 8, !tbaa !5
  %266 = fmul <2 x double> %wide.load492, <double 0x3FC0B7B21CDB9CBF, double 0x3FC0B7B21CDB9CBF>
  %267 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0x3FF2FEE52CA73390, double 0x3FF2FEE52CA73390>, <2 x double> %266)
  %268 = getelementptr double, ptr %invariant.gep196, i64 %index
  %wide.load493 = load <2 x double>, ptr %268, align 8, !tbaa !5
  %269 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load493, <2 x double> <double 0x3FC0B7B21CDB9CC2, double 0x3FC0B7B21CDB9CC2>, <2 x double> %267)
  %270 = getelementptr double, ptr %invariant.gep198, i64 %index
  %wide.load494 = load <2 x double>, ptr %270, align 8, !tbaa !5
  %271 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load494, <2 x double> <double 0xBFD5E231C8DD9B2B, double 0xBFD5E231C8DD9B2B>, <2 x double> %269)
  %272 = getelementptr inbounds double, ptr %3, i64 %index
  %wide.load495 = load <2 x double>, ptr %272, align 8, !tbaa !5, !alias.scope !9, !noalias !12
  %273 = fadd <2 x double> %wide.load495, %271
  store <2 x double> %273, ptr %272, align 8, !tbaa !5, !alias.scope !9, !noalias !12
  %274 = fmul <2 x double> %wide.load492, <double 0x3FB1B6D910F3F440, double 0x3FB1B6D910F3F440>
  %275 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0xBFEF9902AFF901FD, double 0xBFEF9902AFF901FD>, <2 x double> %274)
  %276 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load493, <2 x double> <double 0xBFEF9902AFF901F5, double 0xBFEF9902AFF901F5>, <2 x double> %275)
  %277 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load494, <2 x double> <double 0xBFF75C040DCF5B60, double 0xBFF75C040DCF5B60>, <2 x double> %276)
  %278 = getelementptr double, ptr %invariant.gep200, i64 %index
  %wide.load496 = load <2 x double>, ptr %278, align 8, !tbaa !5, !alias.scope !24, !noalias !25
  %279 = fadd <2 x double> %277, %wide.load496
  store <2 x double> %279, ptr %278, align 8, !tbaa !5, !alias.scope !24, !noalias !25
  %280 = fmul <2 x double> %wide.load492, <double 0x3FC0B7B21CDB9CAD, double 0x3FC0B7B21CDB9CAD>
  %281 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0x3FC0B7B21CDB9CF8, double 0x3FC0B7B21CDB9CF8>, <2 x double> %280)
  %282 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load493, <2 x double> <double 0x3FF2FEE52CA73390, double 0x3FF2FEE52CA73390>, <2 x double> %281)
  %283 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load494, <2 x double> <double 0xBFD5E231C8DD9B31, double 0xBFD5E231C8DD9B31>, <2 x double> %282)
  %284 = getelementptr double, ptr %invariant.gep202, i64 %index
  %wide.load497 = load <2 x double>, ptr %284, align 8, !tbaa !5, !alias.scope !26, !noalias !27
  %285 = fadd <2 x double> %283, %wide.load497
  store <2 x double> %285, ptr %284, align 8, !tbaa !5, !alias.scope !26, !noalias !27
  %286 = fmul <2 x double> %wide.load492, <double 0x3FE8D5D652C11BAC, double 0x3FE8D5D652C11BAC>
  %287 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0x3FE8D5D652C11BB7, double 0x3FE8D5D652C11BB7>, <2 x double> %286)
  %288 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load493, <2 x double> <double 0x3FE8D5D652C11BA6, double 0x3FE8D5D652C11BA6>, <2 x double> %287)
  %289 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load494, <2 x double> <double 0x3FF5C3575C997337, double 0x3FF5C3575C997337>, <2 x double> %288)
  %290 = getelementptr double, ptr %invariant.gep204, i64 %index
  %wide.load498 = load <2 x double>, ptr %290, align 8, !tbaa !5, !alias.scope !28, !noalias !29
  %291 = fadd <2 x double> %289, %wide.load498
  store <2 x double> %291, ptr %290, align 8, !tbaa !5, !alias.scope !28, !noalias !29
  %292 = fmul <2 x double> %wide.load492, <double 0x3FC0B7B21CDB9CDF, double 0x3FC0B7B21CDB9CDF>
  %293 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0x3FF2FEE52CA73387, double 0x3FF2FEE52CA73387>, <2 x double> %292)
  %294 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load493, <2 x double> <double 0x3FC0B7B21CDB9CB0, double 0x3FC0B7B21CDB9CB0>, <2 x double> %293)
  %295 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load494, <2 x double> <double 0xBFD5E231C8DD9B28, double 0xBFD5E231C8DD9B28>, <2 x double> %294)
  %296 = getelementptr double, ptr %invariant.gep206, i64 %index
  %wide.load499 = load <2 x double>, ptr %296, align 8, !tbaa !5, !alias.scope !30, !noalias !31
  %297 = fadd <2 x double> %295, %wide.load499
  store <2 x double> %297, ptr %296, align 8, !tbaa !5, !alias.scope !30, !noalias !31
  %298 = fmul <2 x double> %wide.load492, <double 0x3FF2FEE52CA73390, double 0x3FF2FEE52CA73390>
  %299 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0x3FC0B7B21CDB9CE3, double 0x3FC0B7B21CDB9CE3>, <2 x double> %298)
  %300 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load493, <2 x double> <double 0x3FC0B7B21CDB9CBB, double 0x3FC0B7B21CDB9CBB>, <2 x double> %299)
  %301 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load494, <2 x double> <double 0xBFD5E231C8DD9B2B, double 0xBFD5E231C8DD9B2B>, <2 x double> %300)
  %302 = getelementptr double, ptr %invariant.gep208, i64 %index
  %wide.load500 = load <2 x double>, ptr %302, align 8, !tbaa !5, !alias.scope !32, !noalias !33
  %303 = fadd <2 x double> %301, %wide.load500
  store <2 x double> %303, ptr %302, align 8, !tbaa !5, !alias.scope !32, !noalias !33
  %304 = fmul <2 x double> %wide.load492, <double 0xBFEF9902AFF901FB, double 0xBFEF9902AFF901FB>
  %305 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0xBFEF9902AFF901F7, double 0xBFEF9902AFF901F7>, <2 x double> %304)
  %306 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load493, <2 x double> <double 0x3FB1B6D910F3F3D0, double 0x3FB1B6D910F3F3D0>, <2 x double> %305)
  %307 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load494, <2 x double> <double 0xBFF75C040DCF5B60, double 0xBFF75C040DCF5B60>, <2 x double> %306)
  %308 = getelementptr double, ptr %invariant.gep210, i64 %index
  %wide.load501 = load <2 x double>, ptr %308, align 8, !tbaa !5, !alias.scope !34, !noalias !35
  %309 = fadd <2 x double> %307, %wide.load501
  store <2 x double> %309, ptr %308, align 8, !tbaa !5, !alias.scope !34, !noalias !35
  %310 = fmul <2 x double> %wide.load492, <double 0x3FE8D5D652C11BBD, double 0x3FE8D5D652C11BBD>
  %311 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0x3FE8D5D652C11BB8, double 0x3FE8D5D652C11BB8>, <2 x double> %310)
  %312 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load493, <2 x double> <double 0x3FE8D5D652C11BA9, double 0x3FE8D5D652C11BA9>, <2 x double> %311)
  %313 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load494, <2 x double> <double 0x3FF5C3575C997332, double 0x3FF5C3575C997332>, <2 x double> %312)
  %314 = getelementptr double, ptr %invariant.gep212, i64 %index
  %wide.load502 = load <2 x double>, ptr %314, align 8, !tbaa !5, !alias.scope !36, !noalias !37
  %315 = fadd <2 x double> %313, %wide.load502
  store <2 x double> %315, ptr %314, align 8, !tbaa !5, !alias.scope !36, !noalias !37
  %316 = fmul <2 x double> %wide.load492, <double 0xBFEF9902AFF901F4, double 0xBFEF9902AFF901F4>
  %317 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0x3FB1B6D910F3F3E0, double 0x3FB1B6D910F3F3E0>, <2 x double> %316)
  %318 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load493, <2 x double> <double 0xBFEF9902AFF901F4, double 0xBFEF9902AFF901F4>, <2 x double> %317)
  %319 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load494, <2 x double> <double 0xBFF75C040DCF5B5B, double 0xBFF75C040DCF5B5B>, <2 x double> %318)
  %320 = getelementptr double, ptr %invariant.gep214, i64 %index
  %wide.load503 = load <2 x double>, ptr %320, align 8, !tbaa !5, !alias.scope !38, !noalias !39
  %321 = fadd <2 x double> %319, %wide.load503
  store <2 x double> %321, ptr %320, align 8, !tbaa !5, !alias.scope !38, !noalias !39
  %322 = fmul <2 x double> %wide.load492, <double 0x3FF2FEE52CA7338C, double 0x3FF2FEE52CA7338C>
  %323 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0x3FC0B7B21CDB9CE3, double 0x3FC0B7B21CDB9CE3>, <2 x double> %322)
  %324 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load493, <2 x double> <double 0x3FC0B7B21CDB9CBB, double 0x3FC0B7B21CDB9CBB>, <2 x double> %323)
  %325 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load494, <2 x double> <double 0xBFD5E231C8DD9B34, double 0xBFD5E231C8DD9B34>, <2 x double> %324)
  %326 = getelementptr double, ptr %invariant.gep216, i64 %index
  %wide.load504 = load <2 x double>, ptr %326, align 8, !tbaa !5, !alias.scope !40, !noalias !41
  %327 = fadd <2 x double> %325, %wide.load504
  store <2 x double> %327, ptr %326, align 8, !tbaa !5, !alias.scope !40, !noalias !41
  %328 = fmul <2 x double> %wide.load492, <double 0x3FC0B7B21CDB9CBB, double 0x3FC0B7B21CDB9CBB>
  %329 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0x3FC0B7B21CDB9CF1, double 0x3FC0B7B21CDB9CF1>, <2 x double> %328)
  %330 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load493, <2 x double> <double 0x3FF2FEE52CA73387, double 0x3FF2FEE52CA73387>, <2 x double> %329)
  %331 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load494, <2 x double> <double 0xBFD5E231C8DD9B41, double 0xBFD5E231C8DD9B41>, <2 x double> %330)
  %332 = getelementptr double, ptr %invariant.gep218, i64 %index
  %wide.load505 = load <2 x double>, ptr %332, align 8, !tbaa !5, !alias.scope !42, !noalias !43
  %333 = fadd <2 x double> %331, %wide.load505
  store <2 x double> %333, ptr %332, align 8, !tbaa !5, !alias.scope !42, !noalias !43
  %334 = fmul <2 x double> %wide.load492, <double 0x3FE8D5D652C11BB6, double 0x3FE8D5D652C11BB6>
  %335 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0x3FE8D5D652C11BB7, double 0x3FE8D5D652C11BB7>, <2 x double> %334)
  %336 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load493, <2 x double> <double 0x3FE8D5D652C11BA8, double 0x3FE8D5D652C11BA8>, <2 x double> %335)
  %337 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load494, <2 x double> <double 0x3FF5C3575C997332, double 0x3FF5C3575C997332>, <2 x double> %336)
  %338 = getelementptr double, ptr %invariant.gep220, i64 %index
  %wide.load506 = load <2 x double>, ptr %338, align 8, !tbaa !5, !alias.scope !43
  %339 = fadd <2 x double> %337, %wide.load506
  store <2 x double> %339, ptr %338, align 8, !tbaa !5, !alias.scope !43
  %index.next = add nuw i64 %index, 2
  %340 = icmp eq i64 %index.next, %n.vec
  br i1 %340, label %middle.block, label %vector.body, !llvm.loop !44

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

._crit_edge:                                      ; preds = %scalar.ph, %middle.block, %5
  ret void

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %341 = getelementptr inbounds double, ptr %1, i64 %indvars.iv
  %342 = load double, ptr %341, align 8, !tbaa !5
  %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv
  %343 = load double, ptr %gep, align 8, !tbaa !5
  %344 = fmul double %343, 0x3FC0B7B21CDB9CBF
  %345 = tail call double @llvm.fmuladd.f64(double %342, double 0x3FF2FEE52CA73390, double %344)
  %gep197 = getelementptr double, ptr %invariant.gep196, i64 %indvars.iv
  %346 = load double, ptr %gep197, align 8, !tbaa !5
  %347 = tail call double @llvm.fmuladd.f64(double %346, double 0x3FC0B7B21CDB9CC2, double %345)
  %gep199 = getelementptr double, ptr %invariant.gep198, i64 %indvars.iv
  %348 = load double, ptr %gep199, align 8, !tbaa !5
  %349 = tail call double @llvm.fmuladd.f64(double %348, double 0xBFD5E231C8DD9B2B, double %347)
  %350 = getelementptr inbounds double, ptr %3, i64 %indvars.iv
  %351 = load double, ptr %350, align 8, !tbaa !5
  %352 = fadd double %351, %349
  store double %352, ptr %350, align 8, !tbaa !5
  %353 = fmul double %343, 0x3FB1B6D910F3F440
  %354 = tail call double @llvm.fmuladd.f64(double %342, double 0xBFEF9902AFF901FD, double %353)
  %355 = tail call double @llvm.fmuladd.f64(double %346, double 0xBFEF9902AFF901F5, double %354)
  %356 = tail call double @llvm.fmuladd.f64(double %348, double 0xBFF75C040DCF5B60, double %355)
  %gep201 = getelementptr double, ptr %invariant.gep200, i64 %indvars.iv
  %357 = load double, ptr %gep201, align 8, !tbaa !5
  %358 = fadd double %356, %357
  store double %358, ptr %gep201, align 8, !tbaa !5
  %359 = fmul double %343, 0x3FC0B7B21CDB9CAD
  %360 = tail call double @llvm.fmuladd.f64(double %342, double 0x3FC0B7B21CDB9CF8, double %359)
  %361 = tail call double @llvm.fmuladd.f64(double %346, double 0x3FF2FEE52CA73390, double %360)
  %362 = tail call double @llvm.fmuladd.f64(double %348, double 0xBFD5E231C8DD9B31, double %361)
  %gep203 = getelementptr double, ptr %invariant.gep202, i64 %indvars.iv
  %363 = load double, ptr %gep203, align 8, !tbaa !5
  %364 = fadd double %362, %363
  store double %364, ptr %gep203, align 8, !tbaa !5
  %365 = fmul double %343, 0x3FE8D5D652C11BAC
  %366 = tail call double @llvm.fmuladd.f64(double %342, double 0x3FE8D5D652C11BB7, double %365)
  %367 = tail call double @llvm.fmuladd.f64(double %346, double 0x3FE8D5D652C11BA6, double %366)
  %368 = tail call double @llvm.fmuladd.f64(double %348, double 0x3FF5C3575C997337, double %367)
  %gep205 = getelementptr double, ptr %invariant.gep204, i64 %indvars.iv
  %369 = load double, ptr %gep205, align 8, !tbaa !5
  %370 = fadd double %368, %369
  store double %370, ptr %gep205, align 8, !tbaa !5
  %371 = fmul double %343, 0x3FC0B7B21CDB9CDF
  %372 = tail call double @llvm.fmuladd.f64(double %342, double 0x3FF2FEE52CA73387, double %371)
  %373 = tail call double @llvm.fmuladd.f64(double %346, double 0x3FC0B7B21CDB9CB0, double %372)
  %374 = tail call double @llvm.fmuladd.f64(double %348, double 0xBFD5E231C8DD9B28, double %373)
  %gep207 = getelementptr double, ptr %invariant.gep206, i64 %indvars.iv
  %375 = load double, ptr %gep207, align 8, !tbaa !5
  %376 = fadd double %374, %375
  store double %376, ptr %gep207, align 8, !tbaa !5
  %377 = fmul double %343, 0x3FF2FEE52CA73390
  %378 = tail call double @llvm.fmuladd.f64(double %342, double 0x3FC0B7B21CDB9CE3, double %377)
  %379 = tail call double @llvm.fmuladd.f64(double %346, double 0x3FC0B7B21CDB9CBB, double %378)
  %380 = tail call double @llvm.fmuladd.f64(double %348, double 0xBFD5E231C8DD9B2B, double %379)
  %gep209 = getelementptr double, ptr %invariant.gep208, i64 %indvars.iv
  %381 = load double, ptr %gep209, align 8, !tbaa !5
  %382 = fadd double %380, %381
  store double %382, ptr %gep209, align 8, !tbaa !5
  %383 = fmul double %343, 0xBFEF9902AFF901FB
  %384 = tail call double @llvm.fmuladd.f64(double %342, double 0xBFEF9902AFF901F7, double %383)
  %385 = tail call double @llvm.fmuladd.f64(double %346, double 0x3FB1B6D910F3F3D0, double %384)
  %386 = tail call double @llvm.fmuladd.f64(double %348, double 0xBFF75C040DCF5B60, double %385)
  %gep211 = getelementptr double, ptr %invariant.gep210, i64 %indvars.iv
  %387 = load double, ptr %gep211, align 8, !tbaa !5
  %388 = fadd double %386, %387
  store double %388, ptr %gep211, align 8, !tbaa !5
  %389 = fmul double %343, 0x3FE8D5D652C11BBD
  %390 = tail call double @llvm.fmuladd.f64(double %342, double 0x3FE8D5D652C11BB8, double %389)
  %391 = tail call double @llvm.fmuladd.f64(double %346, double 0x3FE8D5D652C11BA9, double %390)
  %392 = tail call double @llvm.fmuladd.f64(double %348, double 0x3FF5C3575C997332, double %391)
  %gep213 = getelementptr double, ptr %invariant.gep212, i64 %indvars.iv
  %393 = load double, ptr %gep213, align 8, !tbaa !5
  %394 = fadd double %392, %393
  store double %394, ptr %gep213, align 8, !tbaa !5
  %395 = fmul double %343, 0xBFEF9902AFF901F4
  %396 = tail call double @llvm.fmuladd.f64(double %342, double 0x3FB1B6D910F3F3E0, double %395)
  %397 = tail call double @llvm.fmuladd.f64(double %346, double 0xBFEF9902AFF901F4, double %396)
  %398 = tail call double @llvm.fmuladd.f64(double %348, double 0xBFF75C040DCF5B5B, double %397)
  %gep215 = getelementptr double, ptr %invariant.gep214, i64 %indvars.iv
  %399 = load double, ptr %gep215, align 8, !tbaa !5
  %400 = fadd double %398, %399
  store double %400, ptr %gep215, align 8, !tbaa !5
  %401 = fmul double %343, 0x3FF2FEE52CA7338C
  %402 = tail call double @llvm.fmuladd.f64(double %342, double 0x3FC0B7B21CDB9CE3, double %401)
  %403 = tail call double @llvm.fmuladd.f64(double %346, double 0x3FC0B7B21CDB9CBB, double %402)
  %404 = tail call double @llvm.fmuladd.f64(double %348, double 0xBFD5E231C8DD9B34, double %403)
  %gep217 = getelementptr double, ptr %invariant.gep216, i64 %indvars.iv
  %405 = load double, ptr %gep217, align 8, !tbaa !5
  %406 = fadd double %404, %405
  store double %406, ptr %gep217, align 8, !tbaa !5
  %407 = fmul double %343, 0x3FC0B7B21CDB9CBB
  %408 = tail call double @llvm.fmuladd.f64(double %342, double 0x3FC0B7B21CDB9CF1, double %407)
  %409 = tail call double @llvm.fmuladd.f64(double %346, double 0x3FF2FEE52CA73387, double %408)
  %410 = tail call double @llvm.fmuladd.f64(double %348, double 0xBFD5E231C8DD9B41, double %409)
  %gep219 = getelementptr double, ptr %invariant.gep218, i64 %indvars.iv
  %411 = load double, ptr %gep219, align 8, !tbaa !5
  %412 = fadd double %410, %411
  store double %412, ptr %gep219, align 8, !tbaa !5
  %413 = fmul double %343, 0x3FE8D5D652C11BB6
  %414 = tail call double @llvm.fmuladd.f64(double %342, double 0x3FE8D5D652C11BB7, double %413)
  %415 = tail call double @llvm.fmuladd.f64(double %346, double 0x3FE8D5D652C11BA8, double %414)
  %416 = tail call double @llvm.fmuladd.f64(double %348, double 0x3FF5C3575C997332, double %415)
  %gep221 = getelementptr double, ptr %invariant.gep220, i64 %indvars.iv
  %417 = load double, ptr %gep221, align 8, !tbaa !5
  %418 = fadd double %416, %417
  store double %418, ptr %gep221, align 8, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %scalar.ph, !llvm.loop !48
}

; 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, !14, !15, !16, !17, !18, !19, !20, !21, !22, !23}
!13 = distinct !{!13, !11}
!14 = distinct !{!14, !11}
!15 = distinct !{!15, !11}
!16 = distinct !{!16, !11}
!17 = distinct !{!17, !11}
!18 = distinct !{!18, !11}
!19 = distinct !{!19, !11}
!20 = distinct !{!20, !11}
!21 = distinct !{!21, !11}
!22 = distinct !{!22, !11}
!23 = distinct !{!23, !11}
!24 = !{!13}
!25 = !{!14, !15, !16, !17, !18, !19, !20, !21, !22, !23}
!26 = !{!14}
!27 = !{!15, !16, !17, !18, !19, !20, !21, !22, !23}
!28 = !{!15}
!29 = !{!16, !17, !18, !19, !20, !21, !22, !23}
!30 = !{!16}
!31 = !{!17, !18, !19, !20, !21, !22, !23}
!32 = !{!17}
!33 = !{!18, !19, !20, !21, !22, !23}
!34 = !{!18}
!35 = !{!19, !20, !21, !22, !23}
!36 = !{!19}
!37 = !{!20, !21, !22, !23}
!38 = !{!20}
!39 = !{!21, !22, !23}
!40 = !{!21}
!41 = !{!22, !23}
!42 = !{!22}
!43 = !{!23}
!44 = distinct !{!44, !45, !46, !47}
!45 = !{!"llvm.loop.mustprogress"}
!46 = !{!"llvm.loop.isvectorized", i32 1}
!47 = !{!"llvm.loop.unroll.runtime.disable"}
!48 = distinct !{!48, !45, !46}


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