; LLVM IR from niuyishuai/PDCABB :: LAPACK_BLAS/BLAS/SRC (drotm)

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

@f2c_drotm.zero = external hidden global double, align 8
@f2c_drotm.two = external hidden global double, align 8

; Function Attrs: nounwind uwtable
define dso_local i32 @f2c_drotm(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) #0 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca i64, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  %26 = load ptr, ptr %12, align 8, !tbaa !5
  %27 = getelementptr inbounds double, ptr %26, i32 -1
  store ptr %27, ptr %12, align 8, !tbaa !5
  %28 = load ptr, ptr %10, align 8, !tbaa !5
  %29 = getelementptr inbounds double, ptr %28, i32 -1
  store ptr %29, ptr %10, align 8, !tbaa !5
  %30 = load ptr, ptr %8, align 8, !tbaa !5
  %31 = getelementptr inbounds double, ptr %30, i32 -1
  store ptr %31, ptr %8, align 8, !tbaa !5
  %32 = load ptr, ptr %12, align 8, !tbaa !5
  %33 = getelementptr inbounds double, ptr %32, i64 1
  %34 = load double, ptr %33, align 8, !tbaa !9
  store double %34, ptr %24, align 8, !tbaa !9
  %35 = load ptr, ptr %7, align 8, !tbaa !5
  %36 = load i64, ptr %35, align 8, !tbaa !11
  %37 = icmp sle i64 %36, 0
  br i1 %37, label %44, label %38

38:                                               ; preds = %6
  %39 = load double, ptr %24, align 8, !tbaa !9
  %40 = load double, ptr @f2c_drotm.two, align 8, !tbaa !9
  %41 = fadd double %39, %40
  %42 = load double, ptr @f2c_drotm.zero, align 8, !tbaa !9
  %43 = fcmp oeq double %41, %42
  br i1 %43, label %44, label %45

44:                                               ; preds = %38, %6
  br label %431

45:                                               ; preds = %38
  %46 = load ptr, ptr %9, align 8, !tbaa !5
  %47 = load i64, ptr %46, align 8, !tbaa !11
  %48 = load ptr, ptr %11, align 8, !tbaa !5
  %49 = load i64, ptr %48, align 8, !tbaa !11
  %50 = icmp eq i64 %47, %49
  br i1 %50, label %51, label %55

51:                                               ; preds = %45
  %52 = load ptr, ptr %9, align 8, !tbaa !5
  %53 = load i64, ptr %52, align 8, !tbaa !11
  %54 = icmp sgt i64 %53, 0
  br i1 %54, label %56, label %55

55:                                               ; preds = %51, %45
  br label %243

56:                                               ; preds = %51
  %57 = load ptr, ptr %7, align 8, !tbaa !5
  %58 = load i64, ptr %57, align 8, !tbaa !11
  %59 = load ptr, ptr %9, align 8, !tbaa !5
  %60 = load i64, ptr %59, align 8, !tbaa !11
  %61 = mul nsw i64 %58, %60
  store i64 %61, ptr %25, align 8, !tbaa !11
  %62 = load double, ptr %24, align 8, !tbaa !9
  %63 = fcmp olt double %62, 0.000000e+00
  br i1 %63, label %64, label %65

64:                                               ; preds = %56
  br label %179

65:                                               ; preds = %56
  %66 = load double, ptr %24, align 8, !tbaa !9
  %67 = fcmp oeq double %66, 0.000000e+00
  br i1 %67, label %68, label %69

68:                                               ; preds = %65
  br label %70

69:                                               ; preds = %65
  br label %124

70:                                               ; preds = %68
  %71 = load ptr, ptr %12, align 8, !tbaa !5
  %72 = getelementptr inbounds double, ptr %71, i64 4
  %73 = load double, ptr %72, align 8, !tbaa !9
  store double %73, ptr %21, align 8, !tbaa !9
  %74 = load ptr, ptr %12, align 8, !tbaa !5
  %75 = getelementptr inbounds double, ptr %74, i64 3
  %76 = load double, ptr %75, align 8, !tbaa !9
  store double %76, ptr %22, align 8, !tbaa !9
  %77 = load i64, ptr %25, align 8, !tbaa !11
  store i64 %77, ptr %13, align 8, !tbaa !11
  %78 = load ptr, ptr %9, align 8, !tbaa !5
  %79 = load i64, ptr %78, align 8, !tbaa !11
  store i64 %79, ptr %14, align 8, !tbaa !11
  store i64 1, ptr %15, align 8, !tbaa !11
  br label %80

80:                                               ; preds = %119, %70
  %81 = load i64, ptr %14, align 8, !tbaa !11
  %82 = icmp slt i64 %81, 0
  br i1 %82, label %83, label %88

83:                                               ; preds = %80
  %84 = load i64, ptr %15, align 8, !tbaa !11
  %85 = load i64, ptr %13, align 8, !tbaa !11
  %86 = icmp sge i64 %84, %85
  %87 = zext i1 %86 to i32
  br label %93

88:                                               ; preds = %80
  %89 = load i64, ptr %15, align 8, !tbaa !11
  %90 = load i64, ptr %13, align 8, !tbaa !11
  %91 = icmp sle i64 %89, %90
  %92 = zext i1 %91 to i32
  br label %93

93:                                               ; preds = %88, %83
  %94 = phi i32 [ %87, %83 ], [ %92, %88 ]
  %95 = icmp ne i32 %94, 0
  br i1 %95, label %96, label %123

96:                                               ; preds = %93
  %97 = load ptr, ptr %8, align 8, !tbaa !5
  %98 = load i64, ptr %15, align 8, !tbaa !11
  %99 = getelementptr inbounds double, ptr %97, i64 %98
  %100 = load double, ptr %99, align 8, !tbaa !9
  store double %100, ptr %16, align 8, !tbaa !9
  %101 = load ptr, ptr %10, align 8, !tbaa !5
  %102 = load i64, ptr %15, align 8, !tbaa !11
  %103 = getelementptr inbounds double, ptr %101, i64 %102
  %104 = load double, ptr %103, align 8, !tbaa !9
  store double %104, ptr %17, align 8, !tbaa !9
  %105 = load double, ptr %16, align 8, !tbaa !9
  %106 = load double, ptr %17, align 8, !tbaa !9
  %107 = load double, ptr %21, align 8, !tbaa !9
  %108 = call double @llvm.fmuladd.f64(double %106, double %107, double %105)
  %109 = load ptr, ptr %8, align 8, !tbaa !5
  %110 = load i64, ptr %15, align 8, !tbaa !11
  %111 = getelementptr inbounds double, ptr %109, i64 %110
  store double %108, ptr %111, align 8, !tbaa !9
  %112 = load double, ptr %16, align 8, !tbaa !9
  %113 = load double, ptr %22, align 8, !tbaa !9
  %114 = load double, ptr %17, align 8, !tbaa !9
  %115 = call double @llvm.fmuladd.f64(double %112, double %113, double %114)
  %116 = load ptr, ptr %10, align 8, !tbaa !5
  %117 = load i64, ptr %15, align 8, !tbaa !11
  %118 = getelementptr inbounds double, ptr %116, i64 %117
  store double %115, ptr %118, align 8, !tbaa !9
  br label %119

119:                                              ; preds = %96
  %120 = load i64, ptr %14, align 8, !tbaa !11
  %121 = load i64, ptr %15, align 8, !tbaa !11
  %122 = add nsw i64 %121, %120
  store i64 %122, ptr %15, align 8, !tbaa !11
  br label %80, !llvm.loop !13

123:                                              ; preds = %93
  br label %431

124:                                              ; preds = %69
  %125 = load ptr, ptr %12, align 8, !tbaa !5
  %126 = getelementptr inbounds double, ptr %125, i64 2
  %127 = load double, ptr %126, align 8, !tbaa !9
  store double %127, ptr %20, align 8, !tbaa !9
  %128 = load ptr, ptr %12, align 8, !tbaa !5
  %129 = getelementptr inbounds double, ptr %128, i64 5
  %130 = load double, ptr %129, align 8, !tbaa !9
  store double %130, ptr %23, align 8, !tbaa !9
  %131 = load i64, ptr %25, align 8, !tbaa !11
  store i64 %131, ptr %14, align 8, !tbaa !11
  %132 = load ptr, ptr %9, align 8, !tbaa !5
  %133 = load i64, ptr %132, align 8, !tbaa !11
  store i64 %133, ptr %13, align 8, !tbaa !11
  store i64 1, ptr %15, align 8, !tbaa !11
  br label %134

134:                                              ; preds = %174, %124
  %135 = load i64, ptr %13, align 8, !tbaa !11
  %136 = icmp slt i64 %135, 0
  br i1 %136, label %137, label %142

137:                                              ; preds = %134
  %138 = load i64, ptr %15, align 8, !tbaa !11
  %139 = load i64, ptr %14, align 8, !tbaa !11
  %140 = icmp sge i64 %138, %139
  %141 = zext i1 %140 to i32
  br label %147

