; LLVM IR from sympiler/nasoq :: src/triangularSolve/BLAS.ll (ZN5nasoq20dlsolve_blas_nonUnitEiiPdS0_)

; 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: mustprogress nounwind uwtable
define dso_local void @_ZN5nasoq20dlsolve_blas_nonUnitEiiPdS0_(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3) #0 {
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  store i32 %0, ptr %5, align 4, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !9
  store ptr %3, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  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
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  store i32 0, ptr %27, align 4, !tbaa !5
  %28 = load ptr, ptr %7, align 8, !tbaa !9
  %29 = getelementptr inbounds double, ptr %28, i64 0
  store ptr %29, ptr %18, align 8, !tbaa !9
  br label %30

30:                                               ; preds = %433, %4
  %31 = load i32, ptr %27, align 4, !tbaa !5
  %32 = load i32, ptr %6, align 4, !tbaa !5
  %33 = sub nsw i32 %32, 7
  %34 = icmp slt i32 %31, %33
  br i1 %34, label %35, label %440

35:                                               ; preds = %30
  %36 = load ptr, ptr %18, align 8, !tbaa !9
  store ptr %36, ptr %19, align 8, !tbaa !9
  %37 = load ptr, ptr %19, align 8, !tbaa !9
  %38 = load i32, ptr %5, align 4, !tbaa !5
  %39 = sext i32 %38 to i64
  %40 = getelementptr inbounds double, ptr %37, i64 %39
  %41 = getelementptr inbounds double, ptr %40, i64 1
  store ptr %41, ptr %20, align 8, !tbaa !9
  %42 = load ptr, ptr %20, align 8, !tbaa !9
  %43 = load i32, ptr %5, align 4, !tbaa !5
  %44 = sext i32 %43 to i64
  %45 = getelementptr inbounds double, ptr %42, i64 %44
  %46 = getelementptr inbounds double, ptr %45, i64 1
  store ptr %46, ptr %21, align 8, !tbaa !9
  %47 = load ptr, ptr %21, align 8, !tbaa !9
  %48 = load i32, ptr %5, align 4, !tbaa !5
  %49 = sext i32 %48 to i64
  %50 = getelementptr inbounds double, ptr %47, i64 %49
  %51 = getelementptr inbounds double, ptr %50, i64 1
  store ptr %51, ptr %22, align 8, !tbaa !9
  %52 = load ptr, ptr %22, align 8, !tbaa !9
  %53 = load i32, ptr %5, align 4, !tbaa !5
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds double, ptr %52, i64 %54
  %56 = getelementptr inbounds double, ptr %55, i64 1
  store ptr %56, ptr %23, align 8, !tbaa !9
  %57 = load ptr, ptr %23, align 8, !tbaa !9
  %58 = load i32, ptr %5, align 4, !tbaa !5
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds double, ptr %57, i64 %59
  %61 = getelementptr inbounds double, ptr %60, i64 1
  store ptr %61, ptr %24, align 8, !tbaa !9
  %62 = load ptr, ptr %24, align 8, !tbaa !9
  %63 = load i32, ptr %5, align 4, !tbaa !5
  %64 = sext i32 %63 to i64
  %65 = getelementptr inbounds double, ptr %62, i64 %64
  %66 = getelementptr inbounds double, ptr %65, i64 1
  store ptr %66, ptr %25, align 8, !tbaa !9
  %67 = load ptr, ptr %25, align 8, !tbaa !9
  %68 = load i32, ptr %5, align 4, !tbaa !5
  %69 = sext i32 %68 to i64
  %70 = getelementptr inbounds double, ptr %67, i64 %69
  %71 = getelementptr inbounds double, ptr %70, i64 1
  store ptr %71, ptr %26, align 8, !tbaa !9
  %72 = load ptr, ptr %8, align 8, !tbaa !9
  %73 = load i32, ptr %27, align 4, !tbaa !5
  %74 = sext i32 %73 to i64
  %75 = getelementptr inbounds double, ptr %72, i64 %74
  %76 = load double, ptr %75, align 8, !tbaa !11
  %77 = load ptr, ptr %19, align 8, !tbaa !9
  %78 = getelementptr inbounds double, ptr %77, i32 1
  store ptr %78, ptr %19, align 8, !tbaa !9
  %79 = load double, ptr %77, align 8, !tbaa !11
  %80 = fdiv double %76, %79
  store double %80, ptr %10, align 8, !tbaa !11
  %81 = load ptr, ptr %8, align 8, !tbaa !9
  %82 = load i32, ptr %27, align 4, !tbaa !5
  %83 = add nsw i32 %82, 1
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds double, ptr %81, i64 %84
  %86 = load double, ptr %85, align 8, !tbaa !11
  %87 = load double, ptr %10, align 8, !tbaa !11
  %88 = load ptr, ptr %19, align 8, !tbaa !9
  %89 = getelementptr inbounds double, ptr %88, i32 1
  store ptr %89, ptr %19, align 8, !tbaa !9
  %90 = load double, ptr %88, align 8, !tbaa !11
  %91 = fneg double %87
  %92 = call double @llvm.fmuladd.f64(double %91, double %90, double %86)
  %93 = load ptr, ptr %20, align 8, !tbaa !9
  %94 = getelementptr inbounds double, ptr %93, i32 1
  store ptr %94, ptr %20, align 8, !tbaa !9
  %95 = load double, ptr %93, align 8, !tbaa !11
  %96 = fdiv double %92, %95
  store double %96, ptr %11, align 8, !tbaa !11
  %97 = load ptr, ptr %8, align 8, !tbaa !9
  %98 = load i32, ptr %27, align 4, !tbaa !5
  %99 = add nsw i32 %98, 2
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds double, ptr %97, i64 %100
  %102 = load double, ptr %101, align 8, !tbaa !11
  %103 = load double, ptr %10, align 8, !tbaa !11
  %104 = load ptr, ptr %19, align 8, !tbaa !9
  %105 = getelementptr inbounds double, ptr %104, i32 1
  store ptr %105, ptr %19, align 8, !tbaa !9
  %106 = load double, ptr %104, align 8, !tbaa !11
  %107 = fneg double %103
  %108 = call double @llvm.fmuladd.f64(double %107, double %106, double %102)
  %109 = load double, ptr %11, align 8, !tbaa !11
  %110 = load ptr, ptr %20, align 8, !tbaa !9
  %111 = getelementptr inbounds double, ptr %110, i32 1
  store ptr %111, ptr %20, align 8, !tbaa !9
  %112 = load double, ptr %110, align 8, !tbaa !11
  %113 = fneg double %109
  %114 = call double @llvm.fmuladd.f64(double %113, double %112, double %108)
  %115 = load ptr, ptr %21, align 8, !tbaa !9
  %116 = getelementptr inbounds double, ptr %115, i32 1
  store ptr %116, ptr %21, align 8, !tbaa !9
  %117 = load double, ptr %115, align 8, !tbaa !11
  %118 = fdiv double %114, %117
  store double %118, ptr %12, align 8, !tbaa !11
  %119 = load ptr, ptr %8, align 8, !tbaa !9
  %120 = load i32, ptr %27, align 4, !tbaa !5
  %121 = add nsw i32 %120, 3
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds double, ptr %119, i64 %122
  %124 = load double, ptr %123, align 8, !tbaa !11
  %125 = load double, ptr %10, align 8, !tbaa !11
  %126 = load ptr, ptr %19, align 8, !tbaa !9
  %127 = getelementptr inbounds double, ptr %126, i32 1
  store ptr %127, ptr %19, align 8, !tbaa !9
  %128 = load double, ptr %126, align 8, !tbaa !11
  %129 = fneg double %125
  %130 = call double @llvm.fmuladd.f64(double %129, double %128, double %124)
  %131 = load double, ptr %11, align 8, !tbaa !11
  %132 = load ptr, ptr %20, align 8, !tbaa !9
  %133 = getelementptr inbounds double, ptr %132, i32 1
  store ptr %133, ptr %20, align 8, !tbaa !9
  %134 = load double, ptr %132, align 8, !tbaa !11
  %135 = fneg double %131
  %136 = call double @llvm.fmuladd.f64(double %135, double %134, double %130)
  %137 = load double, ptr %12, align 8, !tbaa !11
  %138 = load ptr, ptr %21, align 8, !tbaa !9
  %139 = getelementptr inbounds double, ptr %138, i32 1
  store ptr %139, ptr %21, align 8, !tbaa !9
  %140 = load double, ptr %138, align 8, !tbaa !11
  %141 = fneg double %137
  %142 = call double @llvm.fmuladd.f64(double %141, double %140, double %136)
  %143 = load ptr, ptr %22, align 8, !tbaa !9
  %144 = getelementptr inbounds double, ptr %143, i32 1
  store ptr %144, ptr %22, align 8, !tbaa !9
  %145 = load double, ptr %143, align 8, !tbaa !11
  %146 = fdiv double %142, %145
  store double %146, ptr %13, align 8, !tbaa !11
  %147 = load ptr, ptr %8, align 8, !tbaa !9
  %148 = load i32, ptr %27, align 4, !tbaa !5
  %149 = add nsw i32 %148, 4
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds double, ptr %147, i64 %150
  %152 = load double, ptr %151, align 8, !tbaa !11
  %153 = load double, ptr %10, align 8, !tbaa !11
  %154 = load ptr, ptr %19, align 8, !tbaa !9
  %155 = getelementptr inbounds double, ptr %154, i32 1
  store ptr %155, ptr %19, align 8, !tbaa !9
  %156 = load double, ptr %154, align 8, !tbaa !11
  %157 = fneg double %153
  %158 = call double @llvm.fmuladd.f64(double %157, double %156, double %152)
  %159 = load double, ptr %11, align 8, !tbaa !11
  %160 = load ptr, ptr %20, align 8, !tbaa !9
  %161 = getelementptr inbounds double, ptr %160, i32 1
  store ptr %161, ptr %20, align 8, !tbaa !9
  %162 = load double, ptr %160, align 8, !tbaa !11
  %163 = fneg double %159
  %164 = call double @llvm.fmuladd.f64(double %163, double %162, double %158)
  %165 = load double, ptr %12, align 8, !tbaa !11
  %166 = load ptr, ptr %21, align 8, !tbaa !9
  %167 = getelementptr inbounds double, ptr %166, i32 1
  store ptr %167, ptr %21, align 8, !tbaa !9
  %168 = load double, ptr %166, align 8, !tbaa !11
  %169 = fneg double %165
  %170 = call double @llvm.fmuladd.f64(double %169, double %168, double %164)
  %171 = load double, ptr %13, align 8, !tbaa !11
  %172 = load ptr, ptr %22, align 8, !tbaa !9
  %173 = getelementptr inbounds double, ptr %172, i32 1
  store ptr %173, ptr %22, align 8, !tbaa !9
  %174 = load double, ptr %172, align 8, !tbaa !11
  %175 = fneg double %171
  %176 = call double @llvm.fmuladd.f64(double %175, double %174, double %170)
  %177 = load ptr, ptr %23, align 8, !tbaa !9
  %178 = getelementptr inbounds double, ptr %177, i32 1
  store ptr %178, ptr %23, align 8, !tbaa !9
  %179 = load double, ptr %177, align 8, !tbaa !11
  %180 = fdiv double %176, %179
  store double %180, ptr %14, align 8, !tbaa !11
  %181 = load ptr, ptr %8, align 8, !tbaa !9
  %182 = load i32, ptr %27, align 4, !tbaa !5
  %183 = add nsw i32 %182, 5
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds double, ptr %181, i64 %184
  %186 = load double, ptr %185, align 8, !tbaa !11
  %187 = load double, ptr %10, align 8, !tbaa !11
  %188 = load ptr, ptr %19, align 8, !tbaa !9
  %189 = getelementptr inbounds double, ptr %188, i32 1
  store ptr %189, ptr %19, align 8, !tbaa !9
  %190 = load double, ptr %188, align 8, !tbaa !11
  %191 = fneg double %187
  %192 = call double @llvm.fmuladd.f64(double %191, double %190, double %186)
  %193 = load double, ptr %11, align 8, !tbaa !11
  %194 = load ptr, ptr %20, align 8, !tbaa !9
  %195 = getelementptr inbounds double, ptr %194, i32 1
  store ptr %195, ptr %20, align 8, !tbaa !9
  %196 = load double, ptr %194, align 8, !tbaa !11
  %197 = fneg double %193
  %198 = call double @llvm.fmuladd.f64(double %197, double %196, double %192)
  %199 = load double, ptr %12, align 8, !tbaa !11
  %200 = load ptr, ptr %21, align 8, !tbaa !9
  %201 = getelementptr inbounds double, ptr %200, i32 1
  store ptr %201, ptr %21, align 8, !tbaa !9
  %202 = load double, ptr %200, align 8, !tbaa !11
  %203 = fneg double %199
  %204 = call double @llvm.fmuladd.f64(double %203, double %202, double %198)
  %205 = load double, ptr %13, align 8, !tbaa !11
  %206 = load ptr, ptr %22, align 8, !tbaa !9
  %207 = getelementptr inbounds double, ptr %206, i32 1
  store ptr %207, ptr %22, align 8, !tbaa !9
  %208 = load double, ptr %206, align 8, !tbaa !11
  %209 = fneg double %205
  %210 = call double @llvm.fmuladd.f64(double %209, double %208, double %204)
  %211 = load double, ptr %14, align 8, !tbaa !11
  %212 = load ptr, ptr %23, align 8, !tbaa !9
  %213 = getelementptr inbounds double, ptr %212, i32 1
  store ptr %213, ptr %23, align 8, !tbaa !9
  %214 = load double, ptr %212, align 8, !tbaa !11
  %215 = fneg double %211
  %216 = call double @llvm.fmuladd.f64(double %215, double %214, double %210)
  %217 = load ptr, ptr %24, align 8, !tbaa !9
  %218 = getelementptr inbounds double, ptr %217, i32 1
  store ptr %218, ptr %24, align 8, !tbaa !9
  %219 = load double, ptr %217, align 8, !tbaa !11
  %220 = fdiv double %216, %219
  store double %220, ptr %15, align 8, !tbaa !11
  %221 = load ptr, ptr %8, align 8, !tbaa !9
  %222 = load i32, ptr %27, align 4, !tbaa !5
  %223 = add nsw i32 %222, 6
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds double, ptr %221, i64 %224
  %226 = load double, ptr %225, align 8, !tbaa !11
  %227 = load double, ptr %10, align 8, !tbaa !11
  %228 = load ptr, ptr %19, align 8, !tbaa !9
  %229 = getelementptr inbounds double, ptr %228, i32 1
  store ptr %229, ptr %19, align 8, !tbaa !9
  %230 = load double, ptr %228, align 8, !tbaa !11
  %231 = fneg double %227
  %232 = call double @llvm.fmuladd.f64(double %231, double %230, double %226)
  %233 = load double, ptr %11, align 8, !tbaa !11
  %234 = load ptr, ptr %20, align 8, !tbaa !9
  %235 = getelementptr inbounds double, ptr %234, i32 1
  store ptr %235, ptr %20, align 8, !tbaa !9
  %236 = load double, ptr %234, align 8, !tbaa !11
  %237 = fneg double %233
  %238 = call double @llvm.fmuladd.f64(double %237, double %236, double %232)
  %239 = load double, ptr %12, align 8, !tbaa !11
  %240 = load ptr, ptr %21, align 8, !tbaa !9
  %241 = getelementptr inbounds double, ptr %240, i32 1
  store ptr %241, ptr %21, align 8, !tbaa !9
  %242 = load double, ptr %240, align 8, !tbaa !11
  %243 = fneg double %239
  %244 = call double @llvm.fmuladd.f64(double %243, double %242, double %238)
  %245 = load double, ptr %13, align 8, !tbaa !11
  %246 = load ptr, ptr %22, align 8, !tbaa !9
  %247 = getelementptr inbounds double, ptr %246, i32 1
  store ptr %247, ptr %22, align 8, !tbaa !9
  %248 = load double, ptr %246, align 8, !tbaa !11
  %249 = fneg double %245
  %250 = call double @llvm.fmuladd.f64(double %249, double %248, double %244)
  %251 = load double, ptr %14, align 8, !tbaa !11
  %252 = load ptr, ptr %23, align 8, !tbaa !9
  %253 = getelementptr inbounds double, ptr %252, i32 1
  store ptr %253, ptr %23, align 8, !tbaa !9
  %254 = load double, ptr %252, align 8, !tbaa !11
  %255 = fneg double %251
  %256 = call double @llvm.fmuladd.f64(double %255, double %254, double %250)
  %257 = load double, ptr %15, align 8, !tbaa !11
  %258 = load ptr, ptr %24, align 8, !tbaa !9
  %259 = getelementptr inbounds double, ptr %258, i32 1
  store ptr %259, ptr %24, align 8, !tbaa !9
  %260 = load double, ptr %258, align 8, !tbaa !11
  %261 = fneg double %257
  %262 = call double @llvm.fmuladd.f64(double %261, double %260, double %256)
  %263 = load ptr, ptr %25, align 8, !tbaa !9
  %264 = getelementptr inbounds double, ptr %263, i32 1
  store ptr %264, ptr %25, align 8, !tbaa !9
  %265 = load double, ptr %263, align 8, !tbaa !11
  %266 = fdiv double %262, %265
  store double %266, ptr %16, align 8, !tbaa !11
  %267 = load ptr, ptr %8, align 8, !tbaa !9
  %268 = load i32, ptr %27, align 4, !tbaa !5
  %269 = add nsw i32 %268, 7
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds double, ptr %267, i64 %270
  %272 = load double, ptr %271, align 8, !tbaa !11
  %273 = load double, ptr %10, align 8, !tbaa !11
  %274 = load ptr, ptr %19, align 8, !tbaa !9
  %275 = getelementptr inbounds double, ptr %274, i32 1
  store ptr %275, ptr %19, align 8, !tbaa !9
  %276 = load double, ptr %274, align 8, !tbaa !11
  %277 = fneg double %273
  %278 = call double @llvm.fmuladd.f64(double %277, double %276, double %272)
  %279 = load double, ptr %11, align 8, !tbaa !11
  %280 = load ptr, ptr %20, align 8, !tbaa !9
  %281 = getelementptr inbounds double, ptr %280, i32 1
  store ptr %281, ptr %20, align 8, !tbaa !9
  %282 = load double, ptr %280, align 8, !tbaa !11
  %283 = fneg double %279
  %284 = call double @llvm.fmuladd.f64(double %283, double %282, double %278)
  %285 = load double, ptr %12, align 8, !tbaa !11
  %286 = load ptr, ptr %21, align 8, !tbaa !9
  %287 = getelementptr inbounds double, ptr %286, i32 1
  store ptr %287, ptr %21, align 8, !tbaa !9
  %288 = load double, ptr %286, align 8, !tbaa !11
  %289 = fneg double %285
  %290 = call double @llvm.fmuladd.f64(double %289, double %288, double %284)
  %291 = load double, ptr %13, align 8, !tbaa !11
  %292 = load ptr, ptr %22, align 8, !tbaa !9
  %293 = getelementptr inbounds double, ptr %292, i32 1
  store ptr %293, ptr %22, align 8, !tbaa !9
  %294 = load double, ptr %292, align 8, !tbaa !11
  %295 = fneg double %291
  %296 = call double @llvm.fmuladd.f64(double %295, double %294, double %290)
  %297 = load double, ptr %14, align 8, !tbaa !11
  %298 = load ptr, ptr %23, align 8, !tbaa !9
  %299 = getelementptr inbounds double, ptr %298, i32 1
  store ptr %299, ptr %23, align 8, !tbaa !9
  %300 = load double, ptr %298, align 8, !tbaa !11
  %301 = fneg double %297
  %302 = call double @llvm.fmuladd.f64(double %301, double %300, double %296)
  %303 = load double, ptr %15, align 8, !tbaa !11
  %304 = load ptr, ptr %24, align 8, !tbaa !9
  %305 = getelementptr inbounds double, ptr %304, i32 1
  store ptr %305, ptr %24, align 8, !tbaa !9
  %306 = load double, ptr %304, align 8, !tbaa !11
  %307 = fneg double %303
  %308 = call double @llvm.fmuladd.f64(double %307, double %306, double %302)
  %309 = load double, ptr %16, align 8, !tbaa !11
  %310 = load ptr, ptr %25, align 8, !tbaa !9
  %311 = getelementptr inbounds double, ptr %310, i32 1
  store ptr %311, ptr %25, align 8, !tbaa !9
  %312 = load double, ptr %310, align 8, !tbaa !11
  %313 = fneg double %309
  %314 = call double @llvm.fmuladd.f64(double %313, double %312, double %308)
  %315 = load ptr, ptr %26, align 8, !tbaa !9
  %316 = getelementptr inbounds double, ptr %315, i32 1
  store ptr %316, ptr %26, align 8, !tbaa !9
  %317 = load double, ptr %315, align 8, !tbaa !11
  %318 = fdiv double %314, %317
  store double %318, ptr %17, align 8, !tbaa !11
  %319 = load double, ptr %10, align 8, !tbaa !11
  %320 = load ptr, ptr %8, align 8, !tbaa !9
  %321 = load i32, ptr %27, align 4, !tbaa !5
  %322 = add nsw i32 %321, 1
  store i32 %322, ptr %27, align 4, !tbaa !5
  %323 = sext i32 %321 to i64
  %324 = getelementptr inbounds double, ptr %320, i64 %323
  store double %319, ptr %324, align 8, !tbaa !11
  %325 = load double, ptr %11, align 8, !tbaa !11
  %326 = load ptr, ptr %8, align 8, !tbaa !9
  %327 = load i32, ptr %27, align 4, !tbaa !5
  %328 = add nsw i32 %327, 1
  store i32 %328, ptr %27, align 4, !tbaa !5
  %329 = sext i32 %327 to i64
  %330 = getelementptr inbounds double, ptr %326, i64 %329
  store double %325, ptr %330, align 8, !tbaa !11
  %331 = load double, ptr %12, align 8, !tbaa !11
  %332 = load ptr, ptr %8, align 8, !tbaa !9
  %333 = load i32, ptr %27, align 4, !tbaa !5
  %334 = add nsw i32 %333, 1
  store i32 %334, ptr %27, align 4, !tbaa !5
  %335 = sext i32 %333 to i64
  %336 = getelementptr inbounds double, ptr %332, i64 %335
  store double %331, ptr %336, align 8, !tbaa !11
  %337 = load double, ptr %13, align 8, !tbaa !11
  %338 = load ptr, ptr %8, align 8, !tbaa !9
  %339 = load i32, ptr %27, align 4, !tbaa !5
  %340 = add nsw i32 %339, 1
  store i32 %340, ptr %27, align 4, !tbaa !5
  %341 = sext i32 %339 to i64
  %342 = getelementptr inbounds double, ptr %338, i64 %341
  store double %337, ptr %342, align 8, !tbaa !11
  %343 = load double, ptr %14, align 8, !tbaa !11
  %344 = load ptr, ptr %8, align 8, !tbaa !9
  %345 = load i32, ptr %27, align 4, !tbaa !5
  %346 = add nsw i32 %345, 1
  store i32 %346, ptr %27, align 4, !tbaa !5
  %347 = sext i32 %345 to i64
  %348 = getelementptr inbounds double, ptr %344, i64 %347
  store double %343, ptr %348, align 8, !tbaa !11
  %349 = load double, ptr %15, align 8, !tbaa !11
  %350 = load ptr, ptr %8, align 8, !tbaa !9
  %351 = load i32, ptr %27, align 4, !tbaa !5
  %352 = add nsw i32 %351, 1
  store i32 %352, ptr %27, align 4, !tbaa !5
  %353 = sext i32 %351 to i64
  %354 = getelementptr inbounds double, ptr %350, i64 %353
  store double %349, ptr %354, align 8, !tbaa !11
  %355 = load double, ptr %16, align 8, !tbaa !11
  %356 = load ptr, ptr %8, align 8, !tbaa !9
  %357 = load i32, ptr %27, align 4, !tbaa !5
  %358 = add nsw i32 %357, 1
  store i32 %358, ptr %27, align 4, !tbaa !5
  %359 = sext i32 %357 to i64
  %360 = getelementptr inbounds double, ptr %356, i64 %359
  store double %355, ptr %360, align 8, !tbaa !11
  %361 = load double, ptr %17, align 8, !tbaa !11
  %362 = load ptr, ptr %8, align 8, !tbaa !9
  %363 = load i32, ptr %27, align 4, !tbaa !5
  %364 = add nsw i32 %363, 1
  store i32 %364, ptr %27, align 4, !tbaa !5
  %365 = sext i32 %363 to i64
  %366 = getelementptr inbounds double, ptr %362, i64 %365
  store double %361, ptr %366, align 8, !tbaa !11
  %367 = load i32, ptr %27, align 4, !tbaa !5
  store i32 %367, ptr %9, align 4, !tbaa !5
  br label %368

