; 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_14215087943608699842_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 = %643, %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 %646

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 8, %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 13, %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 0xBFD76CF5D0B09956, %34
  %36 = call double @llvm.fmuladd.f64(double 0xBFF5DB3D742C2652, double %26, double %35)
  store double %36, ptr %11, align 8, !tbaa !11
  %37 = load double, ptr %11, align 8, !tbaa !11
  %38 = load ptr, ptr %9, align 8, !tbaa !9
  %39 = load i32, ptr %12, align 4, !tbaa !5
  %40 = load i32, ptr %10, align 4, !tbaa !5
  %41 = mul nsw i32 0, %40
  %42 = add nsw i32 %39, %41
  %43 = sext i32 %42 to i64
  %44 = getelementptr inbounds double, ptr %38, i64 %43
  store double %37, ptr %44, align 8, !tbaa !11
  %45 = load ptr, ptr %7, align 8, !tbaa !9
  %46 = load i32, ptr %12, align 4, !tbaa !5
  %47 = load i32, ptr %8, align 4, !tbaa !5
  %48 = mul nsw i32 8, %47
  %49 = add nsw i32 %46, %48
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds double, ptr %45, i64 %50
  %52 = load double, ptr %51, align 8, !tbaa !11
  %53 = load ptr, ptr %7, align 8, !tbaa !9
  %54 = load i32, ptr %12, align 4, !tbaa !5
  %55 = load i32, ptr %8, align 4, !tbaa !5
  %56 = mul nsw i32 13, %55
  %57 = add nsw i32 %54, %56
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds double, ptr %53, i64 %58
  %60 = load double, ptr %59, align 8, !tbaa !11
  %61 = fmul double 0x3FF5DB3D742C2652, %60
  %62 = call double @llvm.fmuladd.f64(double 0x3FD76CF5D0B09956, double %52, double %61)
  store double %62, ptr %11, align 8, !tbaa !11
  %63 = load double, ptr %11, align 8, !tbaa !11
  %64 = load ptr, ptr %9, align 8, !tbaa !9
  %65 = load i32, ptr %12, align 4, !tbaa !5
  %66 = load i32, ptr %10, align 4, !tbaa !5
  %67 = mul nsw i32 1, %66
  %68 = add nsw i32 %65, %67
  %69 = sext i32 %68 to i64
  %70 = getelementptr inbounds double, ptr %64, i64 %69
  store double %63, ptr %70, align 8, !tbaa !11
  %71 = load ptr, ptr %7, align 8, !tbaa !9
  %72 = load i32, ptr %12, align 4, !tbaa !5
  %73 = load i32, ptr %8, align 4, !tbaa !5
  %74 = mul nsw i32 9, %73
  %75 = add nsw i32 %72, %74
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds double, ptr %71, i64 %76
  %78 = load double, ptr %77, align 8, !tbaa !11
  %79 = load ptr, ptr %7, align 8, !tbaa !9
  %80 = load i32, ptr %12, align 4, !tbaa !5
  %81 = load i32, ptr %8, align 4, !tbaa !5
  %82 = mul nsw i32 12, %81
  %83 = add nsw i32 %80, %82
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds double, ptr %79, i64 %84
  %86 = load double, ptr %85, align 8, !tbaa !11
  %87 = fmul double 0xBFD76CF5D0B09956, %86
  %88 = call double @llvm.fmuladd.f64(double 0xBFF5DB3D742C2652, double %78, double %87)
  store double %88, ptr %11, align 8, !tbaa !11
  %89 = load double, ptr %11, align 8, !tbaa !11
  %90 = load ptr, ptr %9, align 8, !tbaa !9
  %91 = load i32, ptr %12, align 4, !tbaa !5
  %92 = load i32, ptr %10, align 4, !tbaa !5
  %93 = mul nsw i32 2, %92
  %94 = add nsw i32 %91, %93
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds double, ptr %90, i64 %95
  store double %89, ptr %96, align 8, !tbaa !11
  %97 = load ptr, ptr %7, align 8, !tbaa !9
  %98 = load i32, ptr %12, align 4, !tbaa !5
  %99 = load i32, ptr %8, align 4, !tbaa !5
  %100 = mul nsw i32 9, %99
  %101 = add nsw i32 %98, %100
  %102 = sext i32 %101 to i64
  %103 = getelementptr inbounds double, ptr %97, i64 %102
  %104 = load double, ptr %103, align 8, !tbaa !11
  %105 = load ptr, ptr %7, align 8, !tbaa !9
  %106 = load i32, ptr %12, align 4, !tbaa !5
  %107 = load i32, ptr %8, align 4, !tbaa !5
  %108 = mul nsw i32 12, %107
  %109 = add nsw i32 %106, %108
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds double, ptr %105, i64 %110
  %112 = load double, ptr %111, align 8, !tbaa !11
  %113 = fmul double 0x3FF5DB3D742C2652, %112
  %114 = call double @llvm.fmuladd.f64(double 0x3FD76CF5D0B09956, double %104, double %113)
  store double %114, ptr %11, align 8, !tbaa !11
  %115 = load double, ptr %11, align 8, !tbaa !11
  %116 = load ptr, ptr %9, align 8, !tbaa !9
  %117 = load i32, ptr %12, align 4, !tbaa !5
  %118 = load i32, ptr %10, align 4, !tbaa !5
  %119 = mul nsw i32 3, %118
  %120 = add nsw i32 %117, %119
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds double, ptr %116, i64 %121
  store double %115, ptr %122, align 8, !tbaa !11
  %123 = load ptr, ptr %7, align 8, !tbaa !9
  %124 = load i32, ptr %12, align 4, !tbaa !5
  %125 = load i32, ptr %8, align 4, !tbaa !5
  %126 = mul nsw i32 10, %125
  %127 = add nsw i32 %124, %126
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds double, ptr %123, i64 %128
  %130 = load double, ptr %129, align 8, !tbaa !11
  %131 = load ptr, ptr %7, align 8, !tbaa !9
  %132 = load i32, ptr %12, align 4, !tbaa !5
  %133 = load i32, ptr %8, align 4, !tbaa !5
  %134 = mul nsw i32 15, %133
  %135 = add nsw i32 %132, %134
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds double, ptr %131, i64 %136
  %138 = load double, ptr %137, align 8, !tbaa !11
  %139 = fmul double 0xBFD76CF5D0B09956, %138
  %140 = call double @llvm.fmuladd.f64(double 0xBFF5DB3D742C2652, double %130, double %139)
  store double %140, ptr %11, align 8, !tbaa !11
  %141 = load double, ptr %11, align 8, !tbaa !11
  %142 = load ptr, ptr %9, align 8, !tbaa !9
  %143 = load i32, ptr %12, align 4, !tbaa !5
  %144 = load i32, ptr %10, align 4, !tbaa !5
  %145 = mul nsw i32 4, %144
  %146 = add nsw i32 %143, %145
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds double, ptr %142, i64 %147
  store double %141, ptr %148, align 8, !tbaa !11
  %149 = load ptr, ptr %7, align 8, !tbaa !9
  %150 = load i32, ptr %12, align 4, !tbaa !5
  %151 = load i32, ptr %8, align 4, !tbaa !5
  %152 = mul nsw i32 10, %151
  %153 = add nsw i32 %150, %152
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds double, ptr %149, i64 %154
  %156 = load double, ptr %155, 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 15, %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 = fmul double 0x3FF5DB3D742C2652, %164
  %166 = call double @llvm.fmuladd.f64(double 0x3FD76CF5D0B09956, double %156, double %165)
  store double %166, ptr %11, align 8, !tbaa !11
  %167 = load double, ptr %11, align 8, !tbaa !11
  %168 = load ptr, ptr %9, align 8, !tbaa !9
  %169 = load i32, ptr %12, align 4, !tbaa !5
  %170 = load i32, ptr %10, align 4, !tbaa !5
  %171 = mul nsw i32 5, %170
  %172 = add nsw i32 %169, %171
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds double, ptr %168, i64 %173
  store double %167, ptr %174, align 8, !tbaa !11
  %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 11, %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 = load ptr, ptr %7, align 8, !tbaa !9
  %184 = load i32, ptr %12, align 4, !tbaa !5
  %185 = load i32, ptr %8, align 4, !tbaa !5
  %186 = mul nsw i32 14, %185
  %187 = add nsw i32 %184, %186
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds double, ptr %183, i64 %188
  %190 = load double, ptr %189, align 8, !tbaa !11
  %191 = fmul double 0xBFD76CF5D0B09956, %190
  %192 = call double @llvm.fmuladd.f64(double 0xBFF5DB3D742C2652, double %182, double %191)
  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 6, %196
  %198 = add nsw i32 %195, %197
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds double, ptr %194, i64 %199
  store double %193, ptr %200, align 8, !tbaa !11
  %201 = load ptr, ptr %7, align 8, !tbaa !9
  %202 = load i32, ptr %12, align 4, !tbaa !5
  %203 = load i32, ptr %8, align 4, !tbaa !5
  %204 = mul nsw i32 11, %203
  %205 = add nsw i32 %202, %204
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds double, ptr %201, i64 %206
  %208 = load double, ptr %207, align 8, !tbaa !11
  %209 = load ptr, ptr %7, align 8, !tbaa !9
  %210 = load i32, ptr %12, align 4, !tbaa !5
  %211 = load i32, ptr %8, align 4, !tbaa !5
  %212 = mul nsw i32 14, %211
  %213 = add nsw i32 %210, %212
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds double, ptr %209, i64 %214
  %216 = load double, ptr %215, align 8, !tbaa !11
  %217 = fmul double 0x3FF5DB3D742C2652, %216
  %218 = call double @llvm.fmuladd.f64(double 0x3FD76CF5D0B09956, double %208, double %217)
  store double %218, ptr %11, align 8, !tbaa !11
  %219 = load double, ptr %11, align 8, !tbaa !11
  %220 = load ptr, ptr %9, align 8, !tbaa !9
  %221 = load i32, ptr %12, align 4, !tbaa !5
  %222 = load i32, ptr %10, align 4, !tbaa !5
  %223 = mul nsw i32 7, %222
  %224 = add nsw i32 %221, %223
  %225 = sext i32 %224 to i64
  %226 = getelementptr inbounds double, ptr %220, i64 %225
  store double %219, ptr %226, align 8, !tbaa !11
  %227 = load ptr, ptr %7, align 8, !tbaa !9
  %228 = load i32, ptr %12, align 4, !tbaa !5
  %229 = load i32, ptr %8, align 4, !tbaa !5
  %230 = mul nsw i32 17, %229
  %231 = add nsw i32 %228, %230
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds double, ptr %227, i64 %232
  %234 = load double, ptr %233, align 8, !tbaa !11
  %235 = load ptr, ptr %7, align 8, !tbaa !9
  %236 = load i32, ptr %12, align 4, !tbaa !5
  %237 = load i32, ptr %8, align 4, !tbaa !5
  %238 = mul nsw i32 20, %237
  %239 = add nsw i32 %236, %238
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds double, ptr %235, i64 %240
  %242 = load double, ptr %241, align 8, !tbaa !11
  %243 = fmul double 0xBFD76CF5D0B09956, %242
  %244 = call double @llvm.fmuladd.f64(double 0xBFF5DB3D742C2652, double %234, double %243)
  store double %244, ptr %11, align 8, !tbaa !11
  %245 = load double, ptr %11, align 8, !tbaa !11
  %246 = load ptr, ptr %9, align 8, !tbaa !9
  %247 = load i32, ptr %12, align 4, !tbaa !5
  %248 = load i32, ptr %10, align 4, !tbaa !5
  %249 = mul nsw i32 8, %248
  %250 = add nsw i32 %247, %249
  %251 = sext i32 %250 to i64
  %252 = getelementptr inbounds double, ptr %246, i64 %251
  store double %245, ptr %252, align 8, !tbaa !11
  %253 = load ptr, ptr %7, align 8, !tbaa !9
  %254 = load i32, ptr %12, align 4, !tbaa !5
  %255 = load i32, ptr %8, align 4, !tbaa !5
  %256 = mul nsw i32 16, %255
  %257 = add nsw i32 %254, %256
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds double, ptr %253, i64 %258
  %260 = load double, ptr %259, align 8, !tbaa !11
  %261 = load ptr, ptr %7, align 8, !tbaa !9
  %262 = load i32, ptr %12, align 4, !tbaa !5
  %263 = load i32, ptr %8, align 4, !tbaa !5
  %264 = mul nsw i32 21, %263
  %265 = add nsw i32 %262, %264
  %266 = sext i32 %265 to i64
  %267 = getelementptr inbounds double, ptr %261, i64 %266
  %268 = load double, ptr %267, align 8, !tbaa !11
  %269 = fmul double 0xBFD76CF5D0B09956, %268
  %270 = call double @llvm.fmuladd.f64(double 0xBFF5DB3D742C2652, double %260, double %269)
  store double %270, ptr %11, align 8, !tbaa !11
  %271 = load double, ptr %11, align 8, !tbaa !11
  %272 = load ptr, ptr %9, align 8, !tbaa !9
  %273 = load i32, ptr %12, align 4, !tbaa !5
  %274 = load i32, ptr %10, align 4, !tbaa !5
  %275 = mul nsw i32 9, %274
  %276 = add nsw i32 %273, %275
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds double, ptr %272, i64 %277
  store double %271, ptr %278, align 8, !tbaa !11
  %279 = load ptr, ptr %7, align 8, !tbaa !9
  %280 = load i32, ptr %12, align 4, !tbaa !5
  %281 = load i32, ptr %8, align 4, !tbaa !5
  %282 = mul nsw i32 17, %281
  %283 = add nsw i32 %280, %282
  %284 = sext i32 %283 to i64
  %285 = getelementptr inbounds double, ptr %279, i64 %284
  %286 = load double, ptr %285, align 8, !tbaa !11
  %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 20, %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 = fmul double 0x3FF5DB3D742C2652, %294
  %296 = call double @llvm.fmuladd.f64(double 0x3FD76CF5D0B09956, double %286, double %295)
  store double %296, ptr %11, align 8, !tbaa !11
  %297 = load double, ptr %11, align 8, !tbaa !11
  %298 = load ptr, ptr %9, align 8, !tbaa !9
  %299 = load i32, ptr %12, align 4, !tbaa !5
  %300 = load i32, ptr %10, align 4, !tbaa !5
  %301 = mul nsw i32 10, %300
  %302 = add nsw i32 %299, %301
  %303 = sext i32 %302 to i64
  %304 = getelementptr inbounds double, ptr %298, i64 %303
  store double %297, ptr %304, align 8, !tbaa !11
  %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 16, %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 = 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 21, %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 = fmul double 0x3FF5DB3D742C2652, %320
  %322 = call double @llvm.fmuladd.f64(double 0x3FD76CF5D0B09956, double %312, double %321)
  store double %322, ptr %11, align 8, !tbaa !11
  %323 = load double, ptr %11, align 8, !tbaa !11
  %324 = load ptr, ptr %9, align 8, !tbaa !9
  %325 = load i32, ptr %12, align 4, !tbaa !5
  %326 = load i32, ptr %10, align 4, !tbaa !5
  %327 = mul nsw i32 11, %326
  %328 = add nsw i32 %325, %327
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds double, ptr %324, i64 %329
  store double %323, ptr %330, align 8, !tbaa !11
  %331 = load ptr, ptr %7, align 8, !tbaa !9
  %332 = load i32, ptr %12, align 4, !tbaa !5
  %333 = load i32, ptr %8, align 4, !tbaa !5
  %334 = mul nsw i32 19, %333
  %335 = add nsw i32 %332, %334
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds double, ptr %331, i64 %336
  %338 = load double, ptr %337, align 8, !tbaa !11
  %339 = load ptr, ptr %7, align 8, !tbaa !9
  %340 = load i32, ptr %12, align 4, !tbaa !5
  %341 = load i32, ptr %8, align 4, !tbaa !5
  %342 = mul nsw i32 22, %341
  %343 = add nsw i32 %340, %342
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds double, ptr %339, i64 %344
  %346 = load double, ptr %345, align 8, !tbaa !11
  %347 = fmul double 0xBFD76CF5D0B09956, %346
  %348 = call double @llvm.fmuladd.f64(double 0xBFF5DB3D742C2652, double %338, double %347)
  store double %348, ptr %11, align 8, !tbaa !11
  %349 = load double, ptr %11, align 8, !tbaa !11
  %350 = load ptr, ptr %9, align 8, !tbaa !9
  %351 = load i32, ptr %12, align 4, !tbaa !5
  %352 = load i32, ptr %10, align 4, !tbaa !5
  %353 = mul nsw i32 12, %352
  %354 = add nsw i32 %351, %353
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds double, ptr %350, i64 %355
  store double %349, ptr %356, align 8, !tbaa !11
  %357 = load ptr, ptr %7, align 8, !tbaa !9
  %358 = load i32, ptr %12, align 4, !tbaa !5
  %359 = load i32, ptr %8, align 4, !tbaa !5
  %360 = mul nsw i32 18, %359
  %361 = add nsw i32 %358, %360
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds double, ptr %357, i64 %362
  %364 = load double, ptr %363, align 8, !tbaa !11
  %365 = load ptr, ptr %7, align 8, !tbaa !9
  %366 = load i32, ptr %12, align 4, !tbaa !5
  %367 = load i32, ptr %8, align 4, !tbaa !5
  %368 = mul nsw i32 23, %367
  %369 = add nsw i32 %366, %368
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds double, ptr %365, i64 %370
  %372 = load double, ptr %371, align 8, !tbaa !11
  %373 = fmul double 0xBFD76CF5D0B09956, %372
  %374 = call double @llvm.fmuladd.f64(double 0xBFF5DB3D742C2652, double %364, double %373)
  store double %374, ptr %11, align 8, !tbaa !11
  %375 = load double, ptr %11, align 8, !tbaa !11
  %376 = load ptr, ptr %9, align 8, !tbaa !9
  %377 = load i32, ptr %12, align 4, !tbaa !5
  %378 = load i32, ptr %10, align 4, !tbaa !5
  %379 = mul nsw i32 13, %378
  %380 = add nsw i32 %377, %379
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds double, ptr %376, i64 %381
  store double %375, ptr %382, align 8, !tbaa !11
  %383 = load ptr, ptr %7, align 8, !tbaa !9
  %384 = load i32, ptr %12, align 4, !tbaa !5
  %385 = load i32, ptr %8, align 4, !tbaa !5
  %386 = mul nsw i32 19, %385
  %387 = add nsw i32 %384, %386
  %388 = sext i32 %387 to i64
  %389 = getelementptr inbounds double, ptr %383, i64 %388
  %390 = load double, ptr %389, align 8, !tbaa !11
  %391 = load ptr, ptr %7, align 8, !tbaa !9
  %392 = load i32, ptr %12, align 4, !tbaa !5
  %393 = load i32, ptr %8, align 4, !tbaa !5
  %394 = mul nsw i32 22, %393
  %395 = add nsw i32 %392, %394
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds double, ptr %391, i64 %396
  %398 = load double, ptr %397, align 8, !tbaa !11
  %399 = fmul double 0x3FF5DB3D742C2652, %398
  %400 = call double @llvm.fmuladd.f64(double 0x3FD76CF5D0B09956, double %390, double %399)
  store double %400, ptr %11, align 8, !tbaa !11
  %401 = load double, ptr %11, align 8, !tbaa !11
  %402 = load ptr, ptr %9, align 8, !tbaa !9
  %403 = load i32, ptr %12, align 4, !tbaa !5
  %404 = load i32, ptr %10, align 4, !tbaa !5
  %405 = mul nsw i32 14, %404
  %406 = add nsw i32 %403, %405
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds double, ptr %402, i64 %407
  store double %401, ptr %408, align 8, !tbaa !11
  %409 = load ptr, ptr %7, align 8, !tbaa !9
  %410 = load i32, ptr %12, align 4, !tbaa !5
  %411 = load i32, ptr %8, align 4, !tbaa !5
  %412 = mul nsw i32 18, %411
  %413 = add nsw i32 %410, %412
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds double, ptr %409, i64 %414
  %416 = load double, ptr %415, align 8, !tbaa !11
  %417 = load ptr, ptr %7, align 8, !tbaa !9
  %418 = load i32, ptr %12, align 4, !tbaa !5
  %419 = load i32, ptr %8, align 4, !tbaa !5
  %420 = mul nsw i32 23, %419
  %421 = add nsw i32 %418, %420
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds double, ptr %417, i64 %422
  %424 = load double, ptr %423, align 8, !tbaa !11
  %425 = fmul double 0x3FF5DB3D742C2652, %424
  %426 = call double @llvm.fmuladd.f64(double 0x3FD76CF5D0B09956, double %416, double %425)
  store double %426, ptr %11, align 8, !tbaa !11
  %427 = load double, ptr %11, align 8, !tbaa !11
  %428 = load ptr, ptr %9, align 8, !tbaa !9
  %429 = load i32, ptr %12, align 4, !tbaa !5
  %430 = load i32, ptr %10, align 4, !tbaa !5
  %431 = mul nsw i32 15, %430
  %432 = add nsw i32 %429, %431
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds double, ptr %428, i64 %433
  store double %427, ptr %434, align 8, !tbaa !11
  %435 = load ptr, ptr %7, align 8, !tbaa !9
  %436 = load i32, ptr %12, align 4, !tbaa !5
  %437 = load i32, ptr %8, align 4, !tbaa !5
  %438 = mul nsw i32 0, %437
  %439 = add nsw i32 %436, %438
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds double, ptr %435, i64 %440
  %442 = load double, ptr %441, align 8, !tbaa !11
  %443 = load ptr, ptr %7, align 8, !tbaa !9
  %444 = load i32, ptr %12, align 4, !tbaa !5
  %445 = load i32, ptr %8, align 4, !tbaa !5
  %446 = mul nsw i32 5, %445
  %447 = add nsw i32 %444, %446
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds double, ptr %443, i64 %448
  %450 = load double, ptr %449, align 8, !tbaa !11
  %451 = fmul double 0xBFD76CF5D0B09956, %450
  %452 = call double @llvm.fmuladd.f64(double 0xBFF5DB3D742C2652, double %442, double %451)
  store double %452, ptr %11, align 8, !tbaa !11
  %453 = load double, ptr %11, align 8, !tbaa !11
  %454 = load ptr, ptr %9, align 8, !tbaa !9
  %455 = load i32, ptr %12, align 4, !tbaa !5
  %456 = load i32, ptr %10, align 4, !tbaa !5
  %457 = mul nsw i32 16, %456
  %458 = add nsw i32 %455, %457
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds double, ptr %454, i64 %459
  store double %453, ptr %460, align 8, !tbaa !11
  %461 = load ptr, ptr %7, align 8, !tbaa !9
  %462 = load i32, ptr %12, align 4, !tbaa !5
  %463 = load i32, ptr %8, align 4, !tbaa !5
  %464 = mul nsw i32 1, %463
  %465 = add nsw i32 %462, %464
  %466 = sext i32 %465 to i64
  %467 = getelementptr inbounds double, ptr %461, i64 %466
  %468 = load double, ptr %467, align 8, !tbaa !11
  %469 = load ptr, ptr %7, align 8, !tbaa !9
  %470 = load i32, ptr %12, align 4, !tbaa !5
  %471 = load i32, ptr %8, align 4, !tbaa !5
  %472 = mul nsw i32 4, %471
  %473 = add nsw i32 %470, %472
  %474 = sext i32 %473 to i64
  %475 = getelementptr inbounds double, ptr %469, i64 %474
  %476 = load double, ptr %475, align 8, !tbaa !11
  %477 = fmul double 0xBFD76CF5D0B09956, %476
  %478 = call double @llvm.fmuladd.f64(double 0xBFF5DB3D742C2652, double %468, double %477)
  store double %478, ptr %11, align 8, !tbaa !11
  %479 = load double, ptr %11, align 8, !tbaa !11
  %480 = load ptr, ptr %9, align 8, !tbaa !9
  %481 = load i32, ptr %12, align 4, !tbaa !5
  %482 = load i32, ptr %10, align 4, !tbaa !5
  %483 = mul nsw i32 17, %482
  %484 = add nsw i32 %481, %483
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds double, ptr %480, i64 %485
  store double %479, ptr %486, 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 2, %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 = load ptr, ptr %7, align 8, !tbaa !9
  %496 = load i32, ptr %12, align 4, !tbaa !5
  %497 = load i32, ptr %8, align 4, !tbaa !5
  %498 = mul nsw i32 7, %497
  %499 = add nsw i32 %496, %498
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds double, ptr %495, i64 %500
  %502 = load double, ptr %501, align 8, !tbaa !11
  %503 = fmul double 0xBFD76CF5D0B09956, %502
  %504 = call double @llvm.fmuladd.f64(double 0xBFF5DB3D742C2652, double %494, double %503)
  store double %504, ptr %11, align 8, !tbaa !11
  %505 = load double, ptr %11, align 8, !tbaa !11
  %506 = load ptr, ptr %9, align 8, !tbaa !9
  %507 = load i32, ptr %12, align 4, !tbaa !5
  %508 = load i32, ptr %10, align 4, !tbaa !5
  %509 = mul nsw i32 18, %508
  %510 = add nsw i32 %507, %509
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds double, ptr %506, i64 %511
  store double %505, ptr %512, align 8, !tbaa !11
  %513 = load ptr, ptr %7, align 8, !tbaa !9
  %514 = load i32, ptr %12, align 4, !tbaa !5
  %515 = load i32, ptr %8, align 4, !tbaa !5
  %516 = mul nsw i32 3, %515
  %517 = add nsw i32 %514, %516
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds double, ptr %513, i64 %518
  %520 = load double, ptr %519, align 8, !tbaa !11
  %521 = load ptr, ptr %7, align 8, !tbaa !9
  %522 = load i32, ptr %12, align 4, !tbaa !5
  %523 = load i32, ptr %8, align 4, !tbaa !5
  %524 = mul nsw i32 6, %523
  %525 = add nsw i32 %522, %524
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds double, ptr %521, i64 %526
  %528 = load double, ptr %527, align 8, !tbaa !11
  %529 = fmul double 0xBFD76CF5D0B09956, %528
  %530 = call double @llvm.fmuladd.f64(double 0xBFF5DB3D742C2652, double %520, double %529)
  store double %530, ptr %11, align 8, !tbaa !11
  %531 = load double, ptr %11, align 8, !tbaa !11
  %532 = load ptr, ptr %9, align 8, !tbaa !9
  %533 = load i32, ptr %12, align 4, !tbaa !5
  %534 = load i32, ptr %10, align 4, !tbaa !5
  %535 = mul nsw i32 19, %534
  %536 = add nsw i32 %533, %535
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds double, ptr %532, i64 %537
  store double %531, ptr %538, align 8, !tbaa !11
  %539 = load ptr, ptr %7, align 8, !tbaa !9
  %540 = load i32, ptr %12, align 4, !tbaa !5
  %541 = load i32, ptr %8, align 4, !tbaa !5
  %542 = mul nsw i32 0, %541
  %543 = add nsw i32 %540, %542
  %544 = sext i32 %543 to i64
  %545 = getelementptr inbounds double, ptr %539, i64 %544
  %546 = load double, ptr %545, align 8, !tbaa !11
  %547 = load ptr, ptr %7, align 8, !tbaa !9
  %548 = load i32, ptr %12, align 4, !tbaa !5
  %549 = load i32, ptr %8, align 4, !tbaa !5
  %550 = mul nsw i32 5, %549
  %551 = add nsw i32 %548, %550
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds double, ptr %547, i64 %552
  %554 = load double, ptr %553, align 8, !tbaa !11
  %555 = fmul double 0x3FF5DB3D742C2652, %554
  %556 = call double @llvm.fmuladd.f64(double 0x3FD76CF5D0B09956, double %546, double %555)
  store double %556, ptr %11, align 8, !tbaa !11
  %557 = load double, ptr %11, align 8, !tbaa !11
  %558 = load ptr, ptr %9, align 8, !tbaa !9
  %559 = load i32, ptr %12, align 4, !tbaa !5
  %560 = load i32, ptr %10, align 4, !tbaa !5
  %561 = mul nsw i32 20, %560
  %562 = add nsw i32 %559, %561
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds double, ptr %558, i64 %563
  store double %557, ptr %564, align 8, !tbaa !11
  %565 = load ptr, ptr %7, align 8, !tbaa !9
  %566 = load i32, ptr %12, align 4, !tbaa !5
  %567 = load i32, ptr %8, align 4, !tbaa !5
  %568 = mul nsw i32 1, %567
  %569 = add nsw i32 %566, %568
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds double, ptr %565, i64 %570
  %572 = load double, ptr %571, align 8, !tbaa !11
  %573 = load ptr, ptr %7, align 8, !tbaa !9
  %574 = load i32, ptr %12, align 4, !tbaa !5
  %575 = load i32, ptr %8, align 4, !tbaa !5
  %576 = mul nsw i32 4, %575
  %577 = add nsw i32 %574, %576
  %578 = sext i32 %577 to i64
  %579 = getelementptr inbounds double, ptr %573, i64 %578
  %580 = load double, ptr %579, align 8, !tbaa !11
  %581 = fmul double 0x3FF5DB3D742C2652, %580
  %582 = call double @llvm.fmuladd.f64(double 0x3FD76CF5D0B09956, double %572, double %581)
  store double %582, ptr %11, align 8, !tbaa !11
  %583 = load double, ptr %11, align 8, !tbaa !11
  %584 = load ptr, ptr %9, align 8, !tbaa !9
  %585 = load i32, ptr %12, align 4, !tbaa !5
  %586 = load i32, ptr %10, align 4, !tbaa !5
  %587 = mul nsw i32 21, %586
  %588 = add nsw i32 %585, %587
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds double, ptr %584, i64 %589
  store double %583, ptr %590, align 8, !tbaa !11
  %591 = load ptr, ptr %7, align 8, !tbaa !9
  %592 = load i32, ptr %12, align 4, !tbaa !5
  %593 = load i32, ptr %8, align 4, !tbaa !5
  %594 = mul nsw i32 2, %593
  %595 = add nsw i32 %592, %594
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds double, ptr %591, i64 %596
  %598 = load double, ptr %597, align 8, !tbaa !11
  %599 = load ptr, ptr %7, align 8, !tbaa !9
  %600 = load i32, ptr %12, align 4, !tbaa !5
  %601 = load i32, ptr %8, align 4, !tbaa !5
  %602 = mul nsw i32 7, %601
  %603 = add nsw i32 %600, %602
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds double, ptr %599, i64 %604
  %606 = load double, ptr %605, align 8, !tbaa !11
  %607 = fmul double 0x3FF5DB3D742C2652, %606
  %608 = call double @llvm.fmuladd.f64(double 0x3FD76CF5D0B09956, double %598, double %607)
  store double %608, ptr %11, align 8, !tbaa !11
  %609 = load double, ptr %11, align 8, !tbaa !11
  %610 = load ptr, ptr %9, align 8, !tbaa !9
  %611 = load i32, ptr %12, align 4, !tbaa !5
  %612 = load i32, ptr %10, align 4, !tbaa !5
  %613 = mul nsw i32 22, %612
  %614 = add nsw i32 %611, %613
  %615 = sext i32 %614 to i64
  %616 = getelementptr inbounds double, ptr %610, i64 %615
  store double %609, ptr %616, align 8, !tbaa !11
  %617 = load ptr, ptr %7, align 8, !tbaa !9
  %618 = load i32, ptr %12, align 4, !tbaa !5
  %619 = load i32, ptr %8, align 4, !tbaa !5
  %620 = mul nsw i32 3, %619
  %621 = add nsw i32 %618, %620
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds double, ptr %617, i64 %622
  %624 = load double, ptr %623, align 8, !tbaa !11
  %625 = load ptr, ptr %7, align 8, !tbaa !9
  %626 = load i32, ptr %12, align 4, !tbaa !5
  %627 = load i32, ptr %8, align 4, !tbaa !5
  %628 = mul nsw i32 6, %627
  %629 = add nsw i32 %626, %628
  %630 = sext i32 %629 to i64
  %631 = getelementptr inbounds double, ptr %625, i64 %630
  %632 = load double, ptr %631, align 8, !tbaa !11
  %633 = fmul double 0x3FF5DB3D742C2652, %632
  %634 = call double @llvm.fmuladd.f64(double 0x3FD76CF5D0B09956, double %624, double %633)
  store double %634, ptr %11, align 8, !tbaa !11
  %635 = load double, ptr %11, align 8, !tbaa !11
  %636 = load ptr, ptr %9, align 8, !tbaa !9
  %637 = load i32, ptr %12, align 4, !tbaa !5
  %638 = load i32, ptr %10, align 4, !tbaa !5
  %639 = mul nsw i32 23, %638
  %640 = add nsw i32 %637, %639
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds double, ptr %636, i64 %641
  store double %635, ptr %642, align 8, !tbaa !11
  br label %643

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