142:                                              ; preds = %134
  %143 = load i64, ptr %15, align 8, !tbaa !11
  %144 = load i64, ptr %14, align 8, !tbaa !11
  %145 = icmp sle i64 %143, %144
  %146 = zext i1 %145 to i32
  br label %147

147:                                              ; preds = %142, %137
  %148 = phi i32 [ %141, %137 ], [ %146, %142 ]
  %149 = icmp ne i32 %148, 0
  br i1 %149, label %150, label %178

150:                                              ; preds = %147
  %151 = load ptr, ptr %8, align 8, !tbaa !5
  %152 = load i64, ptr %15, align 8, !tbaa !11
  %153 = getelementptr inbounds double, ptr %151, i64 %152
  %154 = load double, ptr %153, align 8, !tbaa !9
  store double %154, ptr %16, align 8, !tbaa !9
  %155 = load ptr, ptr %10, align 8, !tbaa !5
  %156 = load i64, ptr %15, align 8, !tbaa !11
  %157 = getelementptr inbounds double, ptr %155, i64 %156
  %158 = load double, ptr %157, align 8, !tbaa !9
  store double %158, ptr %17, align 8, !tbaa !9
  %159 = load double, ptr %16, align 8, !tbaa !9
  %160 = load double, ptr %20, align 8, !tbaa !9
  %161 = load double, ptr %17, align 8, !tbaa !9
  %162 = call double @llvm.fmuladd.f64(double %159, double %160, double %161)
  %163 = load ptr, ptr %8, align 8, !tbaa !5
  %164 = load i64, ptr %15, align 8, !tbaa !11
  %165 = getelementptr inbounds double, ptr %163, i64 %164
  store double %162, ptr %165, align 8, !tbaa !9
  %166 = load double, ptr %16, align 8, !tbaa !9
  %167 = fneg double %166
  %168 = load double, ptr %23, align 8, !tbaa !9
  %169 = load double, ptr %17, align 8, !tbaa !9
  %170 = call double @llvm.fmuladd.f64(double %168, double %169, double %167)
  %171 = load ptr, ptr %10, align 8, !tbaa !5
  %172 = load i64, ptr %15, align 8, !tbaa !11
  %173 = getelementptr inbounds double, ptr %171, i64 %172
  store double %170, ptr %173, align 8, !tbaa !9
  br label %174

174:                                              ; preds = %150
  %175 = load i64, ptr %13, align 8, !tbaa !11
  %176 = load i64, ptr %15, align 8, !tbaa !11
  %177 = add nsw i64 %176, %175
  store i64 %177, ptr %15, align 8, !tbaa !11
  br label %134, !llvm.loop !15

178:                                              ; preds = %147
  br label %431

179:                                              ; preds = %64
  %180 = load ptr, ptr %12, align 8, !tbaa !5
  %181 = getelementptr inbounds double, ptr %180, i64 2
  %182 = load double, ptr %181, align 8, !tbaa !9
  store double %182, ptr %20, align 8, !tbaa !9
  %183 = load ptr, ptr %12, align 8, !tbaa !5
  %184 = getelementptr inbounds double, ptr %183, i64 4
  %185 = load double, ptr %184, align 8, !tbaa !9
  store double %185, ptr %21, align 8, !tbaa !9
  %186 = load ptr, ptr %12, align 8, !tbaa !5
  %187 = getelementptr inbounds double, ptr %186, i64 3
  %188 = load double, ptr %187, align 8, !tbaa !9
  store double %188, ptr %22, align 8, !tbaa !9
  %189 = load ptr, ptr %12, align 8, !tbaa !5
  %190 = getelementptr inbounds double, ptr %189, i64 5
  %191 = load double, ptr %190, align 8, !tbaa !9
  store double %191, ptr %23, align 8, !tbaa !9
  %192 = load i64, ptr %25, align 8, !tbaa !11
  store i64 %192, ptr %13, align 8, !tbaa !11
  %193 = load ptr, ptr %9, align 8, !tbaa !5
  %194 = load i64, ptr %193, align 8, !tbaa !11
  store i64 %194, ptr %14, align 8, !tbaa !11
  store i64 1, ptr %15, align 8, !tbaa !11
  br label %195

195:                                              ; preds = %238, %179
  %196 = load i64, ptr %14, align 8, !tbaa !11
  %197 = icmp slt i64 %196, 0
  br i1 %197, label %198, label %203

198:                                              ; preds = %195
  %199 = load i64, ptr %15, align 8, !tbaa !11
  %200 = load i64, ptr %13, align 8, !tbaa !11
  %201 = icmp sge i64 %199, %200
  %202 = zext i1 %201 to i32
  br label %208

203:                                              ; preds = %195
  %204 = load i64, ptr %15, align 8, !tbaa !11
  %205 = load i64, ptr %13, align 8, !tbaa !11
  %206 = icmp sle i64 %204, %205
  %207 = zext i1 %206 to i32
  br label %208

208:                                              ; preds = %203, %198
  %209 = phi i32 [ %202, %198 ], [ %207, %203 ]
  %210 = icmp ne i32 %209, 0
  br i1 %210, label %211, label %242

211:                                              ; preds = %208
  %212 = load ptr, ptr %8, align 8, !tbaa !5
  %213 = load i64, ptr %15, align 8, !tbaa !11
  %214 = getelementptr inbounds double, ptr %212, i64 %213
  %215 = load double, ptr %214, align 8, !tbaa !9
  store double %215, ptr %16, align 8, !tbaa !9
  %216 = load ptr, ptr %10, align 8, !tbaa !5
  %217 = load i64, ptr %15, align 8, !tbaa !11
  %218 = getelementptr inbounds double, ptr %216, i64 %217
  %219 = load double, ptr %218, align 8, !tbaa !9
  store double %219, ptr %17, align 8, !tbaa !9
  %220 = load double, ptr %16, align 8, !tbaa !9
  %221 = load double, ptr %20, align 8, !tbaa !9
  %222 = load double, ptr %17, align 8, !tbaa !9
  %223 = load double, ptr %21, align 8, !tbaa !9
  %224 = fmul double %222, %223
  %225 = call double @llvm.fmuladd.f64(double %220, double %221, double %224)
  %226 = load ptr, ptr %8, align 8, !tbaa !5
  %227 = load i64, ptr %15, align 8, !tbaa !11
  %228 = getelementptr inbounds double, ptr %226, i64 %227
  store double %225, ptr %228, align 8, !tbaa !9
  %229 = load double, ptr %16, align 8, !tbaa !9
  %230 = load double, ptr %22, align 8, !tbaa !9
  %231 = load double, ptr %17, align 8, !tbaa !9
  %232 = load double, ptr %23, align 8, !tbaa !9
  %233 = fmul double %231, %232
  %234 = call double @llvm.fmuladd.f64(double %229, double %230, double %233)
  %235 = load ptr, ptr %10, align 8, !tbaa !5
  %236 = load i64, ptr %15, align 8, !tbaa !11
  %237 = getelementptr inbounds double, ptr %235, i64 %236
  store double %234, ptr %237, align 8, !tbaa !9
  br label %238

238:                                              ; preds = %211
  %239 = load i64, ptr %14, align 8, !tbaa !11
  %240 = load i64, ptr %15, align 8, !tbaa !11
  %241 = add nsw i64 %240, %239
  store i64 %241, ptr %15, align 8, !tbaa !11
  br label %195, !llvm.loop !16

242:                                              ; preds = %208
  br label %431

243:                                              ; preds = %55
  store i64 1, ptr %18, align 8, !tbaa !11
  store i64 1, ptr %19, align 8, !tbaa !11
  %244 = load ptr, ptr %9, align 8, !tbaa !5
  %245 = load i64, ptr %244, align 8, !tbaa !11
  %246 = icmp slt i64 %245, 0
  br i1 %246, label %247, label %255

247:                                              ; preds = %243
  %248 = load ptr, ptr %7, align 8, !tbaa !5
  %249 = load i64, ptr %248, align 8, !tbaa !11
  %250 = sub nsw i64 1, %249
  %251 = load ptr, ptr %9, align 8, !tbaa !5
  %252 = load i64, ptr %251, align 8, !tbaa !11
  %253 = mul nsw i64 %250, %252
  %254 = add nsw i64 %253, 1
  store i64 %254, ptr %18, align 8, !tbaa !11
  br label %255

255:                                              ; preds = %247, %243
  %256 = load ptr, ptr %11, align 8, !tbaa !5
  %257 = load i64, ptr %256, align 8, !tbaa !11
  %258 = icmp slt i64 %257, 0
  br i1 %258, label %259, label %267

259:                                              ; preds = %255
  %260 = load ptr, ptr %7, align 8, !tbaa !5
  %261 = load i64, ptr %260, align 8, !tbaa !11
  %262 = sub nsw i64 1, %261
  %263 = load ptr, ptr %11, align 8, !tbaa !5
  %264 = load i64, ptr %263, align 8, !tbaa !11
  %265 = mul nsw i64 %262, %264
  %266 = add nsw i64 %265, 1
  store i64 %266, ptr %19, align 8, !tbaa !11
  br label %267