368:                                              ; preds = %430, %35
  %369 = load i32, ptr %9, align 4, !tbaa !5
  %370 = load i32, ptr %6, align 4, !tbaa !5
  %371 = icmp slt i32 %369, %370
  br i1 %371, label %372, label %433

372:                                              ; preds = %368
  %373 = load ptr, ptr %8, align 8, !tbaa !9
  %374 = load i32, ptr %9, align 4, !tbaa !5
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds double, ptr %373, i64 %375
  %377 = load double, ptr %376, align 8, !tbaa !11
  %378 = load double, ptr %10, align 8, !tbaa !11
  %379 = load ptr, ptr %19, align 8, !tbaa !9
  %380 = getelementptr inbounds double, ptr %379, i32 1
  store ptr %380, ptr %19, align 8, !tbaa !9
  %381 = load double, ptr %379, align 8, !tbaa !11
  %382 = fneg double %378
  %383 = call double @llvm.fmuladd.f64(double %382, double %381, double %377)
  %384 = load double, ptr %11, align 8, !tbaa !11
  %385 = load ptr, ptr %20, align 8, !tbaa !9
  %386 = getelementptr inbounds double, ptr %385, i32 1
  store ptr %386, ptr %20, align 8, !tbaa !9
  %387 = load double, ptr %385, align 8, !tbaa !11
  %388 = fneg double %384
  %389 = call double @llvm.fmuladd.f64(double %388, double %387, double %383)
  %390 = load double, ptr %12, align 8, !tbaa !11
  %391 = load ptr, ptr %21, align 8, !tbaa !9
  %392 = getelementptr inbounds double, ptr %391, i32 1
  store ptr %392, ptr %21, align 8, !tbaa !9
  %393 = load double, ptr %391, align 8, !tbaa !11
  %394 = fneg double %390
  %395 = call double @llvm.fmuladd.f64(double %394, double %393, double %389)
  %396 = load double, ptr %13, align 8, !tbaa !11
  %397 = load ptr, ptr %22, align 8, !tbaa !9
  %398 = getelementptr inbounds double, ptr %397, i32 1
  store ptr %398, ptr %22, align 8, !tbaa !9
  %399 = load double, ptr %397, align 8, !tbaa !11
  %400 = fneg double %396
  %401 = call double @llvm.fmuladd.f64(double %400, double %399, double %395)
  %402 = load double, ptr %14, align 8, !tbaa !11
  %403 = load ptr, ptr %23, align 8, !tbaa !9
  %404 = getelementptr inbounds double, ptr %403, i32 1
  store ptr %404, ptr %23, align 8, !tbaa !9
  %405 = load double, ptr %403, align 8, !tbaa !11
  %406 = fneg double %402
  %407 = call double @llvm.fmuladd.f64(double %406, double %405, double %401)
  %408 = load double, ptr %15, align 8, !tbaa !11
  %409 = load ptr, ptr %24, align 8, !tbaa !9
  %410 = getelementptr inbounds double, ptr %409, i32 1
  store ptr %410, ptr %24, align 8, !tbaa !9
  %411 = load double, ptr %409, align 8, !tbaa !11
  %412 = fneg double %408
  %413 = call double @llvm.fmuladd.f64(double %412, double %411, double %407)
  %414 = load double, ptr %16, align 8, !tbaa !11
  %415 = load ptr, ptr %25, align 8, !tbaa !9
  %416 = getelementptr inbounds double, ptr %415, i32 1
  store ptr %416, ptr %25, align 8, !tbaa !9
  %417 = load double, ptr %415, align 8, !tbaa !11
  %418 = fneg double %414
  %419 = call double @llvm.fmuladd.f64(double %418, double %417, double %413)
  %420 = load double, ptr %17, align 8, !tbaa !11
  %421 = load ptr, ptr %26, align 8, !tbaa !9
  %422 = getelementptr inbounds double, ptr %421, i32 1
  store ptr %422, ptr %26, align 8, !tbaa !9
  %423 = load double, ptr %421, align 8, !tbaa !11
  %424 = fneg double %420
  %425 = call double @llvm.fmuladd.f64(double %424, double %423, double %419)
  %426 = load ptr, ptr %8, align 8, !tbaa !9
  %427 = load i32, ptr %9, align 4, !tbaa !5
  %428 = sext i32 %427 to i64
  %429 = getelementptr inbounds double, ptr %426, i64 %428
  store double %425, ptr %429, align 8, !tbaa !11
  br label %430