646:                                              ; 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_14215087943608699842_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, 3
  %8 = mul nsw i32 %2, 13
  %9 = mul nsw i32 %2, 9
  %10 = mul nsw i32 %2, 12
  %11 = shl nsw i32 %4, 1
  %12 = mul nsw i32 %4, 3
  %13 = mul nsw i32 %2, 10
  %14 = mul nsw i32 %2, 15
  %15 = shl nsw i32 %4, 2
  %16 = mul nsw i32 %4, 5
  %17 = mul nsw i32 %2, 11
  %18 = mul nsw i32 %2, 14
  %19 = mul nsw i32 %4, 6
  %20 = mul nsw i32 %4, 7
  %21 = mul nsw i32 %2, 17
  %22 = mul nsw i32 %2, 20
  %23 = shl nsw i32 %4, 3
  %24 = shl nsw i32 %2, 4
  %25 = mul nsw i32 %2, 21
  %26 = mul nsw i32 %4, 9
  %27 = mul nsw i32 %4, 10
  %28 = mul nsw i32 %4, 11
  %29 = mul nsw i32 %2, 19
  %30 = mul nsw i32 %2, 22
  %31 = mul nsw i32 %4, 12
  %32 = mul nsw i32 %2, 18
  %33 = mul nsw i32 %2, 23
  %34 = mul nsw i32 %4, 13
  %35 = mul nsw i32 %4, 14
  %36 = mul nsw i32 %4, 15
  %37 = mul nsw i32 %2, 5
  %38 = shl nsw i32 %4, 4
  %39 = shl nsw i32 %2, 2
  %40 = mul nsw i32 %4, 17
  %41 = shl nsw i32 %2, 1
  %42 = mul nsw i32 %2, 7
  %43 = mul nsw i32 %4, 18
  %44 = mul nsw i32 %2, 3
  %45 = mul nsw i32 %2, 6
  %46 = mul nsw i32 %4, 19
  %47 = mul nsw i32 %4, 20
  %48 = mul nsw i32 %4, 21
  %49 = mul nsw i32 %4, 22
  %50 = mul nsw i32 %4, 23
  %51 = sext i32 %7 to i64
  %52 = sext i32 %8 to i64
  %53 = sext i32 %4 to i64
  %54 = sext i32 %9 to i64
  %55 = sext i32 %10 to i64
  %56 = sext i32 %11 to i64
  %57 = sext i32 %12 to i64
  %58 = sext i32 %13 to i64
  %59 = sext i32 %14 to i64
  %60 = sext i32 %15 to i64
  %61 = sext i32 %16 to i64
  %62 = sext i32 %17 to i64
  %63 = sext i32 %18 to i64
  %64 = sext i32 %19 to i64
  %65 = sext i32 %20 to i64
  %66 = sext i32 %21 to i64
  %67 = sext i32 %22 to i64
  %68 = sext i32 %23 to i64
  %69 = sext i32 %24 to i64
  %70 = sext i32 %25 to i64
  %71 = sext i32 %26 to i64
  %72 = sext i32 %27 to i64
  %73 = sext i32 %28 to i64
  %74 = sext i32 %29 to i64
  %75 = sext i32 %30 to i64
  %76 = sext i32 %31 to i64
  %77 = sext i32 %32 to i64
  %78 = sext i32 %33 to i64
  %79 = sext i32 %34 to i64
  %80 = sext i32 %35 to i64
  %81 = sext i32 %36 to i64
  %82 = sext i32 %37 to i64
  %83 = sext i32 %38 to i64
  %84 = sext i32 %2 to i64
  %85 = sext i32 %39 to i64
  %86 = sext i32 %40 to i64
  %87 = sext i32 %41 to i64
  %88 = sext i32 %42 to i64
  %89 = sext i32 %43 to i64
  %90 = sext i32 %44 to i64
  %91 = sext i32 %45 to i64
  %92 = sext i32 %46 to i64
  %93 = sext i32 %47 to i64
  %94 = sext i32 %48 to i64
  %95 = sext i32 %49 to i64
  %96 = sext i32 %50 to i64
  %wide.trip.count = zext nneg i32 %0 to i64
  %invariant.gep = getelementptr double, ptr %1, i64 %51
  %invariant.gep244 = getelementptr double, ptr %1, i64 %52
  %invariant.gep246 = getelementptr double, ptr %3, i64 %53
  %invariant.gep248 = getelementptr double, ptr %1, i64 %54
  %invariant.gep250 = getelementptr double, ptr %1, i64 %55
  %invariant.gep252 = getelementptr double, ptr %3, i64 %56
  %invariant.gep254 = getelementptr double, ptr %3, i64 %57
  %invariant.gep256 = getelementptr double, ptr %1, i64 %58
  %invariant.gep258 = getelementptr double, ptr %1, i64 %59
  %invariant.gep260 = getelementptr double, ptr %3, i64 %60
  %invariant.gep262 = getelementptr double, ptr %3, i64 %61
  %invariant.gep264 = getelementptr double, ptr %1, i64 %62
  %invariant.gep266 = getelementptr double, ptr %1, i64 %63
  %invariant.gep268 = getelementptr double, ptr %3, i64 %64
  %invariant.gep270 = getelementptr double, ptr %3, i64 %65
  %invariant.gep272 = getelementptr double, ptr %1, i64 %66
  %invariant.gep274 = getelementptr double, ptr %1, i64 %67
  %invariant.gep276 = getelementptr double, ptr %3, i64 %68
  %invariant.gep278 = getelementptr double, ptr %1, i64 %69
  %invariant.gep280 = getelementptr double, ptr %1, i64 %70
  %invariant.gep282 = getelementptr double, ptr %3, i64 %71
  %invariant.gep284 = getelementptr double, ptr %3, i64 %72
  %invariant.gep286 = getelementptr double, ptr %3, i64 %73
  %invariant.gep288 = getelementptr double, ptr %1, i64 %74
  %invariant.gep290 = getelementptr double, ptr %1, i64 %75
  %invariant.gep292 = getelementptr double, ptr %3, i64 %76
  %invariant.gep294 = getelementptr double, ptr %1, i64 %77
  %invariant.gep296 = getelementptr double, ptr %1, i64 %78
  %invariant.gep298 = getelementptr double, ptr %3, i64 %79
  %invariant.gep300 = getelementptr double, ptr %3, i64 %80
  %invariant.gep302 = getelementptr double, ptr %3, i64 %81
  %invariant.gep304 = getelementptr double, ptr %1, i64 %82
  %invariant.gep306 = getelementptr double, ptr %3, i64 %83
  %invariant.gep308 = getelementptr double, ptr %1, i64 %84
  %invariant.gep310 = getelementptr double, ptr %1, i64 %85
  %invariant.gep312 = getelementptr double, ptr %3, i64 %86
  %invariant.gep314 = getelementptr double, ptr %1, i64 %87
  %invariant.gep316 = getelementptr double, ptr %1, i64 %88
  %invariant.gep318 = getelementptr double, ptr %3, i64 %89
  %invariant.gep320 = getelementptr double, ptr %1, i64 %90
  %invariant.gep322 = getelementptr double, ptr %1, i64 %91
  %invariant.gep324 = getelementptr double, ptr %3, i64 %92
  %invariant.gep326 = getelementptr double, ptr %3, i64 %93
  %invariant.gep328 = getelementptr double, ptr %3, i64 %94
  %invariant.gep330 = getelementptr double, ptr %3, i64 %95
  %invariant.gep332 = getelementptr double, ptr %3, i64 %96
  br label %97