267:                                              ; preds = %259, %255
  %268 = load double, ptr %24, align 8, !tbaa !9
  %269 = fcmp olt double %268, 0.000000e+00
  br i1 %269, label %270, label %271

270:                                              ; preds = %267
  br label %373

271:                                              ; preds = %267
  %272 = load double, ptr %24, align 8, !tbaa !9
  %273 = fcmp oeq double %272, 0.000000e+00
  br i1 %273, label %274, label %275

274:                                              ; preds = %271
  br label %276

275:                                              ; preds = %271
  br label %324

276:                                              ; preds = %274
  %277 = load ptr, ptr %12, align 8, !tbaa !5
  %278 = getelementptr inbounds double, ptr %277, i64 4
  %279 = load double, ptr %278, align 8, !tbaa !9
  store double %279, ptr %21, align 8, !tbaa !9
  %280 = load ptr, ptr %12, align 8, !tbaa !5
  %281 = getelementptr inbounds double, ptr %280, i64 3
  %282 = load double, ptr %281, align 8, !tbaa !9
  store double %282, ptr %22, align 8, !tbaa !9
  %283 = load ptr, ptr %7, align 8, !tbaa !5
  %284 = load i64, ptr %283, align 8, !tbaa !11
  store i64 %284, ptr %14, align 8, !tbaa !11
  store i64 1, ptr %15, align 8, !tbaa !11
  br label %285

285:                                              ; preds = %320, %276
  %286 = load i64, ptr %15, align 8, !tbaa !11
  %287 = load i64, ptr %14, align 8, !tbaa !11
  %288 = icmp sle i64 %286, %287
  br i1 %288, label %289, label %323

289:                                              ; preds = %285
  %290 = load ptr, ptr %8, align 8, !tbaa !5
  %291 = load i64, ptr %18, align 8, !tbaa !11
  %292 = getelementptr inbounds double, ptr %290, i64 %291
  %293 = load double, ptr %292, align 8, !tbaa !9
  store double %293, ptr %16, align 8, !tbaa !9
  %294 = load ptr, ptr %10, align 8, !tbaa !5
  %295 = load i64, ptr %19, align 8, !tbaa !11
  %296 = getelementptr inbounds double, ptr %294, i64 %295
  %297 = load double, ptr %296, align 8, !tbaa !9
  store double %297, ptr %17, align 8, !tbaa !9
  %298 = load double, ptr %16, align 8, !tbaa !9
  %299 = load double, ptr %17, align 8, !tbaa !9
  %300 = load double, ptr %21, align 8, !tbaa !9
  %301 = call double @llvm.fmuladd.f64(double %299, double %300, double %298)
  %302 = load ptr, ptr %8, align 8, !tbaa !5
  %303 = load i64, ptr %18, align 8, !tbaa !11
  %304 = getelementptr inbounds double, ptr %302, i64 %303
  store double %301, ptr %304, align 8, !tbaa !9
  %305 = load double, ptr %16, align 8, !tbaa !9
  %306 = load double, ptr %22, align 8, !tbaa !9
  %307 = load double, ptr %17, align 8, !tbaa !9
  %308 = call double @llvm.fmuladd.f64(double %305, double %306, double %307)
  %309 = load ptr, ptr %10, align 8, !tbaa !5
  %310 = load i64, ptr %19, align 8, !tbaa !11
  %311 = getelementptr inbounds double, ptr %309, i64 %310
  store double %308, ptr %311, align 8, !tbaa !9
  %312 = load ptr, ptr %9, align 8, !tbaa !5
  %313 = load i64, ptr %312, align 8, !tbaa !11
  %314 = load i64, ptr %18, align 8, !tbaa !11
  %315 = add nsw i64 %314, %313
  store i64 %315, ptr %18, align 8, !tbaa !11
  %316 = load ptr, ptr %11, align 8, !tbaa !5
  %317 = load i64, ptr %316, align 8, !tbaa !11
  %318 = load i64, ptr %19, align 8, !tbaa !11
  %319 = add nsw i64 %318, %317
  store i64 %319, ptr %19, align 8, !tbaa !11
  br label %320

320:                                              ; preds = %289
  %321 = load i64, ptr %15, align 8, !tbaa !11
  %322 = add nsw i64 %321, 1
  store i64 %322, ptr %15, align 8, !tbaa !11
  br label %285, !llvm.loop !17

323:                                              ; preds = %285
  br label %431

324:                                              ; preds = %275
  %325 = load ptr, ptr %12, align 8, !tbaa !5
  %326 = getelementptr inbounds double, ptr %325, i64 2
  %327 = load double, ptr %326, align 8, !tbaa !9
  store double %327, ptr %20, align 8, !tbaa !9
  %328 = load ptr, ptr %12, align 8, !tbaa !5
  %329 = getelementptr inbounds double, ptr %328, i64 5
  %330 = load double, ptr %329, align 8, !tbaa !9
  store double %330, ptr %23, align 8, !tbaa !9
  %331 = load ptr, ptr %7, align 8, !tbaa !5
  %332 = load i64, ptr %331, align 8, !tbaa !11
  store i64 %332, ptr %14, align 8, !tbaa !11
  store i64 1, ptr %15, align 8, !tbaa !11
  br label %333

333:                                              ; preds = %369, %324
  %334 = load i64, ptr %15, align 8, !tbaa !11
  %335 = load i64, ptr %14, align 8, !tbaa !11
  %336 = icmp sle i64 %334, %335
  br i1 %336, label %337, label %372

337:                                              ; preds = %333
  %338 = load ptr, ptr %8, align 8, !tbaa !5
  %339 = load i64, ptr %18, align 8, !tbaa !11
  %340 = getelementptr inbounds double, ptr %338, i64 %339
  %341 = load double, ptr %340, align 8, !tbaa !9
  store double %341, ptr %16, align 8, !tbaa !9
  %342 = load ptr, ptr %10, align 8, !tbaa !5
  %343 = load i64, ptr %19, align 8, !tbaa !11
  %344 = getelementptr inbounds double, ptr %342, i64 %343
  %345 = load double, ptr %344, align 8, !tbaa !9
  store double %345, ptr %17, align 8, !tbaa !9
  %346 = load double, ptr %16, align 8, !tbaa !9
  %347 = load double, ptr %20, align 8, !tbaa !9
  %348 = load double, ptr %17, align 8, !tbaa !9
  %349 = call double @llvm.fmuladd.f64(double %346, double %347, double %348)
  %350 = load ptr, ptr %8, align 8, !tbaa !5
  %351 = load i64, ptr %18, align 8, !tbaa !11
  %352 = getelementptr inbounds double, ptr %350, i64 %351
  store double %349, ptr %352, align 8, !tbaa !9
  %353 = load double, ptr %16, align 8, !tbaa !9
  %354 = fneg double %353
  %355 = load double, ptr %23, align 8, !tbaa !9
  %356 = load double, ptr %17, align 8, !tbaa !9
  %357 = call double @llvm.fmuladd.f64(double %355, double %356, double %354)
  %358 = load ptr, ptr %10, align 8, !tbaa !5
  %359 = load i64, ptr %19, align 8, !tbaa !11
  %360 = getelementptr inbounds double, ptr %358, i64 %359
  store double %357, ptr %360, align 8, !tbaa !9
  %361 = load ptr, ptr %9, align 8, !tbaa !5
  %362 = load i64, ptr %361, align 8, !tbaa !11
  %363 = load i64, ptr %18, align 8, !tbaa !11
  %364 = add nsw i64 %363, %362
  store i64 %364, ptr %18, align 8, !tbaa !11
  %365 = load ptr, ptr %11, align 8, !tbaa !5
  %366 = load i64, ptr %365, align 8, !tbaa !11
  %367 = load i64, ptr %19, align 8, !tbaa !11
  %368 = add nsw i64 %367, %366
  store i64 %368, ptr %19, align 8, !tbaa !11
  br label %369

369:                                              ; preds = %337
  %370 = load i64, ptr %15, align 8, !tbaa !11
  %371 = add nsw i64 %370, 1
  store i64 %371, ptr %15, align 8, !tbaa !11
  br label %333, !llvm.loop !18

372:                                              ; preds = %333
  br label %431

373:                                              ; preds = %270
  %374 = load ptr, ptr %12, align 8, !tbaa !5
  %375 = getelementptr inbounds double, ptr %374, i64 2
  %376 = load double, ptr %375, align 8, !tbaa !9
  store double %376, ptr %20, align 8, !tbaa !9
  %377 = load ptr, ptr %12, align 8, !tbaa !5
  %378 = getelementptr inbounds double, ptr %377, i64 4
  %379 = load double, ptr %378, align 8, !tbaa !9
  store double %379, ptr %21, align 8, !tbaa !9
  %380 = load ptr, ptr %12, align 8, !tbaa !5
  %381 = getelementptr inbounds double, ptr %380, i64 3
  %382 = load double, ptr %381, align 8, !tbaa !9
  store double %382, ptr %22, align 8, !tbaa !9
  %383 = load ptr, ptr %12, align 8, !tbaa !5
  %384 = getelementptr inbounds double, ptr %383, i64 5
  %385 = load double, ptr %384, align 8, !tbaa !9
  store double %385, ptr %23, align 8, !tbaa !9
  %386 = load ptr, ptr %7, align 8, !tbaa !5
  %387 = load i64, ptr %386, align 8, !tbaa !11
  store i64 %387, ptr %14, align 8, !tbaa !11
  store i64 1, ptr %15, align 8, !tbaa !11
  br label %388