430:                                              ; preds = %372
  %431 = load i32, ptr %9, align 4, !tbaa !5
  %432 = add nsw i32 %431, 1
  store i32 %432, ptr %9, align 4, !tbaa !5
  br label %368, !llvm.loop !13

433:                                              ; preds = %368
  %434 = load i32, ptr %5, align 4, !tbaa !5
  %435 = mul nsw i32 8, %434
  %436 = add nsw i32 %435, 8
  %437 = load ptr, ptr %18, align 8, !tbaa !9
  %438 = sext i32 %436 to i64
  %439 = getelementptr inbounds double, ptr %437, i64 %438
  store ptr %439, ptr %18, align 8, !tbaa !9
  br label %30, !llvm.loop !15

440:                                              ; preds = %30
  br label %441

441:                                              ; preds = %604, %440
  %442 = load i32, ptr %27, align 4, !tbaa !5
  %443 = load i32, ptr %6, align 4, !tbaa !5
  %444 = sub nsw i32 %443, 3
  %445 = icmp slt i32 %442, %444
  br i1 %445, label %446, label %611

446:                                              ; preds = %441
  %447 = load ptr, ptr %18, align 8, !tbaa !9
  store ptr %447, ptr %19, align 8, !tbaa !9
  %448 = load ptr, ptr %19, align 8, !tbaa !9
  %449 = load i32, ptr %5, align 4, !tbaa !5
  %450 = sext i32 %449 to i64
  %451 = getelementptr inbounds double, ptr %448, i64 %450
  %452 = getelementptr inbounds double, ptr %451, i64 1
  store ptr %452, ptr %20, align 8, !tbaa !9
  %453 = load ptr, ptr %20, align 8, !tbaa !9
  %454 = load i32, ptr %5, align 4, !tbaa !5
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds double, ptr %453, i64 %455
  %457 = getelementptr inbounds double, ptr %456, i64 1
  store ptr %457, ptr %21, align 8, !tbaa !9
  %458 = load ptr, ptr %21, align 8, !tbaa !9
  %459 = load i32, ptr %5, align 4, !tbaa !5
  %460 = sext i32 %459 to i64
  %461 = getelementptr inbounds double, ptr %458, i64 %460
  %462 = getelementptr inbounds double, ptr %461, i64 1
  store ptr %462, ptr %22, align 8, !tbaa !9
  %463 = load ptr, ptr %8, align 8, !tbaa !9
  %464 = load i32, ptr %27, align 4, !tbaa !5
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds double, ptr %463, i64 %465
  %467 = load double, ptr %466, align 8, !tbaa !11
  %468 = load ptr, ptr %19, align 8, !tbaa !9
  %469 = getelementptr inbounds double, ptr %468, i32 1
  store ptr %469, ptr %19, align 8, !tbaa !9
  %470 = load double, ptr %468, align 8, !tbaa !11
  %471 = fdiv double %467, %470
  store double %471, ptr %10, align 8, !tbaa !11
  %472 = load ptr, ptr %8, align 8, !tbaa !9
  %473 = load i32, ptr %27, align 4, !tbaa !5
  %474 = add nsw i32 %473, 1
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds double, ptr %472, i64 %475
  %477 = load double, ptr %476, align 8, !tbaa !11
  %478 = load double, ptr %10, align 8, !tbaa !11
  %479 = load ptr, ptr %19, align 8, !tbaa !9
  %480 = getelementptr inbounds double, ptr %479, i32 1
  store ptr %480, ptr %19, align 8, !tbaa !9
  %481 = load double, ptr %479, align 8, !tbaa !11
  %482 = fneg double %478
  %483 = call double @llvm.fmuladd.f64(double %482, double %481, double %477)
  %484 = load ptr, ptr %20, align 8, !tbaa !9
  %485 = getelementptr inbounds double, ptr %484, i32 1
  store ptr %485, ptr %20, align 8, !tbaa !9
  %486 = load double, ptr %484, align 8, !tbaa !11
  %487 = fdiv double %483, %486
  store double %487, ptr %11, align 8, !tbaa !11
  %488 = load ptr, ptr %8, align 8, !tbaa !9
  %489 = load i32, ptr %27, align 4, !tbaa !5
  %490 = add nsw i32 %489, 2
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds double, ptr %488, i64 %491
  %493 = load double, ptr %492, align 8, !tbaa !11
  %494 = load double, ptr %10, align 8, !tbaa !11
  %495 = load ptr, ptr %19, align 8, !tbaa !9
  %496 = getelementptr inbounds double, ptr %495, i32 1
  store ptr %496, ptr %19, align 8, !tbaa !9
  %497 = load double, ptr %495, align 8, !tbaa !11
  %498 = fneg double %494
  %499 = call double @llvm.fmuladd.f64(double %498, double %497, double %493)
  %500 = load double, ptr %11, align 8, !tbaa !11
  %501 = load ptr, ptr %20, align 8, !tbaa !9
  %502 = getelementptr inbounds double, ptr %501, i32 1
  store ptr %502, ptr %20, align 8, !tbaa !9
  %503 = load double, ptr %501, align 8, !tbaa !11
  %504 = fneg double %500
  %505 = call double @llvm.fmuladd.f64(double %504, double %503, double %499)
  %506 = load ptr, ptr %21, align 8, !tbaa !9
  %507 = getelementptr inbounds double, ptr %506, i32 1
  store ptr %507, ptr %21, align 8, !tbaa !9
  %508 = load double, ptr %506, align 8, !tbaa !11
  %509 = fdiv double %505, %508
  store double %509, ptr %12, align 8, !tbaa !11
  %510 = load ptr, ptr %8, align 8, !tbaa !9
  %511 = load i32, ptr %27, align 4, !tbaa !5
  %512 = add nsw i32 %511, 3
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds double, ptr %510, i64 %513
  %515 = load double, ptr %514, align 8, !tbaa !11
  %516 = load double, ptr %10, align 8, !tbaa !11
  %517 = load ptr, ptr %19, align 8, !tbaa !9
  %518 = getelementptr inbounds double, ptr %517, i32 1
  store ptr %518, ptr %19, align 8, !tbaa !9
  %519 = load double, ptr %517, align 8, !tbaa !11
  %520 = fneg double %516
  %521 = call double @llvm.fmuladd.f64(double %520, double %519, double %515)
  %522 = load double, ptr %11, align 8, !tbaa !11
  %523 = load ptr, ptr %20, align 8, !tbaa !9
  %524 = getelementptr inbounds double, ptr %523, i32 1
  store ptr %524, ptr %20, align 8, !tbaa !9
  %525 = load double, ptr %523, align 8, !tbaa !11
  %526 = fneg double %522
  %527 = call double @llvm.fmuladd.f64(double %526, double %525, double %521)
  %528 = load double, ptr %12, align 8, !tbaa !11
  %529 = load ptr, ptr %21, align 8, !tbaa !9
  %530 = getelementptr inbounds double, ptr %529, i32 1
  store ptr %530, ptr %21, align 8, !tbaa !9
  %531 = load double, ptr %529, align 8, !tbaa !11
  %532 = fneg double %528
  %533 = call double @llvm.fmuladd.f64(double %532, double %531, double %527)
  %534 = load ptr, ptr %22, align 8, !tbaa !9
  %535 = getelementptr inbounds double, ptr %534, i32 1
  store ptr %535, ptr %22, align 8, !tbaa !9
  %536 = load double, ptr %534, align 8, !tbaa !11
  %537 = fdiv double %533, %536
  store double %537, ptr %13, align 8, !tbaa !11
  %538 = load double, ptr %10, align 8, !tbaa !11
  %539 = load ptr, ptr %8, align 8, !tbaa !9
  %540 = load i32, ptr %27, align 4, !tbaa !5
  %541 = add nsw i32 %540, 1
  store i32 %541, ptr %27, align 4, !tbaa !5
  %542 = sext i32 %540 to i64
  %543 = getelementptr inbounds double, ptr %539, i64 %542
  store double %538, ptr %543, align 8, !tbaa !11
  %544 = load double, ptr %11, align 8, !tbaa !11
  %545 = load ptr, ptr %8, align 8, !tbaa !9
  %546 = load i32, ptr %27, align 4, !tbaa !5
  %547 = add nsw i32 %546, 1
  store i32 %547, ptr %27, align 4, !tbaa !5
  %548 = sext i32 %546 to i64
  %549 = getelementptr inbounds double, ptr %545, i64 %548
  store double %544, ptr %549, align 8, !tbaa !11
  %550 = load double, ptr %12, align 8, !tbaa !11
  %551 = load ptr, ptr %8, align 8, !tbaa !9
  %552 = load i32, ptr %27, align 4, !tbaa !5
  %553 = add nsw i32 %552, 1
  store i32 %553, ptr %27, align 4, !tbaa !5
  %554 = sext i32 %552 to i64
  %555 = getelementptr inbounds double, ptr %551, i64 %554
  store double %550, ptr %555, align 8, !tbaa !11
  %556 = load double, ptr %13, align 8, !tbaa !11
  %557 = load ptr, ptr %8, align 8, !tbaa !9
  %558 = load i32, ptr %27, align 4, !tbaa !5
  %559 = add nsw i32 %558, 1
  store i32 %559, ptr %27, align 4, !tbaa !5
  %560 = sext i32 %558 to i64
  %561 = getelementptr inbounds double, ptr %557, i64 %560
  store double %556, ptr %561, align 8, !tbaa !11
  %562 = load i32, ptr %27, align 4, !tbaa !5
  store i32 %562, ptr %9, align 4, !tbaa !5
  br label %563

563:                                              ; preds = %601, %446
  %564 = load i32, ptr %9, align 4, !tbaa !5
  %565 = load i32, ptr %6, align 4, !tbaa !5
  %566 = icmp slt i32 %564, %565
  br i1 %566, label %567, label %604

567:                                              ; preds = %563
  %568 = load ptr, ptr %8, align 8, !tbaa !9
  %569 = load i32, ptr %9, align 4, !tbaa !5
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds double, ptr %568, i64 %570
  %572 = load double, ptr %571, align 8, !tbaa !11
  %573 = load double, ptr %10, align 8, !tbaa !11
  %574 = load ptr, ptr %19, align 8, !tbaa !9
  %575 = getelementptr inbounds double, ptr %574, i32 1
  store ptr %575, ptr %19, align 8, !tbaa !9
  %576 = load double, ptr %574, align 8, !tbaa !11
  %577 = fneg double %573
  %578 = call double @llvm.fmuladd.f64(double %577, double %576, double %572)
  %579 = load double, ptr %11, align 8, !tbaa !11
  %580 = load ptr, ptr %20, align 8, !tbaa !9
  %581 = getelementptr inbounds double, ptr %580, i32 1
  store ptr %581, ptr %20, align 8, !tbaa !9
  %582 = load double, ptr %580, align 8, !tbaa !11
  %583 = fneg double %579
  %584 = call double @llvm.fmuladd.f64(double %583, double %582, double %578)
  %585 = load double, ptr %12, align 8, !tbaa !11
  %586 = load ptr, ptr %21, align 8, !tbaa !9
  %587 = getelementptr inbounds double, ptr %586, i32 1
  store ptr %587, ptr %21, align 8, !tbaa !9
  %588 = load double, ptr %586, align 8, !tbaa !11
  %589 = fneg double %585
  %590 = call double @llvm.fmuladd.f64(double %589, double %588, double %584)
  %591 = load double, ptr %13, align 8, !tbaa !11
  %592 = load ptr, ptr %22, align 8, !tbaa !9
  %593 = getelementptr inbounds double, ptr %592, i32 1
  store ptr %593, ptr %22, align 8, !tbaa !9
  %594 = load double, ptr %592, align 8, !tbaa !11
  %595 = fneg double %591
  %596 = call double @llvm.fmuladd.f64(double %595, double %594, double %590)
  %597 = load ptr, ptr %8, align 8, !tbaa !9
  %598 = load i32, ptr %9, align 4, !tbaa !5
  %599 = sext i32 %598 to i64
  %600 = getelementptr inbounds double, ptr %597, i64 %599
  store double %596, ptr %600, align 8, !tbaa !11
  br label %601