._crit_edge:                                      ; preds = %97, %5
  ret void

97:                                               ; preds = %.lr.ph, %97
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %97 ]
  %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv
  %98 = load double, ptr %gep, align 8, !tbaa !5
  %gep245 = getelementptr double, ptr %invariant.gep244, i64 %indvars.iv
  %99 = load double, ptr %gep245, align 8, !tbaa !5
  %100 = fmul double %99, 0xBFD76CF5D0B09956
  %101 = tail call double @llvm.fmuladd.f64(double %98, double 0xBFF5DB3D742C2652, double %100)
  %102 = getelementptr inbounds double, ptr %3, i64 %indvars.iv
  store double %101, ptr %102, align 8, !tbaa !5
  %103 = fmul double %99, 0x3FF5DB3D742C2652
  %104 = tail call double @llvm.fmuladd.f64(double %98, double 0x3FD76CF5D0B09956, double %103)
  %gep247 = getelementptr double, ptr %invariant.gep246, i64 %indvars.iv
  store double %104, ptr %gep247, align 8, !tbaa !5
  %gep249 = getelementptr double, ptr %invariant.gep248, i64 %indvars.iv
  %105 = load double, ptr %gep249, align 8, !tbaa !5
  %gep251 = getelementptr double, ptr %invariant.gep250, i64 %indvars.iv
  %106 = load double, ptr %gep251, align 8, !tbaa !5
  %107 = fmul double %106, 0xBFD76CF5D0B09956
  %108 = tail call double @llvm.fmuladd.f64(double %105, double 0xBFF5DB3D742C2652, double %107)
  %gep253 = getelementptr double, ptr %invariant.gep252, i64 %indvars.iv
  store double %108, ptr %gep253, align 8, !tbaa !5
  %109 = fmul double %106, 0x3FF5DB3D742C2652
  %110 = tail call double @llvm.fmuladd.f64(double %105, double 0x3FD76CF5D0B09956, double %109)
  %gep255 = getelementptr double, ptr %invariant.gep254, i64 %indvars.iv
  store double %110, ptr %gep255, align 8, !tbaa !5
  %gep257 = getelementptr double, ptr %invariant.gep256, i64 %indvars.iv
  %111 = load double, ptr %gep257, align 8, !tbaa !5
  %gep259 = getelementptr double, ptr %invariant.gep258, i64 %indvars.iv
  %112 = load double, ptr %gep259, align 8, !tbaa !5
  %113 = fmul double %112, 0xBFD76CF5D0B09956
  %114 = tail call double @llvm.fmuladd.f64(double %111, double 0xBFF5DB3D742C2652, double %113)
  %gep261 = getelementptr double, ptr %invariant.gep260, i64 %indvars.iv
  store double %114, ptr %gep261, align 8, !tbaa !5
  %115 = fmul double %112, 0x3FF5DB3D742C2652
  %116 = tail call double @llvm.fmuladd.f64(double %111, double 0x3FD76CF5D0B09956, double %115)
  %gep263 = getelementptr double, ptr %invariant.gep262, i64 %indvars.iv
  store double %116, ptr %gep263, align 8, !tbaa !5
  %gep265 = getelementptr double, ptr %invariant.gep264, i64 %indvars.iv
  %117 = load double, ptr %gep265, align 8, !tbaa !5
  %gep267 = getelementptr double, ptr %invariant.gep266, i64 %indvars.iv
  %118 = load double, ptr %gep267, align 8, !tbaa !5
  %119 = fmul double %118, 0xBFD76CF5D0B09956
  %120 = tail call double @llvm.fmuladd.f64(double %117, double 0xBFF5DB3D742C2652, double %119)
  %gep269 = getelementptr double, ptr %invariant.gep268, i64 %indvars.iv
  store double %120, ptr %gep269, align 8, !tbaa !5
  %121 = fmul double %118, 0x3FF5DB3D742C2652
  %122 = tail call double @llvm.fmuladd.f64(double %117, double 0x3FD76CF5D0B09956, double %121)
  %gep271 = getelementptr double, ptr %invariant.gep270, i64 %indvars.iv
  store double %122, ptr %gep271, align 8, !tbaa !5
  %gep273 = getelementptr double, ptr %invariant.gep272, i64 %indvars.iv
  %123 = load double, ptr %gep273, align 8, !tbaa !5
  %gep275 = getelementptr double, ptr %invariant.gep274, i64 %indvars.iv
  %124 = load double, ptr %gep275, align 8, !tbaa !5
  %125 = fmul double %124, 0xBFD76CF5D0B09956
  %126 = tail call double @llvm.fmuladd.f64(double %123, double 0xBFF5DB3D742C2652, double %125)
  %gep277 = getelementptr double, ptr %invariant.gep276, i64 %indvars.iv
  store double %126, ptr %gep277, align 8, !tbaa !5
  %gep279 = getelementptr double, ptr %invariant.gep278, i64 %indvars.iv
  %127 = load double, ptr %gep279, align 8, !tbaa !5
  %gep281 = getelementptr double, ptr %invariant.gep280, i64 %indvars.iv
  %128 = load double, ptr %gep281, align 8, !tbaa !5
  %129 = fmul double %128, 0xBFD76CF5D0B09956
  %130 = tail call double @llvm.fmuladd.f64(double %127, double 0xBFF5DB3D742C2652, double %129)
  %gep283 = getelementptr double, ptr %invariant.gep282, i64 %indvars.iv
  store double %130, ptr %gep283, align 8, !tbaa !5
  %131 = fmul double %124, 0x3FF5DB3D742C2652
  %132 = tail call double @llvm.fmuladd.f64(double %123, double 0x3FD76CF5D0B09956, double %131)
  %gep285 = getelementptr double, ptr %invariant.gep284, i64 %indvars.iv
  store double %132, ptr %gep285, align 8, !tbaa !5
  %133 = fmul double %128, 0x3FF5DB3D742C2652
  %134 = tail call double @llvm.fmuladd.f64(double %127, double 0x3FD76CF5D0B09956, double %133)
  %gep287 = getelementptr double, ptr %invariant.gep286, i64 %indvars.iv
  store double %134, ptr %gep287, align 8, !tbaa !5
  %gep289 = getelementptr double, ptr %invariant.gep288, i64 %indvars.iv
  %135 = load double, ptr %gep289, align 8, !tbaa !5
  %gep291 = getelementptr double, ptr %invariant.gep290, i64 %indvars.iv
  %136 = load double, ptr %gep291, align 8, !tbaa !5
  %137 = fmul double %136, 0xBFD76CF5D0B09956
  %138 = tail call double @llvm.fmuladd.f64(double %135, double 0xBFF5DB3D742C2652, double %137)
  %gep293 = getelementptr double, ptr %invariant.gep292, i64 %indvars.iv
  store double %138, ptr %gep293, align 8, !tbaa !5
  %gep295 = getelementptr double, ptr %invariant.gep294, i64 %indvars.iv
  %139 = load double, ptr %gep295, align 8, !tbaa !5
  %gep297 = getelementptr double, ptr %invariant.gep296, i64 %indvars.iv
  %140 = load double, ptr %gep297, align 8, !tbaa !5
  %141 = fmul double %140, 0xBFD76CF5D0B09956
  %142 = tail call double @llvm.fmuladd.f64(double %139, double 0xBFF5DB3D742C2652, double %141)
  %gep299 = getelementptr double, ptr %invariant.gep298, i64 %indvars.iv
  store double %142, ptr %gep299, align 8, !tbaa !5
  %143 = fmul double %136, 0x3FF5DB3D742C2652
  %144 = tail call double @llvm.fmuladd.f64(double %135, double 0x3FD76CF5D0B09956, double %143)
  %gep301 = getelementptr double, ptr %invariant.gep300, i64 %indvars.iv
  store double %144, ptr %gep301, align 8, !tbaa !5
  %145 = fmul double %140, 0x3FF5DB3D742C2652
  %146 = tail call double @llvm.fmuladd.f64(double %139, double 0x3FD76CF5D0B09956, double %145)
  %gep303 = getelementptr double, ptr %invariant.gep302, i64 %indvars.iv
  store double %146, ptr %gep303, align 8, !tbaa !5
  %147 = getelementptr inbounds double, ptr %1, i64 %indvars.iv
  %148 = load double, ptr %147, align 8, !tbaa !5
  %gep305 = getelementptr double, ptr %invariant.gep304, i64 %indvars.iv
  %149 = load double, ptr %gep305, align 8, !tbaa !5
  %150 = fmul double %149, 0xBFD76CF5D0B09956
  %151 = tail call double @llvm.fmuladd.f64(double %148, double 0xBFF5DB3D742C2652, double %150)
  %gep307 = getelementptr double, ptr %invariant.gep306, i64 %indvars.iv
  store double %151, ptr %gep307, align 8, !tbaa !5
  %gep309 = getelementptr double, ptr %invariant.gep308, i64 %indvars.iv
  %152 = load double, ptr %gep309, align 8, !tbaa !5
  %gep311 = getelementptr double, ptr %invariant.gep310, i64 %indvars.iv
  %153 = load double, ptr %gep311, align 8, !tbaa !5
  %154 = fmul double %153, 0xBFD76CF5D0B09956
  %155 = tail call double @llvm.fmuladd.f64(double %152, double 0xBFF5DB3D742C2652, double %154)
  %gep313 = getelementptr double, ptr %invariant.gep312, i64 %indvars.iv
  store double %155, ptr %gep313, align 8, !tbaa !5
  %gep315 = getelementptr double, ptr %invariant.gep314, i64 %indvars.iv
  %156 = load double, ptr %gep315, align 8, !tbaa !5
  %gep317 = getelementptr double, ptr %invariant.gep316, i64 %indvars.iv
  %157 = load double, ptr %gep317, align 8, !tbaa !5
  %158 = fmul double %157, 0xBFD76CF5D0B09956
  %159 = tail call double @llvm.fmuladd.f64(double %156, double 0xBFF5DB3D742C2652, double %158)
  %gep319 = getelementptr double, ptr %invariant.gep318, i64 %indvars.iv
  store double %159, ptr %gep319, align 8, !tbaa !5
  %gep321 = getelementptr double, ptr %invariant.gep320, i64 %indvars.iv
  %160 = load double, ptr %gep321, align 8, !tbaa !5
  %gep323 = getelementptr double, ptr %invariant.gep322, i64 %indvars.iv
  %161 = load double, ptr %gep323, align 8, !tbaa !5
  %162 = fmul double %161, 0xBFD76CF5D0B09956
  %163 = tail call double @llvm.fmuladd.f64(double %160, double 0xBFF5DB3D742C2652, double %162)
  %gep325 = getelementptr double, ptr %invariant.gep324, i64 %indvars.iv
  store double %163, ptr %gep325, align 8, !tbaa !5
  %164 = fmul double %149, 0x3FF5DB3D742C2652
  %165 = tail call double @llvm.fmuladd.f64(double %148, double 0x3FD76CF5D0B09956, double %164)
  %gep327 = getelementptr double, ptr %invariant.gep326, i64 %indvars.iv
  store double %165, ptr %gep327, align 8, !tbaa !5
  %166 = fmul double %153, 0x3FF5DB3D742C2652
  %167 = tail call double @llvm.fmuladd.f64(double %152, double 0x3FD76CF5D0B09956, double %166)
  %gep329 = getelementptr double, ptr %invariant.gep328, i64 %indvars.iv
  store double %167, ptr %gep329, align 8, !tbaa !5
  %168 = fmul double %157, 0x3FF5DB3D742C2652
  %169 = tail call double @llvm.fmuladd.f64(double %156, double 0x3FD76CF5D0B09956, double %168)
  %gep331 = getelementptr double, ptr %invariant.gep330, i64 %indvars.iv
  store double %169, ptr %gep331, align 8, !tbaa !5
  %170 = fmul double %161, 0x3FF5DB3D742C2652
  %171 = tail call double @llvm.fmuladd.f64(double %160, double 0x3FD76CF5D0B09956, double %170)
  %gep333 = getelementptr double, ptr %invariant.gep332, i64 %indvars.iv
  store double %171, ptr %gep333, 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 %97, !llvm.loop !9
}

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

!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}
!10 = !{!"llvm.loop.mustprogress"}


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