388:                                              ; preds = %427, %373
  %389 = load i64, ptr %15, align 8, !tbaa !11
  %390 = load i64, ptr %14, align 8, !tbaa !11
  %391 = icmp sle i64 %389, %390
  br i1 %391, label %392, label %430

392:                                              ; preds = %388
  %393 = load ptr, ptr %8, align 8, !tbaa !5
  %394 = load i64, ptr %18, align 8, !tbaa !11
  %395 = getelementptr inbounds double, ptr %393, i64 %394
  %396 = load double, ptr %395, align 8, !tbaa !9
  store double %396, ptr %16, align 8, !tbaa !9
  %397 = load ptr, ptr %10, align 8, !tbaa !5
  %398 = load i64, ptr %19, align 8, !tbaa !11
  %399 = getelementptr inbounds double, ptr %397, i64 %398
  %400 = load double, ptr %399, align 8, !tbaa !9
  store double %400, ptr %17, align 8, !tbaa !9
  %401 = load double, ptr %16, align 8, !tbaa !9
  %402 = load double, ptr %20, align 8, !tbaa !9
  %403 = load double, ptr %17, align 8, !tbaa !9
  %404 = load double, ptr %21, align 8, !tbaa !9
  %405 = fmul double %403, %404
  %406 = call double @llvm.fmuladd.f64(double %401, double %402, double %405)
  %407 = load ptr, ptr %8, align 8, !tbaa !5
  %408 = load i64, ptr %18, align 8, !tbaa !11
  %409 = getelementptr inbounds double, ptr %407, i64 %408
  store double %406, ptr %409, align 8, !tbaa !9
  %410 = load double, ptr %16, align 8, !tbaa !9
  %411 = load double, ptr %22, align 8, !tbaa !9
  %412 = load double, ptr %17, align 8, !tbaa !9
  %413 = load double, ptr %23, align 8, !tbaa !9
  %414 = fmul double %412, %413
  %415 = call double @llvm.fmuladd.f64(double %410, double %411, double %414)
  %416 = load ptr, ptr %10, align 8, !tbaa !5
  %417 = load i64, ptr %19, align 8, !tbaa !11
  %418 = getelementptr inbounds double, ptr %416, i64 %417
  store double %415, ptr %418, align 8, !tbaa !9
  %419 = load ptr, ptr %9, align 8, !tbaa !5
  %420 = load i64, ptr %419, align 8, !tbaa !11
  %421 = load i64, ptr %18, align 8, !tbaa !11
  %422 = add nsw i64 %421, %420
  store i64 %422, ptr %18, align 8, !tbaa !11
  %423 = load ptr, ptr %11, align 8, !tbaa !5
  %424 = load i64, ptr %423, align 8, !tbaa !11
  %425 = load i64, ptr %19, align 8, !tbaa !11
  %426 = add nsw i64 %425, %424
  store i64 %426, ptr %19, align 8, !tbaa !11
  br label %427

427:                                              ; preds = %392
  %428 = load i64, ptr %15, align 8, !tbaa !11
  %429 = add nsw i64 %428, 1
  store i64 %429, ptr %15, align 8, !tbaa !11
  br label %388, !llvm.loop !19

430:                                              ; preds = %388
  br label %431

431:                                              ; preds = %430, %372, %323, %242, %178, %123, %44
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  ret i32 0
}

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

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

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

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


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

@f2c_drotm.zero = external hidden local_unnamed_addr global double, align 8
@f2c_drotm.two = external hidden local_unnamed_addr global double, align 8

; Function Attrs: nofree norecurse nosync nounwind memory(read, argmem: readwrite, inaccessiblemem: none) uwtable
define dso_local noundef i32 @f2c_drotm(ptr nocapture noundef readonly %0, ptr nocapture noundef %1, ptr nocapture noundef readonly %2, ptr nocapture noundef %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readonly %5) local_unnamed_addr #0 {
  %7 = getelementptr inbounds i8, ptr %3, i64 -8
  %8 = getelementptr inbounds i8, ptr %1, i64 -8
  %9 = load double, ptr %5, align 8, !tbaa !5
  %10 = load i64, ptr %0, align 8, !tbaa !9
  %11 = icmp slt i64 %10, 1
  br i1 %11, label %.loopexit, label %12

12:                                               ; preds = %6
  %13 = load double, ptr @f2c_drotm.two, align 8, !tbaa !5
  %14 = fadd double %9, %13
  %15 = load double, ptr @f2c_drotm.zero, align 8, !tbaa !5
  %16 = fcmp oeq double %14, %15
  br i1 %16, label %.loopexit, label %17

17:                                               ; preds = %12
  %18 = load i64, ptr %2, align 8, !tbaa !9
  %19 = load i64, ptr %4, align 8, !tbaa !9
  %20 = icmp eq i64 %18, %19
  %21 = icmp sgt i64 %18, 0
  %or.cond = and i1 %21, %20
  br i1 %or.cond, label %22, label %115

22:                                               ; preds = %17
  %23 = mul i64 %18, %10
  %24 = fcmp olt double %9, 0.000000e+00
  br i1 %24, label %.lr.ph221.preheader, label %25

25:                                               ; preds = %22
  %26 = fcmp oeq double %9, 0.000000e+00
  %27 = add nuw i64 %18, 1
  %28 = add i64 %23, 1
  %smax368 = tail call i64 @llvm.smax.i64(i64 %27, i64 %28)
  %29 = xor i64 %18, -1
  %30 = add i64 %smax368, %29
  %31 = icmp ne i64 %30, 0
  %umin369 = zext i1 %31 to i64
  %32 = sub i64 %30, %umin369
  %umax370 = tail call i64 @llvm.umax.i64(i64 %18, i64 1)
  %33 = udiv i64 %32, %umax370
  %34 = add i64 %33, %umin369
  %35 = add i64 %34, 1
  %min.iters.check373 = icmp ugt i64 %35, 11
  %ident.check358.not = icmp eq i64 %18, 1
  %or.cond427 = and i1 %min.iters.check373, %ident.check358.not
  br i1 %26, label %.lr.ph218.preheader, label %.lr.ph215.preheader

.lr.ph218.preheader:                              ; preds = %25
  %36 = getelementptr inbounds i8, ptr %5, i64 24
  %37 = load double, ptr %36, align 8, !tbaa !5
  %38 = getelementptr inbounds i8, ptr %5, i64 16
  %39 = load double, ptr %38, align 8, !tbaa !5
  br i1 %or.cond427, label %vector.memcheck359, label %.lr.ph218.preheader432

vector.memcheck359:                               ; preds = %.lr.ph218.preheader
  %40 = add nuw nsw i64 %18, 1
  %41 = add nuw i64 %23, 1
  %smax360 = tail call i64 @llvm.smax.i64(i64 %40, i64 %41)
  %42 = shl i64 %smax360, 3
  %43 = add i64 %42, -8
  %scevgep363 = getelementptr i8, ptr %1, i64 %43
  %scevgep364 = getelementptr i8, ptr %3, i64 %43
  %bound0365 = icmp ugt ptr %scevgep364, %1
  %bound1366 = icmp ugt ptr %scevgep363, %3
  %found.conflict367 = and i1 %bound0365, %bound1366
  br i1 %found.conflict367, label %.lr.ph218.preheader432, label %vector.ph374

vector.ph374:                                     ; preds = %vector.memcheck359
  %n.vec376 = and i64 %35, -2
  %ind.end377 = or i64 %35, 1
  %broadcast.splatinsert384 = insertelement <2 x double> poison, double %37, i64 0
  %broadcast.splat385 = shufflevector <2 x double> %broadcast.splatinsert384, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert386 = insertelement <2 x double> poison, double %39, i64 0
  %broadcast.splat387 = shufflevector <2 x double> %broadcast.splatinsert386, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body379

vector.body379:                                   ; preds = %vector.body379, %vector.ph374
  %index380 = phi i64 [ 0, %vector.ph374 ], [ %index.next388, %vector.body379 ]
  %44 = getelementptr double, ptr %1, i64 %index380
  %wide.load382 = load <2 x double>, ptr %44, align 8, !tbaa !5, !alias.scope !11, !noalias !14
  %45 = getelementptr double, ptr %3, i64 %index380
  %wide.load383 = load <2 x double>, ptr %45, align 8, !tbaa !5, !alias.scope !14
  %46 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load383, <2 x double> %broadcast.splat385, <2 x double> %wide.load382)
  store <2 x double> %46, ptr %44, align 8, !tbaa !5, !alias.scope !11, !noalias !14
  %47 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load382, <2 x double> %broadcast.splat387, <2 x double> %wide.load383)
  store <2 x double> %47, ptr %45, align 8, !tbaa !5, !alias.scope !14
  %index.next388 = add nuw i64 %index380, 2
  %48 = icmp eq i64 %index.next388, %n.vec376
  br i1 %48, label %middle.block371, label %vector.body379, !llvm.loop !16