601:                                              ; preds = %567
  %602 = load i32, ptr %9, align 4, !tbaa !5
  %603 = add nsw i32 %602, 1
  store i32 %603, ptr %9, align 4, !tbaa !5
  br label %563, !llvm.loop !16

604:                                              ; preds = %563
  %605 = load i32, ptr %5, align 4, !tbaa !5
  %606 = mul nsw i32 4, %605
  %607 = add nsw i32 %606, 4
  %608 = load ptr, ptr %18, align 8, !tbaa !9
  %609 = sext i32 %607 to i64
  %610 = getelementptr inbounds double, ptr %608, i64 %609
  store ptr %610, ptr %18, align 8, !tbaa !9
  br label %441, !llvm.loop !17

611:                                              ; preds = %441
  %612 = load i32, ptr %27, align 4, !tbaa !5
  %613 = load i32, ptr %6, align 4, !tbaa !5
  %614 = sub nsw i32 %613, 1
  %615 = icmp slt i32 %612, %614
  br i1 %615, label %616, label %697

616:                                              ; preds = %611
  %617 = load ptr, ptr %18, align 8, !tbaa !9
  store ptr %617, ptr %19, align 8, !tbaa !9
  %618 = load ptr, ptr %19, align 8, !tbaa !9
  %619 = load i32, ptr %5, align 4, !tbaa !5
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds double, ptr %618, i64 %620
  %622 = getelementptr inbounds double, ptr %621, i64 1
  store ptr %622, ptr %20, align 8, !tbaa !9
  %623 = load ptr, ptr %8, align 8, !tbaa !9
  %624 = load i32, ptr %27, align 4, !tbaa !5
  %625 = sext i32 %624 to i64
  %626 = getelementptr inbounds double, ptr %623, i64 %625
  %627 = load double, ptr %626, align 8, !tbaa !11
  %628 = load ptr, ptr %19, align 8, !tbaa !9
  %629 = getelementptr inbounds double, ptr %628, i32 1
  store ptr %629, ptr %19, align 8, !tbaa !9
  %630 = load double, ptr %628, align 8, !tbaa !11
  %631 = fdiv double %627, %630
  store double %631, ptr %10, align 8, !tbaa !11
  %632 = load ptr, ptr %8, align 8, !tbaa !9
  %633 = load i32, ptr %27, align 4, !tbaa !5
  %634 = add nsw i32 %633, 1
  %635 = sext i32 %634 to i64
  %636 = getelementptr inbounds double, ptr %632, i64 %635
  %637 = load double, ptr %636, align 8, !tbaa !11
  %638 = load double, ptr %10, align 8, !tbaa !11
  %639 = load ptr, ptr %19, align 8, !tbaa !9
  %640 = getelementptr inbounds double, ptr %639, i32 1
  store ptr %640, ptr %19, align 8, !tbaa !9
  %641 = load double, ptr %639, align 8, !tbaa !11
  %642 = fneg double %638
  %643 = call double @llvm.fmuladd.f64(double %642, double %641, double %637)
  %644 = load ptr, ptr %20, align 8, !tbaa !9
  %645 = getelementptr inbounds double, ptr %644, i32 1
  store ptr %645, ptr %20, align 8, !tbaa !9
  %646 = load double, ptr %644, align 8, !tbaa !11
  %647 = fdiv double %643, %646
  store double %647, ptr %11, align 8, !tbaa !11
  %648 = load double, ptr %10, align 8, !tbaa !11
  %649 = load ptr, ptr %8, align 8, !tbaa !9
  %650 = load i32, ptr %27, align 4, !tbaa !5
  %651 = add nsw i32 %650, 1
  store i32 %651, ptr %27, align 4, !tbaa !5
  %652 = sext i32 %650 to i64
  %653 = getelementptr inbounds double, ptr %649, i64 %652
  store double %648, ptr %653, align 8, !tbaa !11
  %654 = load double, ptr %11, align 8, !tbaa !11
  %655 = load ptr, ptr %8, align 8, !tbaa !9
  %656 = load i32, ptr %27, align 4, !tbaa !5
  %657 = add nsw i32 %656, 1
  store i32 %657, ptr %27, align 4, !tbaa !5
  %658 = sext i32 %656 to i64
  %659 = getelementptr inbounds double, ptr %655, i64 %658
  store double %654, ptr %659, align 8, !tbaa !11
  %660 = load i32, ptr %27, align 4, !tbaa !5
  store i32 %660, ptr %9, align 4, !tbaa !5
  br label %661

661:                                              ; preds = %687, %616
  %662 = load i32, ptr %9, align 4, !tbaa !5
  %663 = load i32, ptr %6, align 4, !tbaa !5
  %664 = icmp slt i32 %662, %663
  br i1 %664, label %665, label %690

665:                                              ; preds = %661
  %666 = load ptr, ptr %8, align 8, !tbaa !9
  %667 = load i32, ptr %9, align 4, !tbaa !5
  %668 = sext i32 %667 to i64
  %669 = getelementptr inbounds double, ptr %666, i64 %668
  %670 = load double, ptr %669, align 8, !tbaa !11
  %671 = load double, ptr %10, align 8, !tbaa !11
  %672 = load ptr, ptr %19, align 8, !tbaa !9
  %673 = getelementptr inbounds double, ptr %672, i32 1
  store ptr %673, ptr %19, align 8, !tbaa !9
  %674 = load double, ptr %672, align 8, !tbaa !11
  %675 = fneg double %671
  %676 = call double @llvm.fmuladd.f64(double %675, double %674, double %670)
  %677 = load double, ptr %11, align 8, !tbaa !11
  %678 = load ptr, ptr %20, align 8, !tbaa !9
  %679 = getelementptr inbounds double, ptr %678, i32 1
  store ptr %679, ptr %20, align 8, !tbaa !9
  %680 = load double, ptr %678, align 8, !tbaa !11
  %681 = fneg double %677
  %682 = call double @llvm.fmuladd.f64(double %681, double %680, double %676)
  %683 = load ptr, ptr %8, align 8, !tbaa !9
  %684 = load i32, ptr %9, align 4, !tbaa !5
  %685 = sext i32 %684 to i64
  %686 = getelementptr inbounds double, ptr %683, i64 %685
  store double %682, ptr %686, align 8, !tbaa !11
  br label %687

687:                                              ; preds = %665
  %688 = load i32, ptr %9, align 4, !tbaa !5
  %689 = add nsw i32 %688, 1
  store i32 %689, ptr %9, align 4, !tbaa !5
  br label %661, !llvm.loop !18

690:                                              ; preds = %661
  %691 = load i32, ptr %5, align 4, !tbaa !5
  %692 = mul nsw i32 2, %691
  %693 = add nsw i32 %692, 2
  %694 = load ptr, ptr %18, align 8, !tbaa !9
  %695 = sext i32 %693 to i64
  %696 = getelementptr inbounds double, ptr %694, i64 %695
  store ptr %696, ptr %18, align 8, !tbaa !9
  br label %697

697:                                              ; preds = %690, %611
  %698 = load i32, ptr %27, align 4, !tbaa !5
  %699 = load i32, ptr %6, align 4, !tbaa !5
  %700 = sub nsw i32 %699, 1
  %701 = icmp eq i32 %698, %700
  br i1 %701, label %702, label %717

702:                                              ; preds = %697
  %703 = load ptr, ptr %18, align 8, !tbaa !9
  store ptr %703, ptr %19, align 8, !tbaa !9
  %704 = load ptr, ptr %8, align 8, !tbaa !9
  %705 = load i32, ptr %27, align 4, !tbaa !5
  %706 = sext i32 %705 to i64
  %707 = getelementptr inbounds double, ptr %704, i64 %706
  %708 = load double, ptr %707, align 8, !tbaa !11
  %709 = load ptr, ptr %19, align 8, !tbaa !9
  %710 = load double, ptr %709, align 8, !tbaa !11
  %711 = fdiv double %708, %710
  store double %711, ptr %10, align 8, !tbaa !11
  %712 = load double, ptr %10, align 8, !tbaa !11
  %713 = load ptr, ptr %8, align 8, !tbaa !9
  %714 = load i32, ptr %27, align 4, !tbaa !5
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds double, ptr %713, i64 %715
  store double %712, ptr %716, align 8, !tbaa !11
  br label %717

717:                                              ; preds = %702, %697
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  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
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  ret void
}

; 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 = { mustprogress 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}


; 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 nofree norecurse nosync nounwind memory(read, argmem: readwrite, inaccessiblemem: none) uwtable
define dso_local void @_ZN5nasoq20dlsolve_blas_nonUnitEiiPdS0_(i32 noundef %0, i32 noundef %1, ptr noundef readonly %2, ptr nocapture noundef %3) local_unnamed_addr #0 {
  %5 = icmp sgt i32 %1, 7
  br i1 %5, label %.lr.ph284, label %.preheader

.lr.ph284:                                        ; preds = %4
  %6 = add nsw i32 %1, -7
  %7 = sext i32 %0 to i64
  %8 = shl i32 %0, 3
  %9 = add i32 %8, 8
  %10 = sext i32 %9 to i64
  %11 = zext nneg i32 %1 to i64
  %12 = zext nneg i32 %6 to i64
  %wide.trip.count = zext nneg i32 %1 to i64
  %13 = shl nuw nsw i64 %wide.trip.count, 3
  %scevgep328 = getelementptr i8, ptr %3, i64 %13
  %14 = mul nsw i64 %7, 24
  %15 = shl nsw i64 %10, 3
  %16 = shl nsw i64 %10, 3
  %17 = add nsw i64 %16, -64
  %18 = shl nsw i64 %7, 4
  %19 = shl nsw i64 %7, 3
  %20 = shl nsw i64 %7, 5
  %21 = mul nsw i64 %7, 40
  %22 = mul nsw i64 %7, 48
  %23 = mul nsw i64 %7, 56
  %24 = add nsw i64 %wide.trip.count, -8
  %25 = insertelement <8 x ptr> poison, ptr %scevgep328, i64 0
  %26 = shufflevector <8 x ptr> %25, <8 x ptr> poison, <8 x i32> zeroinitializer
  %invariant.gep = getelementptr i8, ptr %3, i64 64
  %27 = getelementptr i8, ptr %2, i64 %14
  %28 = getelementptr i8, ptr %27, i64 64
  %29 = getelementptr i8, ptr %2, i64 %14
  %30 = getelementptr i8, ptr %29, i64 %13
  %31 = getelementptr i8, ptr %2, i64 %18
  %32 = getelementptr i8, ptr %31, i64 64
  %33 = getelementptr i8, ptr %2, i64 %18
  %34 = getelementptr i8, ptr %33, i64 %13
  %35 = getelementptr i8, ptr %2, i64 %19
  %36 = getelementptr i8, ptr %35, i64 64
  %37 = getelementptr i8, ptr %2, i64 %19
  %38 = getelementptr i8, ptr %37, i64 %13
  %invariant.gep550 = getelementptr i8, ptr %2, i64 64
  %39 = getelementptr i8, ptr %2, i64 %13
  %40 = getelementptr i8, ptr %2, i64 %20
  %41 = getelementptr i8, ptr %40, i64 64
  %42 = getelementptr i8, ptr %2, i64 %20
  %43 = getelementptr i8, ptr %42, i64 %13
  %44 = getelementptr i8, ptr %2, i64 %21
  %45 = getelementptr i8, ptr %44, i64 64
  %46 = getelementptr i8, ptr %2, i64 %21
  %47 = getelementptr i8, ptr %46, i64 %13
  %48 = getelementptr i8, ptr %2, i64 %22
  %49 = getelementptr i8, ptr %48, i64 64
  %50 = getelementptr i8, ptr %2, i64 %22
  %51 = getelementptr i8, ptr %50, i64 %13
  %52 = getelementptr i8, ptr %2, i64 %23
  %53 = getelementptr i8, ptr %52, i64 64
  %54 = getelementptr i8, ptr %2, i64 %23
  %55 = getelementptr i8, ptr %54, i64 %13
  %n.mod.vf = and i64 %wide.trip.count, 1
  %cmp.n = icmp eq i64 %n.mod.vf, 0
  br label %83

.preheader.loopexit:                              ; preds = %._crit_edge
  %56 = trunc nuw nsw i64 %indvars.iv.next313 to i32
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit, %4
  %.0266.lcssa = phi ptr [ %2, %4 ], [ %306, %.preheader.loopexit ]
  %.0.lcssa = phi i32 [ 0, %4 ], [ %56, %.preheader.loopexit ]
  %57 = add nsw i32 %1, -3
  %58 = icmp slt i32 %.0.lcssa, %57
  br i1 %58, label %.lr.ph296, label %._crit_edge297

