; 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_10573732835545233920_b0(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 = %483, %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 %486

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 0xBFE3C6EF372FE912, %34
  %36 = call double @llvm.fmuladd.f64(double 0xBFE3C6EF372FE90E, 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 0xBFE3C6EF372FE910, 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 0x4002E83901A94BB0, double %53, double %45)
  %55 = load ptr, ptr %7, align 8, !tbaa !9
  %56 = load i32, ptr %12, align 4, !tbaa !5
  %57 = load i32, ptr %8, align 4, !tbaa !5
  %58 = mul nsw i32 4, %57
  %59 = add nsw i32 %56, %58
  %60 = sext i32 %59 to i64
  %61 = getelementptr inbounds double, ptr %55, i64 %60
  %62 = load double, ptr %61, align 8, !tbaa !11
  %63 = call double @llvm.fmuladd.f64(double 0x3FC04C1661157416, double %62, double %54)
  %64 = load ptr, ptr %7, align 8, !tbaa !9
  %65 = load i32, ptr %12, align 4, !tbaa !5
  %66 = load i32, ptr %8, align 4, !tbaa !5
  %67 = mul nsw i32 5, %66
  %68 = add nsw i32 %65, %67
  %69 = sext i32 %68 to i64
  %70 = getelementptr inbounds double, ptr %64, i64 %69
  %71 = load double, ptr %70, align 8, !tbaa !11
  %72 = call double @llvm.fmuladd.f64(double 0x3FC04C1661157424, double %71, double %63)
  %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 6, %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 = call double @llvm.fmuladd.f64(double 0x3FC04C166115740B, double %80, double %72)
  %82 = load ptr, ptr %7, align 8, !tbaa !9
  %83 = load i32, ptr %12, align 4, !tbaa !5
  %84 = load i32, ptr %8, align 4, !tbaa !5
  %85 = mul nsw i32 7, %84
  %86 = add nsw i32 %83, %85
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds double, ptr %82, i64 %87
  %89 = load double, ptr %88, align 8, !tbaa !11
  %90 = call double @llvm.fmuladd.f64(double 0x4002E83901A94BB2, double %89, double %81)
  %91 = load ptr, ptr %7, align 8, !tbaa !9
  %92 = load i32, ptr %12, align 4, !tbaa !5
  %93 = load i32, ptr %8, align 4, !tbaa !5
  %94 = mul nsw i32 8, %93
  %95 = add nsw i32 %92, %94
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds double, ptr %91, i64 %96
  %98 = load double, ptr %97, align 8, !tbaa !11
  %99 = call double @llvm.fmuladd.f64(double 0x3FC04C1661157419, double %98, double %90)
  %100 = load ptr, ptr %7, align 8, !tbaa !9
  %101 = load i32, ptr %12, align 4, !tbaa !5
  %102 = load i32, ptr %8, align 4, !tbaa !5
  %103 = mul nsw i32 9, %102
  %104 = add nsw i32 %101, %103
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds double, ptr %100, i64 %105
  %107 = load double, ptr %106, align 8, !tbaa !11
  %108 = call double @llvm.fmuladd.f64(double 0x3FC04C166115740B, double %107, double %99)
  %109 = load ptr, ptr %7, align 8, !tbaa !9
  %110 = load i32, ptr %12, align 4, !tbaa !5
  %111 = load i32, ptr %8, align 4, !tbaa !5
  %112 = mul nsw i32 10, %111
  %113 = add nsw i32 %110, %112
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds double, ptr %109, i64 %114
  %116 = load double, ptr %115, align 8, !tbaa !11
  %117 = call double @llvm.fmuladd.f64(double 0x3FC04C166115740F, double %116, double %108)
  %118 = load ptr, ptr %7, align 8, !tbaa !9
  %119 = load i32, ptr %12, align 4, !tbaa !5
  %120 = load i32, ptr %8, align 4, !tbaa !5
  %121 = mul nsw i32 11, %120
  %122 = add nsw i32 %119, %121
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds double, ptr %118, i64 %123
  %125 = load double, ptr %124, align 8, !tbaa !11
  %126 = call double @llvm.fmuladd.f64(double 0x4002E83901A94BB2, double %125, double %117)
  store double %126, ptr %11, align 8, !tbaa !11
  %127 = load double, ptr %11, align 8, !tbaa !11
  %128 = load ptr, ptr %9, align 8, !tbaa !9
  %129 = load i32, ptr %12, align 4, !tbaa !5
  %130 = load i32, ptr %10, align 4, !tbaa !5
  %131 = mul nsw i32 0, %130
  %132 = add nsw i32 %129, %131
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds double, ptr %128, i64 %133
  store double %127, ptr %134, align 8, !tbaa !11
  %135 = load ptr, ptr %7, align 8, !tbaa !9
  %136 = load i32, ptr %12, align 4, !tbaa !5
  %137 = load i32, ptr %8, align 4, !tbaa !5
  %138 = mul nsw i32 0, %137
  %139 = add nsw i32 %136, %138
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds double, ptr %135, i64 %140
  %142 = load double, ptr %141, align 8, !tbaa !11
  %143 = load ptr, ptr %7, align 8, !tbaa !9
  %144 = load i32, ptr %12, align 4, !tbaa !5
  %145 = load i32, ptr %8, align 4, !tbaa !5
  %146 = mul nsw i32 1, %145
  %147 = add nsw i32 %144, %146
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds double, ptr %143, i64 %148
  %150 = load double, ptr %149, align 8, !tbaa !11
  %151 = fmul double 0x4002E83901A94BB2, %150
  %152 = call double @llvm.fmuladd.f64(double 0x3FC04C16611573E7, double %142, double %151)
  %153 = load ptr, ptr %7, align 8, !tbaa !9
  %154 = load i32, ptr %12, align 4, !tbaa !5
  %155 = load i32, ptr %8, align 4, !tbaa !5
  %156 = mul nsw i32 2, %155
  %157 = add nsw i32 %154, %156
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds double, ptr %153, i64 %158
  %160 = load double, ptr %159, align 8, !tbaa !11
  %161 = call double @llvm.fmuladd.f64(double 0x3FC04C166115743D, double %160, double %152)
  %162 = load ptr, ptr %7, align 8, !tbaa !9
  %163 = load i32, ptr %12, align 4, !tbaa !5
  %164 = load i32, ptr %8, align 4, !tbaa !5
  %165 = mul nsw i32 3, %164
  %166 = add nsw i32 %163, %165
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds double, ptr %162, i64 %167
  %169 = load double, ptr %168, align 8, !tbaa !11
  %170 = call double @llvm.fmuladd.f64(double 0x3FC04C166115740F, double %169, double %161)
  %171 = load ptr, ptr %7, align 8, !tbaa !9
  %172 = load i32, ptr %12, align 4, !tbaa !5
  %173 = load i32, ptr %8, align 4, !tbaa !5
  %174 = mul nsw i32 4, %173
  %175 = add nsw i32 %172, %174
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds double, ptr %171, i64 %176
  %178 = load double, ptr %177, align 8, !tbaa !11
  %179 = call double @llvm.fmuladd.f64(double 0x4002E83901A94BB2, double %178, double %170)
  %180 = load ptr, ptr %7, align 8, !tbaa !9
  %181 = load i32, ptr %12, align 4, !tbaa !5
  %182 = load i32, ptr %8, align 4, !tbaa !5
  %183 = mul nsw i32 5, %182
  %184 = add nsw i32 %181, %183
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds double, ptr %180, i64 %185
  %187 = load double, ptr %186, align 8, !tbaa !11
  %188 = call double @llvm.fmuladd.f64(double 0x3FC04C166115743D, double %187, double %179)
  %189 = load ptr, ptr %7, align 8, !tbaa !9
  %190 = load i32, ptr %12, align 4, !tbaa !5
  %191 = load i32, ptr %8, align 4, !tbaa !5
  %192 = mul nsw i32 6, %191
  %193 = add nsw i32 %190, %192
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds double, ptr %189, i64 %194
  %196 = load double, ptr %195, align 8, !tbaa !11
  %197 = call double @llvm.fmuladd.f64(double 0xBFE3C6EF372FE917, double %196, double %188)
  %198 = load ptr, ptr %7, align 8, !tbaa !9
  %199 = load i32, ptr %12, align 4, !tbaa !5
  %200 = load i32, ptr %8, align 4, !tbaa !5
  %201 = mul nsw i32 7, %200
  %202 = add nsw i32 %199, %201
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds double, ptr %198, i64 %203
  %205 = load double, ptr %204, align 8, !tbaa !11
  %206 = call double @llvm.fmuladd.f64(double 0xBFE3C6EF372FE914, double %205, double %197)
  %207 = load ptr, ptr %7, align 8, !tbaa !9
  %208 = load i32, ptr %12, align 4, !tbaa !5
  %209 = load i32, ptr %8, align 4, !tbaa !5
  %210 = mul nsw i32 8, %209
  %211 = add nsw i32 %208, %210
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds double, ptr %207, i64 %212
  %214 = load double, ptr %213, align 8, !tbaa !11
  %215 = call double @llvm.fmuladd.f64(double 0xBFE3C6EF372FE909, double %214, double %206)
  %216 = load ptr, ptr %7, align 8, !tbaa !9
  %217 = load i32, ptr %12, align 4, !tbaa !5
  %218 = load i32, ptr %8, align 4, !tbaa !5
  %219 = mul nsw i32 9, %218
  %220 = add nsw i32 %217, %219
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds double, ptr %216, i64 %221
  %223 = load double, ptr %222, align 8, !tbaa !11
  %224 = call double @llvm.fmuladd.f64(double 0x3FC04C16611573DC, double %223, double %215)
  %225 = load ptr, ptr %7, align 8, !tbaa !9
  %226 = load i32, ptr %12, align 4, !tbaa !5
  %227 = load i32, ptr %8, align 4, !tbaa !5
  %228 = mul nsw i32 10, %227
  %229 = add nsw i32 %226, %228
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds double, ptr %225, i64 %230
  %232 = load double, ptr %231, align 8, !tbaa !11
  %233 = call double @llvm.fmuladd.f64(double 0x4002E83901A94BB2, double %232, double %224)
  %234 = load ptr, ptr %7, align 8, !tbaa !9
  %235 = load i32, ptr %12, align 4, !tbaa !5
  %236 = load i32, ptr %8, align 4, !tbaa !5
  %237 = mul nsw i32 11, %236
  %238 = add nsw i32 %235, %237
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds double, ptr %234, i64 %239
  %241 = load double, ptr %240, align 8, !tbaa !11
  %242 = call double @llvm.fmuladd.f64(double 0x3FC04C1661157404, double %241, double %233)
  store double %242, ptr %11, align 8, !tbaa !11
  %243 = load double, ptr %11, align 8, !tbaa !11
  %244 = load ptr, ptr %9, align 8, !tbaa !9
  %245 = load i32, ptr %12, align 4, !tbaa !5
  %246 = load i32, ptr %10, align 4, !tbaa !5
  %247 = mul nsw i32 1, %246
  %248 = add nsw i32 %245, %247
  %249 = sext i32 %248 to i64
  %250 = getelementptr inbounds double, ptr %244, i64 %249
  store double %243, ptr %250, align 8, !tbaa !11
  %251 = load ptr, ptr %7, align 8, !tbaa !9
  %252 = load i32, ptr %12, align 4, !tbaa !5
  %253 = load i32, ptr %8, align 4, !tbaa !5
  %254 = mul nsw i32 0, %253
  %255 = add nsw i32 %252, %254
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds double, ptr %251, i64 %256
  %258 = load double, ptr %257, align 8, !tbaa !11
  %259 = load ptr, ptr %7, align 8, !tbaa !9
  %260 = load i32, ptr %12, align 4, !tbaa !5
  %261 = load i32, ptr %8, align 4, !tbaa !5
  %262 = mul nsw i32 1, %261
  %263 = add nsw i32 %260, %262
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds double, ptr %259, i64 %264
  %266 = load double, ptr %265, align 8, !tbaa !11
  %267 = fmul double 0x3FC04C16611573FD, %266
  %268 = call double @llvm.fmuladd.f64(double 0x4002E83901A94BB5, double %258, double %267)
  %269 = load ptr, ptr %7, align 8, !tbaa !9
  %270 = load i32, ptr %12, align 4, !tbaa !5
  %271 = load i32, ptr %8, align 4, !tbaa !5
  %272 = mul nsw i32 2, %271
  %273 = add nsw i32 %270, %272
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds double, ptr %269, i64 %274
  %276 = load double, ptr %275, align 8, !tbaa !11
  %277 = call double @llvm.fmuladd.f64(double 0x3FC04C1661157407, double %276, double %268)
  %278 = load ptr, ptr %7, align 8, !tbaa !9
  %279 = load i32, ptr %12, align 4, !tbaa !5
  %280 = load i32, ptr %8, align 4, !tbaa !5
  %281 = mul nsw i32 3, %280
  %282 = add nsw i32 %279, %281
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds double, ptr %278, i64 %283
  %285 = load double, ptr %284, align 8, !tbaa !11
  %286 = call double @llvm.fmuladd.f64(double 0xBFE3C6EF372FE910, double %285, double %277)
  %287 = load ptr, ptr %7, align 8, !tbaa !9
  %288 = load i32, ptr %12, align 4, !tbaa !5
  %289 = load i32, ptr %8, align 4, !tbaa !5
  %290 = mul nsw i32 4, %289
  %291 = add nsw i32 %288, %290
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds double, ptr %287, i64 %292
  %294 = load double, ptr %293, align 8, !tbaa !11
  %295 = call double @llvm.fmuladd.f64(double 0xBFE3C6EF372FE918, double %294, double %286)
  %296 = load ptr, ptr %7, align 8, !tbaa !9
  %297 = load i32, ptr %12, align 4, !tbaa !5
  %298 = load i32, ptr %8, align 4, !tbaa !5
  %299 = mul nsw i32 5, %298
  %300 = add nsw i32 %297, %299
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds double, ptr %296, i64 %301
  %303 = load double, ptr %302, align 8, !tbaa !11
  %304 = call double @llvm.fmuladd.f64(double 0xBFE3C6EF372FE916, double %303, double %295)
  %305 = load ptr, ptr %7, align 8, !tbaa !9
  %306 = load i32, ptr %12, align 4, !tbaa !5
  %307 = load i32, ptr %8, align 4, !tbaa !5
  %308 = mul nsw i32 6, %307
  %309 = add nsw i32 %306, %308
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds double, ptr %305, i64 %310
  %312 = load double, ptr %311, align 8, !tbaa !11
  %313 = call double @llvm.fmuladd.f64(double 0x4002E83901A94BB5, double %312, double %304)
  %314 = load ptr, ptr %7, align 8, !tbaa !9
  %315 = load i32, ptr %12, align 4, !tbaa !5
  %316 = load i32, ptr %8, align 4, !tbaa !5
  %317 = mul nsw i32 7, %316
  %318 = add nsw i32 %315, %317
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds double, ptr %314, i64 %319
  %321 = load double, ptr %320, align 8, !tbaa !11
  %322 = call double @llvm.fmuladd.f64(double 0x3FC04C1661157421, double %321, double %313)
  %323 = load ptr, ptr %7, align 8, !tbaa !9
  %324 = load i32, ptr %12, align 4, !tbaa !5
  %325 = load i32, ptr %8, align 4, !tbaa !5
  %326 = mul nsw i32 8, %325
  %327 = add nsw i32 %324, %326
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds double, ptr %323, i64 %328
  %330 = load double, ptr %329, align 8, !tbaa !11
  %331 = call double @llvm.fmuladd.f64(double 0x3FC04C1661157419, double %330, double %322)
  %332 = load ptr, ptr %7, align 8, !tbaa !9
  %333 = load i32, ptr %12, align 4, !tbaa !5
  %334 = load i32, ptr %8, align 4, !tbaa !5
  %335 = mul nsw i32 9, %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 = call double @llvm.fmuladd.f64(double 0x4002E83901A94BB5, double %339, double %331)
  %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 10, %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 = call double @llvm.fmuladd.f64(double 0x3FC04C1661157407, double %348, double %340)
  %350 = load ptr, ptr %7, align 8, !tbaa !9
  %351 = load i32, ptr %12, align 4, !tbaa !5
  %352 = load i32, ptr %8, align 4, !tbaa !5
  %353 = mul nsw i32 11, %352
  %354 = add nsw i32 %351, %353
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds double, ptr %350, i64 %355
  %357 = load double, ptr %356, align 8, !tbaa !11
  %358 = call double @llvm.fmuladd.f64(double 0x3FC04C166115741D, double %357, double %349)
  store double %358, ptr %11, align 8, !tbaa !11
  %359 = load double, ptr %11, align 8, !tbaa !11
  %360 = load ptr, ptr %9, align 8, !tbaa !9
  %361 = load i32, ptr %12, align 4, !tbaa !5
  %362 = load i32, ptr %10, align 4, !tbaa !5
  %363 = mul nsw i32 2, %362
  %364 = add nsw i32 %361, %363
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds double, ptr %360, i64 %365
  store double %359, ptr %366, align 8, !tbaa !11
  %367 = load ptr, ptr %7, align 8, !tbaa !9
  %368 = load i32, ptr %12, align 4, !tbaa !5
  %369 = load i32, ptr %8, align 4, !tbaa !5
  %370 = mul nsw i32 0, %369
  %371 = add nsw i32 %368, %370
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds double, ptr %367, i64 %372
  %374 = load double, ptr %373, align 8, !tbaa !11
  %375 = load ptr, ptr %7, align 8, !tbaa !9
  %376 = load i32, ptr %12, align 4, !tbaa !5
  %377 = load i32, ptr %8, align 4, !tbaa !5
  %378 = mul nsw i32 1, %377
  %379 = add nsw i32 %376, %378
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds double, ptr %375, i64 %380
  %382 = load double, ptr %381, align 8, !tbaa !11
  %383 = fmul double 0x3FC04C1661157424, %382
  %384 = call double @llvm.fmuladd.f64(double 0x3FC04C16611573E7, double %374, double %383)
  %385 = load ptr, ptr %7, align 8, !tbaa !9
  %386 = load i32, ptr %12, align 4, !tbaa !5
  %387 = load i32, ptr %8, align 4, !tbaa !5
  %388 = mul nsw i32 2, %387
  %389 = add nsw i32 %386, %388
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds double, ptr %385, i64 %390
  %392 = load double, ptr %391, align 8, !tbaa !11
  %393 = call double @llvm.fmuladd.f64(double 0x4002E83901A94BB5, double %392, double %384)
  %394 = load ptr, ptr %7, align 8, !tbaa !9
  %395 = load i32, ptr %12, align 4, !tbaa !5
  %396 = load i32, ptr %8, align 4, !tbaa !5
  %397 = mul nsw i32 3, %396
  %398 = add nsw i32 %395, %397
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds double, ptr %394, i64 %399
  %401 = load double, ptr %400, align 8, !tbaa !11
  %402 = call double @llvm.fmuladd.f64(double 0x3FC04C166115740F, double %401, double %393)
  %403 = load ptr, ptr %7, align 8, !tbaa !9
  %404 = load i32, ptr %12, align 4, !tbaa !5
  %405 = load i32, ptr %8, align 4, !tbaa !5
  %406 = mul nsw i32 4, %405
  %407 = add nsw i32 %404, %406
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds double, ptr %403, i64 %408
  %410 = load double, ptr %409, align 8, !tbaa !11
  %411 = call double @llvm.fmuladd.f64(double 0x3FC04C1661157428, double %410, double %402)
  %412 = load ptr, ptr %7, align 8, !tbaa !9
  %413 = load i32, ptr %12, align 4, !tbaa !5
  %414 = load i32, ptr %8, align 4, !tbaa !5
  %415 = mul nsw i32 5, %414
  %416 = add nsw i32 %413, %415
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds double, ptr %412, i64 %417
  %419 = load double, ptr %418, align 8, !tbaa !11
  %420 = call double @llvm.fmuladd.f64(double 0x4002E83901A94BB2, double %419, double %411)
  %421 = load ptr, ptr %7, align 8, !tbaa !9
  %422 = load i32, ptr %12, align 4, !tbaa !5
  %423 = load i32, ptr %8, align 4, !tbaa !5
  %424 = mul nsw i32 6, %423
  %425 = add nsw i32 %422, %424
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds double, ptr %421, i64 %426
  %428 = load double, ptr %427, align 8, !tbaa !11
  %429 = call double @llvm.fmuladd.f64(double 0x3FC04C16611573E3, double %428, double %420)
  %430 = load ptr, ptr %7, align 8, !tbaa !9
  %431 = load i32, ptr %12, align 4, !tbaa !5
  %432 = load i32, ptr %8, align 4, !tbaa !5
  %433 = mul nsw i32 7, %432
  %434 = add nsw i32 %431, %433
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds double, ptr %430, i64 %435
  %437 = load double, ptr %436, align 8, !tbaa !11
  %438 = call double @llvm.fmuladd.f64(double 0x3FC04C166115740F, double %437, double %429)
  %439 = load ptr, ptr %7, align 8, !tbaa !9
  %440 = load i32, ptr %12, align 4, !tbaa !5
  %441 = load i32, ptr %8, align 4, !tbaa !5
  %442 = mul nsw i32 8, %441
  %443 = add nsw i32 %440, %442
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds double, ptr %439, i64 %444
  %446 = load double, ptr %445, align 8, !tbaa !11
  %447 = call double @llvm.fmuladd.f64(double 0x4002E83901A94BB5, double %446, double %438)
  %448 = load ptr, ptr %7, align 8, !tbaa !9
  %449 = load i32, ptr %12, align 4, !tbaa !5
  %450 = load i32, ptr %8, align 4, !tbaa !5
  %451 = mul nsw i32 9, %450
  %452 = add nsw i32 %449, %451
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds double, ptr %448, i64 %453
  %455 = load double, ptr %454, align 8, !tbaa !11
  %456 = call double @llvm.fmuladd.f64(double 0xBFE3C6EF372FE918, double %455, double %447)
  %457 = load ptr, ptr %7, align 8, !tbaa !9
  %458 = load i32, ptr %12, align 4, !tbaa !5
  %459 = load i32, ptr %8, align 4, !tbaa !5
  %460 = mul nsw i32 10, %459
  %461 = add nsw i32 %458, %460
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds double, ptr %457, i64 %462
  %464 = load double, ptr %463, align 8, !tbaa !11
  %465 = call double @llvm.fmuladd.f64(double 0xBFE3C6EF372FE918, double %464, double %456)
  %466 = load ptr, ptr %7, align 8, !tbaa !9
  %467 = load i32, ptr %12, align 4, !tbaa !5
  %468 = load i32, ptr %8, align 4, !tbaa !5
  %469 = mul nsw i32 11, %468
  %470 = add nsw i32 %467, %469
  %471 = sext i32 %470 to i64
  %472 = getelementptr inbounds double, ptr %466, i64 %471
  %473 = load double, ptr %472, align 8, !tbaa !11
  %474 = call double @llvm.fmuladd.f64(double 0xBFE3C6EF372FE915, double %473, double %465)
  store double %474, ptr %11, align 8, !tbaa !11
  %475 = load double, ptr %11, align 8, !tbaa !11
  %476 = load ptr, ptr %9, align 8, !tbaa !9
  %477 = load i32, ptr %12, align 4, !tbaa !5
  %478 = load i32, ptr %10, align 4, !tbaa !5
  %479 = mul nsw i32 3, %478
  %480 = add nsw i32 %477, %479
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds double, ptr %476, i64 %481
  store double %475, ptr %482, align 8, !tbaa !11
  br label %483

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

486:                                              ; 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_10573732835545233920_b0(i32 noundef %0, ptr noalias nocapture noundef readonly %1, i32 noundef %2, ptr noalias nocapture noundef writeonly %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 nsw i32 %2, 2
  %10 = mul nsw i32 %2, 5
  %11 = mul nsw i32 %2, 6
  %12 = mul nsw i32 %2, 7
  %13 = shl nsw i32 %2, 3
  %14 = mul nsw i32 %2, 9
  %15 = mul nsw i32 %2, 10
  %16 = mul nsw i32 %2, 11
  %17 = shl i32 %4, 1
  %18 = mul i32 %4, 3
  %19 = sext i32 %2 to i64
  %20 = sext i32 %7 to i64
  %21 = sext i32 %8 to i64
  %22 = sext i32 %9 to i64
  %23 = sext i32 %10 to i64
  %24 = sext i32 %11 to i64
  %25 = sext i32 %12 to i64
  %26 = sext i32 %13 to i64
  %27 = sext i32 %14 to i64
  %28 = sext i32 %15 to i64
  %29 = sext i32 %16 to i64
  %30 = sext i32 %4 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.gep164 = getelementptr double, ptr %1, i64 %20
  %invariant.gep166 = getelementptr double, ptr %1, i64 %21
  %invariant.gep168 = getelementptr double, ptr %1, i64 %22
  %invariant.gep170 = getelementptr double, ptr %1, i64 %23
  %invariant.gep172 = getelementptr double, ptr %1, i64 %24
  %invariant.gep174 = getelementptr double, ptr %1, i64 %25
  %invariant.gep176 = getelementptr double, ptr %1, i64 %26
  %invariant.gep178 = getelementptr double, ptr %1, i64 %27
  %invariant.gep180 = getelementptr double, ptr %1, i64 %28
  %invariant.gep182 = getelementptr double, ptr %1, i64 %29
  %invariant.gep184 = getelementptr double, ptr %3, i64 %30
  %invariant.gep186 = getelementptr double, ptr %3, i64 %31
  %invariant.gep188 = getelementptr double, ptr %3, i64 %32
  %min.iters.check = icmp eq i32 %0, 1
  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 nsw i64 %30, 3
  %diff.check = icmp ult i64 %33, 16
  %34 = shl nsw i64 %31, 3
  %diff.check190 = icmp eq i32 %17, 0
  %conflict.rdx = or i1 %diff.check, %diff.check190
  %35 = shl nsw i64 %32, 3
  %diff.check191 = icmp ult i64 %35, 16
  %conflict.rdx192 = or i1 %conflict.rdx, %diff.check191
  %36 = sub nsw i64 %34, %33
  %diff.check193 = icmp ult i64 %36, 16
  %conflict.rdx194 = or i1 %conflict.rdx192, %diff.check193
  %37 = sub nsw i64 %35, %33
  %diff.check195 = icmp ult i64 %37, 16
  %conflict.rdx196 = or i1 %conflict.rdx194, %diff.check195
  %38 = sub nsw i64 %35, %34
  %diff.check197 = icmp ult i64 %38, 16
  %conflict.rdx198 = or i1 %conflict.rdx196, %diff.check197
  br i1 %conflict.rdx198, 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 ]
  %39 = getelementptr inbounds double, ptr %1, i64 %index
  %wide.load = load <2 x double>, ptr %39, align 8, !tbaa !5
  %40 = getelementptr double, ptr %invariant.gep, i64 %index
  %wide.load199 = load <2 x double>, ptr %40, align 8, !tbaa !5
  %41 = fmul <2 x double> %wide.load199, <double 0xBFE3C6EF372FE912, double 0xBFE3C6EF372FE912>
  %42 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0xBFE3C6EF372FE90E, double 0xBFE3C6EF372FE90E>, <2 x double> %41)
  %43 = getelementptr double, ptr %invariant.gep164, i64 %index
  %wide.load200 = load <2 x double>, ptr %43, align 8, !tbaa !5
  %44 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load200, <2 x double> <double 0xBFE3C6EF372FE910, double 0xBFE3C6EF372FE910>, <2 x double> %42)
  %45 = getelementptr double, ptr %invariant.gep166, i64 %index
  %wide.load201 = load <2 x double>, ptr %45, align 8, !tbaa !5
  %46 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load201, <2 x double> <double 0x4002E83901A94BB0, double 0x4002E83901A94BB0>, <2 x double> %44)
  %47 = getelementptr double, ptr %invariant.gep168, i64 %index
  %wide.load202 = load <2 x double>, ptr %47, align 8, !tbaa !5
  %48 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load202, <2 x double> <double 0x3FC04C1661157416, double 0x3FC04C1661157416>, <2 x double> %46)
  %49 = getelementptr double, ptr %invariant.gep170, i64 %index
  %wide.load203 = load <2 x double>, ptr %49, align 8, !tbaa !5
  %50 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load203, <2 x double> <double 0x3FC04C1661157424, double 0x3FC04C1661157424>, <2 x double> %48)
  %51 = getelementptr double, ptr %invariant.gep172, i64 %index
  %wide.load204 = load <2 x double>, ptr %51, align 8, !tbaa !5
  %52 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load204, <2 x double> <double 0x3FC04C166115740B, double 0x3FC04C166115740B>, <2 x double> %50)
  %53 = getelementptr double, ptr %invariant.gep174, i64 %index
  %wide.load205 = load <2 x double>, ptr %53, align 8, !tbaa !5
  %54 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load205, <2 x double> <double 0x4002E83901A94BB2, double 0x4002E83901A94BB2>, <2 x double> %52)
  %55 = getelementptr double, ptr %invariant.gep176, i64 %index
  %wide.load206 = load <2 x double>, ptr %55, align 8, !tbaa !5
  %56 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load206, <2 x double> <double 0x3FC04C1661157419, double 0x3FC04C1661157419>, <2 x double> %54)
  %57 = getelementptr double, ptr %invariant.gep178, i64 %index
  %wide.load207 = load <2 x double>, ptr %57, align 8, !tbaa !5
  %58 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load207, <2 x double> <double 0x3FC04C166115740B, double 0x3FC04C166115740B>, <2 x double> %56)
  %59 = getelementptr double, ptr %invariant.gep180, i64 %index
  %wide.load208 = load <2 x double>, ptr %59, align 8, !tbaa !5
  %60 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load208, <2 x double> <double 0x3FC04C166115740F, double 0x3FC04C166115740F>, <2 x double> %58)
  %61 = getelementptr double, ptr %invariant.gep182, i64 %index
  %wide.load209 = load <2 x double>, ptr %61, align 8, !tbaa !5
  %62 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load209, <2 x double> <double 0x4002E83901A94BB2, double 0x4002E83901A94BB2>, <2 x double> %60)
  %63 = getelementptr inbounds double, ptr %3, i64 %index
  store <2 x double> %62, ptr %63, align 8, !tbaa !5
  %64 = fmul <2 x double> %wide.load199, <double 0x4002E83901A94BB2, double 0x4002E83901A94BB2>
  %65 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0x3FC04C16611573E7, double 0x3FC04C16611573E7>, <2 x double> %64)
  %66 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load200, <2 x double> <double 0x3FC04C166115743D, double 0x3FC04C166115743D>, <2 x double> %65)
  %67 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load201, <2 x double> <double 0x3FC04C166115740F, double 0x3FC04C166115740F>, <2 x double> %66)
  %68 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load202, <2 x double> <double 0x4002E83901A94BB2, double 0x4002E83901A94BB2>, <2 x double> %67)
  %69 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load203, <2 x double> <double 0x3FC04C166115743D, double 0x3FC04C166115743D>, <2 x double> %68)
  %70 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load204, <2 x double> <double 0xBFE3C6EF372FE917, double 0xBFE3C6EF372FE917>, <2 x double> %69)
  %71 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load205, <2 x double> <double 0xBFE3C6EF372FE914, double 0xBFE3C6EF372FE914>, <2 x double> %70)
  %72 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load206, <2 x double> <double 0xBFE3C6EF372FE909, double 0xBFE3C6EF372FE909>, <2 x double> %71)
  %73 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load207, <2 x double> <double 0x3FC04C16611573DC, double 0x3FC04C16611573DC>, <2 x double> %72)
  %74 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load208, <2 x double> <double 0x4002E83901A94BB2, double 0x4002E83901A94BB2>, <2 x double> %73)
  %75 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load209, <2 x double> <double 0x3FC04C1661157404, double 0x3FC04C1661157404>, <2 x double> %74)
  %76 = getelementptr double, ptr %invariant.gep184, i64 %index
  store <2 x double> %75, ptr %76, align 8, !tbaa !5
  %77 = fmul <2 x double> %wide.load199, <double 0x3FC04C16611573FD, double 0x3FC04C16611573FD>
  %78 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0x4002E83901A94BB5, double 0x4002E83901A94BB5>, <2 x double> %77)
  %79 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load200, <2 x double> <double 0x3FC04C1661157407, double 0x3FC04C1661157407>, <2 x double> %78)
  %80 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load201, <2 x double> <double 0xBFE3C6EF372FE910, double 0xBFE3C6EF372FE910>, <2 x double> %79)
  %81 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load202, <2 x double> <double 0xBFE3C6EF372FE918, double 0xBFE3C6EF372FE918>, <2 x double> %80)
  %82 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load203, <2 x double> <double 0xBFE3C6EF372FE916, double 0xBFE3C6EF372FE916>, <2 x double> %81)
  %83 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load204, <2 x double> <double 0x4002E83901A94BB5, double 0x4002E83901A94BB5>, <2 x double> %82)
  %84 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load205, <2 x double> <double 0x3FC04C1661157421, double 0x3FC04C1661157421>, <2 x double> %83)
  %85 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load206, <2 x double> <double 0x3FC04C1661157419, double 0x3FC04C1661157419>, <2 x double> %84)
  %86 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load207, <2 x double> <double 0x4002E83901A94BB5, double 0x4002E83901A94BB5>, <2 x double> %85)
  %87 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load208, <2 x double> <double 0x3FC04C1661157407, double 0x3FC04C1661157407>, <2 x double> %86)
  %88 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load209, <2 x double> <double 0x3FC04C166115741D, double 0x3FC04C166115741D>, <2 x double> %87)
  %89 = getelementptr double, ptr %invariant.gep186, i64 %index
  store <2 x double> %88, ptr %89, align 8, !tbaa !5
  %90 = fmul <2 x double> %wide.load199, <double 0x3FC04C1661157424, double 0x3FC04C1661157424>
  %91 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> <double 0x3FC04C16611573E7, double 0x3FC04C16611573E7>, <2 x double> %90)
  %92 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load200, <2 x double> <double 0x4002E83901A94BB5, double 0x4002E83901A94BB5>, <2 x double> %91)
  %93 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load201, <2 x double> <double 0x3FC04C166115740F, double 0x3FC04C166115740F>, <2 x double> %92)
  %94 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load202, <2 x double> <double 0x3FC04C1661157428, double 0x3FC04C1661157428>, <2 x double> %93)
  %95 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load203, <2 x double> <double 0x4002E83901A94BB2, double 0x4002E83901A94BB2>, <2 x double> %94)
  %96 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load204, <2 x double> <double 0x3FC04C16611573E3, double 0x3FC04C16611573E3>, <2 x double> %95)
  %97 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load205, <2 x double> <double 0x3FC04C166115740F, double 0x3FC04C166115740F>, <2 x double> %96)
  %98 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load206, <2 x double> <double 0x4002E83901A94BB5, double 0x4002E83901A94BB5>, <2 x double> %97)
  %99 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load207, <2 x double> <double 0xBFE3C6EF372FE918, double 0xBFE3C6EF372FE918>, <2 x double> %98)
  %100 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load208, <2 x double> <double 0xBFE3C6EF372FE918, double 0xBFE3C6EF372FE918>, <2 x double> %99)
  %101 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load209, <2 x double> <double 0xBFE3C6EF372FE915, double 0xBFE3C6EF372FE915>, <2 x double> %100)
  %102 = getelementptr double, ptr %invariant.gep188, i64 %index
  store <2 x double> %101, ptr %102, align 8, !tbaa !5
  %index.next = add nuw i64 %index, 2
  %103 = icmp eq i64 %index.next, %n.vec
  br i1 %103, label %middle.block, label %vector.body, !llvm.loop !9

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 ]
  %104 = getelementptr inbounds double, ptr %1, i64 %indvars.iv
  %105 = load double, ptr %104, align 8, !tbaa !5
  %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv
  %106 = load double, ptr %gep, align 8, !tbaa !5
  %107 = fmul double %106, 0xBFE3C6EF372FE912
  %108 = tail call double @llvm.fmuladd.f64(double %105, double 0xBFE3C6EF372FE90E, double %107)
  %gep165 = getelementptr double, ptr %invariant.gep164, i64 %indvars.iv
  %109 = load double, ptr %gep165, align 8, !tbaa !5
  %110 = tail call double @llvm.fmuladd.f64(double %109, double 0xBFE3C6EF372FE910, double %108)
  %gep167 = getelementptr double, ptr %invariant.gep166, i64 %indvars.iv
  %111 = load double, ptr %gep167, align 8, !tbaa !5
  %112 = tail call double @llvm.fmuladd.f64(double %111, double 0x4002E83901A94BB0, double %110)
  %gep169 = getelementptr double, ptr %invariant.gep168, i64 %indvars.iv
  %113 = load double, ptr %gep169, align 8, !tbaa !5
  %114 = tail call double @llvm.fmuladd.f64(double %113, double 0x3FC04C1661157416, double %112)
  %gep171 = getelementptr double, ptr %invariant.gep170, i64 %indvars.iv
  %115 = load double, ptr %gep171, align 8, !tbaa !5
  %116 = tail call double @llvm.fmuladd.f64(double %115, double 0x3FC04C1661157424, double %114)
  %gep173 = getelementptr double, ptr %invariant.gep172, i64 %indvars.iv
  %117 = load double, ptr %gep173, align 8, !tbaa !5
  %118 = tail call double @llvm.fmuladd.f64(double %117, double 0x3FC04C166115740B, double %116)
  %gep175 = getelementptr double, ptr %invariant.gep174, i64 %indvars.iv
  %119 = load double, ptr %gep175, align 8, !tbaa !5
  %120 = tail call double @llvm.fmuladd.f64(double %119, double 0x4002E83901A94BB2, double %118)
  %gep177 = getelementptr double, ptr %invariant.gep176, i64 %indvars.iv
  %121 = load double, ptr %gep177, align 8, !tbaa !5
  %122 = tail call double @llvm.fmuladd.f64(double %121, double 0x3FC04C1661157419, double %120)
  %gep179 = getelementptr double, ptr %invariant.gep178, i64 %indvars.iv
  %123 = load double, ptr %gep179, align 8, !tbaa !5
  %124 = tail call double @llvm.fmuladd.f64(double %123, double 0x3FC04C166115740B, double %122)
  %gep181 = getelementptr double, ptr %invariant.gep180, i64 %indvars.iv
  %125 = load double, ptr %gep181, align 8, !tbaa !5
  %126 = tail call double @llvm.fmuladd.f64(double %125, double 0x3FC04C166115740F, double %124)
  %gep183 = getelementptr double, ptr %invariant.gep182, i64 %indvars.iv
  %127 = load double, ptr %gep183, align 8, !tbaa !5
  %128 = tail call double @llvm.fmuladd.f64(double %127, double 0x4002E83901A94BB2, double %126)
  %129 = getelementptr inbounds double, ptr %3, i64 %indvars.iv
  store double %128, ptr %129, align 8, !tbaa !5
  %130 = fmul double %106, 0x4002E83901A94BB2
  %131 = tail call double @llvm.fmuladd.f64(double %105, double 0x3FC04C16611573E7, double %130)
  %132 = tail call double @llvm.fmuladd.f64(double %109, double 0x3FC04C166115743D, double %131)
  %133 = tail call double @llvm.fmuladd.f64(double %111, double 0x3FC04C166115740F, double %132)
  %134 = tail call double @llvm.fmuladd.f64(double %113, double 0x4002E83901A94BB2, double %133)
  %135 = tail call double @llvm.fmuladd.f64(double %115, double 0x3FC04C166115743D, double %134)
  %136 = tail call double @llvm.fmuladd.f64(double %117, double 0xBFE3C6EF372FE917, double %135)
  %137 = tail call double @llvm.fmuladd.f64(double %119, double 0xBFE3C6EF372FE914, double %136)
  %138 = tail call double @llvm.fmuladd.f64(double %121, double 0xBFE3C6EF372FE909, double %137)
  %139 = tail call double @llvm.fmuladd.f64(double %123, double 0x3FC04C16611573DC, double %138)
  %140 = tail call double @llvm.fmuladd.f64(double %125, double 0x4002E83901A94BB2, double %139)
  %141 = tail call double @llvm.fmuladd.f64(double %127, double 0x3FC04C1661157404, double %140)
  %gep185 = getelementptr double, ptr %invariant.gep184, i64 %indvars.iv
  store double %141, ptr %gep185, align 8, !tbaa !5
  %142 = fmul double %106, 0x3FC04C16611573FD
  %143 = tail call double @llvm.fmuladd.f64(double %105, double 0x4002E83901A94BB5, double %142)
  %144 = tail call double @llvm.fmuladd.f64(double %109, double 0x3FC04C1661157407, double %143)
  %145 = tail call double @llvm.fmuladd.f64(double %111, double 0xBFE3C6EF372FE910, double %144)
  %146 = tail call double @llvm.fmuladd.f64(double %113, double 0xBFE3C6EF372FE918, double %145)
  %147 = tail call double @llvm.fmuladd.f64(double %115, double 0xBFE3C6EF372FE916, double %146)
  %148 = tail call double @llvm.fmuladd.f64(double %117, double 0x4002E83901A94BB5, double %147)
  %149 = tail call double @llvm.fmuladd.f64(double %119, double 0x3FC04C1661157421, double %148)
  %150 = tail call double @llvm.fmuladd.f64(double %121, double 0x3FC04C1661157419, double %149)
  %151 = tail call double @llvm.fmuladd.f64(double %123, double 0x4002E83901A94BB5, double %150)
  %152 = tail call double @llvm.fmuladd.f64(double %125, double 0x3FC04C1661157407, double %151)
  %153 = tail call double @llvm.fmuladd.f64(double %127, double 0x3FC04C166115741D, double %152)
  %gep187 = getelementptr double, ptr %invariant.gep186, i64 %indvars.iv
  store double %153, ptr %gep187, align 8, !tbaa !5
  %154 = fmul double %106, 0x3FC04C1661157424
  %155 = tail call double @llvm.fmuladd.f64(double %105, double 0x3FC04C16611573E7, double %154)
  %156 = tail call double @llvm.fmuladd.f64(double %109, double 0x4002E83901A94BB5, double %155)
  %157 = tail call double @llvm.fmuladd.f64(double %111, double 0x3FC04C166115740F, double %156)
  %158 = tail call double @llvm.fmuladd.f64(double %113, double 0x3FC04C1661157428, double %157)
  %159 = tail call double @llvm.fmuladd.f64(double %115, double 0x4002E83901A94BB2, double %158)
  %160 = tail call double @llvm.fmuladd.f64(double %117, double 0x3FC04C16611573E3, double %159)
  %161 = tail call double @llvm.fmuladd.f64(double %119, double 0x3FC04C166115740F, double %160)
  %162 = tail call double @llvm.fmuladd.f64(double %121, double 0x4002E83901A94BB5, double %161)
  %163 = tail call double @llvm.fmuladd.f64(double %123, double 0xBFE3C6EF372FE918, double %162)
  %164 = tail call double @llvm.fmuladd.f64(double %125, double 0xBFE3C6EF372FE918, double %163)
  %165 = tail call double @llvm.fmuladd.f64(double %127, double 0xBFE3C6EF372FE915, double %164)
  %gep189 = getelementptr double, ptr %invariant.gep188, i64 %indvars.iv
  store double %165, ptr %gep189, 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 !13
}

; 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 = distinct !{!9, !10, !11, !12}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!"llvm.loop.isvectorized", i32 1}
!12 = !{!"llvm.loop.unroll.runtime.disable"}
!13 = distinct !{!13, !10, !11}


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