middle.block371:                                  ; preds = %vector.body379
  %cmp.n389 = icmp eq i64 %35, %n.vec376
  br i1 %cmp.n389, label %.loopexit, label %.lr.ph218.preheader432

.lr.ph218.preheader432:                           ; preds = %middle.block371, %vector.memcheck359, %.lr.ph218.preheader
  %.0179217.ph = phi i64 [ 1, %vector.memcheck359 ], [ 1, %.lr.ph218.preheader ], [ %ind.end377, %middle.block371 ]
  br label %.lr.ph218

.lr.ph218:                                        ; preds = %.lr.ph218.preheader432, %.lr.ph218
  %.0179217 = phi i64 [ %55, %.lr.ph218 ], [ %.0179217.ph, %.lr.ph218.preheader432 ]
  %49 = getelementptr inbounds double, ptr %8, i64 %.0179217
  %50 = load double, ptr %49, align 8, !tbaa !5
  %51 = getelementptr inbounds double, ptr %7, i64 %.0179217
  %52 = load double, ptr %51, align 8, !tbaa !5
  %53 = tail call double @llvm.fmuladd.f64(double %52, double %37, double %50)
  store double %53, ptr %49, align 8, !tbaa !5
  %54 = tail call double @llvm.fmuladd.f64(double %50, double %39, double %52)
  store double %54, ptr %51, align 8, !tbaa !5
  %55 = add nuw nsw i64 %.0179217, %18
  %.not192 = icmp sgt i64 %55, %23
  br i1 %.not192, label %.loopexit, label %.lr.ph218, !llvm.loop !20

.lr.ph215.preheader:                              ; preds = %25
  %56 = getelementptr inbounds i8, ptr %5, i64 8
  %57 = load double, ptr %56, align 8, !tbaa !5
  %58 = getelementptr inbounds i8, ptr %5, i64 32
  %59 = load double, ptr %58, align 8, !tbaa !5
  br i1 %or.cond427, label %vector.memcheck329, label %.lr.ph215.preheader434

vector.memcheck329:                               ; preds = %.lr.ph215.preheader
  %60 = add nuw nsw i64 %18, 1
  %61 = add nuw i64 %23, 1
  %smax = tail call i64 @llvm.smax.i64(i64 %60, i64 %61)
  %62 = shl i64 %smax, 3
  %63 = add i64 %62, -8
  %scevgep330 = getelementptr i8, ptr %1, i64 %63
  %scevgep331 = getelementptr i8, ptr %3, i64 %63
  %bound0332 = icmp ugt ptr %scevgep331, %1
  %bound1333 = icmp ugt ptr %scevgep330, %3
  %found.conflict334 = and i1 %bound0332, %bound1333
  br i1 %found.conflict334, label %.lr.ph215.preheader434, label %vector.ph341

vector.ph341:                                     ; preds = %vector.memcheck329
  %n.vec343 = and i64 %35, -2
  %ind.end344 = or i64 %35, 1
  %broadcast.splatinsert351 = insertelement <2 x double> poison, double %57, i64 0
  %broadcast.splat352 = shufflevector <2 x double> %broadcast.splatinsert351, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert353 = insertelement <2 x double> poison, double %59, i64 0
  %broadcast.splat354 = shufflevector <2 x double> %broadcast.splatinsert353, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body346

vector.body346:                                   ; preds = %vector.body346, %vector.ph341
  %index347 = phi i64 [ 0, %vector.ph341 ], [ %index.next355, %vector.body346 ]
  %64 = getelementptr double, ptr %1, i64 %index347
  %wide.load349 = load <2 x double>, ptr %64, align 8, !tbaa !5, !alias.scope !21, !noalias !24
  %65 = getelementptr double, ptr %3, i64 %index347
  %wide.load350 = load <2 x double>, ptr %65, align 8, !tbaa !5, !alias.scope !24
  %66 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load349, <2 x double> %broadcast.splat352, <2 x double> %wide.load350)
  store <2 x double> %66, ptr %64, align 8, !tbaa !5, !alias.scope !21, !noalias !24
  %67 = fneg <2 x double> %wide.load349
  %68 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat354, <2 x double> %wide.load350, <2 x double> %67)
  store <2 x double> %68, ptr %65, align 8, !tbaa !5, !alias.scope !24
  %index.next355 = add nuw i64 %index347, 2
  %69 = icmp eq i64 %index.next355, %n.vec343
  br i1 %69, label %middle.block338, label %vector.body346, !llvm.loop !26

middle.block338:                                  ; preds = %vector.body346
  %cmp.n356 = icmp eq i64 %35, %n.vec343
  br i1 %cmp.n356, label %.loopexit, label %.lr.ph215.preheader434

.lr.ph215.preheader434:                           ; preds = %middle.block338, %vector.memcheck329, %.lr.ph215.preheader
  %.1180214.ph = phi i64 [ 1, %vector.memcheck329 ], [ 1, %.lr.ph215.preheader ], [ %ind.end344, %middle.block338 ]
  br label %.lr.ph215

.lr.ph215:                                        ; preds = %.lr.ph215.preheader434, %.lr.ph215
  %.1180214 = phi i64 [ %77, %.lr.ph215 ], [ %.1180214.ph, %.lr.ph215.preheader434 ]
  %70 = getelementptr inbounds double, ptr %8, i64 %.1180214
  %71 = load double, ptr %70, align 8, !tbaa !5
  %72 = getelementptr inbounds double, ptr %7, i64 %.1180214
  %73 = load double, ptr %72, align 8, !tbaa !5
  %74 = tail call double @llvm.fmuladd.f64(double %71, double %57, double %73)
  store double %74, ptr %70, align 8, !tbaa !5
  %75 = fneg double %71
  %76 = tail call double @llvm.fmuladd.f64(double %59, double %73, double %75)
  store double %76, ptr %72, align 8, !tbaa !5
  %77 = add nuw nsw i64 %.1180214, %18
  %.not191 = icmp sgt i64 %77, %23
  br i1 %.not191, label %.loopexit, label %.lr.ph215, !llvm.loop !27

.lr.ph221.preheader:                              ; preds = %22
  %78 = getelementptr inbounds i8, ptr %5, i64 8
  %79 = load double, ptr %78, align 8, !tbaa !5
  %80 = getelementptr inbounds i8, ptr %5, i64 24
  %81 = load double, ptr %80, align 8, !tbaa !5
  %82 = getelementptr inbounds i8, ptr %5, i64 16
  %83 = load double, ptr %82, align 8, !tbaa !5
  %84 = getelementptr inbounds i8, ptr %5, i64 32
  %85 = load double, ptr %84, align 8, !tbaa !5
  %86 = add nuw i64 %18, 1
  %87 = add i64 %23, 1
  %smax401 = tail call i64 @llvm.smax.i64(i64 %86, i64 %87)
  %88 = xor i64 %18, -1
  %89 = add i64 %smax401, %88
  %90 = icmp ne i64 %89, 0
  %umin402 = zext i1 %90 to i64
  %91 = sub i64 %89, %umin402
  %umax403 = tail call i64 @llvm.umax.i64(i64 %18, i64 1)
  %92 = udiv i64 %91, %umax403
  %93 = add i64 %92, %umin402
  %94 = add i64 %93, 1
  %min.iters.check406 = icmp ugt i64 %94, 9
  %ident.check391.not = icmp eq i64 %18, 1
  %or.cond430 = and i1 %min.iters.check406, %ident.check391.not
  br i1 %or.cond430, label %vector.memcheck392, label %.lr.ph221.preheader431

vector.memcheck392:                               ; preds = %.lr.ph221.preheader
  %95 = add nuw nsw i64 %18, 1
  %96 = add nuw i64 %23, 1
  %smax393 = tail call i64 @llvm.smax.i64(i64 %95, i64 %96)
  %97 = shl i64 %smax393, 3
  %98 = add i64 %97, -8
  %scevgep396 = getelementptr i8, ptr %1, i64 %98
  %scevgep397 = getelementptr i8, ptr %3, i64 %98
  %bound0398 = icmp ugt ptr %scevgep397, %1
  %bound1399 = icmp ugt ptr %scevgep396, %3
  %found.conflict400 = and i1 %bound0398, %bound1399
  br i1 %found.conflict400, label %.lr.ph221.preheader431, label %vector.ph407