.lr.ph296:                                        ; preds = %.preheader
  %59 = sext i32 %0 to i64
  %60 = shl i32 %0, 2
  %61 = add i32 %60, 4
  %62 = sext i32 %61 to i64
  %63 = zext i32 %.0.lcssa to i64
  %64 = sext i32 %1 to i64
  %65 = sext i32 %57 to i64
  %66 = shl nuw nsw i64 %63, 3
  %67 = add nuw nsw i64 %63, 5
  %68 = mul nsw i64 %59, 24
  %69 = add nsw i64 %68, 32
  %70 = shl nsw i64 %62, 3
  %71 = add nsw i64 %68, 40
  %72 = shl nsw i64 %59, 4
  %73 = add nsw i64 %72, 32
  %74 = add nsw i64 %72, 40
  %75 = shl nsw i64 %59, 3
  %76 = add nsw i64 %75, 32
  %77 = add nsw i64 %75, 40
  %78 = add nuw nsw i64 %63, 5
  %79 = getelementptr i8, ptr %3, i64 %66
  %80 = getelementptr i8, ptr %79, i64 32
  %81 = getelementptr i8, ptr %3, i64 %66
  %82 = getelementptr i8, ptr %81, i64 40
  br label %308

83:                                               ; preds = %.lr.ph284, %._crit_edge
  %indvar = phi i64 [ 0, %.lr.ph284 ], [ %indvar.next, %._crit_edge ]
  %indvars.iv312 = phi i64 [ 0, %.lr.ph284 ], [ %indvars.iv.next313, %._crit_edge ]
  %indvars.iv = phi i64 [ 8, %.lr.ph284 ], [ %indvars.iv.next, %._crit_edge ]
  %.0266281 = phi ptr [ %2, %.lr.ph284 ], [ %306, %._crit_edge ]
  %84 = shl i64 %indvar, 3
  %85 = sub i64 %24, %84
  %86 = shl nuw nsw i64 %indvar, 6
  %gep = getelementptr i8, ptr %invariant.gep, i64 %86
  %87 = mul i64 %15, %indvar
  %scevgep329 = getelementptr i8, ptr %28, i64 %87
  %88 = mul i64 %17, %indvar
  %scevgep330 = getelementptr i8, ptr %30, i64 %88
  %scevgep331 = getelementptr i8, ptr %32, i64 %87
  %scevgep332 = getelementptr i8, ptr %34, i64 %88
  %scevgep333 = getelementptr i8, ptr %36, i64 %87
  %scevgep334 = getelementptr i8, ptr %38, i64 %88
  %gep551 = getelementptr i8, ptr %invariant.gep550, i64 %87
  %scevgep336 = getelementptr i8, ptr %39, i64 %88
  %scevgep337 = getelementptr i8, ptr %41, i64 %87
  %scevgep338 = getelementptr i8, ptr %43, i64 %88
  %scevgep339 = getelementptr i8, ptr %45, i64 %87
  %scevgep340 = getelementptr i8, ptr %47, i64 %88
  %scevgep341 = getelementptr i8, ptr %49, i64 %87
  %scevgep342 = getelementptr i8, ptr %51, i64 %88
  %scevgep343 = getelementptr i8, ptr %53, i64 %87
  %scevgep344 = getelementptr i8, ptr %55, i64 %88
  %89 = getelementptr inbounds double, ptr %.0266281, i64 %7
  %90 = getelementptr inbounds i8, ptr %89, i64 8
  %91 = getelementptr inbounds double, ptr %90, i64 %7
  %92 = getelementptr inbounds i8, ptr %91, i64 8
  %93 = getelementptr inbounds double, ptr %92, i64 %7
  %94 = getelementptr inbounds i8, ptr %93, i64 8
  %95 = getelementptr inbounds double, ptr %94, i64 %7
  %96 = getelementptr inbounds i8, ptr %95, i64 8
  %97 = getelementptr inbounds double, ptr %96, i64 %7
  %98 = getelementptr inbounds i8, ptr %97, i64 8
  %99 = getelementptr inbounds double, ptr %98, i64 %7
  %100 = getelementptr inbounds i8, ptr %99, i64 8
  %101 = getelementptr inbounds double, ptr %100, i64 %7
  %102 = getelementptr inbounds i8, ptr %101, i64 8
  %103 = getelementptr inbounds double, ptr %3, i64 %indvars.iv312
  %104 = load double, ptr %103, align 8, !tbaa !5
  %105 = getelementptr inbounds i8, ptr %.0266281, i64 8
  %106 = load double, ptr %.0266281, align 8, !tbaa !5
  %107 = fdiv double %104, %106
  %108 = or disjoint i64 %indvars.iv312, 1
  %109 = getelementptr inbounds double, ptr %3, i64 %108
  %110 = load double, ptr %109, align 8, !tbaa !5
  %111 = getelementptr inbounds i8, ptr %.0266281, i64 16
  %112 = load double, ptr %105, align 8, !tbaa !5
  %113 = fneg double %107
  %114 = tail call double @llvm.fmuladd.f64(double %113, double %112, double %110)
  %115 = getelementptr inbounds i8, ptr %89, i64 16
  %116 = load double, ptr %90, align 8, !tbaa !5
  %117 = fdiv double %114, %116
  %118 = getelementptr i8, ptr %103, i64 16
  %119 = load double, ptr %118, align 8, !tbaa !5
  %120 = getelementptr inbounds i8, ptr %.0266281, i64 24
  %121 = load double, ptr %111, align 8, !tbaa !5
  %122 = tail call double @llvm.fmuladd.f64(double %113, double %121, double %119)
  %123 = getelementptr inbounds i8, ptr %89, i64 24
  %124 = load double, ptr %115, align 8, !tbaa !5
  %125 = fneg double %117
  %126 = tail call double @llvm.fmuladd.f64(double %125, double %124, double %122)
  %127 = getelementptr inbounds i8, ptr %91, i64 16
  %128 = load double, ptr %92, align 8, !tbaa !5
  %129 = fdiv double %126, %128
  %130 = getelementptr i8, ptr %103, i64 24
  %131 = load double, ptr %130, align 8, !tbaa !5
  %132 = getelementptr inbounds i8, ptr %.0266281, i64 32
  %133 = load double, ptr %120, align 8, !tbaa !5
  %134 = tail call double @llvm.fmuladd.f64(double %113, double %133, double %131)
  %135 = getelementptr inbounds i8, ptr %89, i64 32
  %136 = load double, ptr %123, align 8, !tbaa !5
  %137 = tail call double @llvm.fmuladd.f64(double %125, double %136, double %134)
  %138 = getelementptr inbounds i8, ptr %91, i64 24
  %139 = load double, ptr %127, align 8, !tbaa !5
  %140 = fneg double %129
  %141 = tail call double @llvm.fmuladd.f64(double %140, double %139, double %137)
  %142 = getelementptr inbounds i8, ptr %93, i64 16
  %143 = load double, ptr %94, align 8, !tbaa !5
  %144 = fdiv double %141, %143
  %145 = getelementptr i8, ptr %103, i64 32
  %146 = load double, ptr %145, align 8, !tbaa !5
  %147 = getelementptr inbounds i8, ptr %.0266281, i64 40
  %148 = load double, ptr %132, align 8, !tbaa !5
  %149 = tail call double @llvm.fmuladd.f64(double %113, double %148, double %146)
  %150 = getelementptr inbounds i8, ptr %89, i64 40
  %151 = load double, ptr %135, align 8, !tbaa !5
  %152 = tail call double @llvm.fmuladd.f64(double %125, double %151, double %149)
  %153 = getelementptr inbounds i8, ptr %91, i64 32
  %154 = load double, ptr %138, align 8, !tbaa !5
  %155 = tail call double @llvm.fmuladd.f64(double %140, double %154, double %152)
  %156 = getelementptr inbounds i8, ptr %93, i64 24
  %157 = load double, ptr %142, align 8, !tbaa !5
  %158 = fneg double %144
  %159 = tail call double @llvm.fmuladd.f64(double %158, double %157, double %155)
  %160 = getelementptr inbounds i8, ptr %95, i64 16
  %161 = load double, ptr %96, align 8, !tbaa !5
  %162 = fdiv double %159, %161
  %163 = getelementptr i8, ptr %103, i64 40
  %164 = load double, ptr %163, align 8, !tbaa !5
  %165 = getelementptr inbounds i8, ptr %.0266281, i64 48
  %166 = load double, ptr %147, align 8, !tbaa !5
  %167 = tail call double @llvm.fmuladd.f64(double %113, double %166, double %164)
  %168 = getelementptr inbounds i8, ptr %89, i64 48
  %169 = load double, ptr %150, align 8, !tbaa !5
  %170 = tail call double @llvm.fmuladd.f64(double %125, double %169, double %167)
  %171 = getelementptr inbounds i8, ptr %91, i64 40
  %172 = load double, ptr %153, align 8, !tbaa !5
  %173 = tail call double @llvm.fmuladd.f64(double %140, double %172, double %170)
  %174 = getelementptr inbounds i8, ptr %93, i64 32
  %175 = load double, ptr %156, align 8, !tbaa !5
  %176 = tail call double @llvm.fmuladd.f64(double %158, double %175, double %173)
  %177 = getelementptr inbounds i8, ptr %95, i64 24
  %178 = load double, ptr %160, align 8, !tbaa !5
  %179 = fneg double %162
  %180 = tail call double @llvm.fmuladd.f64(double %179, double %178, double %176)
  %181 = getelementptr inbounds i8, ptr %97, i64 16
  %182 = load double, ptr %98, align 8, !tbaa !5
  %183 = fdiv double %180, %182
  %184 = getelementptr i8, ptr %103, i64 48
  %185 = load double, ptr %184, align 8, !tbaa !5
  %186 = getelementptr inbounds i8, ptr %.0266281, i64 56
  %187 = load double, ptr %165, align 8, !tbaa !5
  %188 = tail call double @llvm.fmuladd.f64(double %113, double %187, double %185)
  %189 = getelementptr inbounds i8, ptr %89, i64 56
  %190 = load double, ptr %168, align 8, !tbaa !5
  %191 = tail call double @llvm.fmuladd.f64(double %125, double %190, double %188)
  %192 = getelementptr inbounds i8, ptr %91, i64 48
  %193 = load double, ptr %171, align 8, !tbaa !5
  %194 = tail call double @llvm.fmuladd.f64(double %140, double %193, double %191)
  %195 = getelementptr inbounds i8, ptr %93, i64 40
  %196 = load double, ptr %174, align 8, !tbaa !5
  %197 = tail call double @llvm.fmuladd.f64(double %158, double %196, double %194)
  %198 = getelementptr inbounds i8, ptr %95, i64 32
  %199 = load double, ptr %177, align 8, !tbaa !5
  %200 = tail call double @llvm.fmuladd.f64(double %179, double %199, double %197)
  %201 = getelementptr inbounds i8, ptr %97, i64 24
  %202 = load double, ptr %181, align 8, !tbaa !5
  %203 = fneg double %183
  %204 = tail call double @llvm.fmuladd.f64(double %203, double %202, double %200)
  %205 = getelementptr inbounds i8, ptr %99, i64 16
  %206 = load double, ptr %100, align 8, !tbaa !5
  %207 = fdiv double %204, %206
  %208 = getelementptr i8, ptr %103, i64 56
  %209 = load double, ptr %208, align 8, !tbaa !5
  %210 = load double, ptr %186, align 8, !tbaa !5
  %211 = tail call double @llvm.fmuladd.f64(double %113, double %210, double %209)
  %212 = load double, ptr %189, align 8, !tbaa !5
  %213 = tail call double @llvm.fmuladd.f64(double %125, double %212, double %211)
  %214 = load double, ptr %192, align 8, !tbaa !5
  %215 = tail call double @llvm.fmuladd.f64(double %140, double %214, double %213)
  %216 = load double, ptr %195, align 8, !tbaa !5
  %217 = tail call double @llvm.fmuladd.f64(double %158, double %216, double %215)
  %218 = load double, ptr %198, align 8, !tbaa !5
  %219 = tail call double @llvm.fmuladd.f64(double %179, double %218, double %217)
  %220 = load double, ptr %201, align 8, !tbaa !5
  %221 = tail call double @llvm.fmuladd.f64(double %203, double %220, double %219)
  %222 = load double, ptr %205, align 8, !tbaa !5
  %223 = fneg double %207
  %224 = tail call double @llvm.fmuladd.f64(double %223, double %222, double %221)
  %225 = load double, ptr %102, align 8, !tbaa !5
  %226 = fdiv double %224, %225
  store double %107, ptr %103, align 8, !tbaa !5
  store double %117, ptr %109, align 8, !tbaa !5
  store double %129, ptr %118, align 8, !tbaa !5
  store double %144, ptr %130, align 8, !tbaa !5
  store double %162, ptr %145, align 8, !tbaa !5
  store double %183, ptr %163, align 8, !tbaa !5
  %227 = or disjoint i64 %indvars.iv312, 7
  store double %207, ptr %184, align 8, !tbaa !5
  %indvars.iv.next313 = add nuw nsw i64 %indvars.iv312, 8
  %228 = getelementptr inbounds double, ptr %3, i64 %227
  store double %226, ptr %228, align 8, !tbaa !5
  %229 = icmp ult i64 %indvars.iv.next313, %11
  br i1 %229, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %83
  %230 = getelementptr inbounds i8, ptr %101, i64 16
  %231 = getelementptr inbounds i8, ptr %99, i64 24
  %232 = getelementptr inbounds i8, ptr %97, i64 32
  %233 = getelementptr inbounds i8, ptr %95, i64 40
  %234 = getelementptr inbounds i8, ptr %93, i64 48
  %235 = getelementptr inbounds i8, ptr %91, i64 56
  %236 = getelementptr inbounds i8, ptr %89, i64 64
  %237 = getelementptr inbounds i8, ptr %.0266281, i64 64
  %238 = fneg double %226
  %min.iters.check = icmp ult i64 %85, 4
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph
  %239 = insertelement <8 x ptr> poison, ptr %gep, i64 0
  %240 = shufflevector <8 x ptr> %239, <8 x ptr> poison, <8 x i32> zeroinitializer
  %241 = insertelement <8 x ptr> poison, ptr %scevgep330, i64 0
  %242 = insertelement <8 x ptr> %241, ptr %scevgep332, i64 1
  %243 = insertelement <8 x ptr> %242, ptr %scevgep334, i64 2
  %244 = insertelement <8 x ptr> %243, ptr %scevgep336, i64 3
  %245 = insertelement <8 x ptr> %244, ptr %scevgep338, i64 4
  %246 = insertelement <8 x ptr> %245, ptr %scevgep340, i64 5
  %247 = insertelement <8 x ptr> %246, ptr %scevgep342, i64 6
  %248 = insertelement <8 x ptr> %247, ptr %scevgep344, i64 7
  %249 = icmp ult <8 x ptr> %240, %248
  %250 = insertelement <8 x ptr> poison, ptr %scevgep329, i64 0
  %251 = insertelement <8 x ptr> %250, ptr %scevgep331, i64 1
  %252 = insertelement <8 x ptr> %251, ptr %scevgep333, i64 2
  %253 = insertelement <8 x ptr> %252, ptr %gep551, i64 3
  %254 = insertelement <8 x ptr> %253, ptr %scevgep337, i64 4
  %255 = insertelement <8 x ptr> %254, ptr %scevgep339, i64 5
  %256 = insertelement <8 x ptr> %255, ptr %scevgep341, i64 6
  %257 = insertelement <8 x ptr> %256, ptr %scevgep343, i64 7
  %258 = icmp ult <8 x ptr> %257, %26
  %259 = and <8 x i1> %249, %258
  %260 = bitcast <8 x i1> %259 to i8
  %.not = icmp eq i8 %260, 0
  br i1 %.not, label %vector.ph, label %scalar.ph.preheader

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = sub i64 %85, %n.mod.vf
  %ind.end = add i64 %indvars.iv, %n.vec
  %261 = shl i64 %n.vec, 3
  %ind.end372 = getelementptr i8, ptr %230, i64 %261
  %262 = shl i64 %n.vec, 3
  %ind.end374 = getelementptr i8, ptr %231, i64 %262
  %263 = shl i64 %n.vec, 3
  %ind.end376 = getelementptr i8, ptr %232, i64 %263
  %264 = shl i64 %n.vec, 3
  %ind.end378 = getelementptr i8, ptr %233, i64 %264
  %265 = shl i64 %n.vec, 3
  %ind.end380 = getelementptr i8, ptr %234, i64 %265
  %266 = shl i64 %n.vec, 3
  %ind.end382 = getelementptr i8, ptr %235, i64 %266
  %267 = shl i64 %n.vec, 3
  %ind.end384 = getelementptr i8, ptr %236, i64 %267
  %268 = shl i64 %n.vec, 3
  %ind.end386 = getelementptr i8, ptr %237, i64 %268
  %broadcast.splatinsert = insertelement <2 x double> poison, double %113, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert405 = insertelement <2 x double> poison, double %125, i64 0
  %broadcast.splat406 = shufflevector <2 x double> %broadcast.splatinsert405, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert408 = insertelement <2 x double> poison, double %140, i64 0
  %broadcast.splat409 = shufflevector <2 x double> %broadcast.splatinsert408, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert411 = insertelement <2 x double> poison, double %158, i64 0
  %broadcast.splat412 = shufflevector <2 x double> %broadcast.splatinsert411, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert414 = insertelement <2 x double> poison, double %179, i64 0
  %broadcast.splat415 = shufflevector <2 x double> %broadcast.splatinsert414, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert417 = insertelement <2 x double> poison, double %203, i64 0
  %broadcast.splat418 = shufflevector <2 x double> %broadcast.splatinsert417, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert420 = insertelement <2 x double> poison, double %223, i64 0
  %broadcast.splat421 = shufflevector <2 x double> %broadcast.splatinsert420, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert423 = insertelement <2 x double> poison, double %238, i64 0
  %broadcast.splat424 = shufflevector <2 x double> %broadcast.splatinsert423, <2 x double> poison, <2 x i32> zeroinitializer
  %269 = getelementptr double, ptr %3, i64 %indvars.iv
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx388 = shl i64 %index, 3
  %next.gep = getelementptr i8, ptr %230, i64 %offset.idx388
  %offset.idx389 = shl i64 %index, 3
  %next.gep390 = getelementptr i8, ptr %231, i64 %offset.idx389
  %offset.idx391 = shl i64 %index, 3
  %next.gep392 = getelementptr i8, ptr %232, i64 %offset.idx391
  %offset.idx393 = shl i64 %index, 3
  %next.gep394 = getelementptr i8, ptr %233, i64 %offset.idx393
  %offset.idx395 = shl i64 %index, 3
  %next.gep396 = getelementptr i8, ptr %234, i64 %offset.idx395
  %offset.idx397 = shl i64 %index, 3
  %next.gep398 = getelementptr i8, ptr %235, i64 %offset.idx397
  %offset.idx399 = shl i64 %index, 3
  %next.gep400 = getelementptr i8, ptr %236, i64 %offset.idx399
  %offset.idx401 = shl i64 %index, 3
  %next.gep402 = getelementptr i8, ptr %237, i64 %offset.idx401
  %270 = getelementptr double, ptr %269, i64 %index
  %wide.load = load <2 x double>, ptr %270, align 8, !tbaa !5, !alias.scope !9, !noalias !12
  %wide.load403 = load <2 x double>, ptr %next.gep402, align 8, !tbaa !5, !alias.scope !21
  %271 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load403, <2 x double> %wide.load)
  %wide.load404 = load <2 x double>, ptr %next.gep400, align 8, !tbaa !5, !alias.scope !22
  %272 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat406, <2 x double> %wide.load404, <2 x double> %271)
  %wide.load407 = load <2 x double>, ptr %next.gep398, align 8, !tbaa !5, !alias.scope !23
  %273 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat409, <2 x double> %wide.load407, <2 x double> %272)
  %wide.load410 = load <2 x double>, ptr %next.gep396, align 8, !tbaa !5, !alias.scope !24
  %274 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat412, <2 x double> %wide.load410, <2 x double> %273)
  %wide.load413 = load <2 x double>, ptr %next.gep394, align 8, !tbaa !5, !alias.scope !25
  %275 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat415, <2 x double> %wide.load413, <2 x double> %274)
  %wide.load416 = load <2 x double>, ptr %next.gep392, align 8, !tbaa !5, !alias.scope !26
  %276 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat418, <2 x double> %wide.load416, <2 x double> %275)
  %wide.load419 = load <2 x double>, ptr %next.gep390, align 8, !tbaa !5, !alias.scope !27
  %277 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat421, <2 x double> %wide.load419, <2 x double> %276)
  %wide.load422 = load <2 x double>, ptr %next.gep, align 8, !tbaa !5, !alias.scope !28
  %278 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat424, <2 x double> %wide.load422, <2 x double> %277)
  store <2 x double> %278, ptr %270, align 8, !tbaa !5, !alias.scope !9, !noalias !12
  %index.next = add nuw i64 %index, 2
  %279 = icmp eq i64 %index.next, %n.vec
  br i1 %279, label %middle.block, label %vector.body, !llvm.loop !29

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph
  %indvars.iv309.ph = phi i64 [ %indvars.iv, %vector.memcheck ], [ %indvars.iv, %.lr.ph ], [ %ind.end, %middle.block ]
  %.0252280.ph = phi ptr [ %230, %vector.memcheck ], [ %230, %.lr.ph ], [ %ind.end372, %middle.block ]
  %.0253279.ph = phi ptr [ %231, %vector.memcheck ], [ %231, %.lr.ph ], [ %ind.end374, %middle.block ]
  %.0254278.ph = phi ptr [ %232, %vector.memcheck ], [ %232, %.lr.ph ], [ %ind.end376, %middle.block ]
  %.0255277.ph = phi ptr [ %233, %vector.memcheck ], [ %233, %.lr.ph ], [ %ind.end378, %middle.block ]
  %.0256276.ph = phi ptr [ %234, %vector.memcheck ], [ %234, %.lr.ph ], [ %ind.end380, %middle.block ]
  %.0258275.ph = phi ptr [ %235, %vector.memcheck ], [ %235, %.lr.ph ], [ %ind.end382, %middle.block ]
  %.0260274.ph = phi ptr [ %236, %vector.memcheck ], [ %236, %.lr.ph ], [ %ind.end384, %middle.block ]
  %.0263273.ph = phi ptr [ %237, %vector.memcheck ], [ %237, %.lr.ph ], [ %ind.end386, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv309 = phi i64 [ %indvars.iv.next310, %scalar.ph ], [ %indvars.iv309.ph, %scalar.ph.preheader ]
  %.0252280 = phi ptr [ %303, %scalar.ph ], [ %.0252280.ph, %scalar.ph.preheader ]
  %.0253279 = phi ptr [ %300, %scalar.ph ], [ %.0253279.ph, %scalar.ph.preheader ]
  %.0254278 = phi ptr [ %297, %scalar.ph ], [ %.0254278.ph, %scalar.ph.preheader ]
  %.0255277 = phi ptr [ %294, %scalar.ph ], [ %.0255277.ph, %scalar.ph.preheader ]
  %.0256276 = phi ptr [ %291, %scalar.ph ], [ %.0256276.ph, %scalar.ph.preheader ]
  %.0258275 = phi ptr [ %288, %scalar.ph ], [ %.0258275.ph, %scalar.ph.preheader ]
  %.0260274 = phi ptr [ %285, %scalar.ph ], [ %.0260274.ph, %scalar.ph.preheader ]
  %.0263273 = phi ptr [ %282, %scalar.ph ], [ %.0263273.ph, %scalar.ph.preheader ]
  %280 = getelementptr inbounds double, ptr %3, i64 %indvars.iv309
  %281 = load double, ptr %280, align 8, !tbaa !5
  %282 = getelementptr inbounds i8, ptr %.0263273, i64 8
  %283 = load double, ptr %.0263273, align 8, !tbaa !5
  %284 = tail call double @llvm.fmuladd.f64(double %113, double %283, double %281)
  %285 = getelementptr inbounds i8, ptr %.0260274, i64 8
  %286 = load double, ptr %.0260274, align 8, !tbaa !5
  %287 = tail call double @llvm.fmuladd.f64(double %125, double %286, double %284)
  %288 = getelementptr inbounds i8, ptr %.0258275, i64 8
  %289 = load double, ptr %.0258275, align 8, !tbaa !5
  %290 = tail call double @llvm.fmuladd.f64(double %140, double %289, double %287)
  %291 = getelementptr inbounds i8, ptr %.0256276, i64 8
  %292 = load double, ptr %.0256276, align 8, !tbaa !5
  %293 = tail call double @llvm.fmuladd.f64(double %158, double %292, double %290)
  %294 = getelementptr inbounds i8, ptr %.0255277, i64 8
  %295 = load double, ptr %.0255277, align 8, !tbaa !5
  %296 = tail call double @llvm.fmuladd.f64(double %179, double %295, double %293)
  %297 = getelementptr inbounds i8, ptr %.0254278, i64 8
  %298 = load double, ptr %.0254278, align 8, !tbaa !5
  %299 = tail call double @llvm.fmuladd.f64(double %203, double %298, double %296)
  %300 = getelementptr inbounds i8, ptr %.0253279, i64 8
  %301 = load double, ptr %.0253279, align 8, !tbaa !5
  %302 = tail call double @llvm.fmuladd.f64(double %223, double %301, double %299)
  %303 = getelementptr inbounds i8, ptr %.0252280, i64 8
  %304 = load double, ptr %.0252280, align 8, !tbaa !5
  %305 = tail call double @llvm.fmuladd.f64(double %238, double %304, double %302)
  store double %305, ptr %280, align 8, !tbaa !5
  %indvars.iv.next310 = add nuw nsw i64 %indvars.iv309, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next310, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %scalar.ph, !llvm.loop !33

._crit_edge:                                      ; preds = %scalar.ph, %middle.block, %83
  %306 = getelementptr inbounds double, ptr %.0266281, i64 %10
  %307 = icmp ult i64 %indvars.iv.next313, %12
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 8
  %indvar.next = add i64 %indvar, 1
  br i1 %307, label %83, label %.preheader.loopexit, !llvm.loop !34

308:                                              ; preds = %.lr.ph296, %._crit_edge293
  %indvar426 = phi i64 [ 0, %.lr.ph296 ], [ %indvar.next427, %._crit_edge293 ]
  %indvars.iv320 = phi i64 [ %63, %.lr.ph296 ], [ %indvars.iv.next321, %._crit_edge293 ]
  %indvars.iv315.in = phi i64 [ %63, %.lr.ph296 ], [ %indvars.iv315, %._crit_edge293 ]
  %.1267294 = phi ptr [ %.0266.lcssa, %.lr.ph296 ], [ %412, %._crit_edge293 ]
  %309 = shl nuw nsw i64 %indvar426, 2
  %310 = add nuw i64 %78, %309
  %311 = trunc i64 %310 to i32
  %smax458 = tail call i32 @llvm.smax.i32(i32 %1, i32 %311)
  %indvar426.tr = trunc i64 %indvar426 to i32
  %312 = shl i32 %indvar426.tr, 2
  %313 = add i32 %.0.lcssa, %312
  %reass.sub = sub i32 %smax458, %313
  %314 = add i32 %reass.sub, -5
  %315 = zext i32 %314 to i64
  %316 = add nuw nsw i64 %315, 1
  %317 = shl nuw nsw i64 %indvar426, 5
  %scevgep428 = getelementptr i8, ptr %80, i64 %317
  %scevgep429 = getelementptr i8, ptr %82, i64 %317
  %318 = shl nuw nsw i64 %indvar426, 2
  %319 = add nuw i64 %67, %318
  %320 = trunc i64 %319 to i32
  %smax = tail call i32 @llvm.smax.i32(i32 %1, i32 %320)
  %indvar426.tr546 = trunc i64 %indvar426 to i32
  %321 = shl i32 %indvar426.tr546, 2
  %322 = add i32 %.0.lcssa, %321
  %reass.sub547 = sub i32 %smax, %322
  %323 = add i32 %reass.sub547, -5
  %324 = zext i32 %323 to i64
  %325 = shl nuw nsw i64 %324, 3
  %scevgep430 = getelementptr i8, ptr %scevgep429, i64 %325
  %326 = mul i64 %70, %indvar426
  %327 = add i64 %69, %326
  %scevgep431 = getelementptr i8, ptr %.0266.lcssa, i64 %327
  %328 = add i64 %71, %326
  %scevgep432 = getelementptr i8, ptr %.0266.lcssa, i64 %328
  %scevgep433 = getelementptr i8, ptr %scevgep432, i64 %325
  %329 = add i64 %73, %326
  %scevgep434 = getelementptr i8, ptr %.0266.lcssa, i64 %329
  %330 = add i64 %74, %326
  %scevgep435 = getelementptr i8, ptr %.0266.lcssa, i64 %330
  %scevgep436 = getelementptr i8, ptr %scevgep435, i64 %325
  %331 = add i64 %76, %326
  %scevgep437 = getelementptr i8, ptr %.0266.lcssa, i64 %331
  %332 = add i64 %77, %326
  %scevgep438 = getelementptr i8, ptr %.0266.lcssa, i64 %332
  %scevgep439 = getelementptr i8, ptr %scevgep438, i64 %325
  %333 = add i64 %326, 32
  %scevgep440 = getelementptr i8, ptr %.0266.lcssa, i64 %333
  %334 = add i64 %326, 40
  %scevgep441 = getelementptr i8, ptr %.0266.lcssa, i64 %334
  %scevgep442 = getelementptr i8, ptr %scevgep441, i64 %325
  %indvars.iv315 = add nuw nsw i64 %indvars.iv315.in, 4
  %335 = getelementptr inbounds double, ptr %.1267294, i64 %59
  %336 = getelementptr inbounds i8, ptr %335, i64 8
  %337 = getelementptr inbounds double, ptr %336, i64 %59
  %338 = getelementptr inbounds i8, ptr %337, i64 8
  %339 = getelementptr inbounds double, ptr %338, i64 %59
  %340 = getelementptr inbounds i8, ptr %339, i64 8
  %341 = getelementptr inbounds double, ptr %3, i64 %indvars.iv320
  %342 = load double, ptr %341, align 8, !tbaa !5
  %343 = getelementptr inbounds i8, ptr %.1267294, i64 8
  %344 = load double, ptr %.1267294, align 8, !tbaa !5
  %345 = fdiv double %342, %344
  %346 = or disjoint i64 %indvars.iv320, 1
  %347 = getelementptr inbounds double, ptr %3, i64 %346
  %348 = load double, ptr %347, align 8, !tbaa !5
  %349 = getelementptr inbounds i8, ptr %.1267294, i64 16
  %350 = load double, ptr %343, align 8, !tbaa !5
  %351 = fneg double %345
  %352 = tail call double @llvm.fmuladd.f64(double %351, double %350, double %348)
  %353 = getelementptr inbounds i8, ptr %335, i64 16
  %354 = load double, ptr %336, align 8, !tbaa !5
  %355 = fdiv double %352, %354
  %356 = getelementptr i8, ptr %341, i64 16
  %357 = load double, ptr %356, align 8, !tbaa !5
  %358 = getelementptr inbounds i8, ptr %.1267294, i64 24
  %359 = load double, ptr %349, align 8, !tbaa !5
  %360 = tail call double @llvm.fmuladd.f64(double %351, double %359, double %357)
  %361 = getelementptr inbounds i8, ptr %335, i64 24
  %362 = load double, ptr %353, align 8, !tbaa !5
  %363 = fneg double %355
  %364 = tail call double @llvm.fmuladd.f64(double %363, double %362, double %360)
  %365 = getelementptr inbounds i8, ptr %337, i64 16
  %366 = load double, ptr %338, align 8, !tbaa !5
  %367 = fdiv double %364, %366
  %368 = getelementptr i8, ptr %341, i64 24
  %369 = load double, ptr %368, align 8, !tbaa !5
  %370 = load double, ptr %358, align 8, !tbaa !5
  %371 = tail call double @llvm.fmuladd.f64(double %351, double %370, double %369)
  %372 = load double, ptr %361, align 8, !tbaa !5
  %373 = tail call double @llvm.fmuladd.f64(double %363, double %372, double %371)
  %374 = load double, ptr %365, align 8, !tbaa !5
  %375 = fneg double %367
  %376 = tail call double @llvm.fmuladd.f64(double %375, double %374, double %373)
  %377 = load double, ptr %340, align 8, !tbaa !5
  %378 = fdiv double %376, %377
  store double %345, ptr %341, align 8, !tbaa !5
  store double %355, ptr %347, align 8, !tbaa !5
  store double %367, ptr %356, align 8, !tbaa !5
  %indvars.iv.next321 = add nuw nsw i64 %indvars.iv320, 4
  store double %378, ptr %368, align 8, !tbaa !5
  %379 = icmp slt i64 %indvars.iv.next321, %64
  br i1 %379, label %.lr.ph292, label %._crit_edge293

.lr.ph292:                                        ; preds = %308
  %380 = getelementptr inbounds i8, ptr %339, i64 16
  %381 = getelementptr inbounds i8, ptr %337, i64 24
  %382 = getelementptr inbounds i8, ptr %335, i64 32
  %383 = getelementptr inbounds i8, ptr %.1267294, i64 32
  %384 = fneg double %378
  %min.iters.check461 = icmp ult i32 %314, 3
  br i1 %min.iters.check461, label %scalar.ph460.preheader, label %vector.memcheck425

vector.memcheck425:                               ; preds = %.lr.ph292
  %bound0443 = icmp ult ptr %scevgep428, %scevgep433
  %bound1444 = icmp ult ptr %scevgep431, %scevgep430
  %found.conflict445 = and i1 %bound0443, %bound1444
  %bound0446 = icmp ult ptr %scevgep428, %scevgep436
  %bound1447 = icmp ult ptr %scevgep434, %scevgep430
  %found.conflict448 = and i1 %bound0446, %bound1447
  %conflict.rdx449 = or i1 %found.conflict445, %found.conflict448
  %bound0450 = icmp ult ptr %scevgep428, %scevgep439
  %bound1451 = icmp ult ptr %scevgep437, %scevgep430
  %found.conflict452 = and i1 %bound0450, %bound1451
  %conflict.rdx453 = or i1 %conflict.rdx449, %found.conflict452
  %bound0454 = icmp ult ptr %scevgep428, %scevgep442
  %bound1455 = icmp ult ptr %scevgep440, %scevgep430
  %found.conflict456 = and i1 %bound0454, %bound1455
  %conflict.rdx457 = or i1 %conflict.rdx453, %found.conflict456
  br i1 %conflict.rdx457, label %scalar.ph460.preheader, label %vector.ph462

vector.ph462:                                     ; preds = %vector.memcheck425
  %n.vec464 = and i64 %316, 8589934590
  %ind.end465 = add nuw i64 %indvars.iv315, %n.vec464
  %385 = shl nuw nsw i64 %n.vec464, 3
  %ind.end467 = getelementptr i8, ptr %380, i64 %385
  %386 = shl nuw nsw i64 %n.vec464, 3
  %ind.end469 = getelementptr i8, ptr %381, i64 %386
  %387 = shl nuw nsw i64 %n.vec464, 3
  %ind.end471 = getelementptr i8, ptr %382, i64 %387
  %388 = shl nuw nsw i64 %n.vec464, 3
  %ind.end473 = getelementptr i8, ptr %383, i64 %388
  %broadcast.splatinsert488 = insertelement <2 x double> poison, double %351, i64 0
  %broadcast.splat489 = shufflevector <2 x double> %broadcast.splatinsert488, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert491 = insertelement <2 x double> poison, double %363, i64 0
  %broadcast.splat492 = shufflevector <2 x double> %broadcast.splatinsert491, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert494 = insertelement <2 x double> poison, double %375, i64 0
  %broadcast.splat495 = shufflevector <2 x double> %broadcast.splatinsert494, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert497 = insertelement <2 x double> poison, double %384, i64 0
  %broadcast.splat498 = shufflevector <2 x double> %broadcast.splatinsert497, <2 x double> poison, <2 x i32> zeroinitializer
  %389 = getelementptr double, ptr %3, i64 %indvars.iv315
  br label %vector.body475

vector.body475:                                   ; preds = %vector.body475, %vector.ph462
  %index476 = phi i64 [ 0, %vector.ph462 ], [ %index.next499, %vector.body475 ]
  %offset.idx478 = shl i64 %index476, 3
  %next.gep479 = getelementptr i8, ptr %380, i64 %offset.idx478
  %offset.idx480 = shl i64 %index476, 3
  %next.gep481 = getelementptr i8, ptr %381, i64 %offset.idx480
  %offset.idx482 = shl i64 %index476, 3
  %next.gep483 = getelementptr i8, ptr %382, i64 %offset.idx482
  %offset.idx484 = shl i64 %index476, 3
  %next.gep485 = getelementptr i8, ptr %383, i64 %offset.idx484
  %390 = getelementptr double, ptr %389, i64 %index476
  %wide.load486 = load <2 x double>, ptr %390, align 8, !tbaa !5, !alias.scope !35, !noalias !38
  %wide.load487 = load <2 x double>, ptr %next.gep485, align 8, !tbaa !5, !alias.scope !43
  %391 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat489, <2 x double> %wide.load487, <2 x double> %wide.load486)
  %wide.load490 = load <2 x double>, ptr %next.gep483, align 8, !tbaa !5, !alias.scope !44
  %392 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat492, <2 x double> %wide.load490, <2 x double> %391)
  %wide.load493 = load <2 x double>, ptr %next.gep481, align 8, !tbaa !5, !alias.scope !45
  %393 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat495, <2 x double> %wide.load493, <2 x double> %392)
  %wide.load496 = load <2 x double>, ptr %next.gep479, align 8, !tbaa !5, !alias.scope !46
  %394 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat498, <2 x double> %wide.load496, <2 x double> %393)
  store <2 x double> %394, ptr %390, align 8, !tbaa !5, !alias.scope !35, !noalias !38
  %index.next499 = add nuw i64 %index476, 2
  %395 = icmp eq i64 %index.next499, %n.vec464
  br i1 %395, label %middle.block459, label %vector.body475, !llvm.loop !47