vector.ph407:                                     ; preds = %vector.memcheck392
  %n.vec409 = and i64 %94, -2
  %ind.end410 = or i64 %94, 1
  %broadcast.splatinsert417 = insertelement <2 x double> poison, double %81, i64 0
  %broadcast.splat418 = shufflevector <2 x double> %broadcast.splatinsert417, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert419 = insertelement <2 x double> poison, double %79, i64 0
  %broadcast.splat420 = shufflevector <2 x double> %broadcast.splatinsert419, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert421 = insertelement <2 x double> poison, double %85, i64 0
  %broadcast.splat422 = shufflevector <2 x double> %broadcast.splatinsert421, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert423 = insertelement <2 x double> poison, double %83, i64 0
  %broadcast.splat424 = shufflevector <2 x double> %broadcast.splatinsert423, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body412

vector.body412:                                   ; preds = %vector.body412, %vector.ph407
  %index413 = phi i64 [ 0, %vector.ph407 ], [ %index.next425, %vector.body412 ]
  %99 = getelementptr double, ptr %1, i64 %index413
  %wide.load415 = load <2 x double>, ptr %99, align 8, !tbaa !5, !alias.scope !28, !noalias !31
  %100 = getelementptr double, ptr %3, i64 %index413
  %wide.load416 = load <2 x double>, ptr %100, align 8, !tbaa !5, !alias.scope !31
  %101 = fmul <2 x double> %broadcast.splat418, %wide.load416
  %102 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load415, <2 x double> %broadcast.splat420, <2 x double> %101)
  store <2 x double> %102, ptr %99, align 8, !tbaa !5, !alias.scope !28, !noalias !31
  %103 = fmul <2 x double> %broadcast.splat422, %wide.load416
  %104 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load415, <2 x double> %broadcast.splat424, <2 x double> %103)
  store <2 x double> %104, ptr %100, align 8, !tbaa !5, !alias.scope !31
  %index.next425 = add nuw i64 %index413, 2
  %105 = icmp eq i64 %index.next425, %n.vec409
  br i1 %105, label %middle.block404, label %vector.body412, !llvm.loop !33

middle.block404:                                  ; preds = %vector.body412
  %cmp.n426 = icmp eq i64 %94, %n.vec409
  br i1 %cmp.n426, label %.loopexit, label %.lr.ph221.preheader431

.lr.ph221.preheader431:                           ; preds = %middle.block404, %vector.memcheck392, %.lr.ph221.preheader
  %.2181220.ph = phi i64 [ 1, %vector.memcheck392 ], [ 1, %.lr.ph221.preheader ], [ %ind.end410, %middle.block404 ]
  br label %.lr.ph221

.lr.ph221:                                        ; preds = %.lr.ph221.preheader431, %.lr.ph221
  %.2181220 = phi i64 [ %114, %.lr.ph221 ], [ %.2181220.ph, %.lr.ph221.preheader431 ]
  %106 = getelementptr inbounds double, ptr %8, i64 %.2181220
  %107 = load double, ptr %106, align 8, !tbaa !5
  %108 = getelementptr inbounds double, ptr %7, i64 %.2181220
  %109 = load double, ptr %108, align 8, !tbaa !5
  %110 = fmul double %81, %109
  %111 = tail call double @llvm.fmuladd.f64(double %107, double %79, double %110)
  store double %111, ptr %106, align 8, !tbaa !5
  %112 = fmul double %85, %109
  %113 = tail call double @llvm.fmuladd.f64(double %107, double %83, double %112)
  store double %113, ptr %108, align 8, !tbaa !5
  %114 = add nuw nsw i64 %.2181220, %18
  %.not193 = icmp sgt i64 %114, %23
  br i1 %.not193, label %.loopexit, label %.lr.ph221, !llvm.loop !34

115:                                              ; preds = %17
  %116 = icmp slt i64 %18, 0
  %117 = sub nsw i64 1, %10
  %118 = mul nsw i64 %18, %117
  %119 = add nuw nsw i64 %118, 1
  %.0175 = select i1 %116, i64 %119, i64 1
  %120 = icmp slt i64 %19, 0
  %121 = mul nsw i64 %19, %117
  %122 = add nuw nsw i64 %121, 1
  %.0 = select i1 %120, i64 %122, i64 1
  %123 = fcmp olt double %9, 0.000000e+00
  br i1 %123, label %.lr.ph212.preheader, label %124

124:                                              ; preds = %115
  %125 = fcmp oeq double %9, 0.000000e+00
  %min.iters.check266 = icmp ult i64 %10, 10
  br i1 %125, label %.lr.ph207.preheader, label %.lr.ph.preheader

.lr.ph207.preheader:                              ; preds = %124
  %126 = getelementptr inbounds i8, ptr %5, i64 24
  %127 = load double, ptr %126, align 8, !tbaa !5
  %128 = getelementptr inbounds i8, ptr %5, i64 16
  %129 = load double, ptr %128, align 8, !tbaa !5
  br i1 %min.iters.check266, label %.lr.ph207.preheader438, label %vector.scevcheck253

vector.scevcheck253:                              ; preds = %.lr.ph207.preheader
  %ident.check254 = icmp ne i64 %18, 1
  %ident.check255 = icmp ne i64 %19, 1
  %130 = or i1 %ident.check254, %ident.check255
  br i1 %130, label %.lr.ph207.preheader438, label %vector.memcheck256

vector.memcheck256:                               ; preds = %vector.scevcheck253
  %131 = shl i64 %.0175, 3
  %132 = getelementptr i8, ptr %1, i64 %131
  %133 = shl i64 %10, 3
  %134 = getelementptr i8, ptr %1, i64 %131
  %135 = getelementptr i8, ptr %134, i64 %133
  %136 = shl i64 %.0, 3
  %137 = getelementptr i8, ptr %3, i64 %136
  %138 = getelementptr i8, ptr %3, i64 %136
  %139 = getelementptr i8, ptr %138, i64 %133
  %bound0261 = icmp ult ptr %132, %139
  %bound1262 = icmp ult ptr %137, %135
  %found.conflict263 = and i1 %bound0261, %bound1262
  br i1 %found.conflict263, label %.lr.ph207.preheader438, label %vector.ph267

vector.ph267:                                     ; preds = %vector.memcheck256
  %n.vec269 = and i64 %10, 9223372036854775806
  %140 = mul nuw i64 %n.vec269, %19
  %ind.end270 = add i64 %.0, %140
  %141 = mul nuw i64 %n.vec269, %18
  %ind.end272 = add i64 %.0175, %141
  %ind.end274 = or i64 %10, 1
  %broadcast.splatinsert282 = insertelement <2 x double> poison, double %127, i64 0
  %broadcast.splat283 = shufflevector <2 x double> %broadcast.splatinsert282, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert284 = insertelement <2 x double> poison, double %129, i64 0
  %broadcast.splat285 = shufflevector <2 x double> %broadcast.splatinsert284, <2 x double> poison, <2 x i32> zeroinitializer
  %142 = getelementptr double, ptr %8, i64 %.0175
  %143 = getelementptr double, ptr %7, i64 %.0
  br label %vector.body276

vector.body276:                                   ; preds = %vector.body276, %vector.ph267
  %index277 = phi i64 [ 0, %vector.ph267 ], [ %index.next286, %vector.body276 ]
  %144 = getelementptr double, ptr %142, i64 %index277
  %wide.load280 = load <2 x double>, ptr %144, align 8, !tbaa !5, !alias.scope !35, !noalias !38
  %145 = getelementptr double, ptr %143, i64 %index277
  %wide.load281 = load <2 x double>, ptr %145, align 8, !tbaa !5, !alias.scope !38
  %146 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load281, <2 x double> %broadcast.splat283, <2 x double> %wide.load280)
  store <2 x double> %146, ptr %144, align 8, !tbaa !5, !alias.scope !35, !noalias !38
  %147 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load280, <2 x double> %broadcast.splat285, <2 x double> %wide.load281)
  store <2 x double> %147, ptr %145, align 8, !tbaa !5, !alias.scope !38
  %index.next286 = add nuw i64 %index277, 2
  %148 = icmp eq i64 %index.next286, %n.vec269
  br i1 %148, label %middle.block264, label %vector.body276, !llvm.loop !40

middle.block264:                                  ; preds = %vector.body276
  %cmp.n287 = icmp eq i64 %10, %n.vec269
  br i1 %cmp.n287, label %.loopexit, label %.lr.ph207.preheader438

.lr.ph207.preheader438:                           ; preds = %middle.block264, %vector.memcheck256, %vector.scevcheck253, %.lr.ph207.preheader
  %.1206.ph = phi i64 [ %.0, %vector.memcheck256 ], [ %.0, %vector.scevcheck253 ], [ %.0, %.lr.ph207.preheader ], [ %ind.end270, %middle.block264 ]
  %.1176205.ph = phi i64 [ %.0175, %vector.memcheck256 ], [ %.0175, %vector.scevcheck253 ], [ %.0175, %.lr.ph207.preheader ], [ %ind.end272, %middle.block264 ]
  %.3182204.ph = phi i64 [ 1, %vector.memcheck256 ], [ 1, %vector.scevcheck253 ], [ 1, %.lr.ph207.preheader ], [ %ind.end274, %middle.block264 ]
  %xtraiter = and i64 %10, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph207.prol.loopexit, label %.lr.ph207.prol

.lr.ph207.prol:                                   ; preds = %.lr.ph207.preheader438
  %149 = getelementptr inbounds double, ptr %8, i64 %.1176205.ph
  %150 = load double, ptr %149, align 8, !tbaa !5
  %151 = getelementptr inbounds double, ptr %7, i64 %.1206.ph
  %152 = load double, ptr %151, align 8, !tbaa !5
  %153 = tail call double @llvm.fmuladd.f64(double %152, double %127, double %150)
  store double %153, ptr %149, align 8, !tbaa !5
  %154 = tail call double @llvm.fmuladd.f64(double %150, double %129, double %152)
  store double %154, ptr %151, align 8, !tbaa !5
  %155 = add nsw i64 %.1176205.ph, %18
  %156 = add nsw i64 %.1206.ph, %19
  %157 = add nuw i64 %.3182204.ph, 1
  br label %.lr.ph207.prol.loopexit

.lr.ph207.prol.loopexit:                          ; preds = %.lr.ph207.prol, %.lr.ph207.preheader438
  %.1206.unr = phi i64 [ %.1206.ph, %.lr.ph207.preheader438 ], [ %156, %.lr.ph207.prol ]
  %.1176205.unr = phi i64 [ %.1176205.ph, %.lr.ph207.preheader438 ], [ %155, %.lr.ph207.prol ]
  %.3182204.unr = phi i64 [ %.3182204.ph, %.lr.ph207.preheader438 ], [ %157, %.lr.ph207.prol ]
  %158 = icmp eq i64 %10, %.3182204.ph
  br i1 %158, label %.loopexit, label %.lr.ph207

.lr.ph207:                                        ; preds = %.lr.ph207.prol.loopexit, %.lr.ph207
  %.1206 = phi i64 [ %175, %.lr.ph207 ], [ %.1206.unr, %.lr.ph207.prol.loopexit ]
  %.1176205 = phi i64 [ %174, %.lr.ph207 ], [ %.1176205.unr, %.lr.ph207.prol.loopexit ]
  %.3182204 = phi i64 [ %176, %.lr.ph207 ], [ %.3182204.unr, %.lr.ph207.prol.loopexit ]
  %159 = getelementptr inbounds double, ptr %8, i64 %.1176205
  %160 = load double, ptr %159, align 8, !tbaa !5
  %161 = getelementptr inbounds double, ptr %7, i64 %.1206
  %162 = load double, ptr %161, align 8, !tbaa !5
  %163 = tail call double @llvm.fmuladd.f64(double %162, double %127, double %160)
  store double %163, ptr %159, align 8, !tbaa !5
  %164 = tail call double @llvm.fmuladd.f64(double %160, double %129, double %162)
  store double %164, ptr %161, align 8, !tbaa !5
  %165 = add nsw i64 %.1176205, %18
  %166 = add nsw i64 %.1206, %19
  %167 = add nuw i64 %.3182204, 1
  %168 = getelementptr inbounds double, ptr %8, i64 %165
  %169 = load double, ptr %168, align 8, !tbaa !5
  %170 = getelementptr inbounds double, ptr %7, i64 %166
  %171 = load double, ptr %170, align 8, !tbaa !5
  %172 = tail call double @llvm.fmuladd.f64(double %171, double %127, double %169)
  store double %172, ptr %168, align 8, !tbaa !5
  %173 = tail call double @llvm.fmuladd.f64(double %169, double %129, double %171)
  store double %173, ptr %170, align 8, !tbaa !5
  %174 = add nsw i64 %165, %18
  %175 = add nsw i64 %166, %19
  %176 = add nuw i64 %.3182204, 2
  %exitcond227.not.1 = icmp eq i64 %167, %10
  br i1 %exitcond227.not.1, label %.loopexit, label %.lr.ph207, !llvm.loop !41

.lr.ph.preheader:                                 ; preds = %124
  %177 = getelementptr inbounds i8, ptr %5, i64 8
  %178 = load double, ptr %177, align 8, !tbaa !5
  %179 = getelementptr inbounds i8, ptr %5, i64 32
  %180 = load double, ptr %179, align 8, !tbaa !5
  br i1 %min.iters.check266, label %.lr.ph.preheader440, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph.preheader
  %ident.check = icmp ne i64 %18, 1
  %ident.check241 = icmp ne i64 %19, 1
  %181 = or i1 %ident.check, %ident.check241
  br i1 %181, label %.lr.ph.preheader440, label %vector.memcheck

vector.memcheck:                                  ; preds = %vector.scevcheck
  %182 = shl i64 %.0175, 3
  %183 = getelementptr i8, ptr %1, i64 %182
  %184 = shl i64 %10, 3
  %185 = getelementptr i8, ptr %1, i64 %182
  %186 = getelementptr i8, ptr %185, i64 %184
  %187 = shl i64 %.0, 3
  %188 = getelementptr i8, ptr %3, i64 %187
  %189 = getelementptr i8, ptr %3, i64 %187
  %190 = getelementptr i8, ptr %189, i64 %184
  %bound0 = icmp ult ptr %183, %190
  %bound1 = icmp ult ptr %188, %186
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph.preheader440, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %10, 9223372036854775806
  %191 = mul nuw i64 %n.vec, %19
  %ind.end = add i64 %.0, %191
  %192 = mul nuw i64 %n.vec, %18
  %ind.end245 = add i64 %.0175, %192
  %ind.end247 = or i64 %10, 1
  %broadcast.splatinsert = insertelement <2 x double> poison, double %178, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert251 = insertelement <2 x double> poison, double %180, i64 0
  %broadcast.splat252 = shufflevector <2 x double> %broadcast.splatinsert251, <2 x double> poison, <2 x i32> zeroinitializer
  %193 = getelementptr double, ptr %8, i64 %.0175
  %194 = getelementptr double, ptr %7, i64 %.0
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %195 = getelementptr double, ptr %193, i64 %index
  %wide.load = load <2 x double>, ptr %195, align 8, !tbaa !5, !alias.scope !42, !noalias !45
  %196 = getelementptr double, ptr %194, i64 %index
  %wide.load250 = load <2 x double>, ptr %196, align 8, !tbaa !5, !alias.scope !45
  %197 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load, <2 x double> %broadcast.splat, <2 x double> %wide.load250)
  store <2 x double> %197, ptr %195, align 8, !tbaa !5, !alias.scope !42, !noalias !45
  %198 = fneg <2 x double> %wide.load
  %199 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat252, <2 x double> %wide.load250, <2 x double> %198)
  store <2 x double> %199, ptr %196, align 8, !tbaa !5, !alias.scope !45
  %index.next = add nuw i64 %index, 2
  %200 = icmp eq i64 %index.next, %n.vec
  br i1 %200, label %middle.block, label %vector.body, !llvm.loop !47

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %10, %n.vec
  br i1 %cmp.n, label %.loopexit, label %.lr.ph.preheader440