middle.block459:                                  ; preds = %vector.body475
  %cmp.n500 = icmp eq i64 %316, %n.vec464
  br i1 %cmp.n500, label %._crit_edge293, label %scalar.ph460.preheader

scalar.ph460.preheader:                           ; preds = %middle.block459, %vector.memcheck425, %.lr.ph292
  %indvars.iv317.ph = phi i64 [ %indvars.iv315, %vector.memcheck425 ], [ %indvars.iv315, %.lr.ph292 ], [ %ind.end465, %middle.block459 ]
  %.1257290.ph = phi ptr [ %380, %vector.memcheck425 ], [ %380, %.lr.ph292 ], [ %ind.end467, %middle.block459 ]
  %.1259289.ph = phi ptr [ %381, %vector.memcheck425 ], [ %381, %.lr.ph292 ], [ %ind.end469, %middle.block459 ]
  %.1261288.ph = phi ptr [ %382, %vector.memcheck425 ], [ %382, %.lr.ph292 ], [ %ind.end471, %middle.block459 ]
  %.1264287.ph = phi ptr [ %383, %vector.memcheck425 ], [ %383, %.lr.ph292 ], [ %ind.end473, %middle.block459 ]
  br label %scalar.ph460

scalar.ph460:                                     ; preds = %scalar.ph460.preheader, %scalar.ph460
  %indvars.iv317 = phi i64 [ %indvars.iv.next318, %scalar.ph460 ], [ %indvars.iv317.ph, %scalar.ph460.preheader ]
  %.1257290 = phi ptr [ %407, %scalar.ph460 ], [ %.1257290.ph, %scalar.ph460.preheader ]
  %.1259289 = phi ptr [ %404, %scalar.ph460 ], [ %.1259289.ph, %scalar.ph460.preheader ]
  %.1261288 = phi ptr [ %401, %scalar.ph460 ], [ %.1261288.ph, %scalar.ph460.preheader ]
  %.1264287 = phi ptr [ %398, %scalar.ph460 ], [ %.1264287.ph, %scalar.ph460.preheader ]
  %396 = getelementptr inbounds double, ptr %3, i64 %indvars.iv317
  %397 = load double, ptr %396, align 8, !tbaa !5
  %398 = getelementptr inbounds i8, ptr %.1264287, i64 8
  %399 = load double, ptr %.1264287, align 8, !tbaa !5
  %400 = tail call double @llvm.fmuladd.f64(double %351, double %399, double %397)
  %401 = getelementptr inbounds i8, ptr %.1261288, i64 8
  %402 = load double, ptr %.1261288, align 8, !tbaa !5
  %403 = tail call double @llvm.fmuladd.f64(double %363, double %402, double %400)
  %404 = getelementptr inbounds i8, ptr %.1259289, i64 8
  %405 = load double, ptr %.1259289, align 8, !tbaa !5
  %406 = tail call double @llvm.fmuladd.f64(double %375, double %405, double %403)
  %407 = getelementptr inbounds i8, ptr %.1257290, i64 8
  %408 = load double, ptr %.1257290, align 8, !tbaa !5
  %409 = tail call double @llvm.fmuladd.f64(double %384, double %408, double %406)
  store double %409, ptr %396, align 8, !tbaa !5
  %indvars.iv.next318 = add nuw nsw i64 %indvars.iv317, 1
  %410 = trunc nuw i64 %indvars.iv.next318 to i32
  %411 = icmp slt i32 %410, %1
  br i1 %411, label %scalar.ph460, label %._crit_edge293, !llvm.loop !48