.lr.ph.preheader440:                              ; preds = %middle.block, %vector.memcheck, %vector.scevcheck, %.lr.ph.preheader
  %.2202.ph = phi i64 [ %.0, %vector.memcheck ], [ %.0, %vector.scevcheck ], [ %.0, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  %.2177201.ph = phi i64 [ %.0175, %vector.memcheck ], [ %.0175, %vector.scevcheck ], [ %.0175, %.lr.ph.preheader ], [ %ind.end245, %middle.block ]
  %.4200.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %vector.scevcheck ], [ 1, %.lr.ph.preheader ], [ %ind.end247, %middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader440, %.lr.ph
  %.2202 = phi i64 [ %209, %.lr.ph ], [ %.2202.ph, %.lr.ph.preheader440 ]
  %.2177201 = phi i64 [ %208, %.lr.ph ], [ %.2177201.ph, %.lr.ph.preheader440 ]
  %.4200 = phi i64 [ %210, %.lr.ph ], [ %.4200.ph, %.lr.ph.preheader440 ]
  %201 = getelementptr inbounds double, ptr %8, i64 %.2177201
  %202 = load double, ptr %201, align 8, !tbaa !5
  %203 = getelementptr inbounds double, ptr %7, i64 %.2202
  %204 = load double, ptr %203, align 8, !tbaa !5
  %205 = tail call double @llvm.fmuladd.f64(double %202, double %178, double %204)
  store double %205, ptr %201, align 8, !tbaa !5
  %206 = fneg double %202
  %207 = tail call double @llvm.fmuladd.f64(double %180, double %204, double %206)
  store double %207, ptr %203, align 8, !tbaa !5
  %208 = add nsw i64 %.2177201, %18
  %209 = add nsw i64 %.2202, %19
  %210 = add nuw i64 %.4200, 1
  %exitcond.not = icmp eq i64 %.4200, %10
  br i1 %exitcond.not, label %.loopexit, label %.lr.ph, !llvm.loop !48

.lr.ph212.preheader:                              ; preds = %115
  %211 = getelementptr inbounds i8, ptr %5, i64 8
  %212 = load double, ptr %211, align 8, !tbaa !5
  %213 = getelementptr inbounds i8, ptr %5, i64 24
  %214 = load double, ptr %213, align 8, !tbaa !5
  %215 = getelementptr inbounds i8, ptr %5, i64 16
  %216 = load double, ptr %215, align 8, !tbaa !5
  %217 = getelementptr inbounds i8, ptr %5, i64 32
  %218 = load double, ptr %217, align 8, !tbaa !5
  %min.iters.check301 = icmp ult i64 %10, 8
  br i1 %min.iters.check301, label %.lr.ph212.preheader436, label %vector.scevcheck288

vector.scevcheck288:                              ; preds = %.lr.ph212.preheader
  %ident.check289 = icmp ne i64 %18, 1
  %ident.check290 = icmp ne i64 %19, 1
  %219 = or i1 %ident.check289, %ident.check290
  br i1 %219, label %.lr.ph212.preheader436, label %vector.memcheck291

vector.memcheck291:                               ; preds = %vector.scevcheck288
  %220 = shl i64 %.0175, 3
  %221 = getelementptr i8, ptr %1, i64 %220
  %222 = shl i64 %10, 3
  %223 = getelementptr i8, ptr %1, i64 %220
  %224 = getelementptr i8, ptr %223, i64 %222
  %225 = shl i64 %.0, 3
  %226 = getelementptr i8, ptr %3, i64 %225
  %227 = getelementptr i8, ptr %3, i64 %225
  %228 = getelementptr i8, ptr %227, i64 %222
  %bound0296 = icmp ult ptr %221, %228
  %bound1297 = icmp ult ptr %226, %224
  %found.conflict298 = and i1 %bound0296, %bound1297
  br i1 %found.conflict298, label %.lr.ph212.preheader436, label %vector.ph302

vector.ph302:                                     ; preds = %vector.memcheck291
  %n.vec304 = and i64 %10, 9223372036854775806
  %229 = mul nuw i64 %n.vec304, %19
  %ind.end305 = add i64 %.0, %229
  %230 = mul nuw i64 %n.vec304, %18
  %ind.end307 = add i64 %.0175, %230
  %ind.end309 = or i64 %10, 1
  %broadcast.splatinsert317 = insertelement <2 x double> poison, double %214, i64 0
  %broadcast.splat318 = shufflevector <2 x double> %broadcast.splatinsert317, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert319 = insertelement <2 x double> poison, double %212, i64 0
  %broadcast.splat320 = shufflevector <2 x double> %broadcast.splatinsert319, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert321 = insertelement <2 x double> poison, double %218, i64 0
  %broadcast.splat322 = shufflevector <2 x double> %broadcast.splatinsert321, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert323 = insertelement <2 x double> poison, double %216, i64 0
  %broadcast.splat324 = shufflevector <2 x double> %broadcast.splatinsert323, <2 x double> poison, <2 x i32> zeroinitializer
  %231 = getelementptr double, ptr %8, i64 %.0175
  %232 = getelementptr double, ptr %7, i64 %.0
  br label %vector.body311

vector.body311:                                   ; preds = %vector.body311, %vector.ph302
  %index312 = phi i64 [ 0, %vector.ph302 ], [ %index.next325, %vector.body311 ]
  %233 = getelementptr double, ptr %231, i64 %index312
  %wide.load315 = load <2 x double>, ptr %233, align 8, !tbaa !5, !alias.scope !49, !noalias !52
  %234 = getelementptr double, ptr %232, i64 %index312
  %wide.load316 = load <2 x double>, ptr %234, align 8, !tbaa !5, !alias.scope !52
  %235 = fmul <2 x double> %broadcast.splat318, %wide.load316
  %236 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load315, <2 x double> %broadcast.splat320, <2 x double> %235)
  store <2 x double> %236, ptr %233, align 8, !tbaa !5, !alias.scope !49, !noalias !52
  %237 = fmul <2 x double> %broadcast.splat322, %wide.load316
  %238 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load315, <2 x double> %broadcast.splat324, <2 x double> %237)
  store <2 x double> %238, ptr %234, align 8, !tbaa !5, !alias.scope !52
  %index.next325 = add nuw i64 %index312, 2
  %239 = icmp eq i64 %index.next325, %n.vec304
  br i1 %239, label %middle.block299, label %vector.body311, !llvm.loop !54

middle.block299:                                  ; preds = %vector.body311
  %cmp.n326 = icmp eq i64 %10, %n.vec304
  br i1 %cmp.n326, label %.loopexit, label %.lr.ph212.preheader436

.lr.ph212.preheader436:                           ; preds = %middle.block299, %vector.memcheck291, %vector.scevcheck288, %.lr.ph212.preheader
  %.3211.ph = phi i64 [ %.0, %vector.memcheck291 ], [ %.0, %vector.scevcheck288 ], [ %.0, %.lr.ph212.preheader ], [ %ind.end305, %middle.block299 ]
  %.3178210.ph = phi i64 [ %.0175, %vector.memcheck291 ], [ %.0175, %vector.scevcheck288 ], [ %.0175, %.lr.ph212.preheader ], [ %ind.end307, %middle.block299 ]
  %.5209.ph = phi i64 [ 1, %vector.memcheck291 ], [ 1, %vector.scevcheck288 ], [ 1, %.lr.ph212.preheader ], [ %ind.end309, %middle.block299 ]
  br label %.lr.ph212

.lr.ph212:                                        ; preds = %.lr.ph212.preheader436, %.lr.ph212
  %.3211 = phi i64 [ %249, %.lr.ph212 ], [ %.3211.ph, %.lr.ph212.preheader436 ]
  %.3178210 = phi i64 [ %248, %.lr.ph212 ], [ %.3178210.ph, %.lr.ph212.preheader436 ]
  %.5209 = phi i64 [ %250, %.lr.ph212 ], [ %.5209.ph, %.lr.ph212.preheader436 ]
  %240 = getelementptr inbounds double, ptr %8, i64 %.3178210
  %241 = load double, ptr %240, align 8, !tbaa !5
  %242 = getelementptr inbounds double, ptr %7, i64 %.3211
  %243 = load double, ptr %242, align 8, !tbaa !5
  %244 = fmul double %214, %243
  %245 = tail call double @llvm.fmuladd.f64(double %241, double %212, double %244)
  store double %245, ptr %240, align 8, !tbaa !5
  %246 = fmul double %218, %243
  %247 = tail call double @llvm.fmuladd.f64(double %241, double %216, double %246)
  store double %247, ptr %242, align 8, !tbaa !5
  %248 = add nsw i64 %.3178210, %18
  %249 = add nsw i64 %.3211, %19
  %250 = add nuw i64 %.5209, 1
  %exitcond228.not = icmp eq i64 %.5209, %10
  br i1 %exitcond228.not, label %.loopexit, label %.lr.ph212, !llvm.loop !55

.loopexit:                                        ; preds = %.lr.ph, %.lr.ph207.prol.loopexit, %.lr.ph207, %.lr.ph212, %.lr.ph215, %.lr.ph218, %.lr.ph221, %middle.block, %middle.block264, %middle.block299, %middle.block338, %middle.block371, %middle.block404, %6, %12
  ret i32 0
}

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

; 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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umax.i64(i64, i64) #2

attributes #0 = { nofree norecurse nosync nounwind memory(read, argmem: readwrite, inaccessiblemem: none) 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 #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12}
!12 = distinct !{!12, !13}
!13 = distinct !{!13, !"LVerDomain"}
!14 = !{!15}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !17, !18, !19}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!"llvm.loop.isvectorized", i32 1}
!19 = !{!"llvm.loop.unroll.runtime.disable"}
!20 = distinct !{!20, !17, !18}
!21 = !{!22}
!22 = distinct !{!22, !23}
!23 = distinct !{!23, !"LVerDomain"}
!24 = !{!25}
!25 = distinct !{!25, !23}
!26 = distinct !{!26, !17, !18, !19}
!27 = distinct !{!27, !17, !18}
!28 = !{!29}
!29 = distinct !{!29, !30}
!30 = distinct !{!30, !"LVerDomain"}
!31 = !{!32}
!32 = distinct !{!32, !30}
!33 = distinct !{!33, !17, !18, !19}
!34 = distinct !{!34, !17, !18}
!35 = !{!36}
!36 = distinct !{!36, !37}
!37 = distinct !{!37, !"LVerDomain"}
!38 = !{!39}
!39 = distinct !{!39, !37}
!40 = distinct !{!40, !17, !18, !19}
!41 = distinct !{!41, !17, !18}
!42 = !{!43}
!43 = distinct !{!43, !44}
!44 = distinct !{!44, !"LVerDomain"}
!45 = !{!46}
!46 = distinct !{!46, !44}
!47 = distinct !{!47, !17, !18, !19}
!48 = distinct !{!48, !17, !18}
!49 = !{!50}
!50 = distinct !{!50, !51}
!51 = distinct !{!51, !"LVerDomain"}
!52 = !{!53}
!53 = distinct !{!53, !51}
!54 = distinct !{!54, !17, !18, !19}
!55 = distinct !{!55, !17, !18}


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