._crit_edge293:                                   ; preds = %scalar.ph460, %middle.block459, %308
  %412 = getelementptr inbounds double, ptr %.1267294, i64 %62
  %413 = icmp slt i64 %indvars.iv.next321, %65
  %indvar.next427 = add i64 %indvar426, 1
  br i1 %413, label %308, label %._crit_edge297.loopexit, !llvm.loop !49

._crit_edge297.loopexit:                          ; preds = %._crit_edge293
  %414 = trunc nuw nsw i64 %indvars.iv.next321 to i32
  br label %._crit_edge297

._crit_edge297:                                   ; preds = %._crit_edge297.loopexit, %.preheader
  %.1267.lcssa = phi ptr [ %.0266.lcssa, %.preheader ], [ %412, %._crit_edge297.loopexit ]
  %.1.lcssa = phi i32 [ %.0.lcssa, %.preheader ], [ %414, %._crit_edge297.loopexit ]
  %415 = add nsw i32 %1, -1
  %416 = icmp slt i32 %.1.lcssa, %415
  br i1 %416, label %417, label %484

417:                                              ; preds = %._crit_edge297
  %418 = sext i32 %0 to i64
  %419 = getelementptr inbounds double, ptr %.1267.lcssa, i64 %418
  %420 = getelementptr inbounds i8, ptr %419, i64 8
  %421 = zext nneg i32 %.1.lcssa to i64
  %422 = getelementptr inbounds double, ptr %3, i64 %421
  %423 = load double, ptr %422, align 8, !tbaa !5
  %424 = getelementptr inbounds i8, ptr %.1267.lcssa, i64 8
  %425 = load double, ptr %.1267.lcssa, align 8, !tbaa !5
  %426 = fdiv double %423, %425
  %427 = or disjoint i32 %.1.lcssa, 1
  %428 = zext nneg i32 %427 to i64
  %429 = getelementptr inbounds double, ptr %3, i64 %428
  %430 = load double, ptr %429, align 8, !tbaa !5
  %431 = load double, ptr %424, align 8, !tbaa !5
  %432 = fneg double %426
  %433 = tail call double @llvm.fmuladd.f64(double %432, double %431, double %430)
  %434 = load double, ptr %420, align 8, !tbaa !5
  %435 = fdiv double %433, %434
  store double %426, ptr %422, align 8, !tbaa !5
  %436 = or disjoint i32 %.1.lcssa, 2
  store double %435, ptr %429, align 8, !tbaa !5
  %437 = icmp slt i32 %436, %1
  br i1 %437, label %.lr.ph304, label %._crit_edge305

.lr.ph304:                                        ; preds = %417
  %438 = getelementptr i8, ptr %419, i64 16
  %439 = getelementptr i8, ptr %.1267.lcssa, i64 16
  %440 = fneg double %435
  %441 = add nuw nsw i64 %421, 2
  %442 = add i32 %1, -3
  %443 = sub i32 %442, %.1.lcssa
  %444 = zext i32 %443 to i64
  %445 = add nuw nsw i64 %444, 1
  %min.iters.check515 = icmp ult i32 %443, 13
  br i1 %min.iters.check515, label %scalar.ph514.preheader, label %vector.memcheck501

vector.memcheck501:                               ; preds = %.lr.ph304
  %446 = shl nuw nsw i64 %421, 3
  %447 = getelementptr i8, ptr %3, i64 %446
  %scevgep502 = getelementptr i8, ptr %447, i64 16
  %448 = add i32 %1, -3
  %449 = sub i32 %448, %.1.lcssa
  %450 = zext i32 %449 to i64
  %451 = shl nuw nsw i64 %450, 3
  %452 = getelementptr i8, ptr %3, i64 %446
  %453 = getelementptr i8, ptr %452, i64 %451
  %scevgep503 = getelementptr i8, ptr %453, i64 24
  %454 = add nsw i64 %418, %450
  %455 = shl nsw i64 %454, 3
  %456 = add nsw i64 %455, 24
  %scevgep504 = getelementptr i8, ptr %.1267.lcssa, i64 %456
  %457 = add nuw nsw i64 %451, 24
  %scevgep505 = getelementptr i8, ptr %.1267.lcssa, i64 %457
  %bound0506 = icmp ult ptr %scevgep502, %scevgep504
  %bound1507 = icmp ult ptr %438, %scevgep503
  %found.conflict508 = and i1 %bound0506, %bound1507
  %bound0509 = icmp ult ptr %scevgep502, %scevgep505
  %bound1510 = icmp ult ptr %439, %scevgep503
  %found.conflict511 = and i1 %bound0509, %bound1510
  %conflict.rdx512 = or i1 %found.conflict508, %found.conflict511
  br i1 %conflict.rdx512, label %scalar.ph514.preheader, label %vector.ph516

vector.ph516:                                     ; preds = %vector.memcheck501
  %n.vec518 = and i64 %445, 8589934588
  %ind.end519 = add nuw nsw i64 %441, %n.vec518
  %458 = shl nuw nsw i64 %n.vec518, 3
  %ind.end521 = getelementptr i8, ptr %438, i64 %458
  %459 = shl nuw nsw i64 %n.vec518, 3
  %ind.end523 = getelementptr i8, ptr %439, i64 %459
  %broadcast.splatinsert538 = insertelement <2 x double> poison, double %432, i64 0
  %broadcast.splat539 = shufflevector <2 x double> %broadcast.splatinsert538, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert542 = insertelement <2 x double> poison, double %440, i64 0
  %broadcast.splat543 = shufflevector <2 x double> %broadcast.splatinsert542, <2 x double> poison, <2 x i32> zeroinitializer
  %460 = getelementptr double, ptr %3, i64 %441
  br label %vector.body525

vector.body525:                                   ; preds = %vector.body525, %vector.ph516
  %index526 = phi i64 [ 0, %vector.ph516 ], [ %index.next544, %vector.body525 ]
  %offset.idx528 = shl i64 %index526, 3
  %next.gep529 = getelementptr i8, ptr %438, i64 %offset.idx528
  %offset.idx531 = shl i64 %index526, 3
  %next.gep532 = getelementptr i8, ptr %439, i64 %offset.idx531
  %461 = getelementptr double, ptr %460, i64 %index526
  %462 = getelementptr inbounds i8, ptr %461, i64 16
  %wide.load534 = load <2 x double>, ptr %461, align 8, !tbaa !5, !alias.scope !50, !noalias !53
  %wide.load535 = load <2 x double>, ptr %462, align 8, !tbaa !5, !alias.scope !50, !noalias !53
  %463 = getelementptr i8, ptr %next.gep532, i64 16
  %wide.load536 = load <2 x double>, ptr %next.gep532, align 8, !tbaa !5, !alias.scope !56
  %wide.load537 = load <2 x double>, ptr %463, align 8, !tbaa !5, !alias.scope !56
  %464 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat539, <2 x double> %wide.load536, <2 x double> %wide.load534)
  %465 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat539, <2 x double> %wide.load537, <2 x double> %wide.load535)
  %466 = getelementptr i8, ptr %next.gep529, i64 16
  %wide.load540 = load <2 x double>, ptr %next.gep529, align 8, !tbaa !5, !alias.scope !57
  %wide.load541 = load <2 x double>, ptr %466, align 8, !tbaa !5, !alias.scope !57
  %467 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat543, <2 x double> %wide.load540, <2 x double> %464)
  %468 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat543, <2 x double> %wide.load541, <2 x double> %465)
  store <2 x double> %467, ptr %461, align 8, !tbaa !5, !alias.scope !50, !noalias !53
  store <2 x double> %468, ptr %462, align 8, !tbaa !5, !alias.scope !50, !noalias !53
  %index.next544 = add nuw i64 %index526, 4
  %469 = icmp eq i64 %index.next544, %n.vec518
  br i1 %469, label %middle.block513, label %vector.body525, !llvm.loop !58

middle.block513:                                  ; preds = %vector.body525
  %cmp.n545 = icmp eq i64 %445, %n.vec518
  br i1 %cmp.n545, label %._crit_edge305, label %scalar.ph514.preheader

scalar.ph514.preheader:                           ; preds = %middle.block513, %vector.memcheck501, %.lr.ph304
  %indvars.iv323.ph = phi i64 [ %441, %vector.memcheck501 ], [ %441, %.lr.ph304 ], [ %ind.end519, %middle.block513 ]
  %.2262302.ph = phi ptr [ %438, %vector.memcheck501 ], [ %438, %.lr.ph304 ], [ %ind.end521, %middle.block513 ]
  %.2265301.ph = phi ptr [ %439, %vector.memcheck501 ], [ %439, %.lr.ph304 ], [ %ind.end523, %middle.block513 ]
  br label %scalar.ph514

scalar.ph514:                                     ; preds = %scalar.ph514.preheader, %scalar.ph514
  %indvars.iv323 = phi i64 [ %indvars.iv.next324, %scalar.ph514 ], [ %indvars.iv323.ph, %scalar.ph514.preheader ]
  %.2262302 = phi ptr [ %475, %scalar.ph514 ], [ %.2262302.ph, %scalar.ph514.preheader ]
  %.2265301 = phi ptr [ %472, %scalar.ph514 ], [ %.2265301.ph, %scalar.ph514.preheader ]
  %470 = getelementptr inbounds double, ptr %3, i64 %indvars.iv323
  %471 = load double, ptr %470, align 8, !tbaa !5
  %472 = getelementptr inbounds i8, ptr %.2265301, i64 8
  %473 = load double, ptr %.2265301, align 8, !tbaa !5
  %474 = tail call double @llvm.fmuladd.f64(double %432, double %473, double %471)
  %475 = getelementptr inbounds i8, ptr %.2262302, i64 8
  %476 = load double, ptr %.2262302, align 8, !tbaa !5
  %477 = tail call double @llvm.fmuladd.f64(double %440, double %476, double %474)
  store double %477, ptr %470, align 8, !tbaa !5
  %indvars.iv.next324 = add nuw nsw i64 %indvars.iv323, 1
  %478 = trunc nuw i64 %indvars.iv.next324 to i32
  %479 = icmp slt i32 %478, %1
  br i1 %479, label %scalar.ph514, label %._crit_edge305, !llvm.loop !59

._crit_edge305:                                   ; preds = %scalar.ph514, %middle.block513, %417
  %480 = shl nsw i32 %0, 1
  %481 = add nsw i32 %480, 2
  %482 = sext i32 %481 to i64
  %483 = getelementptr inbounds double, ptr %.1267.lcssa, i64 %482
  br label %484

484:                                              ; preds = %._crit_edge305, %._crit_edge297
  %.2268 = phi ptr [ %483, %._crit_edge305 ], [ %.1267.lcssa, %._crit_edge297 ]
  %.2 = phi i32 [ %436, %._crit_edge305 ], [ %.1.lcssa, %._crit_edge297 ]
  %485 = icmp eq i32 %.2, %415
  br i1 %485, label %486, label %492

486:                                              ; preds = %484
  %487 = sext i32 %415 to i64
  %488 = getelementptr inbounds double, ptr %3, i64 %487
  %489 = load double, ptr %488, align 8, !tbaa !5
  %490 = load double, ptr %.2268, align 8, !tbaa !5
  %491 = fdiv double %489, %490
  store double %491, ptr %488, align 8, !tbaa !5
  br label %492

492:                                              ; preds = %486, %484
  ret void
}

; 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 i32 @llvm.smax.i32(i32, i32) #2

attributes #0 = { mustprogress 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++ TBAA"}
!9 = !{!10}
!10 = distinct !{!10, !11}
!11 = distinct !{!11, !"LVerDomain"}
!12 = !{!13, !14, !15, !16, !17, !18, !19, !20}
!13 = distinct !{!13, !11}
!14 = distinct !{!14, !11}
!15 = distinct !{!15, !11}
!16 = distinct !{!16, !11}
!17 = distinct !{!17, !11}
!18 = distinct !{!18, !11}
!19 = distinct !{!19, !11}
!20 = distinct !{!20, !11}
!21 = !{!16}
!22 = !{!15}
!23 = !{!14}
!24 = !{!13}
!25 = !{!17}
!26 = !{!18}
!27 = !{!19}
!28 = !{!20}
!29 = distinct !{!29, !30, !31, !32}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!"llvm.loop.isvectorized", i32 1}
!32 = !{!"llvm.loop.unroll.runtime.disable"}
!33 = distinct !{!33, !30, !31}
!34 = distinct !{!34, !30}
!35 = !{!36}
!36 = distinct !{!36, !37}
!37 = distinct !{!37, !"LVerDomain"}
!38 = !{!39, !40, !41, !42}
!39 = distinct !{!39, !37}
!40 = distinct !{!40, !37}
!41 = distinct !{!41, !37}
!42 = distinct !{!42, !37}
!43 = !{!42}
!44 = !{!41}
!45 = !{!40}
!46 = !{!39}
!47 = distinct !{!47, !30, !31, !32}
!48 = distinct !{!48, !30, !31}
!49 = distinct !{!49, !30}
!50 = !{!51}
!51 = distinct !{!51, !52}
!52 = distinct !{!52, !"LVerDomain"}
!53 = !{!54, !55}
!54 = distinct !{!54, !52}
!55 = distinct !{!55, !52}
!56 = !{!55}
!57 = !{!54}
!58 = distinct !{!58, !30, !31, !32}
!59 = distinct !{!59, !30, !31}


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