; LLVM IR from kkumatani/distant_speech_recognition :: btk20_src/modulated (pc_lattice)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

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

; Function Attrs: nounwind
declare double @sqrt(double noundef) #2

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

; Function Attrs: nounwind uwtable
define dso_local void @Ddpclat(ptr noundef %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5) #3 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store i32 %3, ptr %10, align 4, !tbaa !9
  store i32 %4, ptr %11, align 4, !tbaa !9
  store i32 %5, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  %22 = load i32, ptr %11, align 4, !tbaa !9
  %23 = load i32, ptr %12, align 4, !tbaa !9
  %24 = icmp ne i32 %22, %23
  br i1 %24, label %25, label %690

25:                                               ; preds = %6
  %26 = load i32, ptr %11, align 4, !tbaa !9
  %27 = load i32, ptr %12, align 4, !tbaa !9
  %28 = icmp sgt i32 %26, %27
  br i1 %28, label %29, label %33

29:                                               ; preds = %25
  %30 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %30, ptr %13, align 4, !tbaa !9
  %31 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %31, ptr %11, align 4, !tbaa !9
  %32 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %32, ptr %12, align 4, !tbaa !9
  br label %33

33:                                               ; preds = %29, %25
  %34 = load i32, ptr %11, align 4, !tbaa !9
  %35 = icmp eq i32 %34, 0
  br i1 %35, label %36, label %280

36:                                               ; preds = %33
  %37 = load ptr, ptr %7, align 8, !tbaa !5
  store double 1.000000e+00, ptr %37, align 8, !tbaa !11
  %38 = load ptr, ptr %9, align 8, !tbaa !5
  %39 = load double, ptr %38, align 8, !tbaa !11
  %40 = fneg double %39
  %41 = load ptr, ptr %8, align 8, !tbaa !5
  %42 = load i32, ptr %10, align 4, !tbaa !9
  %43 = sext i32 %42 to i64
  %44 = getelementptr inbounds double, ptr %41, i64 %43
  store double %40, ptr %44, align 8, !tbaa !11
  %45 = load ptr, ptr %9, align 8, !tbaa !5
  %46 = load double, ptr %45, align 8, !tbaa !11
  %47 = load ptr, ptr %9, align 8, !tbaa !5
  %48 = load double, ptr %47, align 8, !tbaa !11
  %49 = call double @llvm.fmuladd.f64(double %46, double %48, double 1.000000e+00)
  store double %49, ptr %16, align 8, !tbaa !11
  %50 = load double, ptr %16, align 8, !tbaa !11
  %51 = load double, ptr %16, align 8, !tbaa !11
  %52 = fmul double %50, %51
  %53 = load double, ptr %16, align 8, !tbaa !11
  %54 = fmul double %52, %53
  store double %54, ptr %19, align 8, !tbaa !11
  store i32 1, ptr %13, align 4, !tbaa !9
  %55 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %55, ptr %20, align 8, !tbaa !5
  %56 = load i32, ptr %10, align 4, !tbaa !9
  %57 = sub nsw i32 %56, 1
  store i32 %57, ptr %15, align 4, !tbaa !9
  %58 = load ptr, ptr %8, align 8, !tbaa !5
  %59 = load i32, ptr %15, align 4, !tbaa !9
  %60 = sext i32 %59 to i64
  %61 = getelementptr inbounds double, ptr %58, i64 %60
  store ptr %61, ptr %21, align 8, !tbaa !5
  br label %62

62:                                               ; preds = %125, %36
  %63 = load i32, ptr %13, align 4, !tbaa !9
  %64 = load i32, ptr %12, align 4, !tbaa !9
  %65 = icmp slt i32 %63, %64
  br i1 %65, label %66, label %134

66:                                               ; preds = %62
  %67 = load ptr, ptr %7, align 8, !tbaa !5
  %68 = load double, ptr %67, align 8, !tbaa !11
  %69 = load ptr, ptr %21, align 8, !tbaa !5
  store double %68, ptr %69, align 8, !tbaa !11
  %70 = load ptr, ptr %9, align 8, !tbaa !5
  %71 = getelementptr inbounds double, ptr %70, i32 1
  store ptr %71, ptr %9, align 8, !tbaa !5
  %72 = load double, ptr %71, align 8, !tbaa !11
  %73 = load ptr, ptr %7, align 8, !tbaa !5
  %74 = load double, ptr %73, align 8, !tbaa !11
  %75 = fmul double %72, %74
  %76 = load ptr, ptr %20, align 8, !tbaa !5
  store double %75, ptr %76, align 8, !tbaa !11
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %77

77:                                               ; preds = %102, %66
  %78 = load i32, ptr %14, align 4, !tbaa !9
  %79 = load i32, ptr %13, align 4, !tbaa !9
  %80 = icmp slt i32 %78, %79
  br i1 %80, label %81, label %105

81:                                               ; preds = %77
  %82 = load ptr, ptr %9, align 8, !tbaa !5
  %83 = load double, ptr %82, align 8, !tbaa !11
  %84 = load ptr, ptr %20, align 8, !tbaa !5
  %85 = getelementptr inbounds double, ptr %84, i32 1
  store ptr %85, ptr %20, align 8, !tbaa !5
  %86 = load double, ptr %85, align 8, !tbaa !11
  %87 = load ptr, ptr %21, align 8, !tbaa !5
  %88 = getelementptr inbounds double, ptr %87, i32 1
  store ptr %88, ptr %21, align 8, !tbaa !5
  %89 = load double, ptr %88, align 8, !tbaa !11
  %90 = call double @llvm.fmuladd.f64(double %83, double %86, double %89)
  store double %90, ptr %16, align 8, !tbaa !11
  %91 = load ptr, ptr %20, align 8, !tbaa !5
  %92 = load double, ptr %91, align 8, !tbaa !11
  %93 = load ptr, ptr %9, align 8, !tbaa !5
  %94 = load double, ptr %93, align 8, !tbaa !11
  %95 = load ptr, ptr %21, align 8, !tbaa !5
  %96 = load double, ptr %95, align 8, !tbaa !11
  %97 = fneg double %94
  %98 = call double @llvm.fmuladd.f64(double %97, double %96, double %92)
  %99 = load ptr, ptr %21, align 8, !tbaa !5
  store double %98, ptr %99, align 8, !tbaa !11
  %100 = load double, ptr %16, align 8, !tbaa !11
  %101 = load ptr, ptr %20, align 8, !tbaa !5
  store double %100, ptr %101, align 8, !tbaa !11
  br label %102

102:                                              ; preds = %81
  %103 = load i32, ptr %14, align 4, !tbaa !9
  %104 = add nsw i32 %103, 1
  store i32 %104, ptr %14, align 4, !tbaa !9
  br label %77, !llvm.loop !13

105:                                              ; preds = %77
  %106 = load ptr, ptr %21, align 8, !tbaa !5
  %107 = getelementptr inbounds double, ptr %106, i32 1
  store ptr %107, ptr %21, align 8, !tbaa !5
  %108 = load double, ptr %107, align 8, !tbaa !11
  %109 = load ptr, ptr %20, align 8, !tbaa !5
  %110 = getelementptr inbounds double, ptr %109, i32 1
  store ptr %110, ptr %20, align 8, !tbaa !5
  store double %108, ptr %110, align 8, !tbaa !11
  %111 = load ptr, ptr %9, align 8, !tbaa !5
  %112 = load double, ptr %111, align 8, !tbaa !11
  %113 = fneg double %112
  %114 = load ptr, ptr %21, align 8, !tbaa !5
  %115 = load double, ptr %114, align 8, !tbaa !11
  %116 = fmul double %113, %115
  %117 = load ptr, ptr %21, align 8, !tbaa !5
  store double %116, ptr %117, align 8, !tbaa !11
  %118 = load ptr, ptr %9, align 8, !tbaa !5
  %119 = load double, ptr %118, align 8, !tbaa !11
  %120 = load ptr, ptr %9, align 8, !tbaa !5
  %121 = load double, ptr %120, align 8, !tbaa !11
  %122 = call double @llvm.fmuladd.f64(double %119, double %121, double 1.000000e+00)
  %123 = load double, ptr %19, align 8, !tbaa !11
  %124 = fmul double %123, %122
  store double %124, ptr %19, align 8, !tbaa !11
  br label %125

125:                                              ; preds = %105
  %126 = load i32, ptr %13, align 4, !tbaa !9
  %127 = add nsw i32 %126, 1
  store i32 %127, ptr %13, align 4, !tbaa !9
  %128 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %128, ptr %20, align 8, !tbaa !5
  %129 = load ptr, ptr %8, align 8, !tbaa !5
  %130 = load i32, ptr %15, align 4, !tbaa !9
  %131 = add nsw i32 %130, -1
  store i32 %131, ptr %15, align 4, !tbaa !9
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds double, ptr %129, i64 %132
  store ptr %133, ptr %21, align 8, !tbaa !5
  br label %62, !llvm.loop !15

134:                                              ; preds = %62
  %135 = load ptr, ptr %9, align 8, !tbaa !5
  %136 = getelementptr inbounds double, ptr %135, i32 1
  store ptr %136, ptr %9, align 8, !tbaa !5
  %137 = load double, ptr %136, align 8, !tbaa !11
  %138 = fneg double %137
  %139 = load ptr, ptr %20, align 8, !tbaa !5
  %140 = load double, ptr %139, align 8, !tbaa !11
  %141 = fmul double %138, %140
  %142 = load ptr, ptr %21, align 8, !tbaa !5
  store double %141, ptr %142, align 8, !tbaa !11
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %143

143:                                              ; preds = %170, %134
  %144 = load i32, ptr %14, align 4, !tbaa !9
  %145 = load i32, ptr %13, align 4, !tbaa !9
  %146 = icmp slt i32 %144, %145
  br i1 %146, label %147, label %173

147:                                              ; preds = %143
  %148 = load ptr, ptr %20, align 8, !tbaa !5
  %149 = getelementptr inbounds double, ptr %148, i32 1
  store ptr %149, ptr %20, align 8, !tbaa !5
  %150 = load double, ptr %149, align 8, !tbaa !11
  %151 = load ptr, ptr %9, align 8, !tbaa !5
  %152 = load double, ptr %151, align 8, !tbaa !11
  %153 = load ptr, ptr %21, align 8, !tbaa !5
  %154 = getelementptr inbounds double, ptr %153, i32 1
  store ptr %154, ptr %21, align 8, !tbaa !5
  %155 = load double, ptr %154, align 8, !tbaa !11
  %156 = fneg double %152
  %157 = call double @llvm.fmuladd.f64(double %156, double %155, double %150)
  store double %157, ptr %16, align 8, !tbaa !11
  %158 = load ptr, ptr %9, align 8, !tbaa !5
  %159 = load double, ptr %158, align 8, !tbaa !11
  %160 = fneg double %159
  %161 = load ptr, ptr %20, align 8, !tbaa !5
  %162 = load double, ptr %161, align 8, !tbaa !11
  %163 = load ptr, ptr %21, align 8, !tbaa !5
  %164 = load double, ptr %163, align 8, !tbaa !11
  %165 = fneg double %164
  %166 = call double @llvm.fmuladd.f64(double %160, double %162, double %165)
  %167 = load ptr, ptr %21, align 8, !tbaa !5
  store double %166, ptr %167, align 8, !tbaa !11
  %168 = load double, ptr %16, align 8, !tbaa !11
  %169 = load ptr, ptr %20, align 8, !tbaa !5
  store double %168, ptr %169, align 8, !tbaa !11
  br label %170

170:                                              ; preds = %147
  %171 = load i32, ptr %14, align 4, !tbaa !9
  %172 = add nsw i32 %171, 1
  store i32 %172, ptr %14, align 4, !tbaa !9
  br label %143, !llvm.loop !16

173:                                              ; preds = %143
  %174 = load ptr, ptr %9, align 8, !tbaa !5
  %175 = load double, ptr %174, align 8, !tbaa !11
  %176 = fneg double %175
  %177 = load ptr, ptr %21, align 8, !tbaa !5
  %178 = getelementptr inbounds double, ptr %177, i32 1
  store ptr %178, ptr %21, align 8, !tbaa !5
  %179 = load double, ptr %178, align 8, !tbaa !11
  %180 = fmul double %176, %179
  %181 = load ptr, ptr %20, align 8, !tbaa !5
  %182 = getelementptr inbounds double, ptr %181, i32 1
  store ptr %182, ptr %20, align 8, !tbaa !5
  store double %180, ptr %182, align 8, !tbaa !11
  %183 = load ptr, ptr %21, align 8, !tbaa !5
  %184 = load double, ptr %183, align 8, !tbaa !11
  %185 = fneg double %184
  %186 = load ptr, ptr %21, align 8, !tbaa !5
  store double %185, ptr %186, align 8, !tbaa !11
  %187 = load ptr, ptr %9, align 8, !tbaa !5
  %188 = load double, ptr %187, align 8, !tbaa !11
  %189 = load ptr, ptr %9, align 8, !tbaa !5
  %190 = load double, ptr %189, align 8, !tbaa !11
  %191 = call double @llvm.fmuladd.f64(double %188, double %190, double 1.000000e+00)
  store double %191, ptr %16, align 8, !tbaa !11
  %192 = load double, ptr %16, align 8, !tbaa !11
  %193 = load double, ptr %16, align 8, !tbaa !11
  %194 = fmul double %192, %193
  %195 = load double, ptr %16, align 8, !tbaa !11
  %196 = fmul double %194, %195
  %197 = load double, ptr %19, align 8, !tbaa !11
  %198 = fmul double %197, %196
  store double %198, ptr %19, align 8, !tbaa !11
  %199 = load i32, ptr %12, align 4, !tbaa !9
  %200 = add nsw i32 %199, 1
  store i32 %200, ptr %13, align 4, !tbaa !9
  %201 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %201, ptr %20, align 8, !tbaa !5
  %202 = load ptr, ptr %8, align 8, !tbaa !5
  %203 = load i32, ptr %15, align 4, !tbaa !9
  %204 = add nsw i32 %203, -1
  store i32 %204, ptr %15, align 4, !tbaa !9
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds double, ptr %202, i64 %205
  store ptr %206, ptr %21, align 8, !tbaa !5
  br label %207

207:                                              ; preds = %270, %173
  %208 = load i32, ptr %13, align 4, !tbaa !9
  %209 = load i32, ptr %10, align 4, !tbaa !9
  %210 = icmp sle i32 %208, %209
  br i1 %210, label %211, label %279

211:                                              ; preds = %207
  %212 = load ptr, ptr %7, align 8, !tbaa !5
  %213 = load double, ptr %212, align 8, !tbaa !11
  %214 = load ptr, ptr %21, align 8, !tbaa !5
  store double %213, ptr %214, align 8, !tbaa !11
  %215 = load ptr, ptr %9, align 8, !tbaa !5
  %216 = getelementptr inbounds double, ptr %215, i32 1
  store ptr %216, ptr %9, align 8, !tbaa !5
  %217 = load double, ptr %216, align 8, !tbaa !11
  %218 = load ptr, ptr %7, align 8, !tbaa !5
  %219 = load double, ptr %218, align 8, !tbaa !11
  %220 = fmul double %217, %219
  %221 = load ptr, ptr %20, align 8, !tbaa !5
  store double %220, ptr %221, align 8, !tbaa !11
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %222

222:                                              ; preds = %247, %211
  %223 = load i32, ptr %14, align 4, !tbaa !9
  %224 = load i32, ptr %13, align 4, !tbaa !9
  %225 = icmp slt i32 %223, %224
  br i1 %225, label %226, label %250

226:                                              ; preds = %222
  %227 = load ptr, ptr %9, align 8, !tbaa !5
  %228 = load double, ptr %227, align 8, !tbaa !11
  %229 = load ptr, ptr %20, align 8, !tbaa !5
  %230 = getelementptr inbounds double, ptr %229, i32 1
  store ptr %230, ptr %20, align 8, !tbaa !5
  %231 = load double, ptr %230, align 8, !tbaa !11
  %232 = load ptr, ptr %21, align 8, !tbaa !5
  %233 = getelementptr inbounds double, ptr %232, i32 1
  store ptr %233, ptr %21, align 8, !tbaa !5
  %234 = load double, ptr %233, align 8, !tbaa !11
  %235 = call double @llvm.fmuladd.f64(double %228, double %231, double %234)
  store double %235, ptr %16, align 8, !tbaa !11
  %236 = load ptr, ptr %20, align 8, !tbaa !5
  %237 = load double, ptr %236, align 8, !tbaa !11
  %238 = load ptr, ptr %9, align 8, !tbaa !5
  %239 = load double, ptr %238, align 8, !tbaa !11
  %240 = load ptr, ptr %21, align 8, !tbaa !5
  %241 = load double, ptr %240, align 8, !tbaa !11
  %242 = fneg double %239
  %243 = call double @llvm.fmuladd.f64(double %242, double %241, double %237)
  %244 = load ptr, ptr %21, align 8, !tbaa !5
  store double %243, ptr %244, align 8, !tbaa !11
  %245 = load double, ptr %16, align 8, !tbaa !11
  %246 = load ptr, ptr %20, align 8, !tbaa !5
  store double %245, ptr %246, align 8, !tbaa !11
  br label %247

247:                                              ; preds = %226
  %248 = load i32, ptr %14, align 4, !tbaa !9
  %249 = add nsw i32 %248, 1
  store i32 %249, ptr %14, align 4, !tbaa !9
  br label %222, !llvm.loop !17

250:                                              ; preds = %222
  %251 = load ptr, ptr %21, align 8, !tbaa !5
  %252 = getelementptr inbounds double, ptr %251, i32 1
  store ptr %252, ptr %21, align 8, !tbaa !5
  %253 = load double, ptr %252, align 8, !tbaa !11
  %254 = load ptr, ptr %20, align 8, !tbaa !5
  %255 = getelementptr inbounds double, ptr %254, i32 1
  store ptr %255, ptr %20, align 8, !tbaa !5
  store double %253, ptr %255, align 8, !tbaa !11
  %256 = load ptr, ptr %9, align 8, !tbaa !5
  %257 = load double, ptr %256, align 8, !tbaa !11
  %258 = fneg double %257
  %259 = load ptr, ptr %21, align 8, !tbaa !5
  %260 = load double, ptr %259, align 8, !tbaa !11
  %261 = fmul double %258, %260
  %262 = load ptr, ptr %21, align 8, !tbaa !5
  store double %261, ptr %262, align 8, !tbaa !11
  %263 = load ptr, ptr %9, align 8, !tbaa !5
  %264 = load double, ptr %263, align 8, !tbaa !11
  %265 = load ptr, ptr %9, align 8, !tbaa !5
  %266 = load double, ptr %265, align 8, !tbaa !11
  %267 = call double @llvm.fmuladd.f64(double %264, double %266, double 1.000000e+00)
  %268 = load double, ptr %19, align 8, !tbaa !11
  %269 = fmul double %268, %267
  store double %269, ptr %19, align 8, !tbaa !11
  br label %270

270:                                              ; preds = %250
  %271 = load i32, ptr %13, align 4, !tbaa !9
  %272 = add nsw i32 %271, 1
  store i32 %272, ptr %13, align 4, !tbaa !9
  %273 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %273, ptr %20, align 8, !tbaa !5
  %274 = load ptr, ptr %8, align 8, !tbaa !5
  %275 = load i32, ptr %15, align 4, !tbaa !9
  %276 = add nsw i32 %275, -1
  store i32 %276, ptr %15, align 4, !tbaa !9
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds double, ptr %274, i64 %277
  store ptr %278, ptr %21, align 8, !tbaa !5
  br label %207, !llvm.loop !18

279:                                              ; preds = %207
  br label %663

280:                                              ; preds = %33
  %281 = load ptr, ptr %9, align 8, !tbaa !5
  %282 = load double, ptr %281, align 8, !tbaa !11
  %283 = load ptr, ptr %7, align 8, !tbaa !5
  store double %282, ptr %283, align 8, !tbaa !11
  %284 = load ptr, ptr %8, align 8, !tbaa !5
  %285 = load i32, ptr %10, align 4, !tbaa !9
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds double, ptr %284, i64 %286
  store double 1.000000e+00, ptr %287, align 8, !tbaa !11
  %288 = load ptr, ptr %9, align 8, !tbaa !5
  %289 = load double, ptr %288, align 8, !tbaa !11
  %290 = load ptr, ptr %9, align 8, !tbaa !5
  %291 = load double, ptr %290, align 8, !tbaa !11
  %292 = call double @llvm.fmuladd.f64(double %289, double %291, double 1.000000e+00)
  store double %292, ptr %19, align 8, !tbaa !11
  store i32 1, ptr %13, align 4, !tbaa !9
  %293 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %293, ptr %20, align 8, !tbaa !5
  %294 = load i32, ptr %10, align 4, !tbaa !9
  %295 = sub nsw i32 %294, 1
  store i32 %295, ptr %15, align 4, !tbaa !9
  %296 = load ptr, ptr %8, align 8, !tbaa !5
  %297 = load i32, ptr %15, align 4, !tbaa !9
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds double, ptr %296, i64 %298
  store ptr %299, ptr %21, align 8, !tbaa !5
  br label %300

300:                                              ; preds = %363, %280
  %301 = load i32, ptr %13, align 4, !tbaa !9
  %302 = load i32, ptr %11, align 4, !tbaa !9
  %303 = icmp slt i32 %301, %302
  br i1 %303, label %304, label %372

304:                                              ; preds = %300
  %305 = load ptr, ptr %7, align 8, !tbaa !5
  %306 = load double, ptr %305, align 8, !tbaa !11
  %307 = load ptr, ptr %21, align 8, !tbaa !5
  store double %306, ptr %307, align 8, !tbaa !11
  %308 = load ptr, ptr %9, align 8, !tbaa !5
  %309 = getelementptr inbounds double, ptr %308, i32 1
  store ptr %309, ptr %9, align 8, !tbaa !5
  %310 = load double, ptr %309, align 8, !tbaa !11
  %311 = load ptr, ptr %7, align 8, !tbaa !5
  %312 = load double, ptr %311, align 8, !tbaa !11
  %313 = fmul double %310, %312
  %314 = load ptr, ptr %20, align 8, !tbaa !5
  store double %313, ptr %314, align 8, !tbaa !11
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %315

315:                                              ; preds = %340, %304
  %316 = load i32, ptr %14, align 4, !tbaa !9
  %317 = load i32, ptr %13, align 4, !tbaa !9
  %318 = icmp slt i32 %316, %317
  br i1 %318, label %319, label %343

319:                                              ; preds = %315
  %320 = load ptr, ptr %9, align 8, !tbaa !5
  %321 = load double, ptr %320, align 8, !tbaa !11
  %322 = load ptr, ptr %20, align 8, !tbaa !5
  %323 = getelementptr inbounds double, ptr %322, i32 1
  store ptr %323, ptr %20, align 8, !tbaa !5
  %324 = load double, ptr %323, align 8, !tbaa !11
  %325 = load ptr, ptr %21, align 8, !tbaa !5
  %326 = getelementptr inbounds double, ptr %325, i32 1
  store ptr %326, ptr %21, align 8, !tbaa !5
  %327 = load double, ptr %326, align 8, !tbaa !11
  %328 = call double @llvm.fmuladd.f64(double %321, double %324, double %327)
  store double %328, ptr %16, align 8, !tbaa !11
  %329 = load ptr, ptr %20, align 8, !tbaa !5
  %330 = load double, ptr %329, align 8, !tbaa !11
  %331 = load ptr, ptr %9, align 8, !tbaa !5
  %332 = load double, ptr %331, align 8, !tbaa !11
  %333 = load ptr, ptr %21, align 8, !tbaa !5
  %334 = load double, ptr %333, align 8, !tbaa !11
  %335 = fneg double %332
  %336 = call double @llvm.fmuladd.f64(double %335, double %334, double %330)
  %337 = load ptr, ptr %21, align 8, !tbaa !5
  store double %336, ptr %337, align 8, !tbaa !11
  %338 = load double, ptr %16, align 8, !tbaa !11
  %339 = load ptr, ptr %20, align 8, !tbaa !5
  store double %338, ptr %339, align 8, !tbaa !11
  br label %340

340:                                              ; preds = %319
  %341 = load i32, ptr %14, align 4, !tbaa !9
  %342 = add nsw i32 %341, 1
  store i32 %342, ptr %14, align 4, !tbaa !9
  br label %315, !llvm.loop !19

343:                                              ; preds = %315
  %344 = load ptr, ptr %21, align 8, !tbaa !5
  %345 = getelementptr inbounds double, ptr %344, i32 1
  store ptr %345, ptr %21, align 8, !tbaa !5
  %346 = load double, ptr %345, align 8, !tbaa !11
  %347 = load ptr, ptr %20, align 8, !tbaa !5
  %348 = getelementptr inbounds double, ptr %347, i32 1
  store ptr %348, ptr %20, align 8, !tbaa !5
  store double %346, ptr %348, align 8, !tbaa !11
  %349 = load ptr, ptr %9, align 8, !tbaa !5
  %350 = load double, ptr %349, align 8, !tbaa !11
  %351 = fneg double %350
  %352 = load ptr, ptr %21, align 8, !tbaa !5
  %353 = load double, ptr %352, align 8, !tbaa !11
  %354 = fmul double %351, %353
  %355 = load ptr, ptr %21, align 8, !tbaa !5
  store double %354, ptr %355, align 8, !tbaa !11
  %356 = load ptr, ptr %9, align 8, !tbaa !5
  %357 = load double, ptr %356, align 8, !tbaa !11
  %358 = load ptr, ptr %9, align 8, !tbaa !5
  %359 = load double, ptr %358, align 8, !tbaa !11
  %360 = call double @llvm.fmuladd.f64(double %357, double %359, double 1.000000e+00)
  %361 = load double, ptr %19, align 8, !tbaa !11
  %362 = fmul double %361, %360
  store double %362, ptr %19, align 8, !tbaa !11
  br label %363

363:                                              ; preds = %343
  %364 = load i32, ptr %13, align 4, !tbaa !9
  %365 = add nsw i32 %364, 1
  store i32 %365, ptr %13, align 4, !tbaa !9
  %366 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %366, ptr %20, align 8, !tbaa !5
  %367 = load ptr, ptr %8, align 8, !tbaa !5
  %368 = load i32, ptr %15, align 4, !tbaa !9
  %369 = add nsw i32 %368, -1
  store i32 %369, ptr %15, align 4, !tbaa !9
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds double, ptr %367, i64 %370
  store ptr %371, ptr %21, align 8, !tbaa !5
  br label %300, !llvm.loop !20

372:                                              ; preds = %300
  %373 = load ptr, ptr %9, align 8, !tbaa !5
  %374 = getelementptr inbounds double, ptr %373, i32 1
  store ptr %374, ptr %9, align 8, !tbaa !5
  %375 = load double, ptr %374, align 8, !tbaa !11
  %376 = fneg double %375
  %377 = load ptr, ptr %20, align 8, !tbaa !5
  %378 = load double, ptr %377, align 8, !tbaa !11
  %379 = fmul double %376, %378
  %380 = load ptr, ptr %21, align 8, !tbaa !5
  store double %379, ptr %380, align 8, !tbaa !11
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %381

381:                                              ; preds = %408, %372
  %382 = load i32, ptr %14, align 4, !tbaa !9
  %383 = load i32, ptr %13, align 4, !tbaa !9
  %384 = icmp slt i32 %382, %383
  br i1 %384, label %385, label %411

385:                                              ; preds = %381
  %386 = load ptr, ptr %20, align 8, !tbaa !5
  %387 = getelementptr inbounds double, ptr %386, i32 1
  store ptr %387, ptr %20, align 8, !tbaa !5
  %388 = load double, ptr %387, align 8, !tbaa !11
  %389 = load ptr, ptr %9, align 8, !tbaa !5
  %390 = load double, ptr %389, align 8, !tbaa !11
  %391 = load ptr, ptr %21, align 8, !tbaa !5
  %392 = getelementptr inbounds double, ptr %391, i32 1
  store ptr %392, ptr %21, align 8, !tbaa !5
  %393 = load double, ptr %392, align 8, !tbaa !11
  %394 = fneg double %390
  %395 = call double @llvm.fmuladd.f64(double %394, double %393, double %388)
  store double %395, ptr %16, align 8, !tbaa !11
  %396 = load ptr, ptr %9, align 8, !tbaa !5
  %397 = load double, ptr %396, align 8, !tbaa !11
  %398 = fneg double %397
  %399 = load ptr, ptr %20, align 8, !tbaa !5
  %400 = load double, ptr %399, align 8, !tbaa !11
  %401 = load ptr, ptr %21, align 8, !tbaa !5
  %402 = load double, ptr %401, align 8, !tbaa !11
  %403 = fneg double %402
  %404 = call double @llvm.fmuladd.f64(double %398, double %400, double %403)
  %405 = load ptr, ptr %21, align 8, !tbaa !5
  store double %404, ptr %405, align 8, !tbaa !11
  %406 = load double, ptr %16, align 8, !tbaa !11
  %407 = load ptr, ptr %20, align 8, !tbaa !5
  store double %406, ptr %407, align 8, !tbaa !11
  br label %408

408:                                              ; preds = %385
  %409 = load i32, ptr %14, align 4, !tbaa !9
  %410 = add nsw i32 %409, 1
  store i32 %410, ptr %14, align 4, !tbaa !9
  br label %381, !llvm.loop !21

411:                                              ; preds = %381
  %412 = load ptr, ptr %9, align 8, !tbaa !5
  %413 = load double, ptr %412, align 8, !tbaa !11
  %414 = fneg double %413
  %415 = load ptr, ptr %21, align 8, !tbaa !5
  %416 = getelementptr inbounds double, ptr %415, i32 1
  store ptr %416, ptr %21, align 8, !tbaa !5
  %417 = load double, ptr %416, align 8, !tbaa !11
  %418 = fmul double %414, %417
  %419 = load ptr, ptr %20, align 8, !tbaa !5
  %420 = getelementptr inbounds double, ptr %419, i32 1
  store ptr %420, ptr %20, align 8, !tbaa !5
  store double %418, ptr %420, align 8, !tbaa !11
  %421 = load ptr, ptr %21, align 8, !tbaa !5
  %422 = load double, ptr %421, align 8, !tbaa !11
  %423 = fneg double %422
  %424 = load ptr, ptr %21, align 8, !tbaa !5
  store double %423, ptr %424, align 8, !tbaa !11
  %425 = load ptr, ptr %9, align 8, !tbaa !5
  %426 = load double, ptr %425, align 8, !tbaa !11
  %427 = load ptr, ptr %9, align 8, !tbaa !5
  %428 = load double, ptr %427, align 8, !tbaa !11
  %429 = call double @llvm.fmuladd.f64(double %426, double %428, double 1.000000e+00)
  store double %429, ptr %16, align 8, !tbaa !11
  %430 = load double, ptr %16, align 8, !tbaa !11
  %431 = load double, ptr %16, align 8, !tbaa !11
  %432 = fmul double %430, %431
  %433 = load double, ptr %16, align 8, !tbaa !11
  %434 = fmul double %432, %433
  %435 = load double, ptr %19, align 8, !tbaa !11
  %436 = fmul double %435, %434
  store double %436, ptr %19, align 8, !tbaa !11
  %437 = load i32, ptr %11, align 4, !tbaa !9
  %438 = add nsw i32 %437, 1
  store i32 %438, ptr %13, align 4, !tbaa !9
  %439 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %439, ptr %20, align 8, !tbaa !5
  %440 = load ptr, ptr %8, align 8, !tbaa !5
  %441 = load i32, ptr %15, align 4, !tbaa !9
  %442 = add nsw i32 %441, -1
  store i32 %442, ptr %15, align 4, !tbaa !9
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds double, ptr %440, i64 %443
  store ptr %444, ptr %21, align 8, !tbaa !5
  br label %445

445:                                              ; preds = %508, %411
  %446 = load i32, ptr %13, align 4, !tbaa !9
  %447 = load i32, ptr %12, align 4, !tbaa !9
  %448 = icmp slt i32 %446, %447
  br i1 %448, label %449, label %517

449:                                              ; preds = %445
  %450 = load ptr, ptr %7, align 8, !tbaa !5
  %451 = load double, ptr %450, align 8, !tbaa !11
  %452 = load ptr, ptr %21, align 8, !tbaa !5
  store double %451, ptr %452, align 8, !tbaa !11
  %453 = load ptr, ptr %9, align 8, !tbaa !5
  %454 = getelementptr inbounds double, ptr %453, i32 1
  store ptr %454, ptr %9, align 8, !tbaa !5
  %455 = load double, ptr %454, align 8, !tbaa !11
  %456 = load ptr, ptr %7, align 8, !tbaa !5
  %457 = load double, ptr %456, align 8, !tbaa !11
  %458 = fmul double %455, %457
  %459 = load ptr, ptr %20, align 8, !tbaa !5
  store double %458, ptr %459, align 8, !tbaa !11
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %460

460:                                              ; preds = %485, %449
  %461 = load i32, ptr %14, align 4, !tbaa !9
  %462 = load i32, ptr %13, align 4, !tbaa !9
  %463 = icmp slt i32 %461, %462
  br i1 %463, label %464, label %488

464:                                              ; preds = %460
  %465 = load ptr, ptr %9, align 8, !tbaa !5
  %466 = load double, ptr %465, align 8, !tbaa !11
  %467 = load ptr, ptr %20, align 8, !tbaa !5
  %468 = getelementptr inbounds double, ptr %467, i32 1
  store ptr %468, ptr %20, align 8, !tbaa !5
  %469 = load double, ptr %468, align 8, !tbaa !11
  %470 = load ptr, ptr %21, align 8, !tbaa !5
  %471 = getelementptr inbounds double, ptr %470, i32 1
  store ptr %471, ptr %21, align 8, !tbaa !5
  %472 = load double, ptr %471, align 8, !tbaa !11
  %473 = call double @llvm.fmuladd.f64(double %466, double %469, double %472)
  store double %473, ptr %16, align 8, !tbaa !11
  %474 = load ptr, ptr %20, align 8, !tbaa !5
  %475 = load double, ptr %474, align 8, !tbaa !11
  %476 = load ptr, ptr %9, align 8, !tbaa !5
  %477 = load double, ptr %476, align 8, !tbaa !11
  %478 = load ptr, ptr %21, align 8, !tbaa !5
  %479 = load double, ptr %478, align 8, !tbaa !11
  %480 = fneg double %477
  %481 = call double @llvm.fmuladd.f64(double %480, double %479, double %475)
  %482 = load ptr, ptr %21, align 8, !tbaa !5
  store double %481, ptr %482, align 8, !tbaa !11
  %483 = load double, ptr %16, align 8, !tbaa !11
  %484 = load ptr, ptr %20, align 8, !tbaa !5
  store double %483, ptr %484, align 8, !tbaa !11
  br label %485

485:                                              ; preds = %464
  %486 = load i32, ptr %14, align 4, !tbaa !9
  %487 = add nsw i32 %486, 1
  store i32 %487, ptr %14, align 4, !tbaa !9
  br label %460, !llvm.loop !22

488:                                              ; preds = %460
  %489 = load ptr, ptr %21, align 8, !tbaa !5
  %490 = getelementptr inbounds double, ptr %489, i32 1
  store ptr %490, ptr %21, align 8, !tbaa !5
  %491 = load double, ptr %490, align 8, !tbaa !11
  %492 = load ptr, ptr %20, align 8, !tbaa !5
  %493 = getelementptr inbounds double, ptr %492, i32 1
  store ptr %493, ptr %20, align 8, !tbaa !5
  store double %491, ptr %493, align 8, !tbaa !11
  %494 = load ptr, ptr %9, align 8, !tbaa !5
  %495 = load double, ptr %494, align 8, !tbaa !11
  %496 = fneg double %495
  %497 = load ptr, ptr %21, align 8, !tbaa !5
  %498 = load double, ptr %497, align 8, !tbaa !11
  %499 = fmul double %496, %498
  %500 = load ptr, ptr %21, align 8, !tbaa !5
  store double %499, ptr %500, align 8, !tbaa !11
  %501 = load ptr, ptr %9, align 8, !tbaa !5
  %502 = load double, ptr %501, align 8, !tbaa !11
  %503 = load ptr, ptr %9, align 8, !tbaa !5
  %504 = load double, ptr %503, align 8, !tbaa !11
  %505 = call double @llvm.fmuladd.f64(double %502, double %504, double 1.000000e+00)
  %506 = load double, ptr %19, align 8, !tbaa !11
  %507 = fmul double %506, %505
  store double %507, ptr %19, align 8, !tbaa !11
  br label %508

508:                                              ; preds = %488
  %509 = load i32, ptr %13, align 4, !tbaa !9
  %510 = add nsw i32 %509, 1
  store i32 %510, ptr %13, align 4, !tbaa !9
  %511 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %511, ptr %20, align 8, !tbaa !5
  %512 = load ptr, ptr %8, align 8, !tbaa !5
  %513 = load i32, ptr %15, align 4, !tbaa !9
  %514 = add nsw i32 %513, -1
  store i32 %514, ptr %15, align 4, !tbaa !9
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds double, ptr %512, i64 %515
  store ptr %516, ptr %21, align 8, !tbaa !5
  br label %445, !llvm.loop !23

517:                                              ; preds = %445
  %518 = load ptr, ptr %9, align 8, !tbaa !5
  %519 = getelementptr inbounds double, ptr %518, i32 1
  store ptr %519, ptr %9, align 8, !tbaa !5
  %520 = load double, ptr %519, align 8, !tbaa !11
  %521 = fneg double %520
  %522 = load ptr, ptr %20, align 8, !tbaa !5
  %523 = load double, ptr %522, align 8, !tbaa !11
  %524 = fmul double %521, %523
  %525 = load ptr, ptr %21, align 8, !tbaa !5
  store double %524, ptr %525, align 8, !tbaa !11
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %526

526:                                              ; preds = %553, %517
  %527 = load i32, ptr %14, align 4, !tbaa !9
  %528 = load i32, ptr %13, align 4, !tbaa !9
  %529 = icmp slt i32 %527, %528
  br i1 %529, label %530, label %556

530:                                              ; preds = %526
  %531 = load ptr, ptr %20, align 8, !tbaa !5
  %532 = getelementptr inbounds double, ptr %531, i32 1
  store ptr %532, ptr %20, align 8, !tbaa !5
  %533 = load double, ptr %532, align 8, !tbaa !11
  %534 = load ptr, ptr %9, align 8, !tbaa !5
  %535 = load double, ptr %534, align 8, !tbaa !11
  %536 = load ptr, ptr %21, align 8, !tbaa !5
  %537 = getelementptr inbounds double, ptr %536, i32 1
  store ptr %537, ptr %21, align 8, !tbaa !5
  %538 = load double, ptr %537, align 8, !tbaa !11
  %539 = fneg double %535
  %540 = call double @llvm.fmuladd.f64(double %539, double %538, double %533)
  store double %540, ptr %16, align 8, !tbaa !11
  %541 = load ptr, ptr %9, align 8, !tbaa !5
  %542 = load double, ptr %541, align 8, !tbaa !11
  %543 = fneg double %542
  %544 = load ptr, ptr %20, align 8, !tbaa !5
  %545 = load double, ptr %544, align 8, !tbaa !11
  %546 = load ptr, ptr %21, align 8, !tbaa !5
  %547 = load double, ptr %546, align 8, !tbaa !11
  %548 = fneg double %547
  %549 = call double @llvm.fmuladd.f64(double %543, double %545, double %548)
  %550 = load ptr, ptr %21, align 8, !tbaa !5
  store double %549, ptr %550, align 8, !tbaa !11
  %551 = load double, ptr %16, align 8, !tbaa !11
  %552 = load ptr, ptr %20, align 8, !tbaa !5
  store double %551, ptr %552, align 8, !tbaa !11
  br label %553

553:                                              ; preds = %530
  %554 = load i32, ptr %14, align 4, !tbaa !9
  %555 = add nsw i32 %554, 1
  store i32 %555, ptr %14, align 4, !tbaa !9
  br label %526, !llvm.loop !24

556:                                              ; preds = %526
  %557 = load ptr, ptr %9, align 8, !tbaa !5
  %558 = load double, ptr %557, align 8, !tbaa !11
  %559 = fneg double %558
  %560 = load ptr, ptr %21, align 8, !tbaa !5
  %561 = getelementptr inbounds double, ptr %560, i32 1
  store ptr %561, ptr %21, align 8, !tbaa !5
  %562 = load double, ptr %561, align 8, !tbaa !11
  %563 = fmul double %559, %562
  %564 = load ptr, ptr %20, align 8, !tbaa !5
  %565 = getelementptr inbounds double, ptr %564, i32 1
  store ptr %565, ptr %20, align 8, !tbaa !5
  store double %563, ptr %565, align 8, !tbaa !11
  %566 = load ptr, ptr %21, align 8, !tbaa !5
  %567 = load double, ptr %566, align 8, !tbaa !11
  %568 = fneg double %567
  %569 = load ptr, ptr %21, align 8, !tbaa !5
  store double %568, ptr %569, align 8, !tbaa !11
  %570 = load ptr, ptr %9, align 8, !tbaa !5
  %571 = load double, ptr %570, align 8, !tbaa !11
  %572 = load ptr, ptr %9, align 8, !tbaa !5
  %573 = load double, ptr %572, align 8, !tbaa !11
  %574 = call double @llvm.fmuladd.f64(double %571, double %573, double 1.000000e+00)
  store double %574, ptr %16, align 8, !tbaa !11
  %575 = load double, ptr %16, align 8, !tbaa !11
  %576 = load double, ptr %16, align 8, !tbaa !11
  %577 = fmul double %575, %576
  %578 = load double, ptr %16, align 8, !tbaa !11
  %579 = fmul double %577, %578
  %580 = load double, ptr %19, align 8, !tbaa !11
  %581 = fmul double %580, %579
  store double %581, ptr %19, align 8, !tbaa !11
  %582 = load i32, ptr %12, align 4, !tbaa !9
  %583 = add nsw i32 %582, 1
  store i32 %583, ptr %13, align 4, !tbaa !9
  %584 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %584, ptr %20, align 8, !tbaa !5
  %585 = load ptr, ptr %8, align 8, !tbaa !5
  %586 = load i32, ptr %15, align 4, !tbaa !9
  %587 = add nsw i32 %586, -1
  store i32 %587, ptr %15, align 4, !tbaa !9
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds double, ptr %585, i64 %588
  store ptr %589, ptr %21, align 8, !tbaa !5
  br label %590

590:                                              ; preds = %653, %556
  %591 = load i32, ptr %13, align 4, !tbaa !9
  %592 = load i32, ptr %10, align 4, !tbaa !9
  %593 = icmp sle i32 %591, %592
  br i1 %593, label %594, label %662

594:                                              ; preds = %590
  %595 = load ptr, ptr %7, align 8, !tbaa !5
  %596 = load double, ptr %595, align 8, !tbaa !11
  %597 = load ptr, ptr %21, align 8, !tbaa !5
  store double %596, ptr %597, align 8, !tbaa !11
  %598 = load ptr, ptr %9, align 8, !tbaa !5
  %599 = getelementptr inbounds double, ptr %598, i32 1
  store ptr %599, ptr %9, align 8, !tbaa !5
  %600 = load double, ptr %599, align 8, !tbaa !11
  %601 = load ptr, ptr %7, align 8, !tbaa !5
  %602 = load double, ptr %601, align 8, !tbaa !11
  %603 = fmul double %600, %602
  %604 = load ptr, ptr %20, align 8, !tbaa !5
  store double %603, ptr %604, align 8, !tbaa !11
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %605

605:                                              ; preds = %630, %594
  %606 = load i32, ptr %14, align 4, !tbaa !9
  %607 = load i32, ptr %13, align 4, !tbaa !9
  %608 = icmp slt i32 %606, %607
  br i1 %608, label %609, label %633

609:                                              ; preds = %605
  %610 = load ptr, ptr %9, align 8, !tbaa !5
  %611 = load double, ptr %610, align 8, !tbaa !11
  %612 = load ptr, ptr %20, align 8, !tbaa !5
  %613 = getelementptr inbounds double, ptr %612, i32 1
  store ptr %613, ptr %20, align 8, !tbaa !5
  %614 = load double, ptr %613, align 8, !tbaa !11
  %615 = load ptr, ptr %21, align 8, !tbaa !5
  %616 = getelementptr inbounds double, ptr %615, i32 1
  store ptr %616, ptr %21, align 8, !tbaa !5
  %617 = load double, ptr %616, align 8, !tbaa !11
  %618 = call double @llvm.fmuladd.f64(double %611, double %614, double %617)
  store double %618, ptr %16, align 8, !tbaa !11
  %619 = load ptr, ptr %20, align 8, !tbaa !5
  %620 = load double, ptr %619, align 8, !tbaa !11
  %621 = load ptr, ptr %9, align 8, !tbaa !5
  %622 = load double, ptr %621, align 8, !tbaa !11
  %623 = load ptr, ptr %21, align 8, !tbaa !5
  %624 = load double, ptr %623, align 8, !tbaa !11
  %625 = fneg double %622
  %626 = call double @llvm.fmuladd.f64(double %625, double %624, double %620)
  %627 = load ptr, ptr %21, align 8, !tbaa !5
  store double %626, ptr %627, align 8, !tbaa !11
  %628 = load double, ptr %16, align 8, !tbaa !11
  %629 = load ptr, ptr %20, align 8, !tbaa !5
  store double %628, ptr %629, align 8, !tbaa !11
  br label %630

630:                                              ; preds = %609
  %631 = load i32, ptr %14, align 4, !tbaa !9
  %632 = add nsw i32 %631, 1
  store i32 %632, ptr %14, align 4, !tbaa !9
  br label %605, !llvm.loop !25

633:                                              ; preds = %605
  %634 = load ptr, ptr %21, align 8, !tbaa !5
  %635 = getelementptr inbounds double, ptr %634, i32 1
  store ptr %635, ptr %21, align 8, !tbaa !5
  %636 = load double, ptr %635, align 8, !tbaa !11
  %637 = load ptr, ptr %20, align 8, !tbaa !5
  %638 = getelementptr inbounds double, ptr %637, i32 1
  store ptr %638, ptr %20, align 8, !tbaa !5
  store double %636, ptr %638, align 8, !tbaa !11
  %639 = load ptr, ptr %9, align 8, !tbaa !5
  %640 = load double, ptr %639, align 8, !tbaa !11
  %641 = fneg double %640
  %642 = load ptr, ptr %21, align 8, !tbaa !5
  %643 = load double, ptr %642, align 8, !tbaa !11
  %644 = fmul double %641, %643
  %645 = load ptr, ptr %21, align 8, !tbaa !5
  store double %644, ptr %645, align 8, !tbaa !11
  %646 = load ptr, ptr %9, align 8, !tbaa !5
  %647 = load double, ptr %646, align 8, !tbaa !11
  %648 = load ptr, ptr %9, align 8, !tbaa !5
  %649 = load double, ptr %648, align 8, !tbaa !11
  %650 = call double @llvm.fmuladd.f64(double %647, double %649, double 1.000000e+00)
  %651 = load double, ptr %19, align 8, !tbaa !11
  %652 = fmul double %651, %650
  store double %652, ptr %19, align 8, !tbaa !11
  br label %653

653:                                              ; preds = %633
  %654 = load i32, ptr %13, align 4, !tbaa !9
  %655 = add nsw i32 %654, 1
  store i32 %655, ptr %13, align 4, !tbaa !9
  %656 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %656, ptr %20, align 8, !tbaa !5
  %657 = load ptr, ptr %8, align 8, !tbaa !5
  %658 = load i32, ptr %15, align 4, !tbaa !9
  %659 = add nsw i32 %658, -1
  store i32 %659, ptr %15, align 4, !tbaa !9
  %660 = sext i32 %659 to i64
  %661 = getelementptr inbounds double, ptr %657, i64 %660
  store ptr %661, ptr %21, align 8, !tbaa !5
  br label %590, !llvm.loop !26

662:                                              ; preds = %590
  br label %663

663:                                              ; preds = %662, %279
  %664 = load double, ptr %19, align 8, !tbaa !11
  %665 = call double @sqrt(double noundef %664) #4
  %666 = fdiv double 1.000000e+00, %665
  store double %666, ptr %19, align 8, !tbaa !11
  store i32 0, ptr %13, align 4, !tbaa !9
  %667 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %667, ptr %20, align 8, !tbaa !5
  %668 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %668, ptr %21, align 8, !tbaa !5
  br label %669

669:                                              ; preds = %686, %663
  %670 = load i32, ptr %13, align 4, !tbaa !9
  %671 = load i32, ptr %10, align 4, !tbaa !9
  %672 = icmp sle i32 %670, %671
  br i1 %672, label %673, label %689

673:                                              ; preds = %669
  %674 = load ptr, ptr %20, align 8, !tbaa !5
  %675 = load double, ptr %674, align 8, !tbaa !11
  %676 = load double, ptr %19, align 8, !tbaa !11
  %677 = fmul double %675, %676
  %678 = load ptr, ptr %20, align 8, !tbaa !5
  %679 = getelementptr inbounds double, ptr %678, i32 1
  store ptr %679, ptr %20, align 8, !tbaa !5
  store double %677, ptr %678, align 8, !tbaa !11
  %680 = load ptr, ptr %21, align 8, !tbaa !5
  %681 = load double, ptr %680, align 8, !tbaa !11
  %682 = load double, ptr %19, align 8, !tbaa !11
  %683 = fmul double %681, %682
  %684 = load ptr, ptr %21, align 8, !tbaa !5
  %685 = getelementptr inbounds double, ptr %684, i32 1
  store ptr %685, ptr %21, align 8, !tbaa !5
  store double %683, ptr %684, align 8, !tbaa !11
  br label %686

686:                                              ; preds = %673
  %687 = load i32, ptr %13, align 4, !tbaa !9
  %688 = add nsw i32 %687, 1
  store i32 %688, ptr %13, align 4, !tbaa !9
  br label %669, !llvm.loop !27

689:                                              ; preds = %669
  br label %1081

690:                                              ; preds = %6
  %691 = load i32, ptr %11, align 4, !tbaa !9
  %692 = icmp eq i32 %691, 0
  br i1 %692, label %693, label %802

693:                                              ; preds = %690
  %694 = load ptr, ptr %9, align 8, !tbaa !5
  %695 = load double, ptr %694, align 8, !tbaa !11
  %696 = load ptr, ptr %9, align 8, !tbaa !5
  %697 = load double, ptr %696, align 8, !tbaa !11
  %698 = fmul double %695, %697
  store double %698, ptr %16, align 8, !tbaa !11
  %699 = load double, ptr %16, align 8, !tbaa !11
  %700 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %699, double -1.000000e+00)
  store double %700, ptr %17, align 8, !tbaa !11
  %701 = load double, ptr %16, align 8, !tbaa !11
  %702 = fadd double 1.000000e+00, %701
  store double %702, ptr %18, align 8, !tbaa !11
  %703 = load double, ptr %18, align 8, !tbaa !11
  %704 = load double, ptr %18, align 8, !tbaa !11
  %705 = fmul double %703, %704
  %706 = load double, ptr %18, align 8, !tbaa !11
  %707 = call double @sqrt(double noundef %706) #4
  %708 = fmul double %705, %707
  store double %708, ptr %18, align 8, !tbaa !11
  %709 = load ptr, ptr %9, align 8, !tbaa !5
  %710 = load double, ptr %709, align 8, !tbaa !11
  %711 = fmul double -3.000000e+00, %710
  %712 = load double, ptr %18, align 8, !tbaa !11
  %713 = fdiv double %711, %712
  %714 = load ptr, ptr %7, align 8, !tbaa !5
  store double %713, ptr %714, align 8, !tbaa !11
  %715 = load double, ptr %17, align 8, !tbaa !11
  %716 = load double, ptr %18, align 8, !tbaa !11
  %717 = fdiv double %715, %716
  %718 = load ptr, ptr %8, align 8, !tbaa !5
  %719 = load i32, ptr %10, align 4, !tbaa !9
  %720 = sext i32 %719 to i64
  %721 = getelementptr inbounds double, ptr %718, i64 %720
  store double %717, ptr %721, align 8, !tbaa !11
  store double 1.000000e+00, ptr %19, align 8, !tbaa !11
  store i32 1, ptr %13, align 4, !tbaa !9
  %722 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %722, ptr %20, align 8, !tbaa !5
  %723 = load i32, ptr %10, align 4, !tbaa !9
  %724 = sub nsw i32 %723, 1
  store i32 %724, ptr %15, align 4, !tbaa !9
  %725 = load ptr, ptr %8, align 8, !tbaa !5
  %726 = load i32, ptr %15, align 4, !tbaa !9
  %727 = sext i32 %726 to i64
  %728 = getelementptr inbounds double, ptr %725, i64 %727
  store ptr %728, ptr %21, align 8, !tbaa !5
  br label %729

729:                                              ; preds = %792, %693
  %730 = load i32, ptr %13, align 4, !tbaa !9
  %731 = load i32, ptr %10, align 4, !tbaa !9
  %732 = icmp sle i32 %730, %731
  br i1 %732, label %733, label %801

733:                                              ; preds = %729
  %734 = load ptr, ptr %7, align 8, !tbaa !5
  %735 = load double, ptr %734, align 8, !tbaa !11
  %736 = load ptr, ptr %21, align 8, !tbaa !5
  store double %735, ptr %736, align 8, !tbaa !11
  %737 = load ptr, ptr %9, align 8, !tbaa !5
  %738 = getelementptr inbounds double, ptr %737, i32 1
  store ptr %738, ptr %9, align 8, !tbaa !5
  %739 = load double, ptr %738, align 8, !tbaa !11
  %740 = load ptr, ptr %7, align 8, !tbaa !5
  %741 = load double, ptr %740, align 8, !tbaa !11
  %742 = fmul double %739, %741
  %743 = load ptr, ptr %20, align 8, !tbaa !5
  store double %742, ptr %743, align 8, !tbaa !11
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %744

744:                                              ; preds = %769, %733
  %745 = load i32, ptr %14, align 4, !tbaa !9
  %746 = load i32, ptr %13, align 4, !tbaa !9
  %747 = icmp slt i32 %745, %746
  br i1 %747, label %748, label %772

748:                                              ; preds = %744
  %749 = load ptr, ptr %9, align 8, !tbaa !5
  %750 = load double, ptr %749, align 8, !tbaa !11
  %751 = load ptr, ptr %20, align 8, !tbaa !5
  %752 = getelementptr inbounds double, ptr %751, i32 1
  store ptr %752, ptr %20, align 8, !tbaa !5
  %753 = load double, ptr %752, align 8, !tbaa !11
  %754 = load ptr, ptr %21, align 8, !tbaa !5
  %755 = getelementptr inbounds double, ptr %754, i32 1
  store ptr %755, ptr %21, align 8, !tbaa !5
  %756 = load double, ptr %755, align 8, !tbaa !11
  %757 = call double @llvm.fmuladd.f64(double %750, double %753, double %756)
  store double %757, ptr %16, align 8, !tbaa !11
  %758 = load ptr, ptr %20, align 8, !tbaa !5
  %759 = load double, ptr %758, align 8, !tbaa !11
  %760 = load ptr, ptr %9, align 8, !tbaa !5
  %761 = load double, ptr %760, align 8, !tbaa !11
  %762 = load ptr, ptr %21, align 8, !tbaa !5
  %763 = load double, ptr %762, align 8, !tbaa !11
  %764 = fneg double %761
  %765 = call double @llvm.fmuladd.f64(double %764, double %763, double %759)
  %766 = load ptr, ptr %21, align 8, !tbaa !5
  store double %765, ptr %766, align 8, !tbaa !11
  %767 = load double, ptr %16, align 8, !tbaa !11
  %768 = load ptr, ptr %20, align 8, !tbaa !5
  store double %767, ptr %768, align 8, !tbaa !11
  br label %769

769:                                              ; preds = %748
  %770 = load i32, ptr %14, align 4, !tbaa !9
  %771 = add nsw i32 %770, 1
  store i32 %771, ptr %14, align 4, !tbaa !9
  br label %744, !llvm.loop !28

772:                                              ; preds = %744
  %773 = load ptr, ptr %21, align 8, !tbaa !5
  %774 = getelementptr inbounds double, ptr %773, i32 1
  store ptr %774, ptr %21, align 8, !tbaa !5
  %775 = load double, ptr %774, align 8, !tbaa !11
  %776 = load ptr, ptr %20, align 8, !tbaa !5
  %777 = getelementptr inbounds double, ptr %776, i32 1
  store ptr %777, ptr %20, align 8, !tbaa !5
  store double %775, ptr %777, align 8, !tbaa !11
  %778 = load ptr, ptr %9, align 8, !tbaa !5
  %779 = load double, ptr %778, align 8, !tbaa !11
  %780 = fneg double %779
  %781 = load ptr, ptr %21, align 8, !tbaa !5
  %782 = load double, ptr %781, align 8, !tbaa !11
  %783 = fmul double %780, %782
  %784 = load ptr, ptr %21, align 8, !tbaa !5
  store double %783, ptr %784, align 8, !tbaa !11
  %785 = load ptr, ptr %9, align 8, !tbaa !5
  %786 = load double, ptr %785, align 8, !tbaa !11
  %787 = load ptr, ptr %9, align 8, !tbaa !5
  %788 = load double, ptr %787, align 8, !tbaa !11
  %789 = call double @llvm.fmuladd.f64(double %786, double %788, double 1.000000e+00)
  %790 = load double, ptr %19, align 8, !tbaa !11
  %791 = fmul double %790, %789
  store double %791, ptr %19, align 8, !tbaa !11
  br label %792

792:                                              ; preds = %772
  %793 = load i32, ptr %13, align 4, !tbaa !9
  %794 = add nsw i32 %793, 1
  store i32 %794, ptr %13, align 4, !tbaa !9
  %795 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %795, ptr %20, align 8, !tbaa !5
  %796 = load ptr, ptr %8, align 8, !tbaa !5
  %797 = load i32, ptr %15, align 4, !tbaa !9
  %798 = add nsw i32 %797, -1
  store i32 %798, ptr %15, align 4, !tbaa !9
  %799 = sext i32 %798 to i64
  %800 = getelementptr inbounds double, ptr %796, i64 %799
  store ptr %800, ptr %21, align 8, !tbaa !5
  br label %729, !llvm.loop !29

801:                                              ; preds = %729
  br label %1054

802:                                              ; preds = %690
  %803 = load ptr, ptr %9, align 8, !tbaa !5
  %804 = load double, ptr %803, align 8, !tbaa !11
  %805 = load ptr, ptr %7, align 8, !tbaa !5
  store double %804, ptr %805, align 8, !tbaa !11
  %806 = load ptr, ptr %8, align 8, !tbaa !5
  %807 = load i32, ptr %10, align 4, !tbaa !9
  %808 = sext i32 %807 to i64
  %809 = getelementptr inbounds double, ptr %806, i64 %808
  store double 1.000000e+00, ptr %809, align 8, !tbaa !11
  %810 = load ptr, ptr %9, align 8, !tbaa !5
  %811 = load double, ptr %810, align 8, !tbaa !11
  %812 = load ptr, ptr %9, align 8, !tbaa !5
  %813 = load double, ptr %812, align 8, !tbaa !11
  %814 = call double @llvm.fmuladd.f64(double %811, double %813, double 1.000000e+00)
  store double %814, ptr %19, align 8, !tbaa !11
  store i32 1, ptr %13, align 4, !tbaa !9
  %815 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %815, ptr %20, align 8, !tbaa !5
  %816 = load i32, ptr %10, align 4, !tbaa !9
  %817 = sub nsw i32 %816, 1
  store i32 %817, ptr %15, align 4, !tbaa !9
  %818 = load ptr, ptr %8, align 8, !tbaa !5
  %819 = load i32, ptr %15, align 4, !tbaa !9
  %820 = sext i32 %819 to i64
  %821 = getelementptr inbounds double, ptr %818, i64 %820
  store ptr %821, ptr %21, align 8, !tbaa !5
  br label %822

822:                                              ; preds = %885, %802
  %823 = load i32, ptr %13, align 4, !tbaa !9
  %824 = load i32, ptr %11, align 4, !tbaa !9
  %825 = icmp slt i32 %823, %824
  br i1 %825, label %826, label %894

826:                                              ; preds = %822
  %827 = load ptr, ptr %7, align 8, !tbaa !5
  %828 = load double, ptr %827, align 8, !tbaa !11
  %829 = load ptr, ptr %21, align 8, !tbaa !5
  store double %828, ptr %829, align 8, !tbaa !11
  %830 = load ptr, ptr %9, align 8, !tbaa !5
  %831 = getelementptr inbounds double, ptr %830, i32 1
  store ptr %831, ptr %9, align 8, !tbaa !5
  %832 = load double, ptr %831, align 8, !tbaa !11
  %833 = load ptr, ptr %7, align 8, !tbaa !5
  %834 = load double, ptr %833, align 8, !tbaa !11
  %835 = fmul double %832, %834
  %836 = load ptr, ptr %20, align 8, !tbaa !5
  store double %835, ptr %836, align 8, !tbaa !11
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %837

837:                                              ; preds = %862, %826
  %838 = load i32, ptr %14, align 4, !tbaa !9
  %839 = load i32, ptr %13, align 4, !tbaa !9
  %840 = icmp slt i32 %838, %839
  br i1 %840, label %841, label %865

841:                                              ; preds = %837
  %842 = load ptr, ptr %9, align 8, !tbaa !5
  %843 = load double, ptr %842, align 8, !tbaa !11
  %844 = load ptr, ptr %20, align 8, !tbaa !5
  %845 = getelementptr inbounds double, ptr %844, i32 1
  store ptr %845, ptr %20, align 8, !tbaa !5
  %846 = load double, ptr %845, align 8, !tbaa !11
  %847 = load ptr, ptr %21, align 8, !tbaa !5
  %848 = getelementptr inbounds double, ptr %847, i32 1
  store ptr %848, ptr %21, align 8, !tbaa !5
  %849 = load double, ptr %848, align 8, !tbaa !11
  %850 = call double @llvm.fmuladd.f64(double %843, double %846, double %849)
  store double %850, ptr %16, align 8, !tbaa !11
  %851 = load ptr, ptr %20, align 8, !tbaa !5
  %852 = load double, ptr %851, align 8, !tbaa !11
  %853 = load ptr, ptr %9, align 8, !tbaa !5
  %854 = load double, ptr %853, align 8, !tbaa !11
  %855 = load ptr, ptr %21, align 8, !tbaa !5
  %856 = load double, ptr %855, align 8, !tbaa !11
  %857 = fneg double %854
  %858 = call double @llvm.fmuladd.f64(double %857, double %856, double %852)
  %859 = load ptr, ptr %21, align 8, !tbaa !5
  store double %858, ptr %859, align 8, !tbaa !11
  %860 = load double, ptr %16, align 8, !tbaa !11
  %861 = load ptr, ptr %20, align 8, !tbaa !5
  store double %860, ptr %861, align 8, !tbaa !11
  br label %862

862:                                              ; preds = %841
  %863 = load i32, ptr %14, align 4, !tbaa !9
  %864 = add nsw i32 %863, 1
  store i32 %864, ptr %14, align 4, !tbaa !9
  br label %837, !llvm.loop !30

865:                                              ; preds = %837
  %866 = load ptr, ptr %21, align 8, !tbaa !5
  %867 = getelementptr inbounds double, ptr %866, i32 1
  store ptr %867, ptr %21, align 8, !tbaa !5
  %868 = load double, ptr %867, align 8, !tbaa !11
  %869 = load ptr, ptr %20, align 8, !tbaa !5
  %870 = getelementptr inbounds double, ptr %869, i32 1
  store ptr %870, ptr %20, align 8, !tbaa !5
  store double %868, ptr %870, align 8, !tbaa !11
  %871 = load ptr, ptr %9, align 8, !tbaa !5
  %872 = load double, ptr %871, align 8, !tbaa !11
  %873 = fneg double %872
  %874 = load ptr, ptr %21, align 8, !tbaa !5
  %875 = load double, ptr %874, align 8, !tbaa !11
  %876 = fmul double %873, %875
  %877 = load ptr, ptr %21, align 8, !tbaa !5
  store double %876, ptr %877, align 8, !tbaa !11
  %878 = load ptr, ptr %9, align 8, !tbaa !5
  %879 = load double, ptr %878, align 8, !tbaa !11
  %880 = load ptr, ptr %9, align 8, !tbaa !5
  %881 = load double, ptr %880, align 8, !tbaa !11
  %882 = call double @llvm.fmuladd.f64(double %879, double %881, double 1.000000e+00)
  %883 = load double, ptr %19, align 8, !tbaa !11
  %884 = fmul double %883, %882
  store double %884, ptr %19, align 8, !tbaa !11
  br label %885

885:                                              ; preds = %865
  %886 = load i32, ptr %13, align 4, !tbaa !9
  %887 = add nsw i32 %886, 1
  store i32 %887, ptr %13, align 4, !tbaa !9
  %888 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %888, ptr %20, align 8, !tbaa !5
  %889 = load ptr, ptr %8, align 8, !tbaa !5
  %890 = load i32, ptr %15, align 4, !tbaa !9
  %891 = add nsw i32 %890, -1
  store i32 %891, ptr %15, align 4, !tbaa !9
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds double, ptr %889, i64 %892
  store ptr %893, ptr %21, align 8, !tbaa !5
  br label %822, !llvm.loop !31

894:                                              ; preds = %822
  %895 = load ptr, ptr %9, align 8, !tbaa !5
  %896 = getelementptr inbounds double, ptr %895, i32 1
  store ptr %896, ptr %9, align 8, !tbaa !5
  %897 = load double, ptr %896, align 8, !tbaa !11
  store double %897, ptr %16, align 8, !tbaa !11
  %898 = load double, ptr %16, align 8, !tbaa !11
  %899 = load double, ptr %16, align 8, !tbaa !11
  %900 = fmul double %898, %899
  store double %900, ptr %16, align 8, !tbaa !11
  %901 = load double, ptr %16, align 8, !tbaa !11
  %902 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %901, double -1.000000e+00)
  store double %902, ptr %18, align 8, !tbaa !11
  %903 = load double, ptr %16, align 8, !tbaa !11
  %904 = fadd double 1.000000e+00, %903
  store double %904, ptr %17, align 8, !tbaa !11
  %905 = load double, ptr %17, align 8, !tbaa !11
  %906 = load double, ptr %17, align 8, !tbaa !11
  %907 = fmul double %905, %906
  %908 = load double, ptr %17, align 8, !tbaa !11
  %909 = call double @sqrt(double noundef %908) #4
  %910 = fmul double %907, %909
  store double %910, ptr %17, align 8, !tbaa !11
  %911 = load double, ptr %18, align 8, !tbaa !11
  %912 = load double, ptr %17, align 8, !tbaa !11
  %913 = fdiv double %911, %912
  store double %913, ptr %18, align 8, !tbaa !11
  %914 = load ptr, ptr %9, align 8, !tbaa !5
  %915 = load double, ptr %914, align 8, !tbaa !11
  %916 = fmul double -3.000000e+00, %915
  %917 = load double, ptr %17, align 8, !tbaa !11
  %918 = fdiv double %916, %917
  store double %918, ptr %17, align 8, !tbaa !11
  %919 = load double, ptr %18, align 8, !tbaa !11
  %920 = load ptr, ptr %20, align 8, !tbaa !5
  %921 = load double, ptr %920, align 8, !tbaa !11
  %922 = fmul double %919, %921
  %923 = load ptr, ptr %21, align 8, !tbaa !5
  store double %922, ptr %923, align 8, !tbaa !11
  %924 = load double, ptr %17, align 8, !tbaa !11
  %925 = load ptr, ptr %20, align 8, !tbaa !5
  %926 = load double, ptr %925, align 8, !tbaa !11
  %927 = fmul double %924, %926
  %928 = load ptr, ptr %20, align 8, !tbaa !5
  store double %927, ptr %928, align 8, !tbaa !11
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %929

929:                                              ; preds = %956, %894
  %930 = load i32, ptr %14, align 4, !tbaa !9
  %931 = load i32, ptr %11, align 4, !tbaa !9
  %932 = icmp slt i32 %930, %931
  br i1 %932, label %933, label %959

933:                                              ; preds = %929
  %934 = load double, ptr %17, align 8, !tbaa !11
  %935 = load ptr, ptr %20, align 8, !tbaa !5
  %936 = getelementptr inbounds double, ptr %935, i32 1
  store ptr %936, ptr %20, align 8, !tbaa !5
  %937 = load double, ptr %936, align 8, !tbaa !11
  %938 = load double, ptr %18, align 8, !tbaa !11
  %939 = load ptr, ptr %21, align 8, !tbaa !5
  %940 = getelementptr inbounds double, ptr %939, i32 1
  store ptr %940, ptr %21, align 8, !tbaa !5
  %941 = load double, ptr %940, align 8, !tbaa !11
  %942 = fmul double %938, %941
  %943 = call double @llvm.fmuladd.f64(double %934, double %937, double %942)
  store double %943, ptr %16, align 8, !tbaa !11
  %944 = load double, ptr %18, align 8, !tbaa !11
  %945 = load ptr, ptr %20, align 8, !tbaa !5
  %946 = load double, ptr %945, align 8, !tbaa !11
  %947 = load double, ptr %17, align 8, !tbaa !11
  %948 = load ptr, ptr %21, align 8, !tbaa !5
  %949 = load double, ptr %948, align 8, !tbaa !11
  %950 = fmul double %947, %949
  %951 = fneg double %950
  %952 = call double @llvm.fmuladd.f64(double %944, double %946, double %951)
  %953 = load ptr, ptr %21, align 8, !tbaa !5
  store double %952, ptr %953, align 8, !tbaa !11
  %954 = load double, ptr %16, align 8, !tbaa !11
  %955 = load ptr, ptr %20, align 8, !tbaa !5
  store double %954, ptr %955, align 8, !tbaa !11
  br label %956

956:                                              ; preds = %933
  %957 = load i32, ptr %14, align 4, !tbaa !9
  %958 = add nsw i32 %957, 1
  store i32 %958, ptr %14, align 4, !tbaa !9
  br label %929, !llvm.loop !32

959:                                              ; preds = %929
  %960 = load double, ptr %18, align 8, !tbaa !11
  %961 = load ptr, ptr %21, align 8, !tbaa !5
  %962 = getelementptr inbounds double, ptr %961, i32 1
  store ptr %962, ptr %21, align 8, !tbaa !5
  %963 = load double, ptr %962, align 8, !tbaa !11
  %964 = fmul double %960, %963
  %965 = load ptr, ptr %20, align 8, !tbaa !5
  %966 = getelementptr inbounds double, ptr %965, i32 1
  store ptr %966, ptr %20, align 8, !tbaa !5
  store double %964, ptr %966, align 8, !tbaa !11
  %967 = load double, ptr %17, align 8, !tbaa !11
  %968 = fneg double %967
  %969 = load ptr, ptr %21, align 8, !tbaa !5
  %970 = load double, ptr %969, align 8, !tbaa !11
  %971 = fmul double %968, %970
  %972 = load ptr, ptr %21, align 8, !tbaa !5
  store double %971, ptr %972, align 8, !tbaa !11
  %973 = load i32, ptr %11, align 4, !tbaa !9
  %974 = add nsw i32 %973, 1
  store i32 %974, ptr %13, align 4, !tbaa !9
  %975 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %975, ptr %20, align 8, !tbaa !5
  %976 = load ptr, ptr %8, align 8, !tbaa !5
  %977 = load i32, ptr %15, align 4, !tbaa !9
  %978 = add nsw i32 %977, -1
  store i32 %978, ptr %15, align 4, !tbaa !9
  %979 = sext i32 %978 to i64
  %980 = getelementptr inbounds double, ptr %976, i64 %979
  store ptr %980, ptr %21, align 8, !tbaa !5
  br label %981

981:                                              ; preds = %1044, %959
  %982 = load i32, ptr %13, align 4, !tbaa !9
  %983 = load i32, ptr %10, align 4, !tbaa !9
  %984 = icmp sle i32 %982, %983
  br i1 %984, label %985, label %1053

985:                                              ; preds = %981
  %986 = load ptr, ptr %7, align 8, !tbaa !5
  %987 = load double, ptr %986, align 8, !tbaa !11
  %988 = load ptr, ptr %21, align 8, !tbaa !5
  store double %987, ptr %988, align 8, !tbaa !11
  %989 = load ptr, ptr %9, align 8, !tbaa !5
  %990 = getelementptr inbounds double, ptr %989, i32 1
  store ptr %990, ptr %9, align 8, !tbaa !5
  %991 = load double, ptr %990, align 8, !tbaa !11
  %992 = load ptr, ptr %7, align 8, !tbaa !5
  %993 = load double, ptr %992, align 8, !tbaa !11
  %994 = fmul double %991, %993
  %995 = load ptr, ptr %20, align 8, !tbaa !5
  store double %994, ptr %995, align 8, !tbaa !11
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %996

996:                                              ; preds = %1021, %985
  %997 = load i32, ptr %14, align 4, !tbaa !9
  %998 = load i32, ptr %13, align 4, !tbaa !9
  %999 = icmp slt i32 %997, %998
  br i1 %999, label %1000, label %1024

1000:                                             ; preds = %996
  %1001 = load ptr, ptr %9, align 8, !tbaa !5
  %1002 = load double, ptr %1001, align 8, !tbaa !11
  %1003 = load ptr, ptr %20, align 8, !tbaa !5
  %1004 = getelementptr inbounds double, ptr %1003, i32 1
  store ptr %1004, ptr %20, align 8, !tbaa !5
  %1005 = load double, ptr %1004, align 8, !tbaa !11
  %1006 = load ptr, ptr %21, align 8, !tbaa !5
  %1007 = getelementptr inbounds double, ptr %1006, i32 1
  store ptr %1007, ptr %21, align 8, !tbaa !5
  %1008 = load double, ptr %1007, align 8, !tbaa !11
  %1009 = call double @llvm.fmuladd.f64(double %1002, double %1005, double %1008)
  store double %1009, ptr %16, align 8, !tbaa !11
  %1010 = load ptr, ptr %20, align 8, !tbaa !5
  %1011 = load double, ptr %1010, align 8, !tbaa !11
  %1012 = load ptr, ptr %9, align 8, !tbaa !5
  %1013 = load double, ptr %1012, align 8, !tbaa !11
  %1014 = load ptr, ptr %21, align 8, !tbaa !5
  %1015 = load double, ptr %1014, align 8, !tbaa !11
  %1016 = fneg double %1013
  %1017 = call double @llvm.fmuladd.f64(double %1016, double %1015, double %1011)
  %1018 = load ptr, ptr %21, align 8, !tbaa !5
  store double %1017, ptr %1018, align 8, !tbaa !11
  %1019 = load double, ptr %16, align 8, !tbaa !11
  %1020 = load ptr, ptr %20, align 8, !tbaa !5
  store double %1019, ptr %1020, align 8, !tbaa !11
  br label %1021

1021:                                             ; preds = %1000
  %1022 = load i32, ptr %14, align 4, !tbaa !9
  %1023 = add nsw i32 %1022, 1
  store i32 %1023, ptr %14, align 4, !tbaa !9
  br label %996, !llvm.loop !33

1024:                                             ; preds = %996
  %1025 = load ptr, ptr %21, align 8, !tbaa !5
  %1026 = getelementptr inbounds double, ptr %1025, i32 1
  store ptr %1026, ptr %21, align 8, !tbaa !5
  %1027 = load double, ptr %1026, align 8, !tbaa !11
  %1028 = load ptr, ptr %20, align 8, !tbaa !5
  %1029 = getelementptr inbounds double, ptr %1028, i32 1
  store ptr %1029, ptr %20, align 8, !tbaa !5
  store double %1027, ptr %1029, align 8, !tbaa !11
  %1030 = load ptr, ptr %9, align 8, !tbaa !5
  %1031 = load double, ptr %1030, align 8, !tbaa !11
  %1032 = fneg double %1031
  %1033 = load ptr, ptr %21, align 8, !tbaa !5
  %1034 = load double, ptr %1033, align 8, !tbaa !11
  %1035 = fmul double %1032, %1034
  %1036 = load ptr, ptr %21, align 8, !tbaa !5
  store double %1035, ptr %1036, align 8, !tbaa !11
  %1037 = load ptr, ptr %9, align 8, !tbaa !5
  %1038 = load double, ptr %1037, align 8, !tbaa !11
  %1039 = load ptr, ptr %9, align 8, !tbaa !5
  %1040 = load double, ptr %1039, align 8, !tbaa !11
  %1041 = call double @llvm.fmuladd.f64(double %1038, double %1040, double 1.000000e+00)
  %1042 = load double, ptr %19, align 8, !tbaa !11
  %1043 = fmul double %1042, %1041
  store double %1043, ptr %19, align 8, !tbaa !11
  br label %1044

1044:                                             ; preds = %1024
  %1045 = load i32, ptr %13, align 4, !tbaa !9
  %1046 = add nsw i32 %1045, 1
  store i32 %1046, ptr %13, align 4, !tbaa !9
  %1047 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %1047, ptr %20, align 8, !tbaa !5
  %1048 = load ptr, ptr %8, align 8, !tbaa !5
  %1049 = load i32, ptr %15, align 4, !tbaa !9
  %1050 = add nsw i32 %1049, -1
  store i32 %1050, ptr %15, align 4, !tbaa !9
  %1051 = sext i32 %1050 to i64
  %1052 = getelementptr inbounds double, ptr %1048, i64 %1051
  store ptr %1052, ptr %21, align 8, !tbaa !5
  br label %981, !llvm.loop !34

1053:                                             ; preds = %981
  br label %1054

1054:                                             ; preds = %1053, %801
  %1055 = load double, ptr %19, align 8, !tbaa !11
  %1056 = call double @sqrt(double noundef %1055) #4
  %1057 = fdiv double 1.000000e+00, %1056
  store double %1057, ptr %19, align 8, !tbaa !11
  store i32 0, ptr %13, align 4, !tbaa !9
  %1058 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %1058, ptr %20, align 8, !tbaa !5
  %1059 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %1059, ptr %21, align 8, !tbaa !5
  br label %1060

1060:                                             ; preds = %1077, %1054
  %1061 = load i32, ptr %13, align 4, !tbaa !9
  %1062 = load i32, ptr %10, align 4, !tbaa !9
  %1063 = icmp sle i32 %1061, %1062
  br i1 %1063, label %1064, label %1080

1064:                                             ; preds = %1060
  %1065 = load ptr, ptr %20, align 8, !tbaa !5
  %1066 = load double, ptr %1065, align 8, !tbaa !11
  %1067 = load double, ptr %19, align 8, !tbaa !11
  %1068 = fmul double %1066, %1067
  %1069 = load ptr, ptr %20, align 8, !tbaa !5
  %1070 = getelementptr inbounds double, ptr %1069, i32 1
  store ptr %1070, ptr %20, align 8, !tbaa !5
  store double %1068, ptr %1069, align 8, !tbaa !11
  %1071 = load ptr, ptr %21, align 8, !tbaa !5
  %1072 = load double, ptr %1071, align 8, !tbaa !11
  %1073 = load double, ptr %19, align 8, !tbaa !11
  %1074 = fmul double %1072, %1073
  %1075 = load ptr, ptr %21, align 8, !tbaa !5
  %1076 = getelementptr inbounds double, ptr %1075, i32 1
  store ptr %1076, ptr %21, align 8, !tbaa !5
  store double %1074, ptr %1075, align 8, !tbaa !11
  br label %1077

1077:                                             ; preds = %1064
  %1078 = load i32, ptr %13, align 4, !tbaa !9
  %1079 = add nsw i32 %1078, 1
  store i32 %1079, ptr %13, align 4, !tbaa !9
  br label %1060, !llvm.loop !35

1080:                                             ; preds = %1060
  br label %1081

1081:                                             ; preds = %1080, %689
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind 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 #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !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}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !14}
!31 = distinct !{!31, !14}
!32 = distinct !{!32, !14}
!33 = distinct !{!33, !14}
!34 = distinct !{!34, !14}
!35 = distinct !{!35, !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 nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #0

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #1

; Function Attrs: nofree nounwind memory(readwrite, inaccessiblemem: write) uwtable
define dso_local void @Ddpclat(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, i32 noundef %3, i32 noundef %4, i32 noundef %5) local_unnamed_addr #2 {
  %.not = icmp eq i32 %4, %5
  br i1 %.not, label %597, label %7

7:                                                ; preds = %6
  %spec.select = tail call i32 @llvm.smin.i32(i32 %4, i32 %5)
  %spec.select556 = tail call i32 @llvm.smax.i32(i32 %4, i32 %5)
  %8 = icmp eq i32 %spec.select, 0
  br i1 %8, label %9, label %230

9:                                                ; preds = %7
  store double 1.000000e+00, ptr %0, align 8, !tbaa !5
  %10 = load double, ptr %2, align 8, !tbaa !5
  %11 = fneg double %10
  %12 = sext i32 %3 to i64
  %13 = getelementptr inbounds double, ptr %1, i64 %12
  store double %11, ptr %13, align 8, !tbaa !5
  %14 = load double, ptr %2, align 8, !tbaa !5
  %15 = tail call double @llvm.fmuladd.f64(double %14, double %14, double 1.000000e+00)
  %16 = fmul double %15, %15
  %17 = fmul double %15, %16
  %.0495654 = add i32 %3, -1
  %.pn551655 = sext i32 %.0495654 to i64
  %.0656 = getelementptr inbounds double, ptr %1, i64 %.pn551655
  %18 = icmp sgt i32 %spec.select556, 1
  br i1 %18, label %.lr.ph663.preheader, label %._crit_edge664.thread

.lr.ph663.preheader:                              ; preds = %9
  %19 = shl nsw i64 %.pn551655, 3
  %scevgep1167 = getelementptr i8, ptr %0, i64 8
  %scevgep1168 = getelementptr i8, ptr %0, i64 16
  %scevgep1170 = getelementptr i8, ptr %2, i64 8
  %20 = add nsw i32 %spec.select556, -2
  %21 = zext i32 %20 to i64
  %22 = shl nuw nsw i64 %21, 3
  %23 = getelementptr i8, ptr %2, i64 %22
  %scevgep1171 = getelementptr i8, ptr %23, i64 16
  %24 = getelementptr i8, ptr %1, i64 %19
  %25 = getelementptr i8, ptr %24, i64 8
  %26 = getelementptr i8, ptr %1, i64 %19
  %27 = getelementptr i8, ptr %26, i64 16
  %bound01179 = icmp ult ptr %scevgep1167, %scevgep1171
  %invariant.gep1674 = getelementptr i8, ptr %0, i64 8
  br label %.lr.ph663

._crit_edge664.thread:                            ; preds = %9
  %28 = getelementptr inbounds i8, ptr %2, i64 8
  %29 = load double, ptr %28, align 8, !tbaa !5
  %30 = fneg double %29
  %31 = load double, ptr %0, align 8, !tbaa !5
  %32 = fmul double %31, %30
  store double %32, ptr %.0656, align 8, !tbaa !5
  br label %._crit_edge675

.lr.ph663:                                        ; preds = %.lr.ph663.preheader, %._crit_edge651
  %indvar1162 = phi i64 [ 0, %.lr.ph663.preheader ], [ %indvar.next1163, %._crit_edge651 ]
  %indvars.iv836 = phi i64 [ %.pn551655, %.lr.ph663.preheader ], [ %indvars.iv.next837, %._crit_edge651 ]
  %.0661 = phi ptr [ %.0656, %.lr.ph663.preheader ], [ %.0, %._crit_edge651 ]
  %.0485659 = phi double [ %17, %.lr.ph663.preheader ], [ %86, %._crit_edge651 ]
  %.0515658 = phi i32 [ 1, %.lr.ph663.preheader ], [ %87, %._crit_edge651 ]
  %.0527657 = phi ptr [ %2, %.lr.ph663.preheader ], [ %39, %._crit_edge651 ]
  %33 = trunc i64 %indvar1162 to i32
  %34 = mul nsw i64 %indvar1162, -8
  %scevgep1164 = getelementptr i8, ptr %25, i64 %34
  %scevgep1165 = getelementptr i8, ptr %27, i64 %34
  %35 = shl i64 %indvar1162, 3
  %36 = add i64 %35, 34359738360
  %37 = and i64 %36, 34359738360
  %scevgep1166 = getelementptr i8, ptr %scevgep1165, i64 %37
  %scevgep1169 = getelementptr i8, ptr %scevgep1168, i64 %37
  %38 = load double, ptr %0, align 8, !tbaa !5
  store double %38, ptr %.0661, align 8, !tbaa !5
  %39 = getelementptr inbounds i8, ptr %.0527657, i64 8
  %40 = load double, ptr %39, align 8, !tbaa !5
  %41 = fmul double %40, %38
  store double %41, ptr %0, align 8, !tbaa !5
  %42 = icmp ugt i32 %.0515658, 1
  br i1 %42, label %.lr.ph650.preheader, label %._crit_edge651

.lr.ph650.preheader:                              ; preds = %.lr.ph663
  %min.iters.check1185 = icmp ult i64 %indvar1162, 4
  br i1 %min.iters.check1185, label %.lr.ph650.preheader1571, label %vector.memcheck1161

vector.memcheck1161:                              ; preds = %.lr.ph650.preheader
  %bound01172 = icmp ult ptr %scevgep1164, %scevgep1169
  %bound11173 = icmp ult ptr %scevgep1167, %scevgep1166
  %found.conflict1174 = and i1 %bound01172, %bound11173
  %bound01175 = icmp ult ptr %scevgep1164, %scevgep1171
  %bound11176 = icmp ult ptr %scevgep1170, %scevgep1166
  %found.conflict1177 = and i1 %bound01175, %bound11176
  %conflict.rdx1178 = or i1 %found.conflict1174, %found.conflict1177
  %bound11180 = icmp ult ptr %scevgep1170, %scevgep1169
  %found.conflict1181 = and i1 %bound01179, %bound11180
  %conflict.rdx1182 = or i1 %conflict.rdx1178, %found.conflict1181
  br i1 %conflict.rdx1182, label %.lr.ph650.preheader1571, label %vector.ph1186

vector.ph1186:                                    ; preds = %vector.memcheck1161
  %n.vec1188 = and i64 %indvar1162, -2
  %43 = shl i64 %n.vec1188, 3
  %ind.end1189 = getelementptr i8, ptr %.0661, i64 %43
  %44 = shl i64 %n.vec1188, 3
  %ind.end1191 = getelementptr i8, ptr %0, i64 %44
  %.cast1193 = trunc i64 %indvar1162 to i32
  %ind.end1194 = or i32 %.cast1193, 1
  %45 = load double, ptr %39, align 8, !tbaa !5, !alias.scope !9
  %broadcast.splatinsert1204 = insertelement <2 x double> poison, double %45, i64 0
  %broadcast.splat1205 = shufflevector <2 x double> %broadcast.splatinsert1204, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1676 = getelementptr i8, ptr %.0661, i64 8
  %46 = fneg <2 x double> %broadcast.splat1205
  br label %vector.body1196

vector.body1196:                                  ; preds = %vector.body1196, %vector.ph1186
  %index1197 = phi i64 [ 0, %vector.ph1186 ], [ %index.next1206, %vector.body1196 ]
  %offset.idx1198 = shl i64 %index1197, 3
  %offset.idx1200 = shl i64 %index1197, 3
  %gep1675 = getelementptr i8, ptr %invariant.gep1674, i64 %offset.idx1200
  %wide.load1202 = load <2 x double>, ptr %gep1675, align 8, !tbaa !5, !alias.scope !12, !noalias !9
  %gep1677 = getelementptr i8, ptr %invariant.gep1676, i64 %offset.idx1198
  %wide.load1203 = load <2 x double>, ptr %gep1677, align 8, !tbaa !5, !alias.scope !14, !noalias !16
  %47 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1205, <2 x double> %wide.load1202, <2 x double> %wide.load1203)
  %48 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %46, <2 x double> %wide.load1203, <2 x double> %wide.load1202)
  store <2 x double> %48, ptr %gep1677, align 8, !tbaa !5, !alias.scope !14, !noalias !16
  store <2 x double> %47, ptr %gep1675, align 8, !tbaa !5, !alias.scope !12, !noalias !9
  %index.next1206 = add nuw i64 %index1197, 2
  %49 = icmp eq i64 %index.next1206, %n.vec1188
  br i1 %49, label %middle.block1183, label %vector.body1196, !llvm.loop !17

middle.block1183:                                 ; preds = %vector.body1196
  %cmp.n1207 = icmp eq i64 %indvar1162, %n.vec1188
  br i1 %cmp.n1207, label %._crit_edge651, label %.lr.ph650.preheader1571

.lr.ph650.preheader1571:                          ; preds = %middle.block1183, %vector.memcheck1161, %.lr.ph650.preheader
  %.1648.ph = phi ptr [ %.0661, %vector.memcheck1161 ], [ %.0661, %.lr.ph650.preheader ], [ %ind.end1189, %middle.block1183 ]
  %.1464647.ph = phi ptr [ %0, %vector.memcheck1161 ], [ %0, %.lr.ph650.preheader ], [ %ind.end1191, %middle.block1183 ]
  %.0503646.ph = phi i32 [ 1, %vector.memcheck1161 ], [ 1, %.lr.ph650.preheader ], [ %ind.end1194, %middle.block1183 ]
  %50 = and i32 %.0515658, 1
  %lcmp.mod1602.not.not = icmp eq i32 %50, 0
  br i1 %lcmp.mod1602.not.not, label %.lr.ph650.prol, label %.lr.ph650.prol.loopexit

.lr.ph650.prol:                                   ; preds = %.lr.ph650.preheader1571
  %51 = load double, ptr %39, align 8, !tbaa !5
  %52 = getelementptr inbounds i8, ptr %.1464647.ph, i64 8
  %53 = load double, ptr %52, align 8, !tbaa !5
  %54 = getelementptr inbounds i8, ptr %.1648.ph, i64 8
  %55 = load double, ptr %54, align 8, !tbaa !5
  %56 = tail call double @llvm.fmuladd.f64(double %51, double %53, double %55)
  %57 = fneg double %51
  %58 = tail call double @llvm.fmuladd.f64(double %57, double %55, double %53)
  store double %58, ptr %54, align 8, !tbaa !5
  store double %56, ptr %52, align 8, !tbaa !5
  %59 = add nuw nsw i32 %.0503646.ph, 1
  br label %.lr.ph650.prol.loopexit

.lr.ph650.prol.loopexit:                          ; preds = %.lr.ph650.prol, %.lr.ph650.preheader1571
  %.lcssa1573.unr = phi ptr [ poison, %.lr.ph650.preheader1571 ], [ %52, %.lr.ph650.prol ]
  %.lcssa1572.unr = phi ptr [ poison, %.lr.ph650.preheader1571 ], [ %54, %.lr.ph650.prol ]
  %.1648.unr = phi ptr [ %.1648.ph, %.lr.ph650.preheader1571 ], [ %54, %.lr.ph650.prol ]
  %.1464647.unr = phi ptr [ %.1464647.ph, %.lr.ph650.preheader1571 ], [ %52, %.lr.ph650.prol ]
  %.0503646.unr = phi i32 [ %.0503646.ph, %.lr.ph650.preheader1571 ], [ %59, %.lr.ph650.prol ]
  %60 = icmp eq i32 %.0503646.ph, %33
  br i1 %60, label %._crit_edge651, label %.lr.ph650

.lr.ph650:                                        ; preds = %.lr.ph650.prol.loopexit, %.lr.ph650
  %.1648 = phi ptr [ %72, %.lr.ph650 ], [ %.1648.unr, %.lr.ph650.prol.loopexit ]
  %.1464647 = phi ptr [ %70, %.lr.ph650 ], [ %.1464647.unr, %.lr.ph650.prol.loopexit ]
  %.0503646 = phi i32 [ %77, %.lr.ph650 ], [ %.0503646.unr, %.lr.ph650.prol.loopexit ]
  %61 = load double, ptr %39, align 8, !tbaa !5
  %62 = getelementptr inbounds i8, ptr %.1464647, i64 8
  %63 = load double, ptr %62, align 8, !tbaa !5
  %64 = getelementptr inbounds i8, ptr %.1648, i64 8
  %65 = load double, ptr %64, align 8, !tbaa !5
  %66 = tail call double @llvm.fmuladd.f64(double %61, double %63, double %65)
  %67 = fneg double %61
  %68 = tail call double @llvm.fmuladd.f64(double %67, double %65, double %63)
  store double %68, ptr %64, align 8, !tbaa !5
  store double %66, ptr %62, align 8, !tbaa !5
  %69 = load double, ptr %39, align 8, !tbaa !5
  %70 = getelementptr inbounds i8, ptr %.1464647, i64 16
  %71 = load double, ptr %70, align 8, !tbaa !5
  %72 = getelementptr inbounds i8, ptr %.1648, i64 16
  %73 = load double, ptr %72, align 8, !tbaa !5
  %74 = tail call double @llvm.fmuladd.f64(double %69, double %71, double %73)
  %75 = fneg double %69
  %76 = tail call double @llvm.fmuladd.f64(double %75, double %73, double %71)
  store double %76, ptr %72, align 8, !tbaa !5
  store double %74, ptr %70, align 8, !tbaa !5
  %77 = add nuw nsw i32 %.0503646, 2
  %exitcond835.not.1 = icmp eq i32 %77, %.0515658
  br i1 %exitcond835.not.1, label %._crit_edge651, label %.lr.ph650, !llvm.loop !21

._crit_edge651:                                   ; preds = %.lr.ph650.prol.loopexit, %.lr.ph650, %middle.block1183, %.lr.ph663
  %.1464.lcssa = phi ptr [ %0, %.lr.ph663 ], [ %ind.end1191, %middle.block1183 ], [ %.lcssa1573.unr, %.lr.ph650.prol.loopexit ], [ %70, %.lr.ph650 ]
  %.1.lcssa = phi ptr [ %.0661, %.lr.ph663 ], [ %ind.end1189, %middle.block1183 ], [ %.lcssa1572.unr, %.lr.ph650.prol.loopexit ], [ %72, %.lr.ph650 ]
  %78 = getelementptr inbounds i8, ptr %.1.lcssa, i64 8
  %79 = load double, ptr %78, align 8, !tbaa !5
  %80 = getelementptr inbounds i8, ptr %.1464.lcssa, i64 8
  store double %79, ptr %80, align 8, !tbaa !5
  %81 = load double, ptr %39, align 8, !tbaa !5
  %82 = fneg double %81
  %83 = fmul double %79, %82
  store double %83, ptr %78, align 8, !tbaa !5
  %84 = load double, ptr %39, align 8, !tbaa !5
  %85 = tail call double @llvm.fmuladd.f64(double %84, double %84, double 1.000000e+00)
  %86 = fmul double %.0485659, %85
  %87 = add nuw nsw i32 %.0515658, 1
  %indvars.iv.next837 = add nsw i64 %indvars.iv836, -1
  %.0 = getelementptr inbounds double, ptr %1, i64 %indvars.iv.next837
  %exitcond839.not = icmp eq i32 %87, %spec.select556
  %indvar.next1163 = add i64 %indvar1162, 1
  br i1 %exitcond839.not, label %._crit_edge664, label %.lr.ph663, !llvm.loop !22

._crit_edge664:                                   ; preds = %._crit_edge651
  %88 = trunc nsw i64 %indvars.iv836 to i32
  %89 = getelementptr inbounds i8, ptr %.0527657, i64 16
  %90 = load double, ptr %89, align 8, !tbaa !5
  %91 = fneg double %90
  %92 = load double, ptr %0, align 8, !tbaa !5
  %93 = fmul double %92, %91
  store double %93, ptr %.0, align 8, !tbaa !5
  %94 = add nsw i32 %spec.select556, -1
  %95 = zext i32 %94 to i64
  %min.iters.check1227 = icmp ult i32 %spec.select556, 15
  br i1 %min.iters.check1227, label %.lr.ph674.preheader, label %vector.memcheck1208

vector.memcheck1208:                              ; preds = %._crit_edge664
  %96 = shl nsw i64 %.pn551655, 3
  %97 = mul nsw i64 %indvar1162, -8
  %98 = getelementptr i8, ptr %1, i64 %96
  %scevgep1209 = getelementptr i8, ptr %98, i64 %97
  %99 = add nsw i32 %spec.select556, -2
  %100 = zext i32 %99 to i64
  %101 = shl nuw nsw i64 %100, 3
  %102 = getelementptr i8, ptr %1, i64 %97
  %103 = getelementptr i8, ptr %102, i64 %96
  %104 = getelementptr i8, ptr %103, i64 %101
  %scevgep1210 = getelementptr i8, ptr %104, i64 8
  %scevgep1211 = getelementptr i8, ptr %0, i64 8
  %105 = getelementptr i8, ptr %0, i64 %101
  %scevgep1212 = getelementptr i8, ptr %105, i64 16
  %106 = shl nuw nsw i64 %indvar1162, 3
  %107 = getelementptr i8, ptr %2, i64 %106
  %scevgep1213 = getelementptr i8, ptr %107, i64 24
  %bound01214 = icmp ult ptr %scevgep1209, %scevgep1212
  %bound11215 = icmp ugt ptr %104, %0
  %found.conflict1216 = and i1 %bound01214, %bound11215
  %bound01217 = icmp ult ptr %scevgep1209, %scevgep1213
  %bound11218 = icmp ult ptr %89, %scevgep1210
  %found.conflict1219 = and i1 %bound01217, %bound11218
  %conflict.rdx1220 = or i1 %found.conflict1216, %found.conflict1219
  %bound01221 = icmp ult ptr %scevgep1211, %scevgep1213
  %bound11222 = icmp ult ptr %.0527657, %105
  %found.conflict1223 = and i1 %bound01221, %bound11222
  %conflict.rdx1224 = or i1 %conflict.rdx1220, %found.conflict1223
  br i1 %conflict.rdx1224, label %.lr.ph674.preheader, label %vector.ph1228

vector.ph1228:                                    ; preds = %vector.memcheck1208
  %n.vec1230 = and i64 %95, 4294967294
  %108 = shl nuw nsw i64 %n.vec1230, 3
  %ind.end1231 = getelementptr i8, ptr %.0, i64 %108
  %109 = shl nuw nsw i64 %n.vec1230, 3
  %ind.end1233 = getelementptr i8, ptr %0, i64 %109
  %ind.end1236 = or i32 %94, 1
  %invariant.gep1678 = getelementptr i8, ptr %0, i64 8
  %110 = load double, ptr %89, align 8, !tbaa !5, !alias.scope !23
  %broadcast.splatinsert1246 = insertelement <2 x double> poison, double %110, i64 0
  %broadcast.splat1247 = shufflevector <2 x double> %broadcast.splatinsert1246, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1680 = getelementptr i8, ptr %.0, i64 8
  %111 = fneg <2 x double> %broadcast.splat1247
  br label %vector.body1238

vector.body1238:                                  ; preds = %vector.body1238, %vector.ph1228
  %index1239 = phi i64 [ 0, %vector.ph1228 ], [ %index.next1248, %vector.body1238 ]
  %offset.idx1240 = shl i64 %index1239, 3
  %offset.idx1242 = shl i64 %index1239, 3
  %gep1679 = getelementptr i8, ptr %invariant.gep1678, i64 %offset.idx1242
  %wide.load1244 = load <2 x double>, ptr %gep1679, align 8, !tbaa !5, !alias.scope !26, !noalias !23
  %gep1681 = getelementptr i8, ptr %invariant.gep1680, i64 %offset.idx1240
  %wide.load1245 = load <2 x double>, ptr %gep1681, align 8, !tbaa !5, !alias.scope !28, !noalias !30
  %112 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %111, <2 x double> %wide.load1245, <2 x double> %wide.load1244)
  %113 = fneg <2 x double> %wide.load1245
  %114 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %111, <2 x double> %wide.load1244, <2 x double> %113)
  store <2 x double> %114, ptr %gep1681, align 8, !tbaa !5, !alias.scope !28, !noalias !30
  store <2 x double> %112, ptr %gep1679, align 8, !tbaa !5, !alias.scope !26, !noalias !23
  %index.next1248 = add nuw i64 %index1239, 2
  %115 = icmp eq i64 %index.next1248, %n.vec1230
  br i1 %115, label %middle.block1225, label %vector.body1238, !llvm.loop !31

middle.block1225:                                 ; preds = %vector.body1238
  %cmp.n1249 = icmp eq i64 %n.vec1230, %95
  br i1 %cmp.n1249, label %._crit_edge675, label %.lr.ph674.preheader

.lr.ph674.preheader:                              ; preds = %middle.block1225, %vector.memcheck1208, %._crit_edge664
  %.2672.ph = phi ptr [ %.0, %vector.memcheck1208 ], [ %.0, %._crit_edge664 ], [ %ind.end1231, %middle.block1225 ]
  %.2465671.ph = phi ptr [ %0, %vector.memcheck1208 ], [ %0, %._crit_edge664 ], [ %ind.end1233, %middle.block1225 ]
  %.1504670.ph = phi i32 [ 1, %vector.memcheck1208 ], [ 1, %._crit_edge664 ], [ %ind.end1236, %middle.block1225 ]
  %.neg1619 = add i32 %.1504670.ph, 1
  %116 = and i32 %spec.select556, 1
  %lcmp.mod1604.not.not = icmp eq i32 %116, 0
  br i1 %lcmp.mod1604.not.not, label %.lr.ph674.prol, label %.lr.ph674.prol.loopexit

.lr.ph674.prol:                                   ; preds = %.lr.ph674.preheader
  %117 = getelementptr inbounds i8, ptr %.2465671.ph, i64 8
  %118 = load double, ptr %117, align 8, !tbaa !5
  %119 = load double, ptr %89, align 8, !tbaa !5
  %120 = getelementptr inbounds i8, ptr %.2672.ph, i64 8
  %121 = load double, ptr %120, align 8, !tbaa !5
  %122 = fneg double %119
  %123 = tail call double @llvm.fmuladd.f64(double %122, double %121, double %118)
  %124 = fneg double %121
  %125 = tail call double @llvm.fmuladd.f64(double %122, double %118, double %124)
  store double %125, ptr %120, align 8, !tbaa !5
  store double %123, ptr %117, align 8, !tbaa !5
  %126 = add nuw nsw i32 %.1504670.ph, 1
  br label %.lr.ph674.prol.loopexit

.lr.ph674.prol.loopexit:                          ; preds = %.lr.ph674.prol, %.lr.ph674.preheader
  %.lcssa1570.unr = phi ptr [ poison, %.lr.ph674.preheader ], [ %117, %.lr.ph674.prol ]
  %.lcssa1569.unr = phi ptr [ poison, %.lr.ph674.preheader ], [ %120, %.lr.ph674.prol ]
  %.2672.unr = phi ptr [ %.2672.ph, %.lr.ph674.preheader ], [ %120, %.lr.ph674.prol ]
  %.2465671.unr = phi ptr [ %.2465671.ph, %.lr.ph674.preheader ], [ %117, %.lr.ph674.prol ]
  %.1504670.unr = phi i32 [ %.1504670.ph, %.lr.ph674.preheader ], [ %126, %.lr.ph674.prol ]
  %127 = icmp eq i32 %spec.select556, %.neg1619
  br i1 %127, label %._crit_edge675, label %.lr.ph674

.lr.ph674:                                        ; preds = %.lr.ph674.prol.loopexit, %.lr.ph674
  %.2672 = phi ptr [ %140, %.lr.ph674 ], [ %.2672.unr, %.lr.ph674.prol.loopexit ]
  %.2465671 = phi ptr [ %137, %.lr.ph674 ], [ %.2465671.unr, %.lr.ph674.prol.loopexit ]
  %.1504670 = phi i32 [ %146, %.lr.ph674 ], [ %.1504670.unr, %.lr.ph674.prol.loopexit ]
  %128 = getelementptr inbounds i8, ptr %.2465671, i64 8
  %129 = load double, ptr %128, align 8, !tbaa !5
  %130 = load double, ptr %89, align 8, !tbaa !5
  %131 = getelementptr inbounds i8, ptr %.2672, i64 8
  %132 = load double, ptr %131, align 8, !tbaa !5
  %133 = fneg double %130
  %134 = tail call double @llvm.fmuladd.f64(double %133, double %132, double %129)
  %135 = fneg double %132
  %136 = tail call double @llvm.fmuladd.f64(double %133, double %129, double %135)
  store double %136, ptr %131, align 8, !tbaa !5
  store double %134, ptr %128, align 8, !tbaa !5
  %137 = getelementptr inbounds i8, ptr %.2465671, i64 16
  %138 = load double, ptr %137, align 8, !tbaa !5
  %139 = load double, ptr %89, align 8, !tbaa !5
  %140 = getelementptr inbounds i8, ptr %.2672, i64 16
  %141 = load double, ptr %140, align 8, !tbaa !5
  %142 = fneg double %139
  %143 = tail call double @llvm.fmuladd.f64(double %142, double %141, double %138)
  %144 = fneg double %141
  %145 = tail call double @llvm.fmuladd.f64(double %142, double %138, double %144)
  store double %145, ptr %140, align 8, !tbaa !5
  store double %143, ptr %137, align 8, !tbaa !5
  %146 = add nuw nsw i32 %.1504670, 2
  %exitcond840.not.1 = icmp eq i32 %146, %spec.select556
  br i1 %exitcond840.not.1, label %._crit_edge675, label %.lr.ph674, !llvm.loop !32

._crit_edge675:                                   ; preds = %.lr.ph674.prol.loopexit, %.lr.ph674, %middle.block1225, %._crit_edge664.thread
  %147 = phi ptr [ %28, %._crit_edge664.thread ], [ %89, %middle.block1225 ], [ %89, %.lr.ph674 ], [ %89, %.lr.ph674.prol.loopexit ]
  %.0485.lcssa874 = phi double [ %17, %._crit_edge664.thread ], [ %86, %middle.block1225 ], [ %86, %.lr.ph674 ], [ %86, %.lr.ph674.prol.loopexit ]
  %.0495.in.lcssa873 = phi i32 [ %3, %._crit_edge664.thread ], [ %88, %middle.block1225 ], [ %88, %.lr.ph674 ], [ %88, %.lr.ph674.prol.loopexit ]
  %.2465.lcssa = phi ptr [ %0, %._crit_edge664.thread ], [ %ind.end1233, %middle.block1225 ], [ %.lcssa1570.unr, %.lr.ph674.prol.loopexit ], [ %137, %.lr.ph674 ]
  %.2.lcssa = phi ptr [ %.0656, %._crit_edge664.thread ], [ %ind.end1231, %middle.block1225 ], [ %.lcssa1569.unr, %.lr.ph674.prol.loopexit ], [ %140, %.lr.ph674 ]
  %148 = load double, ptr %147, align 8, !tbaa !5
  %149 = fneg double %148
  %150 = getelementptr inbounds i8, ptr %.2.lcssa, i64 8
  %151 = load double, ptr %150, align 8, !tbaa !5
  %152 = fmul double %151, %149
  %153 = getelementptr inbounds i8, ptr %.2465.lcssa, i64 8
  store double %152, ptr %153, align 8, !tbaa !5
  %154 = load double, ptr %150, align 8, !tbaa !5
  %155 = fneg double %154
  store double %155, ptr %150, align 8, !tbaa !5
  %156 = load double, ptr %147, align 8, !tbaa !5
  %157 = tail call double @llvm.fmuladd.f64(double %156, double %156, double 1.000000e+00)
  %158 = fmul double %157, %157
  %159 = fmul double %157, %158
  %160 = fmul double %.0485.lcssa874, %159
  %.not553.not688 = icmp slt i32 %spec.select556, %3
  br i1 %.not553.not688, label %.lr.ph695.preheader, label %.loopexit561

.lr.ph695.preheader:                              ; preds = %._crit_edge675
  %161 = add i32 %.0495.in.lcssa873, -2
  %162 = sext i32 %161 to i64
  %163 = shl nsw i64 %162, 3
  %164 = add i32 %spec.select556, -1
  %scevgep1256 = getelementptr i8, ptr %0, i64 8
  %scevgep1257 = getelementptr i8, ptr %0, i64 16
  %scevgep1259 = getelementptr i8, ptr %147, i64 8
  %165 = xor i32 %spec.select556, -1
  %166 = add i32 %165, %3
  %167 = zext i32 %166 to i64
  %168 = shl nuw nsw i64 %167, 3
  %169 = add nuw nsw i64 %168, 16
  %scevgep1260 = getelementptr i8, ptr %147, i64 %169
  %170 = getelementptr i8, ptr %1, i64 %163
  %171 = getelementptr i8, ptr %170, i64 8
  %172 = getelementptr i8, ptr %1, i64 %163
  %173 = getelementptr i8, ptr %172, i64 16
  %bound01268 = icmp ult ptr %scevgep1256, %scevgep1260
  %invariant.gep1682 = getelementptr i8, ptr %0, i64 8
  br label %.lr.ph695

.lr.ph695:                                        ; preds = %.lr.ph695.preheader, %._crit_edge684
  %indvar1251 = phi i64 [ 0, %.lr.ph695.preheader ], [ %indvar.next1252, %._crit_edge684 ]
  %indvars.iv844 = phi i64 [ %162, %.lr.ph695.preheader ], [ %indvars.iv.next845, %._crit_edge684 ]
  %indvars.iv841.in = phi i32 [ %spec.select556, %.lr.ph695.preheader ], [ %indvars.iv841, %._crit_edge684 ]
  %.1486692 = phi double [ %160, %.lr.ph695.preheader ], [ %229, %._crit_edge684 ]
  %.1516.in690 = phi i32 [ %spec.select556, %.lr.ph695.preheader ], [ %.1516693, %._crit_edge684 ]
  %.1528689 = phi ptr [ %147, %.lr.ph695.preheader ], [ %182, %._crit_edge684 ]
  %174 = trunc i64 %indvar1251 to i32
  %175 = zext i32 %indvars.iv841.in to i64
  %176 = mul nsw i64 %indvar1251, -8
  %scevgep1253 = getelementptr i8, ptr %171, i64 %176
  %scevgep1254 = getelementptr i8, ptr %173, i64 %176
  %177 = trunc i64 %indvar1251 to i32
  %178 = add i32 %164, %177
  %179 = zext i32 %178 to i64
  %180 = shl nuw nsw i64 %179, 3
  %scevgep1255 = getelementptr i8, ptr %scevgep1254, i64 %180
  %scevgep1258 = getelementptr i8, ptr %scevgep1257, i64 %180
  %indvars.iv841 = add i32 %indvars.iv841.in, 1
  %.1516693 = add nsw i32 %.1516.in690, 1
  %.3 = getelementptr inbounds double, ptr %1, i64 %indvars.iv844
  %181 = load double, ptr %0, align 8, !tbaa !5
  store double %181, ptr %.3, align 8, !tbaa !5
  %182 = getelementptr inbounds i8, ptr %.1528689, i64 8
  %183 = load double, ptr %182, align 8, !tbaa !5
  %184 = fmul double %183, %181
  store double %184, ptr %0, align 8, !tbaa !5
  %.not555678 = icmp slt i32 %.1516.in690, 1
  br i1 %.not555678, label %._crit_edge684, label %.lr.ph683.preheader

.lr.ph683.preheader:                              ; preds = %.lr.ph695
  %min.iters.check1274 = icmp ult i32 %indvars.iv841.in, 4
  br i1 %min.iters.check1274, label %.lr.ph683.preheader1565, label %vector.memcheck1250

vector.memcheck1250:                              ; preds = %.lr.ph683.preheader
  %bound01261 = icmp ult ptr %scevgep1253, %scevgep1258
  %bound11262 = icmp ult ptr %scevgep1256, %scevgep1255
  %found.conflict1263 = and i1 %bound01261, %bound11262
  %bound01264 = icmp ult ptr %scevgep1253, %scevgep1260
  %bound11265 = icmp ult ptr %scevgep1259, %scevgep1255
  %found.conflict1266 = and i1 %bound01264, %bound11265
  %conflict.rdx1267 = or i1 %found.conflict1263, %found.conflict1266
  %bound11269 = icmp ult ptr %scevgep1259, %scevgep1258
  %found.conflict1270 = and i1 %bound01268, %bound11269
  %conflict.rdx1271 = or i1 %conflict.rdx1267, %found.conflict1270
  br i1 %conflict.rdx1271, label %.lr.ph683.preheader1565, label %vector.ph1275

vector.ph1275:                                    ; preds = %vector.memcheck1250
  %n.vec1277 = and i64 %175, 4294967294
  %185 = shl nuw nsw i64 %n.vec1277, 3
  %ind.end1278 = getelementptr i8, ptr %.3, i64 %185
  %186 = shl nuw nsw i64 %n.vec1277, 3
  %ind.end1280 = getelementptr i8, ptr %0, i64 %186
  %ind.end1283 = or i32 %indvars.iv841.in, 1
  %187 = load double, ptr %182, align 8, !tbaa !5, !alias.scope !33
  %broadcast.splatinsert1293 = insertelement <2 x double> poison, double %187, i64 0
  %broadcast.splat1294 = shufflevector <2 x double> %broadcast.splatinsert1293, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1684 = getelementptr i8, ptr %.3, i64 8
  %188 = fneg <2 x double> %broadcast.splat1294
  br label %vector.body1285

vector.body1285:                                  ; preds = %vector.body1285, %vector.ph1275
  %index1286 = phi i64 [ 0, %vector.ph1275 ], [ %index.next1295, %vector.body1285 ]
  %offset.idx1287 = shl i64 %index1286, 3
  %offset.idx1289 = shl i64 %index1286, 3
  %gep1683 = getelementptr i8, ptr %invariant.gep1682, i64 %offset.idx1289
  %wide.load1291 = load <2 x double>, ptr %gep1683, align 8, !tbaa !5, !alias.scope !36, !noalias !33
  %gep1685 = getelementptr i8, ptr %invariant.gep1684, i64 %offset.idx1287
  %wide.load1292 = load <2 x double>, ptr %gep1685, align 8, !tbaa !5, !alias.scope !38, !noalias !40
  %189 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1294, <2 x double> %wide.load1291, <2 x double> %wide.load1292)
  %190 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %188, <2 x double> %wide.load1292, <2 x double> %wide.load1291)
  store <2 x double> %190, ptr %gep1685, align 8, !tbaa !5, !alias.scope !38, !noalias !40
  store <2 x double> %189, ptr %gep1683, align 8, !tbaa !5, !alias.scope !36, !noalias !33
  %index.next1295 = add nuw i64 %index1286, 2
  %191 = icmp eq i64 %index.next1295, %n.vec1277
  br i1 %191, label %middle.block1272, label %vector.body1285, !llvm.loop !41

middle.block1272:                                 ; preds = %vector.body1285
  %cmp.n1296 = icmp eq i64 %n.vec1277, %175
  br i1 %cmp.n1296, label %._crit_edge684, label %.lr.ph683.preheader1565

.lr.ph683.preheader1565:                          ; preds = %middle.block1272, %vector.memcheck1250, %.lr.ph683.preheader
  %.4681.ph = phi ptr [ %.3, %vector.memcheck1250 ], [ %.3, %.lr.ph683.preheader ], [ %ind.end1278, %middle.block1272 ]
  %.4467680.ph = phi ptr [ %0, %vector.memcheck1250 ], [ %0, %.lr.ph683.preheader ], [ %ind.end1280, %middle.block1272 ]
  %.2505679.ph = phi i32 [ 1, %vector.memcheck1250 ], [ 1, %.lr.ph683.preheader ], [ %ind.end1283, %middle.block1272 ]
  %192 = add i32 %spec.select556, %174
  %xtraiter1605 = and i32 %192, 1
  %lcmp.mod1606.not = icmp eq i32 %xtraiter1605, 0
  br i1 %lcmp.mod1606.not, label %.lr.ph683.prol.loopexit, label %.lr.ph683.prol

.lr.ph683.prol:                                   ; preds = %.lr.ph683.preheader1565
  %193 = load double, ptr %182, align 8, !tbaa !5
  %194 = getelementptr inbounds i8, ptr %.4467680.ph, i64 8
  %195 = load double, ptr %194, align 8, !tbaa !5
  %196 = getelementptr inbounds i8, ptr %.4681.ph, i64 8
  %197 = load double, ptr %196, align 8, !tbaa !5
  %198 = tail call double @llvm.fmuladd.f64(double %193, double %195, double %197)
  %199 = fneg double %193
  %200 = tail call double @llvm.fmuladd.f64(double %199, double %197, double %195)
  store double %200, ptr %196, align 8, !tbaa !5
  store double %198, ptr %194, align 8, !tbaa !5
  %201 = add nuw i32 %.2505679.ph, 1
  br label %.lr.ph683.prol.loopexit

.lr.ph683.prol.loopexit:                          ; preds = %.lr.ph683.prol, %.lr.ph683.preheader1565
  %.lcssa1567.unr = phi ptr [ poison, %.lr.ph683.preheader1565 ], [ %194, %.lr.ph683.prol ]
  %.lcssa1566.unr = phi ptr [ poison, %.lr.ph683.preheader1565 ], [ %196, %.lr.ph683.prol ]
  %.4681.unr = phi ptr [ %.4681.ph, %.lr.ph683.preheader1565 ], [ %196, %.lr.ph683.prol ]
  %.4467680.unr = phi ptr [ %.4467680.ph, %.lr.ph683.preheader1565 ], [ %194, %.lr.ph683.prol ]
  %.2505679.unr = phi i32 [ %.2505679.ph, %.lr.ph683.preheader1565 ], [ %201, %.lr.ph683.prol ]
  %202 = icmp eq i32 %indvars.iv841.in, %.2505679.ph
  br i1 %202, label %._crit_edge684, label %.lr.ph683

.lr.ph683:                                        ; preds = %.lr.ph683.prol.loopexit, %.lr.ph683
  %.4681 = phi ptr [ %215, %.lr.ph683 ], [ %.4681.unr, %.lr.ph683.prol.loopexit ]
  %.4467680 = phi ptr [ %213, %.lr.ph683 ], [ %.4467680.unr, %.lr.ph683.prol.loopexit ]
  %.2505679 = phi i32 [ %220, %.lr.ph683 ], [ %.2505679.unr, %.lr.ph683.prol.loopexit ]
  %203 = load double, ptr %182, align 8, !tbaa !5
  %204 = getelementptr inbounds i8, ptr %.4467680, i64 8
  %205 = load double, ptr %204, align 8, !tbaa !5
  %206 = getelementptr inbounds i8, ptr %.4681, i64 8
  %207 = load double, ptr %206, align 8, !tbaa !5
  %208 = tail call double @llvm.fmuladd.f64(double %203, double %205, double %207)
  %209 = fneg double %203
  %210 = tail call double @llvm.fmuladd.f64(double %209, double %207, double %205)
  store double %210, ptr %206, align 8, !tbaa !5
  store double %208, ptr %204, align 8, !tbaa !5
  %211 = add nuw i32 %.2505679, 1
  %212 = load double, ptr %182, align 8, !tbaa !5
  %213 = getelementptr inbounds i8, ptr %.4467680, i64 16
  %214 = load double, ptr %213, align 8, !tbaa !5
  %215 = getelementptr inbounds i8, ptr %.4681, i64 16
  %216 = load double, ptr %215, align 8, !tbaa !5
  %217 = tail call double @llvm.fmuladd.f64(double %212, double %214, double %216)
  %218 = fneg double %212
  %219 = tail call double @llvm.fmuladd.f64(double %218, double %216, double %214)
  store double %219, ptr %215, align 8, !tbaa !5
  store double %217, ptr %213, align 8, !tbaa !5
  %220 = add nuw i32 %.2505679, 2
  %exitcond843.not.1 = icmp eq i32 %211, %indvars.iv841.in
  br i1 %exitcond843.not.1, label %._crit_edge684, label %.lr.ph683, !llvm.loop !42

._crit_edge684:                                   ; preds = %.lr.ph683.prol.loopexit, %.lr.ph683, %middle.block1272, %.lr.ph695
  %.4467.lcssa = phi ptr [ %0, %.lr.ph695 ], [ %ind.end1280, %middle.block1272 ], [ %.lcssa1567.unr, %.lr.ph683.prol.loopexit ], [ %213, %.lr.ph683 ]
  %.4.lcssa = phi ptr [ %.3, %.lr.ph695 ], [ %ind.end1278, %middle.block1272 ], [ %.lcssa1566.unr, %.lr.ph683.prol.loopexit ], [ %215, %.lr.ph683 ]
  %221 = getelementptr inbounds i8, ptr %.4.lcssa, i64 8
  %222 = load double, ptr %221, align 8, !tbaa !5
  %223 = getelementptr inbounds i8, ptr %.4467.lcssa, i64 8
  store double %222, ptr %223, align 8, !tbaa !5
  %224 = load double, ptr %182, align 8, !tbaa !5
  %225 = fneg double %224
  %226 = fmul double %222, %225
  store double %226, ptr %221, align 8, !tbaa !5
  %227 = load double, ptr %182, align 8, !tbaa !5
  %228 = tail call double @llvm.fmuladd.f64(double %227, double %227, double 1.000000e+00)
  %229 = fmul double %.1486692, %228
  %indvars.iv.next845 = add nsw i64 %indvars.iv844, -1
  %exitcond847.not = icmp eq i32 %.1516693, %3
  %indvar.next1252 = add i64 %indvar1251, 1
  br i1 %exitcond847.not, label %.loopexit561, label %.lr.ph695, !llvm.loop !43

230:                                              ; preds = %7
  %231 = load double, ptr %2, align 8, !tbaa !5
  store double %231, ptr %0, align 8, !tbaa !5
  %232 = sext i32 %3 to i64
  %233 = getelementptr inbounds double, ptr %1, i64 %232
  store double 1.000000e+00, ptr %233, align 8, !tbaa !5
  %234 = load double, ptr %2, align 8, !tbaa !5
  %235 = tail call double @llvm.fmuladd.f64(double %234, double %234, double 1.000000e+00)
  %.2497567 = add i32 %3, -1
  %.pn544568 = sext i32 %.2497567 to i64
  %.5569 = getelementptr inbounds double, ptr %1, i64 %.pn544568
  %236 = icmp sgt i32 %spec.select, 1
  br i1 %236, label %.lr.ph576.preheader, label %._crit_edge577.thread

.lr.ph576.preheader:                              ; preds = %230
  %237 = shl nsw i64 %.pn544568, 3
  %scevgep963 = getelementptr i8, ptr %0, i64 8
  %scevgep964 = getelementptr i8, ptr %0, i64 16
  %scevgep966 = getelementptr i8, ptr %2, i64 8
  %238 = add nsw i32 %spec.select, -2
  %239 = zext i32 %238 to i64
  %240 = shl nuw nsw i64 %239, 3
  %241 = getelementptr i8, ptr %2, i64 %240
  %scevgep967 = getelementptr i8, ptr %241, i64 16
  %242 = getelementptr i8, ptr %1, i64 %237
  %243 = getelementptr i8, ptr %242, i64 8
  %244 = getelementptr i8, ptr %1, i64 %237
  %245 = getelementptr i8, ptr %244, i64 16
  %bound0971 = icmp ult ptr %scevgep963, %scevgep967
  %invariant.gep = getelementptr i8, ptr %0, i64 8
  br label %.lr.ph576

._crit_edge577.thread:                            ; preds = %230
  %246 = getelementptr inbounds i8, ptr %2, i64 8
  %247 = load double, ptr %246, align 8, !tbaa !5
  %248 = fneg double %247
  %249 = load double, ptr %0, align 8, !tbaa !5
  %250 = fmul double %249, %248
  store double %250, ptr %.5569, align 8, !tbaa !5
  br label %._crit_edge588

.lr.ph576:                                        ; preds = %.lr.ph576.preheader, %._crit_edge
  %indvar = phi i64 [ 0, %.lr.ph576.preheader ], [ %indvar.next, %._crit_edge ]
  %indvars.iv = phi i64 [ %.pn544568, %.lr.ph576.preheader ], [ %indvars.iv.next, %._crit_edge ]
  %.5574 = phi ptr [ %.5569, %.lr.ph576.preheader ], [ %.5, %._crit_edge ]
  %.2487572 = phi double [ %235, %.lr.ph576.preheader ], [ %304, %._crit_edge ]
  %.2517571 = phi i32 [ 1, %.lr.ph576.preheader ], [ %305, %._crit_edge ]
  %.2529570 = phi ptr [ %2, %.lr.ph576.preheader ], [ %257, %._crit_edge ]
  %251 = trunc i64 %indvar to i32
  %252 = mul nsw i64 %indvar, -8
  %scevgep = getelementptr i8, ptr %243, i64 %252
  %scevgep961 = getelementptr i8, ptr %245, i64 %252
  %253 = shl i64 %indvar, 3
  %254 = add i64 %253, 34359738360
  %255 = and i64 %254, 34359738360
  %scevgep962 = getelementptr i8, ptr %scevgep961, i64 %255
  %scevgep965 = getelementptr i8, ptr %scevgep964, i64 %255
  %256 = load double, ptr %0, align 8, !tbaa !5
  store double %256, ptr %.5574, align 8, !tbaa !5
  %257 = getelementptr inbounds i8, ptr %.2529570, i64 8
  %258 = load double, ptr %257, align 8, !tbaa !5
  %259 = fmul double %258, %256
  store double %259, ptr %0, align 8, !tbaa !5
  %260 = icmp ugt i32 %.2517571, 1
  br i1 %260, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %.lr.ph576
  %min.iters.check = icmp ult i64 %indvar, 4
  br i1 %min.iters.check, label %.lr.ph.preheader1590, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph.preheader
  %bound0 = icmp ult ptr %scevgep, %scevgep965
  %bound1 = icmp ult ptr %scevgep963, %scevgep962
  %found.conflict = and i1 %bound0, %bound1
  %bound0968 = icmp ult ptr %scevgep, %scevgep967
  %bound1969 = icmp ult ptr %scevgep966, %scevgep962
  %found.conflict970 = and i1 %bound0968, %bound1969
  %conflict.rdx = or i1 %found.conflict, %found.conflict970
  %bound1972 = icmp ult ptr %scevgep966, %scevgep965
  %found.conflict973 = and i1 %bound0971, %bound1972
  %conflict.rdx974 = or i1 %conflict.rdx, %found.conflict973
  br i1 %conflict.rdx974, label %.lr.ph.preheader1590, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %indvar, -2
  %261 = shl i64 %n.vec, 3
  %ind.end = getelementptr i8, ptr %.5574, i64 %261
  %262 = shl i64 %n.vec, 3
  %ind.end975 = getelementptr i8, ptr %0, i64 %262
  %.cast = trunc i64 %indvar to i32
  %ind.end977 = or i32 %.cast, 1
  %263 = load double, ptr %257, align 8, !tbaa !5, !alias.scope !44
  %broadcast.splatinsert = insertelement <2 x double> poison, double %263, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1656 = getelementptr i8, ptr %.5574, i64 8
  %264 = fneg <2 x double> %broadcast.splat
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = shl i64 %index, 3
  %offset.idx979 = shl i64 %index, 3
  %gep = getelementptr i8, ptr %invariant.gep, i64 %offset.idx979
  %wide.load = load <2 x double>, ptr %gep, align 8, !tbaa !5, !alias.scope !47, !noalias !44
  %gep1657 = getelementptr i8, ptr %invariant.gep1656, i64 %offset.idx
  %wide.load981 = load <2 x double>, ptr %gep1657, align 8, !tbaa !5, !alias.scope !49, !noalias !51
  %265 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load, <2 x double> %wide.load981)
  %266 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %264, <2 x double> %wide.load981, <2 x double> %wide.load)
  store <2 x double> %266, ptr %gep1657, align 8, !tbaa !5, !alias.scope !49, !noalias !51
  store <2 x double> %265, ptr %gep, align 8, !tbaa !5, !alias.scope !47, !noalias !44
  %index.next = add nuw i64 %index, 2
  %267 = icmp eq i64 %index.next, %n.vec
  br i1 %267, label %middle.block, label %vector.body, !llvm.loop !52

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %indvar, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader1590

.lr.ph.preheader1590:                             ; preds = %middle.block, %vector.memcheck, %.lr.ph.preheader
  %.6565.ph = phi ptr [ %.5574, %vector.memcheck ], [ %.5574, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  %.6469564.ph = phi ptr [ %0, %vector.memcheck ], [ %0, %.lr.ph.preheader ], [ %ind.end975, %middle.block ]
  %.3506563.ph = phi i32 [ 1, %vector.memcheck ], [ 1, %.lr.ph.preheader ], [ %ind.end977, %middle.block ]
  %268 = and i32 %.2517571, 1
  %lcmp.mod.not.not = icmp eq i32 %268, 0
  br i1 %lcmp.mod.not.not, label %.lr.ph.prol, label %.lr.ph.prol.loopexit

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader1590
  %269 = load double, ptr %257, align 8, !tbaa !5
  %270 = getelementptr inbounds i8, ptr %.6469564.ph, i64 8
  %271 = load double, ptr %270, align 8, !tbaa !5
  %272 = getelementptr inbounds i8, ptr %.6565.ph, i64 8
  %273 = load double, ptr %272, align 8, !tbaa !5
  %274 = tail call double @llvm.fmuladd.f64(double %269, double %271, double %273)
  %275 = fneg double %269
  %276 = tail call double @llvm.fmuladd.f64(double %275, double %273, double %271)
  store double %276, ptr %272, align 8, !tbaa !5
  store double %274, ptr %270, align 8, !tbaa !5
  %277 = add nuw nsw i32 %.3506563.ph, 1
  br label %.lr.ph.prol.loopexit

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader1590
  %.lcssa1592.unr = phi ptr [ poison, %.lr.ph.preheader1590 ], [ %270, %.lr.ph.prol ]
  %.lcssa1591.unr = phi ptr [ poison, %.lr.ph.preheader1590 ], [ %272, %.lr.ph.prol ]
  %.6565.unr = phi ptr [ %.6565.ph, %.lr.ph.preheader1590 ], [ %272, %.lr.ph.prol ]
  %.6469564.unr = phi ptr [ %.6469564.ph, %.lr.ph.preheader1590 ], [ %270, %.lr.ph.prol ]
  %.3506563.unr = phi i32 [ %.3506563.ph, %.lr.ph.preheader1590 ], [ %277, %.lr.ph.prol ]
  %278 = icmp eq i32 %.3506563.ph, %251
  br i1 %278, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %.6565 = phi ptr [ %290, %.lr.ph ], [ %.6565.unr, %.lr.ph.prol.loopexit ]
  %.6469564 = phi ptr [ %288, %.lr.ph ], [ %.6469564.unr, %.lr.ph.prol.loopexit ]
  %.3506563 = phi i32 [ %295, %.lr.ph ], [ %.3506563.unr, %.lr.ph.prol.loopexit ]
  %279 = load double, ptr %257, align 8, !tbaa !5
  %280 = getelementptr inbounds i8, ptr %.6469564, i64 8
  %281 = load double, ptr %280, align 8, !tbaa !5
  %282 = getelementptr inbounds i8, ptr %.6565, i64 8
  %283 = load double, ptr %282, align 8, !tbaa !5
  %284 = tail call double @llvm.fmuladd.f64(double %279, double %281, double %283)
  %285 = fneg double %279
  %286 = tail call double @llvm.fmuladd.f64(double %285, double %283, double %281)
  store double %286, ptr %282, align 8, !tbaa !5
  store double %284, ptr %280, align 8, !tbaa !5
  %287 = load double, ptr %257, align 8, !tbaa !5
  %288 = getelementptr inbounds i8, ptr %.6469564, i64 16
  %289 = load double, ptr %288, align 8, !tbaa !5
  %290 = getelementptr inbounds i8, ptr %.6565, i64 16
  %291 = load double, ptr %290, align 8, !tbaa !5
  %292 = tail call double @llvm.fmuladd.f64(double %287, double %289, double %291)
  %293 = fneg double %287
  %294 = tail call double @llvm.fmuladd.f64(double %293, double %291, double %289)
  store double %294, ptr %290, align 8, !tbaa !5
  store double %292, ptr %288, align 8, !tbaa !5
  %295 = add nuw nsw i32 %.3506563, 2
  %exitcond.not.1 = icmp eq i32 %295, %.2517571
  br i1 %exitcond.not.1, label %._crit_edge, label %.lr.ph, !llvm.loop !53

._crit_edge:                                      ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block, %.lr.ph576
  %.6469.lcssa = phi ptr [ %0, %.lr.ph576 ], [ %ind.end975, %middle.block ], [ %.lcssa1592.unr, %.lr.ph.prol.loopexit ], [ %288, %.lr.ph ]
  %.6.lcssa = phi ptr [ %.5574, %.lr.ph576 ], [ %ind.end, %middle.block ], [ %.lcssa1591.unr, %.lr.ph.prol.loopexit ], [ %290, %.lr.ph ]
  %296 = getelementptr inbounds i8, ptr %.6.lcssa, i64 8
  %297 = load double, ptr %296, align 8, !tbaa !5
  %298 = getelementptr inbounds i8, ptr %.6469.lcssa, i64 8
  store double %297, ptr %298, align 8, !tbaa !5
  %299 = load double, ptr %257, align 8, !tbaa !5
  %300 = fneg double %299
  %301 = fmul double %297, %300
  store double %301, ptr %296, align 8, !tbaa !5
  %302 = load double, ptr %257, align 8, !tbaa !5
  %303 = tail call double @llvm.fmuladd.f64(double %302, double %302, double 1.000000e+00)
  %304 = fmul double %.2487572, %303
  %305 = add nuw nsw i32 %.2517571, 1
  %indvars.iv.next = add nsw i64 %indvars.iv, -1
  %.5 = getelementptr inbounds double, ptr %1, i64 %indvars.iv.next
  %exitcond821.not = icmp eq i32 %305, %spec.select
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond821.not, label %._crit_edge577, label %.lr.ph576, !llvm.loop !54

._crit_edge577:                                   ; preds = %._crit_edge
  %306 = trunc nsw i64 %indvars.iv to i32
  %307 = getelementptr inbounds i8, ptr %.2529570, i64 16
  %308 = load double, ptr %307, align 8, !tbaa !5
  %309 = fneg double %308
  %310 = load double, ptr %0, align 8, !tbaa !5
  %311 = fmul double %310, %309
  store double %311, ptr %.5, align 8, !tbaa !5
  %312 = add nsw i32 %spec.select, -1
  %313 = zext i32 %312 to i64
  %min.iters.check1001 = icmp ult i32 %spec.select, 15
  br i1 %min.iters.check1001, label %.lr.ph587.preheader, label %vector.memcheck982

vector.memcheck982:                               ; preds = %._crit_edge577
  %314 = shl nsw i64 %.pn544568, 3
  %315 = mul nsw i64 %indvar, -8
  %316 = getelementptr i8, ptr %1, i64 %314
  %scevgep983 = getelementptr i8, ptr %316, i64 %315
  %317 = add nsw i32 %spec.select, -2
  %318 = zext i32 %317 to i64
  %319 = shl nuw nsw i64 %318, 3
  %320 = getelementptr i8, ptr %1, i64 %315
  %321 = getelementptr i8, ptr %320, i64 %314
  %322 = getelementptr i8, ptr %321, i64 %319
  %scevgep984 = getelementptr i8, ptr %322, i64 8
  %scevgep985 = getelementptr i8, ptr %0, i64 8
  %323 = getelementptr i8, ptr %0, i64 %319
  %scevgep986 = getelementptr i8, ptr %323, i64 16
  %324 = shl nuw nsw i64 %indvar, 3
  %325 = getelementptr i8, ptr %2, i64 %324
  %scevgep987 = getelementptr i8, ptr %325, i64 24
  %bound0988 = icmp ult ptr %scevgep983, %scevgep986
  %bound1989 = icmp ugt ptr %322, %0
  %found.conflict990 = and i1 %bound0988, %bound1989
  %bound0991 = icmp ult ptr %scevgep983, %scevgep987
  %bound1992 = icmp ult ptr %307, %scevgep984
  %found.conflict993 = and i1 %bound0991, %bound1992
  %conflict.rdx994 = or i1 %found.conflict990, %found.conflict993
  %bound0995 = icmp ult ptr %scevgep985, %scevgep987
  %bound1996 = icmp ult ptr %.2529570, %323
  %found.conflict997 = and i1 %bound0995, %bound1996
  %conflict.rdx998 = or i1 %conflict.rdx994, %found.conflict997
  br i1 %conflict.rdx998, label %.lr.ph587.preheader, label %vector.ph1002

vector.ph1002:                                    ; preds = %vector.memcheck982
  %n.vec1004 = and i64 %313, 4294967294
  %326 = shl nuw nsw i64 %n.vec1004, 3
  %ind.end1005 = getelementptr i8, ptr %.5, i64 %326
  %327 = shl nuw nsw i64 %n.vec1004, 3
  %ind.end1007 = getelementptr i8, ptr %0, i64 %327
  %ind.end1010 = or i32 %312, 1
  %invariant.gep1658 = getelementptr i8, ptr %0, i64 8
  %328 = load double, ptr %307, align 8, !tbaa !5, !alias.scope !55
  %broadcast.splatinsert1020 = insertelement <2 x double> poison, double %328, i64 0
  %broadcast.splat1021 = shufflevector <2 x double> %broadcast.splatinsert1020, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1660 = getelementptr i8, ptr %.5, i64 8
  %329 = fneg <2 x double> %broadcast.splat1021
  br label %vector.body1012

vector.body1012:                                  ; preds = %vector.body1012, %vector.ph1002
  %index1013 = phi i64 [ 0, %vector.ph1002 ], [ %index.next1022, %vector.body1012 ]
  %offset.idx1014 = shl i64 %index1013, 3
  %offset.idx1016 = shl i64 %index1013, 3
  %gep1659 = getelementptr i8, ptr %invariant.gep1658, i64 %offset.idx1016
  %wide.load1018 = load <2 x double>, ptr %gep1659, align 8, !tbaa !5, !alias.scope !58, !noalias !55
  %gep1661 = getelementptr i8, ptr %invariant.gep1660, i64 %offset.idx1014
  %wide.load1019 = load <2 x double>, ptr %gep1661, align 8, !tbaa !5, !alias.scope !60, !noalias !62
  %330 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %329, <2 x double> %wide.load1019, <2 x double> %wide.load1018)
  %331 = fneg <2 x double> %wide.load1019
  %332 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %329, <2 x double> %wide.load1018, <2 x double> %331)
  store <2 x double> %332, ptr %gep1661, align 8, !tbaa !5, !alias.scope !60, !noalias !62
  store <2 x double> %330, ptr %gep1659, align 8, !tbaa !5, !alias.scope !58, !noalias !55
  %index.next1022 = add nuw i64 %index1013, 2
  %333 = icmp eq i64 %index.next1022, %n.vec1004
  br i1 %333, label %middle.block999, label %vector.body1012, !llvm.loop !63

middle.block999:                                  ; preds = %vector.body1012
  %cmp.n1023 = icmp eq i64 %n.vec1004, %313
  br i1 %cmp.n1023, label %._crit_edge588, label %.lr.ph587.preheader

.lr.ph587.preheader:                              ; preds = %middle.block999, %vector.memcheck982, %._crit_edge577
  %.7585.ph = phi ptr [ %.5, %vector.memcheck982 ], [ %.5, %._crit_edge577 ], [ %ind.end1005, %middle.block999 ]
  %.7470584.ph = phi ptr [ %0, %vector.memcheck982 ], [ %0, %._crit_edge577 ], [ %ind.end1007, %middle.block999 ]
  %.4507583.ph = phi i32 [ 1, %vector.memcheck982 ], [ 1, %._crit_edge577 ], [ %ind.end1010, %middle.block999 ]
  %.neg = add i32 %.4507583.ph, 1
  %334 = and i32 %spec.select, 1
  %lcmp.mod1596.not.not = icmp eq i32 %334, 0
  br i1 %lcmp.mod1596.not.not, label %.lr.ph587.prol, label %.lr.ph587.prol.loopexit

.lr.ph587.prol:                                   ; preds = %.lr.ph587.preheader
  %335 = getelementptr inbounds i8, ptr %.7470584.ph, i64 8
  %336 = load double, ptr %335, align 8, !tbaa !5
  %337 = load double, ptr %307, align 8, !tbaa !5
  %338 = getelementptr inbounds i8, ptr %.7585.ph, i64 8
  %339 = load double, ptr %338, align 8, !tbaa !5
  %340 = fneg double %337
  %341 = tail call double @llvm.fmuladd.f64(double %340, double %339, double %336)
  %342 = fneg double %339
  %343 = tail call double @llvm.fmuladd.f64(double %340, double %336, double %342)
  store double %343, ptr %338, align 8, !tbaa !5
  store double %341, ptr %335, align 8, !tbaa !5
  %344 = add nuw nsw i32 %.4507583.ph, 1
  br label %.lr.ph587.prol.loopexit

.lr.ph587.prol.loopexit:                          ; preds = %.lr.ph587.prol, %.lr.ph587.preheader
  %.lcssa1589.unr = phi ptr [ poison, %.lr.ph587.preheader ], [ %335, %.lr.ph587.prol ]
  %.lcssa1588.unr = phi ptr [ poison, %.lr.ph587.preheader ], [ %338, %.lr.ph587.prol ]
  %.7585.unr = phi ptr [ %.7585.ph, %.lr.ph587.preheader ], [ %338, %.lr.ph587.prol ]
  %.7470584.unr = phi ptr [ %.7470584.ph, %.lr.ph587.preheader ], [ %335, %.lr.ph587.prol ]
  %.4507583.unr = phi i32 [ %.4507583.ph, %.lr.ph587.preheader ], [ %344, %.lr.ph587.prol ]
  %345 = icmp eq i32 %spec.select, %.neg
  br i1 %345, label %._crit_edge588, label %.lr.ph587

.lr.ph587:                                        ; preds = %.lr.ph587.prol.loopexit, %.lr.ph587
  %.7585 = phi ptr [ %358, %.lr.ph587 ], [ %.7585.unr, %.lr.ph587.prol.loopexit ]
  %.7470584 = phi ptr [ %355, %.lr.ph587 ], [ %.7470584.unr, %.lr.ph587.prol.loopexit ]
  %.4507583 = phi i32 [ %364, %.lr.ph587 ], [ %.4507583.unr, %.lr.ph587.prol.loopexit ]
  %346 = getelementptr inbounds i8, ptr %.7470584, i64 8
  %347 = load double, ptr %346, align 8, !tbaa !5
  %348 = load double, ptr %307, align 8, !tbaa !5
  %349 = getelementptr inbounds i8, ptr %.7585, i64 8
  %350 = load double, ptr %349, align 8, !tbaa !5
  %351 = fneg double %348
  %352 = tail call double @llvm.fmuladd.f64(double %351, double %350, double %347)
  %353 = fneg double %350
  %354 = tail call double @llvm.fmuladd.f64(double %351, double %347, double %353)
  store double %354, ptr %349, align 8, !tbaa !5
  store double %352, ptr %346, align 8, !tbaa !5
  %355 = getelementptr inbounds i8, ptr %.7470584, i64 16
  %356 = load double, ptr %355, align 8, !tbaa !5
  %357 = load double, ptr %307, align 8, !tbaa !5
  %358 = getelementptr inbounds i8, ptr %.7585, i64 16
  %359 = load double, ptr %358, align 8, !tbaa !5
  %360 = fneg double %357
  %361 = tail call double @llvm.fmuladd.f64(double %360, double %359, double %356)
  %362 = fneg double %359
  %363 = tail call double @llvm.fmuladd.f64(double %360, double %356, double %362)
  store double %363, ptr %358, align 8, !tbaa !5
  store double %361, ptr %355, align 8, !tbaa !5
  %364 = add nuw nsw i32 %.4507583, 2
  %exitcond822.not.1 = icmp eq i32 %364, %spec.select
  br i1 %exitcond822.not.1, label %._crit_edge588, label %.lr.ph587, !llvm.loop !64

._crit_edge588:                                   ; preds = %.lr.ph587.prol.loopexit, %.lr.ph587, %middle.block999, %._crit_edge577.thread
  %365 = phi ptr [ %246, %._crit_edge577.thread ], [ %307, %middle.block999 ], [ %307, %.lr.ph587 ], [ %307, %.lr.ph587.prol.loopexit ]
  %.2487.lcssa882 = phi double [ %235, %._crit_edge577.thread ], [ %304, %middle.block999 ], [ %304, %.lr.ph587 ], [ %304, %.lr.ph587.prol.loopexit ]
  %.2497.in.lcssa881 = phi i32 [ %3, %._crit_edge577.thread ], [ %306, %middle.block999 ], [ %306, %.lr.ph587 ], [ %306, %.lr.ph587.prol.loopexit ]
  %.2529.lcssa880 = phi ptr [ %2, %._crit_edge577.thread ], [ %257, %middle.block999 ], [ %257, %.lr.ph587 ], [ %257, %.lr.ph587.prol.loopexit ]
  %.7470.lcssa = phi ptr [ %0, %._crit_edge577.thread ], [ %ind.end1007, %middle.block999 ], [ %.lcssa1589.unr, %.lr.ph587.prol.loopexit ], [ %355, %.lr.ph587 ]
  %.7.lcssa = phi ptr [ %.5569, %._crit_edge577.thread ], [ %ind.end1005, %middle.block999 ], [ %.lcssa1588.unr, %.lr.ph587.prol.loopexit ], [ %358, %.lr.ph587 ]
  %366 = load double, ptr %365, align 8, !tbaa !5
  %367 = fneg double %366
  %368 = getelementptr inbounds i8, ptr %.7.lcssa, i64 8
  %369 = load double, ptr %368, align 8, !tbaa !5
  %370 = fmul double %369, %367
  %371 = getelementptr inbounds i8, ptr %.7470.lcssa, i64 8
  store double %370, ptr %371, align 8, !tbaa !5
  %372 = load double, ptr %368, align 8, !tbaa !5
  %373 = fneg double %372
  store double %373, ptr %368, align 8, !tbaa !5
  %374 = load double, ptr %365, align 8, !tbaa !5
  %375 = tail call double @llvm.fmuladd.f64(double %374, double %374, double 1.000000e+00)
  %376 = fmul double %375, %375
  %377 = fmul double %375, %376
  %378 = fmul double %.2487.lcssa882, %377
  %379 = add i32 %.2497.in.lcssa881, -2
  %.pn545600 = sext i32 %379 to i64
  %.8601 = getelementptr inbounds double, ptr %1, i64 %.pn545600
  %.3518602 = add nsw i32 %spec.select, 1
  %380 = icmp slt i32 %.3518602, %spec.select556
  br i1 %380, label %.lr.ph610.preheader, label %._crit_edge611

.lr.ph610.preheader:                              ; preds = %._crit_edge588
  %381 = shl nsw i64 %.pn545600, 3
  %382 = add i32 %spec.select, -1
  %scevgep1030 = getelementptr i8, ptr %0, i64 8
  %scevgep1031 = getelementptr i8, ptr %0, i64 16
  %scevgep1033 = getelementptr i8, ptr %365, i64 8
  %383 = add i32 %spec.select556, -2
  %384 = sub i32 %383, %spec.select
  %385 = zext i32 %384 to i64
  %386 = shl nuw nsw i64 %385, 3
  %387 = add nuw nsw i64 %386, 16
  %scevgep1034 = getelementptr i8, ptr %365, i64 %387
  %388 = getelementptr i8, ptr %1, i64 %381
  %389 = getelementptr i8, ptr %388, i64 8
  %390 = getelementptr i8, ptr %1, i64 %381
  %391 = getelementptr i8, ptr %390, i64 16
  %bound01042 = icmp ult ptr %scevgep1030, %scevgep1034
  %invariant.gep1662 = getelementptr i8, ptr %0, i64 8
  br label %.lr.ph610

.lr.ph610:                                        ; preds = %.lr.ph610.preheader, %._crit_edge597
  %indvar1025 = phi i64 [ 0, %.lr.ph610.preheader ], [ %indvar.next1026, %._crit_edge597 ]
  %indvars.iv824 = phi i64 [ %.pn545600, %.lr.ph610.preheader ], [ %indvars.iv.next825, %._crit_edge597 ]
  %.3518608 = phi i32 [ %.3518602, %.lr.ph610.preheader ], [ %.3518, %._crit_edge597 ]
  %.8607 = phi ptr [ %.8601, %.lr.ph610.preheader ], [ %.8, %._crit_edge597 ]
  %.3488606 = phi double [ %378, %.lr.ph610.preheader ], [ %445, %._crit_edge597 ]
  %.3518.in604 = phi i32 [ %spec.select, %.lr.ph610.preheader ], [ %.3518608, %._crit_edge597 ]
  %.3530603 = phi ptr [ %365, %.lr.ph610.preheader ], [ %399, %._crit_edge597 ]
  %392 = zext i32 %.3518.in604 to i64
  %393 = mul nsw i64 %indvar1025, -8
  %scevgep1027 = getelementptr i8, ptr %389, i64 %393
  %scevgep1028 = getelementptr i8, ptr %391, i64 %393
  %394 = trunc i64 %indvar1025 to i32
  %395 = add i32 %382, %394
  %396 = zext i32 %395 to i64
  %397 = shl nuw nsw i64 %396, 3
  %scevgep1029 = getelementptr i8, ptr %scevgep1028, i64 %397
  %scevgep1032 = getelementptr i8, ptr %scevgep1031, i64 %397
  %398 = load double, ptr %0, align 8, !tbaa !5
  store double %398, ptr %.8607, align 8, !tbaa !5
  %399 = getelementptr inbounds i8, ptr %.3530603, i64 8
  %400 = load double, ptr %399, align 8, !tbaa !5
  %401 = fmul double %400, %398
  store double %401, ptr %0, align 8, !tbaa !5
  %.not550591 = icmp slt i32 %.3518.in604, 1
  br i1 %.not550591, label %._crit_edge597, label %.lr.ph596.preheader

.lr.ph596.preheader:                              ; preds = %.lr.ph610
  %min.iters.check1048 = icmp ult i32 %.3518.in604, 4
  br i1 %min.iters.check1048, label %.lr.ph596.preheader1583, label %vector.memcheck1024

vector.memcheck1024:                              ; preds = %.lr.ph596.preheader
  %bound01035 = icmp ult ptr %scevgep1027, %scevgep1032
  %bound11036 = icmp ult ptr %scevgep1030, %scevgep1029
  %found.conflict1037 = and i1 %bound01035, %bound11036
  %bound01038 = icmp ult ptr %scevgep1027, %scevgep1034
  %bound11039 = icmp ult ptr %scevgep1033, %scevgep1029
  %found.conflict1040 = and i1 %bound01038, %bound11039
  %conflict.rdx1041 = or i1 %found.conflict1037, %found.conflict1040
  %bound11043 = icmp ult ptr %scevgep1033, %scevgep1032
  %found.conflict1044 = and i1 %bound01042, %bound11043
  %conflict.rdx1045 = or i1 %conflict.rdx1041, %found.conflict1044
  br i1 %conflict.rdx1045, label %.lr.ph596.preheader1583, label %vector.ph1049

vector.ph1049:                                    ; preds = %vector.memcheck1024
  %n.vec1051 = and i64 %392, 2147483646
  %402 = shl nuw nsw i64 %n.vec1051, 3
  %ind.end1052 = getelementptr i8, ptr %.8607, i64 %402
  %403 = shl nuw nsw i64 %n.vec1051, 3
  %ind.end1054 = getelementptr i8, ptr %0, i64 %403
  %ind.end1057 = or i32 %.3518.in604, 1
  %404 = load double, ptr %399, align 8, !tbaa !5, !alias.scope !65
  %broadcast.splatinsert1067 = insertelement <2 x double> poison, double %404, i64 0
  %broadcast.splat1068 = shufflevector <2 x double> %broadcast.splatinsert1067, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1664 = getelementptr i8, ptr %.8607, i64 8
  %405 = fneg <2 x double> %broadcast.splat1068
  br label %vector.body1059

vector.body1059:                                  ; preds = %vector.body1059, %vector.ph1049
  %index1060 = phi i64 [ 0, %vector.ph1049 ], [ %index.next1069, %vector.body1059 ]
  %offset.idx1061 = shl i64 %index1060, 3
  %offset.idx1063 = shl i64 %index1060, 3
  %gep1663 = getelementptr i8, ptr %invariant.gep1662, i64 %offset.idx1063
  %wide.load1065 = load <2 x double>, ptr %gep1663, align 8, !tbaa !5, !alias.scope !68, !noalias !65
  %gep1665 = getelementptr i8, ptr %invariant.gep1664, i64 %offset.idx1061
  %wide.load1066 = load <2 x double>, ptr %gep1665, align 8, !tbaa !5, !alias.scope !70, !noalias !72
  %406 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1068, <2 x double> %wide.load1065, <2 x double> %wide.load1066)
  %407 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %405, <2 x double> %wide.load1066, <2 x double> %wide.load1065)
  store <2 x double> %407, ptr %gep1665, align 8, !tbaa !5, !alias.scope !70, !noalias !72
  store <2 x double> %406, ptr %gep1663, align 8, !tbaa !5, !alias.scope !68, !noalias !65
  %index.next1069 = add nuw i64 %index1060, 2
  %408 = icmp eq i64 %index.next1069, %n.vec1051
  br i1 %408, label %middle.block1046, label %vector.body1059, !llvm.loop !73

middle.block1046:                                 ; preds = %vector.body1059
  %cmp.n1070 = icmp eq i64 %n.vec1051, %392
  br i1 %cmp.n1070, label %._crit_edge597, label %.lr.ph596.preheader1583

.lr.ph596.preheader1583:                          ; preds = %middle.block1046, %vector.memcheck1024, %.lr.ph596.preheader
  %.9594.ph = phi ptr [ %.8607, %vector.memcheck1024 ], [ %.8607, %.lr.ph596.preheader ], [ %ind.end1052, %middle.block1046 ]
  %.9472593.ph = phi ptr [ %0, %vector.memcheck1024 ], [ %0, %.lr.ph596.preheader ], [ %ind.end1054, %middle.block1046 ]
  %.5508592.ph = phi i32 [ 1, %vector.memcheck1024 ], [ 1, %.lr.ph596.preheader ], [ %ind.end1057, %middle.block1046 ]
  %409 = and i32 %.3518608, 1
  %lcmp.mod1598.not.not = icmp eq i32 %409, 0
  br i1 %lcmp.mod1598.not.not, label %.lr.ph596.prol, label %.lr.ph596.prol.loopexit

.lr.ph596.prol:                                   ; preds = %.lr.ph596.preheader1583
  %410 = load double, ptr %399, align 8, !tbaa !5
  %411 = getelementptr inbounds i8, ptr %.9472593.ph, i64 8
  %412 = load double, ptr %411, align 8, !tbaa !5
  %413 = getelementptr inbounds i8, ptr %.9594.ph, i64 8
  %414 = load double, ptr %413, align 8, !tbaa !5
  %415 = tail call double @llvm.fmuladd.f64(double %410, double %412, double %414)
  %416 = fneg double %410
  %417 = tail call double @llvm.fmuladd.f64(double %416, double %414, double %412)
  store double %417, ptr %413, align 8, !tbaa !5
  store double %415, ptr %411, align 8, !tbaa !5
  %418 = add nuw i32 %.5508592.ph, 1
  br label %.lr.ph596.prol.loopexit

.lr.ph596.prol.loopexit:                          ; preds = %.lr.ph596.prol, %.lr.ph596.preheader1583
  %.lcssa1585.unr = phi ptr [ poison, %.lr.ph596.preheader1583 ], [ %411, %.lr.ph596.prol ]
  %.lcssa1584.unr = phi ptr [ poison, %.lr.ph596.preheader1583 ], [ %413, %.lr.ph596.prol ]
  %.9594.unr = phi ptr [ %.9594.ph, %.lr.ph596.preheader1583 ], [ %413, %.lr.ph596.prol ]
  %.9472593.unr = phi ptr [ %.9472593.ph, %.lr.ph596.preheader1583 ], [ %411, %.lr.ph596.prol ]
  %.5508592.unr = phi i32 [ %.5508592.ph, %.lr.ph596.preheader1583 ], [ %418, %.lr.ph596.prol ]
  %419 = icmp eq i32 %.3518.in604, %.5508592.ph
  br i1 %419, label %._crit_edge597, label %.lr.ph596

.lr.ph596:                                        ; preds = %.lr.ph596.prol.loopexit, %.lr.ph596
  %.9594 = phi ptr [ %431, %.lr.ph596 ], [ %.9594.unr, %.lr.ph596.prol.loopexit ]
  %.9472593 = phi ptr [ %429, %.lr.ph596 ], [ %.9472593.unr, %.lr.ph596.prol.loopexit ]
  %.5508592 = phi i32 [ %436, %.lr.ph596 ], [ %.5508592.unr, %.lr.ph596.prol.loopexit ]
  %420 = load double, ptr %399, align 8, !tbaa !5
  %421 = getelementptr inbounds i8, ptr %.9472593, i64 8
  %422 = load double, ptr %421, align 8, !tbaa !5
  %423 = getelementptr inbounds i8, ptr %.9594, i64 8
  %424 = load double, ptr %423, align 8, !tbaa !5
  %425 = tail call double @llvm.fmuladd.f64(double %420, double %422, double %424)
  %426 = fneg double %420
  %427 = tail call double @llvm.fmuladd.f64(double %426, double %424, double %422)
  store double %427, ptr %423, align 8, !tbaa !5
  store double %425, ptr %421, align 8, !tbaa !5
  %428 = load double, ptr %399, align 8, !tbaa !5
  %429 = getelementptr inbounds i8, ptr %.9472593, i64 16
  %430 = load double, ptr %429, align 8, !tbaa !5
  %431 = getelementptr inbounds i8, ptr %.9594, i64 16
  %432 = load double, ptr %431, align 8, !tbaa !5
  %433 = tail call double @llvm.fmuladd.f64(double %428, double %430, double %432)
  %434 = fneg double %428
  %435 = tail call double @llvm.fmuladd.f64(double %434, double %432, double %430)
  store double %435, ptr %431, align 8, !tbaa !5
  store double %433, ptr %429, align 8, !tbaa !5
  %436 = add nuw i32 %.5508592, 2
  %exitcond823.not.1 = icmp eq i32 %436, %.3518608
  br i1 %exitcond823.not.1, label %._crit_edge597, label %.lr.ph596, !llvm.loop !74

._crit_edge597:                                   ; preds = %.lr.ph596.prol.loopexit, %.lr.ph596, %middle.block1046, %.lr.ph610
  %.9472.lcssa = phi ptr [ %0, %.lr.ph610 ], [ %ind.end1054, %middle.block1046 ], [ %.lcssa1585.unr, %.lr.ph596.prol.loopexit ], [ %429, %.lr.ph596 ]
  %.9.lcssa = phi ptr [ %.8607, %.lr.ph610 ], [ %ind.end1052, %middle.block1046 ], [ %.lcssa1584.unr, %.lr.ph596.prol.loopexit ], [ %431, %.lr.ph596 ]
  %437 = getelementptr inbounds i8, ptr %.9.lcssa, i64 8
  %438 = load double, ptr %437, align 8, !tbaa !5
  %439 = getelementptr inbounds i8, ptr %.9472.lcssa, i64 8
  store double %438, ptr %439, align 8, !tbaa !5
  %440 = load double, ptr %399, align 8, !tbaa !5
  %441 = fneg double %440
  %442 = fmul double %438, %441
  store double %442, ptr %437, align 8, !tbaa !5
  %443 = load double, ptr %399, align 8, !tbaa !5
  %444 = tail call double @llvm.fmuladd.f64(double %443, double %443, double 1.000000e+00)
  %445 = fmul double %.3488606, %444
  %indvars.iv.next825 = add nsw i64 %indvars.iv824, -1
  %.8 = getelementptr inbounds double, ptr %1, i64 %indvars.iv.next825
  %.3518 = add nsw i32 %.3518608, 1
  %exitcond827.not = icmp eq i32 %.3518, %spec.select556
  %indvar.next1026 = add i64 %indvar1025, 1
  br i1 %exitcond827.not, label %._crit_edge611.loopexit, label %.lr.ph610, !llvm.loop !75

._crit_edge611.loopexit:                          ; preds = %._crit_edge597
  %446 = add nsw i32 %spec.select556, -1
  %447 = trunc nsw i64 %indvars.iv.next825 to i32
  br label %._crit_edge611

._crit_edge611:                                   ; preds = %._crit_edge611.loopexit, %._crit_edge588
  %448 = phi ptr [ %.2529.lcssa880, %._crit_edge588 ], [ %.3530603, %._crit_edge611.loopexit ]
  %.3518.in.lcssa = phi i32 [ %spec.select, %._crit_edge588 ], [ %446, %._crit_edge611.loopexit ]
  %.3498.lcssa = phi i32 [ %379, %._crit_edge588 ], [ %447, %._crit_edge611.loopexit ]
  %.3488.lcssa = phi double [ %378, %._crit_edge588 ], [ %445, %._crit_edge611.loopexit ]
  %.8.lcssa = phi ptr [ %.8601, %._crit_edge588 ], [ %.8, %._crit_edge611.loopexit ]
  %449 = getelementptr inbounds i8, ptr %448, i64 16
  %450 = load double, ptr %449, align 8, !tbaa !5
  %451 = fneg double %450
  %452 = load double, ptr %0, align 8, !tbaa !5
  %453 = fmul double %452, %451
  store double %453, ptr %.8.lcssa, align 8, !tbaa !5
  %.not546617 = icmp slt i32 %.3518.in.lcssa, 1
  br i1 %.not546617, label %._crit_edge623, label %.lr.ph622.preheader

.lr.ph622.preheader:                              ; preds = %._crit_edge611
  %454 = zext nneg i32 %.3518.in.lcssa to i64
  %min.iters.check1091 = icmp ult i32 %.3518.in.lcssa, 10
  br i1 %min.iters.check1091, label %.lr.ph622.preheader1580, label %vector.memcheck1071

vector.memcheck1071:                              ; preds = %.lr.ph622.preheader
  %scevgep1072 = getelementptr i8, ptr %.8.lcssa, i64 8
  %smax = tail call i32 @llvm.smax.i32(i32 %5, i32 %4)
  %smax1073 = tail call i32 @llvm.smax.i32(i32 %smax, i32 %.3518602)
  %455 = add i32 %smax1073, -2
  %456 = zext i32 %455 to i64
  %457 = shl nuw nsw i64 %456, 3
  %458 = add nuw nsw i64 %457, 16
  %scevgep1074 = getelementptr i8, ptr %.8.lcssa, i64 %458
  %scevgep1075 = getelementptr i8, ptr %0, i64 8
  %scevgep1076 = getelementptr i8, ptr %0, i64 %458
  %scevgep1077 = getelementptr i8, ptr %448, i64 24
  %bound01078 = icmp ult ptr %scevgep1072, %scevgep1076
  %bound11079 = icmp ult ptr %scevgep1075, %scevgep1074
  %found.conflict1080 = and i1 %bound01078, %bound11079
  %bound01081 = icmp ult ptr %scevgep1072, %scevgep1077
  %bound11082 = icmp ult ptr %449, %scevgep1074
  %found.conflict1083 = and i1 %bound01081, %bound11082
  %conflict.rdx1084 = or i1 %found.conflict1080, %found.conflict1083
  %bound01085 = icmp ult ptr %scevgep1075, %scevgep1077
  %bound11086 = icmp ult ptr %449, %scevgep1076
  %found.conflict1087 = and i1 %bound01085, %bound11086
  %conflict.rdx1088 = or i1 %conflict.rdx1084, %found.conflict1087
  br i1 %conflict.rdx1088, label %.lr.ph622.preheader1580, label %vector.ph1092

vector.ph1092:                                    ; preds = %vector.memcheck1071
  %n.vec1094 = and i64 %454, 2147483646
  %459 = shl nuw nsw i64 %n.vec1094, 3
  %ind.end1095 = getelementptr i8, ptr %.8.lcssa, i64 %459
  %460 = shl nuw nsw i64 %n.vec1094, 3
  %ind.end1097 = getelementptr i8, ptr %0, i64 %460
  %ind.end1100 = or i32 %.3518.in.lcssa, 1
  %invariant.gep1666 = getelementptr i8, ptr %0, i64 8
  %461 = load double, ptr %449, align 8, !tbaa !5, !alias.scope !76
  %broadcast.splatinsert1110 = insertelement <2 x double> poison, double %461, i64 0
  %broadcast.splat1111 = shufflevector <2 x double> %broadcast.splatinsert1110, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1668 = getelementptr i8, ptr %.8.lcssa, i64 8
  %462 = fneg <2 x double> %broadcast.splat1111
  br label %vector.body1102

vector.body1102:                                  ; preds = %vector.body1102, %vector.ph1092
  %index1103 = phi i64 [ 0, %vector.ph1092 ], [ %index.next1112, %vector.body1102 ]
  %offset.idx1104 = shl i64 %index1103, 3
  %offset.idx1106 = shl i64 %index1103, 3
  %gep1667 = getelementptr i8, ptr %invariant.gep1666, i64 %offset.idx1106
  %wide.load1108 = load <2 x double>, ptr %gep1667, align 8, !tbaa !5, !alias.scope !79, !noalias !76
  %gep1669 = getelementptr i8, ptr %invariant.gep1668, i64 %offset.idx1104
  %wide.load1109 = load <2 x double>, ptr %gep1669, align 8, !tbaa !5, !alias.scope !81, !noalias !83
  %463 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %462, <2 x double> %wide.load1109, <2 x double> %wide.load1108)
  %464 = fneg <2 x double> %wide.load1109
  %465 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %462, <2 x double> %wide.load1108, <2 x double> %464)
  store <2 x double> %465, ptr %gep1669, align 8, !tbaa !5, !alias.scope !81, !noalias !83
  store <2 x double> %463, ptr %gep1667, align 8, !tbaa !5, !alias.scope !79, !noalias !76
  %index.next1112 = add nuw i64 %index1103, 2
  %466 = icmp eq i64 %index.next1112, %n.vec1094
  br i1 %466, label %middle.block1089, label %vector.body1102, !llvm.loop !84

middle.block1089:                                 ; preds = %vector.body1102
  %cmp.n1113 = icmp eq i64 %n.vec1094, %454
  br i1 %cmp.n1113, label %._crit_edge623, label %.lr.ph622.preheader1580

.lr.ph622.preheader1580:                          ; preds = %middle.block1089, %vector.memcheck1071, %.lr.ph622.preheader
  %.10620.ph = phi ptr [ %.8.lcssa, %vector.memcheck1071 ], [ %.8.lcssa, %.lr.ph622.preheader ], [ %ind.end1095, %middle.block1089 ]
  %.10473619.ph = phi ptr [ %0, %vector.memcheck1071 ], [ %0, %.lr.ph622.preheader ], [ %ind.end1097, %middle.block1089 ]
  %.6509618.ph = phi i32 [ 1, %vector.memcheck1071 ], [ 1, %.lr.ph622.preheader ], [ %ind.end1100, %middle.block1089 ]
  br label %.lr.ph622

.lr.ph622:                                        ; preds = %.lr.ph622.preheader1580, %.lr.ph622
  %.10620 = phi ptr [ %470, %.lr.ph622 ], [ %.10620.ph, %.lr.ph622.preheader1580 ]
  %.10473619 = phi ptr [ %467, %.lr.ph622 ], [ %.10473619.ph, %.lr.ph622.preheader1580 ]
  %.6509618 = phi i32 [ %476, %.lr.ph622 ], [ %.6509618.ph, %.lr.ph622.preheader1580 ]
  %467 = getelementptr inbounds i8, ptr %.10473619, i64 8
  %468 = load double, ptr %467, align 8, !tbaa !5
  %469 = load double, ptr %449, align 8, !tbaa !5
  %470 = getelementptr inbounds i8, ptr %.10620, i64 8
  %471 = load double, ptr %470, align 8, !tbaa !5
  %472 = fneg double %469
  %473 = tail call double @llvm.fmuladd.f64(double %472, double %471, double %468)
  %474 = fneg double %471
  %475 = tail call double @llvm.fmuladd.f64(double %472, double %468, double %474)
  store double %475, ptr %470, align 8, !tbaa !5
  store double %473, ptr %467, align 8, !tbaa !5
  %476 = add nuw nsw i32 %.6509618, 1
  %.not546.not = icmp slt i32 %.6509618, %.3518.in.lcssa
  br i1 %.not546.not, label %.lr.ph622, label %._crit_edge623, !llvm.loop !85

._crit_edge623:                                   ; preds = %.lr.ph622, %middle.block1089, %._crit_edge611
  %.10473.lcssa = phi ptr [ %0, %._crit_edge611 ], [ %ind.end1097, %middle.block1089 ], [ %467, %.lr.ph622 ]
  %.10.lcssa = phi ptr [ %.8.lcssa, %._crit_edge611 ], [ %ind.end1095, %middle.block1089 ], [ %470, %.lr.ph622 ]
  %477 = load double, ptr %449, align 8, !tbaa !5
  %478 = fneg double %477
  %479 = getelementptr inbounds i8, ptr %.10.lcssa, i64 8
  %480 = load double, ptr %479, align 8, !tbaa !5
  %481 = fmul double %480, %478
  %482 = getelementptr inbounds i8, ptr %.10473.lcssa, i64 8
  store double %481, ptr %482, align 8, !tbaa !5
  %483 = load double, ptr %479, align 8, !tbaa !5
  %484 = fneg double %483
  store double %484, ptr %479, align 8, !tbaa !5
  %485 = load double, ptr %449, align 8, !tbaa !5
  %486 = tail call double @llvm.fmuladd.f64(double %485, double %485, double 1.000000e+00)
  %487 = fmul double %486, %486
  %488 = fmul double %486, %487
  %489 = fmul double %.3488.lcssa, %488
  %.not548.not637 = icmp slt i32 %spec.select556, %3
  br i1 %.not548.not637, label %.lr.ph644.preheader, label %.loopexit561

.lr.ph644.preheader:                              ; preds = %._crit_edge623
  %490 = sext i32 %.3498.lcssa to i64
  %491 = shl nsw i64 %490, 3
  %492 = add i32 %spec.select556, -1
  %scevgep1120 = getelementptr i8, ptr %0, i64 8
  %scevgep1121 = getelementptr i8, ptr %0, i64 16
  %scevgep1123 = getelementptr i8, ptr %448, i64 24
  %493 = xor i32 %spec.select556, -1
  %494 = add i32 %493, %3
  %495 = zext i32 %494 to i64
  %496 = shl nuw nsw i64 %495, 3
  %497 = add nuw nsw i64 %496, 32
  %scevgep1124 = getelementptr i8, ptr %448, i64 %497
  %498 = getelementptr i8, ptr %1, i64 %491
  %499 = getelementptr i8, ptr %1, i64 %491
  %500 = getelementptr i8, ptr %499, i64 8
  %bound01132 = icmp ult ptr %scevgep1120, %scevgep1124
  %invariant.gep1670 = getelementptr i8, ptr %0, i64 8
  br label %.lr.ph644

.lr.ph644:                                        ; preds = %.lr.ph644.preheader, %._crit_edge632
  %indvar1115 = phi i64 [ 0, %.lr.ph644.preheader ], [ %indvar.next1116, %._crit_edge632 ]
  %indvars.iv831 = phi i64 [ %490, %.lr.ph644.preheader ], [ %indvars.iv.next832, %._crit_edge632 ]
  %indvars.iv828.in = phi i32 [ %spec.select556, %.lr.ph644.preheader ], [ %indvars.iv828, %._crit_edge632 ]
  %.4489640 = phi double [ %489, %.lr.ph644.preheader ], [ %556, %._crit_edge632 ]
  %.4519.in639 = phi i32 [ %spec.select556, %.lr.ph644.preheader ], [ %.4519642, %._crit_edge632 ]
  %.4531638 = phi ptr [ %449, %.lr.ph644.preheader ], [ %509, %._crit_edge632 ]
  %501 = trunc i64 %indvar1115 to i32
  %502 = zext i32 %indvars.iv828.in to i64
  %503 = mul nsw i64 %indvar1115, -8
  %scevgep1117 = getelementptr i8, ptr %498, i64 %503
  %scevgep1118 = getelementptr i8, ptr %500, i64 %503
  %504 = trunc i64 %indvar1115 to i32
  %505 = add i32 %492, %504
  %506 = zext i32 %505 to i64
  %507 = shl nuw nsw i64 %506, 3
  %scevgep1119 = getelementptr i8, ptr %scevgep1118, i64 %507
  %scevgep1122 = getelementptr i8, ptr %scevgep1121, i64 %507
  %indvars.iv828 = add i32 %indvars.iv828.in, 1
  %indvars.iv.next832 = add nsw i64 %indvars.iv831, -1
  %.4519642 = add nsw i32 %.4519.in639, 1
  %.11 = getelementptr inbounds double, ptr %1, i64 %indvars.iv.next832
  %508 = load double, ptr %0, align 8, !tbaa !5
  store double %508, ptr %.11, align 8, !tbaa !5
  %509 = getelementptr inbounds i8, ptr %.4531638, i64 8
  %510 = load double, ptr %509, align 8, !tbaa !5
  %511 = fmul double %510, %508
  store double %511, ptr %0, align 8, !tbaa !5
  %.not549626 = icmp slt i32 %.4519.in639, 1
  br i1 %.not549626, label %._crit_edge632, label %.lr.ph631.preheader

.lr.ph631.preheader:                              ; preds = %.lr.ph644
  %min.iters.check1138 = icmp ult i32 %indvars.iv828.in, 4
  br i1 %min.iters.check1138, label %.lr.ph631.preheader1575, label %vector.memcheck1114

vector.memcheck1114:                              ; preds = %.lr.ph631.preheader
  %bound01125 = icmp ult ptr %scevgep1117, %scevgep1122
  %bound11126 = icmp ult ptr %scevgep1120, %scevgep1119
  %found.conflict1127 = and i1 %bound01125, %bound11126
  %bound01128 = icmp ult ptr %scevgep1117, %scevgep1124
  %bound11129 = icmp ult ptr %scevgep1123, %scevgep1119
  %found.conflict1130 = and i1 %bound01128, %bound11129
  %conflict.rdx1131 = or i1 %found.conflict1127, %found.conflict1130
  %bound11133 = icmp ult ptr %scevgep1123, %scevgep1122
  %found.conflict1134 = and i1 %bound01132, %bound11133
  %conflict.rdx1135 = or i1 %conflict.rdx1131, %found.conflict1134
  br i1 %conflict.rdx1135, label %.lr.ph631.preheader1575, label %vector.ph1139

vector.ph1139:                                    ; preds = %vector.memcheck1114
  %n.vec1141 = and i64 %502, 4294967294
  %512 = shl nuw nsw i64 %n.vec1141, 3
  %ind.end1142 = getelementptr i8, ptr %.11, i64 %512
  %513 = shl nuw nsw i64 %n.vec1141, 3
  %ind.end1144 = getelementptr i8, ptr %0, i64 %513
  %ind.end1147 = or i32 %indvars.iv828.in, 1
  %514 = load double, ptr %509, align 8, !tbaa !5, !alias.scope !86
  %broadcast.splatinsert1157 = insertelement <2 x double> poison, double %514, i64 0
  %broadcast.splat1158 = shufflevector <2 x double> %broadcast.splatinsert1157, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1672 = getelementptr i8, ptr %.11, i64 8
  %515 = fneg <2 x double> %broadcast.splat1158
  br label %vector.body1149

vector.body1149:                                  ; preds = %vector.body1149, %vector.ph1139
  %index1150 = phi i64 [ 0, %vector.ph1139 ], [ %index.next1159, %vector.body1149 ]
  %offset.idx1151 = shl i64 %index1150, 3
  %offset.idx1153 = shl i64 %index1150, 3
  %gep1671 = getelementptr i8, ptr %invariant.gep1670, i64 %offset.idx1153
  %wide.load1155 = load <2 x double>, ptr %gep1671, align 8, !tbaa !5, !alias.scope !89, !noalias !86
  %gep1673 = getelementptr i8, ptr %invariant.gep1672, i64 %offset.idx1151
  %wide.load1156 = load <2 x double>, ptr %gep1673, align 8, !tbaa !5, !alias.scope !91, !noalias !93
  %516 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1158, <2 x double> %wide.load1155, <2 x double> %wide.load1156)
  %517 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %515, <2 x double> %wide.load1156, <2 x double> %wide.load1155)
  store <2 x double> %517, ptr %gep1673, align 8, !tbaa !5, !alias.scope !91, !noalias !93
  store <2 x double> %516, ptr %gep1671, align 8, !tbaa !5, !alias.scope !89, !noalias !86
  %index.next1159 = add nuw i64 %index1150, 2
  %518 = icmp eq i64 %index.next1159, %n.vec1141
  br i1 %518, label %middle.block1136, label %vector.body1149, !llvm.loop !94

middle.block1136:                                 ; preds = %vector.body1149
  %cmp.n1160 = icmp eq i64 %n.vec1141, %502
  br i1 %cmp.n1160, label %._crit_edge632, label %.lr.ph631.preheader1575

.lr.ph631.preheader1575:                          ; preds = %middle.block1136, %vector.memcheck1114, %.lr.ph631.preheader
  %.12629.ph = phi ptr [ %.11, %vector.memcheck1114 ], [ %.11, %.lr.ph631.preheader ], [ %ind.end1142, %middle.block1136 ]
  %.12475628.ph = phi ptr [ %0, %vector.memcheck1114 ], [ %0, %.lr.ph631.preheader ], [ %ind.end1144, %middle.block1136 ]
  %.7510627.ph = phi i32 [ 1, %vector.memcheck1114 ], [ 1, %.lr.ph631.preheader ], [ %ind.end1147, %middle.block1136 ]
  %519 = add i32 %spec.select556, %501
  %xtraiter1599 = and i32 %519, 1
  %lcmp.mod1600.not = icmp eq i32 %xtraiter1599, 0
  br i1 %lcmp.mod1600.not, label %.lr.ph631.prol.loopexit, label %.lr.ph631.prol

.lr.ph631.prol:                                   ; preds = %.lr.ph631.preheader1575
  %520 = load double, ptr %509, align 8, !tbaa !5
  %521 = getelementptr inbounds i8, ptr %.12475628.ph, i64 8
  %522 = load double, ptr %521, align 8, !tbaa !5
  %523 = getelementptr inbounds i8, ptr %.12629.ph, i64 8
  %524 = load double, ptr %523, align 8, !tbaa !5
  %525 = tail call double @llvm.fmuladd.f64(double %520, double %522, double %524)
  %526 = fneg double %520
  %527 = tail call double @llvm.fmuladd.f64(double %526, double %524, double %522)
  store double %527, ptr %523, align 8, !tbaa !5
  store double %525, ptr %521, align 8, !tbaa !5
  %528 = add nuw i32 %.7510627.ph, 1
  br label %.lr.ph631.prol.loopexit

.lr.ph631.prol.loopexit:                          ; preds = %.lr.ph631.prol, %.lr.ph631.preheader1575
  %.lcssa1578.unr = phi ptr [ poison, %.lr.ph631.preheader1575 ], [ %521, %.lr.ph631.prol ]
  %.lcssa1577.unr = phi ptr [ poison, %.lr.ph631.preheader1575 ], [ %523, %.lr.ph631.prol ]
  %.12629.unr = phi ptr [ %.12629.ph, %.lr.ph631.preheader1575 ], [ %523, %.lr.ph631.prol ]
  %.12475628.unr = phi ptr [ %.12475628.ph, %.lr.ph631.preheader1575 ], [ %521, %.lr.ph631.prol ]
  %.7510627.unr = phi i32 [ %.7510627.ph, %.lr.ph631.preheader1575 ], [ %528, %.lr.ph631.prol ]
  %529 = icmp eq i32 %indvars.iv828.in, %.7510627.ph
  br i1 %529, label %._crit_edge632, label %.lr.ph631

.lr.ph631:                                        ; preds = %.lr.ph631.prol.loopexit, %.lr.ph631
  %.12629 = phi ptr [ %542, %.lr.ph631 ], [ %.12629.unr, %.lr.ph631.prol.loopexit ]
  %.12475628 = phi ptr [ %540, %.lr.ph631 ], [ %.12475628.unr, %.lr.ph631.prol.loopexit ]
  %.7510627 = phi i32 [ %547, %.lr.ph631 ], [ %.7510627.unr, %.lr.ph631.prol.loopexit ]
  %530 = load double, ptr %509, align 8, !tbaa !5
  %531 = getelementptr inbounds i8, ptr %.12475628, i64 8
  %532 = load double, ptr %531, align 8, !tbaa !5
  %533 = getelementptr inbounds i8, ptr %.12629, i64 8
  %534 = load double, ptr %533, align 8, !tbaa !5
  %535 = tail call double @llvm.fmuladd.f64(double %530, double %532, double %534)
  %536 = fneg double %530
  %537 = tail call double @llvm.fmuladd.f64(double %536, double %534, double %532)
  store double %537, ptr %533, align 8, !tbaa !5
  store double %535, ptr %531, align 8, !tbaa !5
  %538 = add nuw i32 %.7510627, 1
  %539 = load double, ptr %509, align 8, !tbaa !5
  %540 = getelementptr inbounds i8, ptr %.12475628, i64 16
  %541 = load double, ptr %540, align 8, !tbaa !5
  %542 = getelementptr inbounds i8, ptr %.12629, i64 16
  %543 = load double, ptr %542, align 8, !tbaa !5
  %544 = tail call double @llvm.fmuladd.f64(double %539, double %541, double %543)
  %545 = fneg double %539
  %546 = tail call double @llvm.fmuladd.f64(double %545, double %543, double %541)
  store double %546, ptr %542, align 8, !tbaa !5
  store double %544, ptr %540, align 8, !tbaa !5
  %547 = add nuw i32 %.7510627, 2
  %exitcond830.not.1 = icmp eq i32 %538, %indvars.iv828.in
  br i1 %exitcond830.not.1, label %._crit_edge632, label %.lr.ph631, !llvm.loop !95

._crit_edge632:                                   ; preds = %.lr.ph631.prol.loopexit, %.lr.ph631, %middle.block1136, %.lr.ph644
  %.12475.lcssa = phi ptr [ %0, %.lr.ph644 ], [ %ind.end1144, %middle.block1136 ], [ %.lcssa1578.unr, %.lr.ph631.prol.loopexit ], [ %540, %.lr.ph631 ]
  %.12.lcssa = phi ptr [ %.11, %.lr.ph644 ], [ %ind.end1142, %middle.block1136 ], [ %.lcssa1577.unr, %.lr.ph631.prol.loopexit ], [ %542, %.lr.ph631 ]
  %548 = getelementptr inbounds i8, ptr %.12.lcssa, i64 8
  %549 = load double, ptr %548, align 8, !tbaa !5
  %550 = getelementptr inbounds i8, ptr %.12475.lcssa, i64 8
  store double %549, ptr %550, align 8, !tbaa !5
  %551 = load double, ptr %509, align 8, !tbaa !5
  %552 = fneg double %551
  %553 = fmul double %549, %552
  store double %553, ptr %548, align 8, !tbaa !5
  %554 = load double, ptr %509, align 8, !tbaa !5
  %555 = tail call double @llvm.fmuladd.f64(double %554, double %554, double 1.000000e+00)
  %556 = fmul double %.4489640, %555
  %exitcond834.not = icmp eq i32 %.4519642, %3
  %indvar.next1116 = add i64 %indvar1115, 1
  br i1 %exitcond834.not, label %.loopexit561, label %.lr.ph644, !llvm.loop !96

.loopexit561:                                     ; preds = %._crit_edge632, %._crit_edge684, %._crit_edge623, %._crit_edge675
  %.5490 = phi double [ %160, %._crit_edge675 ], [ %489, %._crit_edge623 ], [ %229, %._crit_edge684 ], [ %556, %._crit_edge632 ]
  %557 = tail call double @sqrt(double noundef %.5490) #4
  %558 = fdiv double 1.000000e+00, %557
  %.not554697 = icmp slt i32 %3, 0
  br i1 %.not554697, label %.loopexit, label %.lr.ph702.preheader

.lr.ph702.preheader:                              ; preds = %.loopexit561
  %559 = add nuw i32 %3, 1
  %560 = zext i32 %559 to i64
  %min.iters.check1305 = icmp ult i32 %3, 5
  br i1 %min.iters.check1305, label %.lr.ph702.preheader1563, label %vector.memcheck1297

vector.memcheck1297:                              ; preds = %.lr.ph702.preheader
  %561 = zext nneg i32 %3 to i64
  %562 = shl nuw nsw i64 %561, 3
  %563 = add nuw nsw i64 %562, 8
  %scevgep1298 = getelementptr i8, ptr %0, i64 %563
  %scevgep1299 = getelementptr i8, ptr %1, i64 %563
  %bound01300 = icmp ugt ptr %scevgep1299, %0
  %bound11301 = icmp ugt ptr %scevgep1298, %1
  %found.conflict1302 = and i1 %bound01300, %bound11301
  br i1 %found.conflict1302, label %.lr.ph702.preheader1563, label %vector.ph1306

vector.ph1306:                                    ; preds = %vector.memcheck1297
  %n.vec1308 = and i64 %560, 4294967292
  %564 = shl nuw nsw i64 %n.vec1308, 3
  %ind.end1309 = getelementptr i8, ptr %1, i64 %564
  %565 = shl nuw nsw i64 %n.vec1308, 3
  %ind.end1311 = getelementptr i8, ptr %0, i64 %565
  %ind.end1314 = trunc nuw i64 %n.vec1308 to i32
  %broadcast.splatinsert1326 = insertelement <2 x double> poison, double %558, i64 0
  %broadcast.splat1327 = shufflevector <2 x double> %broadcast.splatinsert1326, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1316

vector.body1316:                                  ; preds = %vector.body1316, %vector.ph1306
  %index1317 = phi i64 [ 0, %vector.ph1306 ], [ %index.next1330, %vector.body1316 ]
  %offset.idx1318 = shl i64 %index1317, 3
  %next.gep1319 = getelementptr i8, ptr %1, i64 %offset.idx1318
  %offset.idx1321 = shl i64 %index1317, 3
  %next.gep1322 = getelementptr i8, ptr %0, i64 %offset.idx1321
  %566 = getelementptr i8, ptr %next.gep1322, i64 16
  %wide.load1324 = load <2 x double>, ptr %next.gep1322, align 8, !tbaa !5, !alias.scope !97, !noalias !100
  %wide.load1325 = load <2 x double>, ptr %566, align 8, !tbaa !5, !alias.scope !97, !noalias !100
  %567 = fmul <2 x double> %broadcast.splat1327, %wide.load1324
  %568 = fmul <2 x double> %broadcast.splat1327, %wide.load1325
  store <2 x double> %567, ptr %next.gep1322, align 8, !tbaa !5, !alias.scope !97, !noalias !100
  store <2 x double> %568, ptr %566, align 8, !tbaa !5, !alias.scope !97, !noalias !100
  %569 = getelementptr i8, ptr %next.gep1319, i64 16
  %wide.load1328 = load <2 x double>, ptr %next.gep1319, align 8, !tbaa !5, !alias.scope !100
  %wide.load1329 = load <2 x double>, ptr %569, align 8, !tbaa !5, !alias.scope !100
  %570 = fmul <2 x double> %broadcast.splat1327, %wide.load1328
  %571 = fmul <2 x double> %broadcast.splat1327, %wide.load1329
  store <2 x double> %570, ptr %next.gep1319, align 8, !tbaa !5, !alias.scope !100
  store <2 x double> %571, ptr %569, align 8, !tbaa !5, !alias.scope !100
  %index.next1330 = add nuw i64 %index1317, 4
  %572 = icmp eq i64 %index.next1330, %n.vec1308
  br i1 %572, label %middle.block1303, label %vector.body1316, !llvm.loop !102

middle.block1303:                                 ; preds = %vector.body1316
  %cmp.n1331 = icmp eq i64 %n.vec1308, %560
  br i1 %cmp.n1331, label %.loopexit, label %.lr.ph702.preheader1563

.lr.ph702.preheader1563:                          ; preds = %middle.block1303, %vector.memcheck1297, %.lr.ph702.preheader
  %.13700.ph = phi ptr [ %1, %vector.memcheck1297 ], [ %1, %.lr.ph702.preheader ], [ %ind.end1309, %middle.block1303 ]
  %.13476699.ph = phi ptr [ %0, %vector.memcheck1297 ], [ %0, %.lr.ph702.preheader ], [ %ind.end1311, %middle.block1303 ]
  %.5520698.ph = phi i32 [ 0, %vector.memcheck1297 ], [ 0, %.lr.ph702.preheader ], [ %ind.end1314, %middle.block1303 ]
  %573 = add i32 %.5520698.ph, %3
  %574 = and i32 %573, 1
  %lcmp.mod1608.not.not = icmp eq i32 %574, 0
  br i1 %lcmp.mod1608.not.not, label %.lr.ph702.prol, label %.lr.ph702.prol.loopexit

.lr.ph702.prol:                                   ; preds = %.lr.ph702.preheader1563
  %575 = load double, ptr %.13476699.ph, align 8, !tbaa !5
  %576 = fmul double %558, %575
  %577 = getelementptr inbounds i8, ptr %.13476699.ph, i64 8
  store double %576, ptr %.13476699.ph, align 8, !tbaa !5
  %578 = load double, ptr %.13700.ph, align 8, !tbaa !5
  %579 = fmul double %558, %578
  %580 = getelementptr inbounds i8, ptr %.13700.ph, i64 8
  store double %579, ptr %.13700.ph, align 8, !tbaa !5
  %581 = add nuw i32 %.5520698.ph, 1
  br label %.lr.ph702.prol.loopexit

.lr.ph702.prol.loopexit:                          ; preds = %.lr.ph702.prol, %.lr.ph702.preheader1563
  %.13700.unr = phi ptr [ %.13700.ph, %.lr.ph702.preheader1563 ], [ %580, %.lr.ph702.prol ]
  %.13476699.unr = phi ptr [ %.13476699.ph, %.lr.ph702.preheader1563 ], [ %577, %.lr.ph702.prol ]
  %.5520698.unr = phi i32 [ %.5520698.ph, %.lr.ph702.preheader1563 ], [ %581, %.lr.ph702.prol ]
  %582 = icmp eq i32 %.5520698.ph, %3
  br i1 %582, label %.loopexit, label %.lr.ph702

.lr.ph702:                                        ; preds = %.lr.ph702.prol.loopexit, %.lr.ph702
  %.13700 = phi ptr [ %595, %.lr.ph702 ], [ %.13700.unr, %.lr.ph702.prol.loopexit ]
  %.13476699 = phi ptr [ %592, %.lr.ph702 ], [ %.13476699.unr, %.lr.ph702.prol.loopexit ]
  %.5520698 = phi i32 [ %596, %.lr.ph702 ], [ %.5520698.unr, %.lr.ph702.prol.loopexit ]
  %583 = load double, ptr %.13476699, align 8, !tbaa !5
  %584 = fmul double %558, %583
  %585 = getelementptr inbounds i8, ptr %.13476699, i64 8
  store double %584, ptr %.13476699, align 8, !tbaa !5
  %586 = load double, ptr %.13700, align 8, !tbaa !5
  %587 = fmul double %558, %586
  %588 = getelementptr inbounds i8, ptr %.13700, i64 8
  store double %587, ptr %.13700, align 8, !tbaa !5
  %589 = add nuw i32 %.5520698, 1
  %590 = load double, ptr %585, align 8, !tbaa !5
  %591 = fmul double %558, %590
  %592 = getelementptr inbounds i8, ptr %.13476699, i64 16
  store double %591, ptr %585, align 8, !tbaa !5
  %593 = load double, ptr %588, align 8, !tbaa !5
  %594 = fmul double %558, %593
  %595 = getelementptr inbounds i8, ptr %.13700, i64 16
  store double %594, ptr %588, align 8, !tbaa !5
  %596 = add nuw i32 %.5520698, 2
  %exitcond848.not.1 = icmp eq i32 %589, %3
  br i1 %exitcond848.not.1, label %.loopexit, label %.lr.ph702, !llvm.loop !103

597:                                              ; preds = %6
  %598 = icmp eq i32 %4, 0
  %599 = load double, ptr %2, align 8, !tbaa !5
  br i1 %598, label %600, label %674

600:                                              ; preds = %597
  %601 = fmul double %599, %599
  %602 = tail call double @llvm.fmuladd.f64(double %601, double 2.000000e+00, double -1.000000e+00)
  %603 = fadd double %601, 1.000000e+00
  %604 = fmul double %603, %603
  %sqrt = tail call double @llvm.sqrt.f64(double %603)
  %605 = fmul double %604, %sqrt
  %606 = fmul double %599, -3.000000e+00
  %607 = fdiv double %606, %605
  store double %607, ptr %0, align 8, !tbaa !5
  %608 = fdiv double %602, %605
  %609 = sext i32 %3 to i64
  %610 = getelementptr inbounds double, ptr %1, i64 %609
  store double %608, ptr %610, align 8, !tbaa !5
  %.not542762 = icmp slt i32 %3, 1
  br i1 %.not542762, label %.loopexit558, label %.lr.ph768.preheader

.lr.ph768.preheader:                              ; preds = %600
  %611 = shl nuw nsw i64 %609, 3
  %scevgep1469 = getelementptr i8, ptr %0, i64 8
  %scevgep1470 = getelementptr i8, ptr %0, i64 16
  %scevgep1472 = getelementptr i8, ptr %2, i64 8
  %612 = add nsw i32 %3, -1
  %613 = zext i32 %612 to i64
  %614 = shl nuw nsw i64 %613, 3
  %615 = getelementptr i8, ptr %2, i64 %614
  %scevgep1473 = getelementptr i8, ptr %615, i64 16
  %616 = getelementptr i8, ptr %1, i64 %611
  %617 = getelementptr i8, ptr %1, i64 %611
  %618 = getelementptr i8, ptr %617, i64 8
  %bound01481 = icmp ult ptr %scevgep1469, %scevgep1473
  %invariant.gep1698 = getelementptr i8, ptr %0, i64 8
  br label %.lr.ph768

.lr.ph768:                                        ; preds = %.lr.ph768.preheader, %._crit_edge758
  %indvar1464 = phi i64 [ 0, %.lr.ph768.preheader ], [ %indvar.next1465, %._crit_edge758 ]
  %indvars.iv863 = phi i64 [ %609, %.lr.ph768.preheader ], [ %indvars.iv.next864, %._crit_edge758 ]
  %.6491765 = phi double [ 1.000000e+00, %.lr.ph768.preheader ], [ %672, %._crit_edge758 ]
  %.6521764 = phi i32 [ 1, %.lr.ph768.preheader ], [ %673, %._crit_edge758 ]
  %.5532763 = phi ptr [ %2, %.lr.ph768.preheader ], [ %625, %._crit_edge758 ]
  %619 = trunc i64 %indvar1464 to i32
  %620 = mul nsw i64 %indvar1464, -8
  %scevgep1466 = getelementptr i8, ptr %616, i64 %620
  %scevgep1467 = getelementptr i8, ptr %618, i64 %620
  %621 = shl i64 %indvar1464, 3
  %622 = add i64 %621, 34359738360
  %623 = and i64 %622, 34359738360
  %scevgep1468 = getelementptr i8, ptr %scevgep1467, i64 %623
  %scevgep1471 = getelementptr i8, ptr %scevgep1470, i64 %623
  %indvars.iv.next864 = add nsw i64 %indvars.iv863, -1
  %.14 = getelementptr inbounds double, ptr %1, i64 %indvars.iv.next864
  %624 = load double, ptr %0, align 8, !tbaa !5
  store double %624, ptr %.14, align 8, !tbaa !5
  %625 = getelementptr inbounds i8, ptr %.5532763, i64 8
  %626 = load double, ptr %625, align 8, !tbaa !5
  %627 = fmul double %626, %624
  store double %627, ptr %0, align 8, !tbaa !5
  %628 = icmp ugt i32 %.6521764, 1
  br i1 %628, label %.lr.ph757.preheader, label %._crit_edge758

.lr.ph757.preheader:                              ; preds = %.lr.ph768
  %min.iters.check1487 = icmp ult i64 %indvar1464, 4
  br i1 %min.iters.check1487, label %.lr.ph757.preheader1546, label %vector.memcheck1463

vector.memcheck1463:                              ; preds = %.lr.ph757.preheader
  %bound01474 = icmp ult ptr %scevgep1466, %scevgep1471
  %bound11475 = icmp ult ptr %scevgep1469, %scevgep1468
  %found.conflict1476 = and i1 %bound01474, %bound11475
  %bound01477 = icmp ult ptr %scevgep1466, %scevgep1473
  %bound11478 = icmp ult ptr %scevgep1472, %scevgep1468
  %found.conflict1479 = and i1 %bound01477, %bound11478
  %conflict.rdx1480 = or i1 %found.conflict1476, %found.conflict1479
  %bound11482 = icmp ult ptr %scevgep1472, %scevgep1471
  %found.conflict1483 = and i1 %bound01481, %bound11482
  %conflict.rdx1484 = or i1 %conflict.rdx1480, %found.conflict1483
  br i1 %conflict.rdx1484, label %.lr.ph757.preheader1546, label %vector.ph1488

vector.ph1488:                                    ; preds = %vector.memcheck1463
  %n.vec1490 = and i64 %indvar1464, -2
  %629 = shl i64 %n.vec1490, 3
  %ind.end1491 = getelementptr i8, ptr %.14, i64 %629
  %630 = shl i64 %n.vec1490, 3
  %ind.end1493 = getelementptr i8, ptr %0, i64 %630
  %.cast1495 = trunc i64 %indvar1464 to i32
  %ind.end1496 = or i32 %.cast1495, 1
  %631 = load double, ptr %625, align 8, !tbaa !5, !alias.scope !104
  %broadcast.splatinsert1506 = insertelement <2 x double> poison, double %631, i64 0
  %broadcast.splat1507 = shufflevector <2 x double> %broadcast.splatinsert1506, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1700 = getelementptr i8, ptr %.14, i64 8
  %632 = fneg <2 x double> %broadcast.splat1507
  br label %vector.body1498

vector.body1498:                                  ; preds = %vector.body1498, %vector.ph1488
  %index1499 = phi i64 [ 0, %vector.ph1488 ], [ %index.next1508, %vector.body1498 ]
  %offset.idx1500 = shl i64 %index1499, 3
  %offset.idx1502 = shl i64 %index1499, 3
  %gep1699 = getelementptr i8, ptr %invariant.gep1698, i64 %offset.idx1502
  %wide.load1504 = load <2 x double>, ptr %gep1699, align 8, !tbaa !5, !alias.scope !107, !noalias !104
  %gep1701 = getelementptr i8, ptr %invariant.gep1700, i64 %offset.idx1500
  %wide.load1505 = load <2 x double>, ptr %gep1701, align 8, !tbaa !5, !alias.scope !109, !noalias !111
  %633 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1507, <2 x double> %wide.load1504, <2 x double> %wide.load1505)
  %634 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %632, <2 x double> %wide.load1505, <2 x double> %wide.load1504)
  store <2 x double> %634, ptr %gep1701, align 8, !tbaa !5, !alias.scope !109, !noalias !111
  store <2 x double> %633, ptr %gep1699, align 8, !tbaa !5, !alias.scope !107, !noalias !104
  %index.next1508 = add nuw i64 %index1499, 2
  %635 = icmp eq i64 %index.next1508, %n.vec1490
  br i1 %635, label %middle.block1485, label %vector.body1498, !llvm.loop !112

middle.block1485:                                 ; preds = %vector.body1498
  %cmp.n1509 = icmp eq i64 %indvar1464, %n.vec1490
  br i1 %cmp.n1509, label %._crit_edge758, label %.lr.ph757.preheader1546

.lr.ph757.preheader1546:                          ; preds = %middle.block1485, %vector.memcheck1463, %.lr.ph757.preheader
  %.15755.ph = phi ptr [ %.14, %vector.memcheck1463 ], [ %.14, %.lr.ph757.preheader ], [ %ind.end1491, %middle.block1485 ]
  %.15478754.ph = phi ptr [ %0, %vector.memcheck1463 ], [ %0, %.lr.ph757.preheader ], [ %ind.end1493, %middle.block1485 ]
  %.8511753.ph = phi i32 [ 1, %vector.memcheck1463 ], [ 1, %.lr.ph757.preheader ], [ %ind.end1496, %middle.block1485 ]
  %636 = and i32 %.6521764, 1
  %lcmp.mod1616.not.not = icmp eq i32 %636, 0
  br i1 %lcmp.mod1616.not.not, label %.lr.ph757.prol, label %.lr.ph757.prol.loopexit

.lr.ph757.prol:                                   ; preds = %.lr.ph757.preheader1546
  %637 = load double, ptr %625, align 8, !tbaa !5
  %638 = getelementptr inbounds i8, ptr %.15478754.ph, i64 8
  %639 = load double, ptr %638, align 8, !tbaa !5
  %640 = getelementptr inbounds i8, ptr %.15755.ph, i64 8
  %641 = load double, ptr %640, align 8, !tbaa !5
  %642 = tail call double @llvm.fmuladd.f64(double %637, double %639, double %641)
  %643 = fneg double %637
  %644 = tail call double @llvm.fmuladd.f64(double %643, double %641, double %639)
  store double %644, ptr %640, align 8, !tbaa !5
  store double %642, ptr %638, align 8, !tbaa !5
  %645 = add nuw nsw i32 %.8511753.ph, 1
  br label %.lr.ph757.prol.loopexit

.lr.ph757.prol.loopexit:                          ; preds = %.lr.ph757.prol, %.lr.ph757.preheader1546
  %.lcssa1547.unr = phi ptr [ poison, %.lr.ph757.preheader1546 ], [ %638, %.lr.ph757.prol ]
  %.lcssa.unr = phi ptr [ poison, %.lr.ph757.preheader1546 ], [ %640, %.lr.ph757.prol ]
  %.15755.unr = phi ptr [ %.15755.ph, %.lr.ph757.preheader1546 ], [ %640, %.lr.ph757.prol ]
  %.15478754.unr = phi ptr [ %.15478754.ph, %.lr.ph757.preheader1546 ], [ %638, %.lr.ph757.prol ]
  %.8511753.unr = phi i32 [ %.8511753.ph, %.lr.ph757.preheader1546 ], [ %645, %.lr.ph757.prol ]
  %646 = icmp eq i32 %.8511753.ph, %619
  br i1 %646, label %._crit_edge758, label %.lr.ph757

.lr.ph757:                                        ; preds = %.lr.ph757.prol.loopexit, %.lr.ph757
  %.15755 = phi ptr [ %658, %.lr.ph757 ], [ %.15755.unr, %.lr.ph757.prol.loopexit ]
  %.15478754 = phi ptr [ %656, %.lr.ph757 ], [ %.15478754.unr, %.lr.ph757.prol.loopexit ]
  %.8511753 = phi i32 [ %663, %.lr.ph757 ], [ %.8511753.unr, %.lr.ph757.prol.loopexit ]
  %647 = load double, ptr %625, align 8, !tbaa !5
  %648 = getelementptr inbounds i8, ptr %.15478754, i64 8
  %649 = load double, ptr %648, align 8, !tbaa !5
  %650 = getelementptr inbounds i8, ptr %.15755, i64 8
  %651 = load double, ptr %650, align 8, !tbaa !5
  %652 = tail call double @llvm.fmuladd.f64(double %647, double %649, double %651)
  %653 = fneg double %647
  %654 = tail call double @llvm.fmuladd.f64(double %653, double %651, double %649)
  store double %654, ptr %650, align 8, !tbaa !5
  store double %652, ptr %648, align 8, !tbaa !5
  %655 = load double, ptr %625, align 8, !tbaa !5
  %656 = getelementptr inbounds i8, ptr %.15478754, i64 16
  %657 = load double, ptr %656, align 8, !tbaa !5
  %658 = getelementptr inbounds i8, ptr %.15755, i64 16
  %659 = load double, ptr %658, align 8, !tbaa !5
  %660 = tail call double @llvm.fmuladd.f64(double %655, double %657, double %659)
  %661 = fneg double %655
  %662 = tail call double @llvm.fmuladd.f64(double %661, double %659, double %657)
  store double %662, ptr %658, align 8, !tbaa !5
  store double %660, ptr %656, align 8, !tbaa !5
  %663 = add nuw nsw i32 %.8511753, 2
  %exitcond862.not.1 = icmp eq i32 %663, %.6521764
  br i1 %exitcond862.not.1, label %._crit_edge758, label %.lr.ph757, !llvm.loop !113

._crit_edge758:                                   ; preds = %.lr.ph757.prol.loopexit, %.lr.ph757, %middle.block1485, %.lr.ph768
  %.15478.lcssa = phi ptr [ %0, %.lr.ph768 ], [ %ind.end1493, %middle.block1485 ], [ %.lcssa1547.unr, %.lr.ph757.prol.loopexit ], [ %656, %.lr.ph757 ]
  %.15.lcssa = phi ptr [ %.14, %.lr.ph768 ], [ %ind.end1491, %middle.block1485 ], [ %.lcssa.unr, %.lr.ph757.prol.loopexit ], [ %658, %.lr.ph757 ]
  %664 = getelementptr inbounds i8, ptr %.15.lcssa, i64 8
  %665 = load double, ptr %664, align 8, !tbaa !5
  %666 = getelementptr inbounds i8, ptr %.15478.lcssa, i64 8
  store double %665, ptr %666, align 8, !tbaa !5
  %667 = load double, ptr %625, align 8, !tbaa !5
  %668 = fneg double %667
  %669 = fmul double %665, %668
  store double %669, ptr %664, align 8, !tbaa !5
  %670 = load double, ptr %625, align 8, !tbaa !5
  %671 = tail call double @llvm.fmuladd.f64(double %670, double %670, double 1.000000e+00)
  %672 = fmul double %.6491765, %671
  %673 = add nuw i32 %.6521764, 1
  %exitcond866.not = icmp eq i32 %.6521764, %3
  %indvar.next1465 = add i64 %indvar1464, 1
  br i1 %exitcond866.not, label %.loopexit558, label %.lr.ph768, !llvm.loop !114

674:                                              ; preds = %597
  store double %599, ptr %0, align 8, !tbaa !5
  %675 = sext i32 %3 to i64
  %676 = getelementptr inbounds double, ptr %1, i64 %675
  store double 1.000000e+00, ptr %676, align 8, !tbaa !5
  %677 = load double, ptr %2, align 8, !tbaa !5
  %678 = tail call double @llvm.fmuladd.f64(double %677, double %677, double 1.000000e+00)
  %.6501711 = add i32 %3, -1
  %.pn712 = sext i32 %.6501711 to i64
  %.16713 = getelementptr inbounds double, ptr %1, i64 %.pn712
  %679 = icmp sgt i32 %4, 1
  br i1 %679, label %.lr.ph720.preheader, label %._crit_edge721

.lr.ph720.preheader:                              ; preds = %674
  %680 = shl nsw i64 %.pn712, 3
  %scevgep1338 = getelementptr i8, ptr %0, i64 8
  %scevgep1339 = getelementptr i8, ptr %0, i64 16
  %scevgep1341 = getelementptr i8, ptr %2, i64 8
  %681 = add nsw i32 %4, -2
  %682 = zext i32 %681 to i64
  %683 = shl nuw nsw i64 %682, 3
  %684 = getelementptr i8, ptr %2, i64 %683
  %scevgep1342 = getelementptr i8, ptr %684, i64 16
  %685 = getelementptr i8, ptr %1, i64 %680
  %686 = getelementptr i8, ptr %685, i64 8
  %687 = getelementptr i8, ptr %1, i64 %680
  %688 = getelementptr i8, ptr %687, i64 16
  %bound01350 = icmp ult ptr %scevgep1338, %scevgep1342
  %invariant.gep1686 = getelementptr i8, ptr %0, i64 8
  br label %.lr.ph720

.lr.ph720:                                        ; preds = %.lr.ph720.preheader, %._crit_edge708
  %indvar1333 = phi i64 [ 0, %.lr.ph720.preheader ], [ %indvar.next1334, %._crit_edge708 ]
  %indvars.iv850 = phi i64 [ %.pn712, %.lr.ph720.preheader ], [ %indvars.iv.next851, %._crit_edge708 ]
  %.16718 = phi ptr [ %.16713, %.lr.ph720.preheader ], [ %.16, %._crit_edge708 ]
  %.7492716 = phi double [ %678, %.lr.ph720.preheader ], [ %742, %._crit_edge708 ]
  %.7522715 = phi i32 [ 1, %.lr.ph720.preheader ], [ %743, %._crit_edge708 ]
  %.6533714 = phi ptr [ %2, %.lr.ph720.preheader ], [ %695, %._crit_edge708 ]
  %689 = trunc i64 %indvar1333 to i32
  %690 = mul nsw i64 %indvar1333, -8
  %scevgep1335 = getelementptr i8, ptr %686, i64 %690
  %scevgep1336 = getelementptr i8, ptr %688, i64 %690
  %691 = shl i64 %indvar1333, 3
  %692 = add i64 %691, 34359738360
  %693 = and i64 %692, 34359738360
  %scevgep1337 = getelementptr i8, ptr %scevgep1336, i64 %693
  %scevgep1340 = getelementptr i8, ptr %scevgep1339, i64 %693
  %694 = load double, ptr %0, align 8, !tbaa !5
  store double %694, ptr %.16718, align 8, !tbaa !5
  %695 = getelementptr inbounds i8, ptr %.6533714, i64 8
  %696 = load double, ptr %695, align 8, !tbaa !5
  %697 = fmul double %696, %694
  store double %697, ptr %0, align 8, !tbaa !5
  %698 = icmp ugt i32 %.7522715, 1
  br i1 %698, label %.lr.ph707.preheader, label %._crit_edge708

.lr.ph707.preheader:                              ; preds = %.lr.ph720
  %min.iters.check1356 = icmp ult i64 %indvar1333, 4
  br i1 %min.iters.check1356, label %.lr.ph707.preheader1557, label %vector.memcheck1332

vector.memcheck1332:                              ; preds = %.lr.ph707.preheader
  %bound01343 = icmp ult ptr %scevgep1335, %scevgep1340
  %bound11344 = icmp ult ptr %scevgep1338, %scevgep1337
  %found.conflict1345 = and i1 %bound01343, %bound11344
  %bound01346 = icmp ult ptr %scevgep1335, %scevgep1342
  %bound11347 = icmp ult ptr %scevgep1341, %scevgep1337
  %found.conflict1348 = and i1 %bound01346, %bound11347
  %conflict.rdx1349 = or i1 %found.conflict1345, %found.conflict1348
  %bound11351 = icmp ult ptr %scevgep1341, %scevgep1340
  %found.conflict1352 = and i1 %bound01350, %bound11351
  %conflict.rdx1353 = or i1 %conflict.rdx1349, %found.conflict1352
  br i1 %conflict.rdx1353, label %.lr.ph707.preheader1557, label %vector.ph1357

vector.ph1357:                                    ; preds = %vector.memcheck1332
  %n.vec1359 = and i64 %indvar1333, -2
  %699 = shl i64 %n.vec1359, 3
  %ind.end1360 = getelementptr i8, ptr %.16718, i64 %699
  %700 = shl i64 %n.vec1359, 3
  %ind.end1362 = getelementptr i8, ptr %0, i64 %700
  %.cast1364 = trunc i64 %indvar1333 to i32
  %ind.end1365 = or i32 %.cast1364, 1
  %701 = load double, ptr %695, align 8, !tbaa !5, !alias.scope !115
  %broadcast.splatinsert1375 = insertelement <2 x double> poison, double %701, i64 0
  %broadcast.splat1376 = shufflevector <2 x double> %broadcast.splatinsert1375, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1688 = getelementptr i8, ptr %.16718, i64 8
  %702 = fneg <2 x double> %broadcast.splat1376
  br label %vector.body1367

vector.body1367:                                  ; preds = %vector.body1367, %vector.ph1357
  %index1368 = phi i64 [ 0, %vector.ph1357 ], [ %index.next1377, %vector.body1367 ]
  %offset.idx1369 = shl i64 %index1368, 3
  %offset.idx1371 = shl i64 %index1368, 3
  %gep1687 = getelementptr i8, ptr %invariant.gep1686, i64 %offset.idx1371
  %wide.load1373 = load <2 x double>, ptr %gep1687, align 8, !tbaa !5, !alias.scope !118, !noalias !115
  %gep1689 = getelementptr i8, ptr %invariant.gep1688, i64 %offset.idx1369
  %wide.load1374 = load <2 x double>, ptr %gep1689, align 8, !tbaa !5, !alias.scope !120, !noalias !122
  %703 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1376, <2 x double> %wide.load1373, <2 x double> %wide.load1374)
  %704 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %702, <2 x double> %wide.load1374, <2 x double> %wide.load1373)
  store <2 x double> %704, ptr %gep1689, align 8, !tbaa !5, !alias.scope !120, !noalias !122
  store <2 x double> %703, ptr %gep1687, align 8, !tbaa !5, !alias.scope !118, !noalias !115
  %index.next1377 = add nuw i64 %index1368, 2
  %705 = icmp eq i64 %index.next1377, %n.vec1359
  br i1 %705, label %middle.block1354, label %vector.body1367, !llvm.loop !123

middle.block1354:                                 ; preds = %vector.body1367
  %cmp.n1378 = icmp eq i64 %indvar1333, %n.vec1359
  br i1 %cmp.n1378, label %._crit_edge708, label %.lr.ph707.preheader1557

.lr.ph707.preheader1557:                          ; preds = %middle.block1354, %vector.memcheck1332, %.lr.ph707.preheader
  %.17705.ph = phi ptr [ %.16718, %vector.memcheck1332 ], [ %.16718, %.lr.ph707.preheader ], [ %ind.end1360, %middle.block1354 ]
  %.17480704.ph = phi ptr [ %0, %vector.memcheck1332 ], [ %0, %.lr.ph707.preheader ], [ %ind.end1362, %middle.block1354 ]
  %.9512703.ph = phi i32 [ 1, %vector.memcheck1332 ], [ 1, %.lr.ph707.preheader ], [ %ind.end1365, %middle.block1354 ]
  %706 = and i32 %.7522715, 1
  %lcmp.mod1610.not.not = icmp eq i32 %706, 0
  br i1 %lcmp.mod1610.not.not, label %.lr.ph707.prol, label %.lr.ph707.prol.loopexit

.lr.ph707.prol:                                   ; preds = %.lr.ph707.preheader1557
  %707 = load double, ptr %695, align 8, !tbaa !5
  %708 = getelementptr inbounds i8, ptr %.17480704.ph, i64 8
  %709 = load double, ptr %708, align 8, !tbaa !5
  %710 = getelementptr inbounds i8, ptr %.17705.ph, i64 8
  %711 = load double, ptr %710, align 8, !tbaa !5
  %712 = tail call double @llvm.fmuladd.f64(double %707, double %709, double %711)
  %713 = fneg double %707
  %714 = tail call double @llvm.fmuladd.f64(double %713, double %711, double %709)
  store double %714, ptr %710, align 8, !tbaa !5
  store double %712, ptr %708, align 8, !tbaa !5
  %715 = add nuw nsw i32 %.9512703.ph, 1
  br label %.lr.ph707.prol.loopexit

.lr.ph707.prol.loopexit:                          ; preds = %.lr.ph707.prol, %.lr.ph707.preheader1557
  %.lcssa1559.unr = phi ptr [ poison, %.lr.ph707.preheader1557 ], [ %708, %.lr.ph707.prol ]
  %.lcssa1558.unr = phi ptr [ poison, %.lr.ph707.preheader1557 ], [ %710, %.lr.ph707.prol ]
  %.17705.unr = phi ptr [ %.17705.ph, %.lr.ph707.preheader1557 ], [ %710, %.lr.ph707.prol ]
  %.17480704.unr = phi ptr [ %.17480704.ph, %.lr.ph707.preheader1557 ], [ %708, %.lr.ph707.prol ]
  %.9512703.unr = phi i32 [ %.9512703.ph, %.lr.ph707.preheader1557 ], [ %715, %.lr.ph707.prol ]
  %716 = icmp eq i32 %.9512703.ph, %689
  br i1 %716, label %._crit_edge708, label %.lr.ph707

.lr.ph707:                                        ; preds = %.lr.ph707.prol.loopexit, %.lr.ph707
  %.17705 = phi ptr [ %728, %.lr.ph707 ], [ %.17705.unr, %.lr.ph707.prol.loopexit ]
  %.17480704 = phi ptr [ %726, %.lr.ph707 ], [ %.17480704.unr, %.lr.ph707.prol.loopexit ]
  %.9512703 = phi i32 [ %733, %.lr.ph707 ], [ %.9512703.unr, %.lr.ph707.prol.loopexit ]
  %717 = load double, ptr %695, align 8, !tbaa !5
  %718 = getelementptr inbounds i8, ptr %.17480704, i64 8
  %719 = load double, ptr %718, align 8, !tbaa !5
  %720 = getelementptr inbounds i8, ptr %.17705, i64 8
  %721 = load double, ptr %720, align 8, !tbaa !5
  %722 = tail call double @llvm.fmuladd.f64(double %717, double %719, double %721)
  %723 = fneg double %717
  %724 = tail call double @llvm.fmuladd.f64(double %723, double %721, double %719)
  store double %724, ptr %720, align 8, !tbaa !5
  store double %722, ptr %718, align 8, !tbaa !5
  %725 = load double, ptr %695, align 8, !tbaa !5
  %726 = getelementptr inbounds i8, ptr %.17480704, i64 16
  %727 = load double, ptr %726, align 8, !tbaa !5
  %728 = getelementptr inbounds i8, ptr %.17705, i64 16
  %729 = load double, ptr %728, align 8, !tbaa !5
  %730 = tail call double @llvm.fmuladd.f64(double %725, double %727, double %729)
  %731 = fneg double %725
  %732 = tail call double @llvm.fmuladd.f64(double %731, double %729, double %727)
  store double %732, ptr %728, align 8, !tbaa !5
  store double %730, ptr %726, align 8, !tbaa !5
  %733 = add nuw nsw i32 %.9512703, 2
  %exitcond849.not.1 = icmp eq i32 %733, %.7522715
  br i1 %exitcond849.not.1, label %._crit_edge708, label %.lr.ph707, !llvm.loop !124

._crit_edge708:                                   ; preds = %.lr.ph707.prol.loopexit, %.lr.ph707, %middle.block1354, %.lr.ph720
  %.17480.lcssa = phi ptr [ %0, %.lr.ph720 ], [ %ind.end1362, %middle.block1354 ], [ %.lcssa1559.unr, %.lr.ph707.prol.loopexit ], [ %726, %.lr.ph707 ]
  %.17.lcssa = phi ptr [ %.16718, %.lr.ph720 ], [ %ind.end1360, %middle.block1354 ], [ %.lcssa1558.unr, %.lr.ph707.prol.loopexit ], [ %728, %.lr.ph707 ]
  %734 = getelementptr inbounds i8, ptr %.17.lcssa, i64 8
  %735 = load double, ptr %734, align 8, !tbaa !5
  %736 = getelementptr inbounds i8, ptr %.17480.lcssa, i64 8
  store double %735, ptr %736, align 8, !tbaa !5
  %737 = load double, ptr %695, align 8, !tbaa !5
  %738 = fneg double %737
  %739 = fmul double %735, %738
  store double %739, ptr %734, align 8, !tbaa !5
  %740 = load double, ptr %695, align 8, !tbaa !5
  %741 = tail call double @llvm.fmuladd.f64(double %740, double %740, double 1.000000e+00)
  %742 = fmul double %.7492716, %741
  %743 = add nuw nsw i32 %.7522715, 1
  %indvars.iv.next851 = add nsw i64 %indvars.iv850, -1
  %.16 = getelementptr inbounds double, ptr %1, i64 %indvars.iv.next851
  %exitcond853.not = icmp eq i32 %743, %4
  %indvar.next1334 = add i64 %indvar1333, 1
  br i1 %exitcond853.not, label %._crit_edge721.loopexit, label %.lr.ph720, !llvm.loop !125

._crit_edge721.loopexit:                          ; preds = %._crit_edge708
  %744 = trunc nsw i64 %indvars.iv850 to i32
  br label %._crit_edge721

._crit_edge721:                                   ; preds = %._crit_edge721.loopexit, %674
  %.6533.lcssa = phi ptr [ %2, %674 ], [ %695, %._crit_edge721.loopexit ]
  %.6501.in.lcssa = phi i32 [ %3, %674 ], [ %744, %._crit_edge721.loopexit ]
  %.7492.lcssa = phi double [ %678, %674 ], [ %742, %._crit_edge721.loopexit ]
  %.16.lcssa = phi ptr [ %.16713, %674 ], [ %.16, %._crit_edge721.loopexit ]
  %745 = getelementptr inbounds i8, ptr %.6533.lcssa, i64 8
  %746 = load double, ptr %745, align 8, !tbaa !5
  %747 = fmul double %746, %746
  %748 = tail call double @llvm.fmuladd.f64(double %747, double 2.000000e+00, double -1.000000e+00)
  %749 = fadd double %747, 1.000000e+00
  %750 = fmul double %749, %749
  %sqrt557 = tail call double @llvm.sqrt.f64(double %749)
  %751 = fmul double %750, %sqrt557
  %752 = fdiv double %748, %751
  %753 = fmul double %746, -3.000000e+00
  %754 = fdiv double %753, %751
  %755 = load double, ptr %0, align 8, !tbaa !5
  %756 = fmul double %755, %752
  store double %756, ptr %.16.lcssa, align 8, !tbaa !5
  %757 = load double, ptr %0, align 8, !tbaa !5
  %758 = fmul double %757, %754
  store double %758, ptr %0, align 8, !tbaa !5
  %759 = fneg double %754
  br i1 %679, label %.lr.ph730.preheader, label %._crit_edge731

.lr.ph730.preheader:                              ; preds = %._crit_edge721
  %760 = add nsw i32 %4, -1
  %761 = zext i32 %760 to i64
  %min.iters.check1389 = icmp ult i32 %4, 5
  br i1 %min.iters.check1389, label %.lr.ph730.preheader1554, label %vector.memcheck1379

vector.memcheck1379:                              ; preds = %.lr.ph730.preheader
  %scevgep1380 = getelementptr i8, ptr %.16.lcssa, i64 8
  %762 = add nsw i32 %4, -2
  %763 = zext i32 %762 to i64
  %764 = shl nuw nsw i64 %763, 3
  %765 = add nuw nsw i64 %764, 16
  %scevgep1381 = getelementptr i8, ptr %.16.lcssa, i64 %765
  %scevgep1382 = getelementptr i8, ptr %0, i64 8
  %scevgep1383 = getelementptr i8, ptr %0, i64 %765
  %bound01384 = icmp ult ptr %scevgep1380, %scevgep1383
  %bound11385 = icmp ult ptr %scevgep1382, %scevgep1381
  %found.conflict1386 = and i1 %bound01384, %bound11385
  br i1 %found.conflict1386, label %.lr.ph730.preheader1554, label %vector.ph1390

vector.ph1390:                                    ; preds = %vector.memcheck1379
  %n.vec1392 = and i64 %761, 4294967294
  %766 = shl nuw nsw i64 %n.vec1392, 3
  %ind.end1393 = getelementptr i8, ptr %.16.lcssa, i64 %766
  %767 = shl nuw nsw i64 %n.vec1392, 3
  %ind.end1395 = getelementptr i8, ptr %0, i64 %767
  %ind.end1398 = or i32 %760, 1
  %broadcast.splatinsert1408 = insertelement <2 x double> poison, double %752, i64 0
  %broadcast.splat1409 = shufflevector <2 x double> %broadcast.splatinsert1408, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert1410 = insertelement <2 x double> poison, double %754, i64 0
  %broadcast.splat1411 = shufflevector <2 x double> %broadcast.splatinsert1410, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert1412 = insertelement <2 x double> poison, double %759, i64 0
  %broadcast.splat1413 = shufflevector <2 x double> %broadcast.splatinsert1412, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1690 = getelementptr i8, ptr %0, i64 8
  %invariant.gep1692 = getelementptr i8, ptr %.16.lcssa, i64 8
  br label %vector.body1400

vector.body1400:                                  ; preds = %vector.body1400, %vector.ph1390
  %index1401 = phi i64 [ 0, %vector.ph1390 ], [ %index.next1414, %vector.body1400 ]
  %offset.idx1402 = shl i64 %index1401, 3
  %offset.idx1404 = shl i64 %index1401, 3
  %gep1691 = getelementptr i8, ptr %invariant.gep1690, i64 %offset.idx1404
  %wide.load1406 = load <2 x double>, ptr %gep1691, align 8, !tbaa !5, !alias.scope !126
  %gep1693 = getelementptr i8, ptr %invariant.gep1692, i64 %offset.idx1402
  %wide.load1407 = load <2 x double>, ptr %gep1693, align 8, !tbaa !5, !alias.scope !129, !noalias !126
  %768 = fmul <2 x double> %broadcast.splat1409, %wide.load1407
  %769 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1411, <2 x double> %wide.load1406, <2 x double> %768)
  %770 = fmul <2 x double> %wide.load1407, %broadcast.splat1413
  %771 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1409, <2 x double> %wide.load1406, <2 x double> %770)
  store <2 x double> %771, ptr %gep1693, align 8, !tbaa !5, !alias.scope !129, !noalias !126
  store <2 x double> %769, ptr %gep1691, align 8, !tbaa !5, !alias.scope !126
  %index.next1414 = add nuw i64 %index1401, 2
  %772 = icmp eq i64 %index.next1414, %n.vec1392
  br i1 %772, label %middle.block1387, label %vector.body1400, !llvm.loop !131

middle.block1387:                                 ; preds = %vector.body1400
  %cmp.n1415 = icmp eq i64 %n.vec1392, %761
  br i1 %cmp.n1415, label %._crit_edge731, label %.lr.ph730.preheader1554

.lr.ph730.preheader1554:                          ; preds = %middle.block1387, %vector.memcheck1379, %.lr.ph730.preheader
  %.18728.ph = phi ptr [ %.16.lcssa, %vector.memcheck1379 ], [ %.16.lcssa, %.lr.ph730.preheader ], [ %ind.end1393, %middle.block1387 ]
  %.18481727.ph = phi ptr [ %0, %vector.memcheck1379 ], [ %0, %.lr.ph730.preheader ], [ %ind.end1395, %middle.block1387 ]
  %.10513726.ph = phi i32 [ 1, %vector.memcheck1379 ], [ 1, %.lr.ph730.preheader ], [ %ind.end1398, %middle.block1387 ]
  %773 = and i32 %4, 1
  %lcmp.mod1612.not.not = icmp eq i32 %773, 0
  br i1 %lcmp.mod1612.not.not, label %.lr.ph730.prol, label %.lr.ph730.prol.loopexit

.lr.ph730.prol:                                   ; preds = %.lr.ph730.preheader1554
  %774 = getelementptr inbounds i8, ptr %.18481727.ph, i64 8
  %775 = load double, ptr %774, align 8, !tbaa !5
  %776 = getelementptr inbounds i8, ptr %.18728.ph, i64 8
  %777 = load double, ptr %776, align 8, !tbaa !5
  %778 = fmul double %752, %777
  %779 = tail call double @llvm.fmuladd.f64(double %754, double %775, double %778)
  %780 = fmul double %777, %759
  %781 = tail call double @llvm.fmuladd.f64(double %752, double %775, double %780)
  store double %781, ptr %776, align 8, !tbaa !5
  store double %779, ptr %774, align 8, !tbaa !5
  %782 = add nuw nsw i32 %.10513726.ph, 1
  br label %.lr.ph730.prol.loopexit

.lr.ph730.prol.loopexit:                          ; preds = %.lr.ph730.prol, %.lr.ph730.preheader1554
  %.lcssa1556.unr = phi ptr [ poison, %.lr.ph730.preheader1554 ], [ %774, %.lr.ph730.prol ]
  %.lcssa1555.unr = phi ptr [ poison, %.lr.ph730.preheader1554 ], [ %776, %.lr.ph730.prol ]
  %.18728.unr = phi ptr [ %.18728.ph, %.lr.ph730.preheader1554 ], [ %776, %.lr.ph730.prol ]
  %.18481727.unr = phi ptr [ %.18481727.ph, %.lr.ph730.preheader1554 ], [ %774, %.lr.ph730.prol ]
  %.10513726.unr = phi i32 [ %.10513726.ph, %.lr.ph730.preheader1554 ], [ %782, %.lr.ph730.prol ]
  %783 = add nsw i32 %4, -1
  %784 = icmp eq i32 %.10513726.ph, %783
  br i1 %784, label %._crit_edge731, label %.lr.ph730

.lr.ph730:                                        ; preds = %.lr.ph730.prol.loopexit, %.lr.ph730
  %.18728 = phi ptr [ %795, %.lr.ph730 ], [ %.18728.unr, %.lr.ph730.prol.loopexit ]
  %.18481727 = phi ptr [ %793, %.lr.ph730 ], [ %.18481727.unr, %.lr.ph730.prol.loopexit ]
  %.10513726 = phi i32 [ %801, %.lr.ph730 ], [ %.10513726.unr, %.lr.ph730.prol.loopexit ]
  %785 = getelementptr inbounds i8, ptr %.18481727, i64 8
  %786 = load double, ptr %785, align 8, !tbaa !5
  %787 = getelementptr inbounds i8, ptr %.18728, i64 8
  %788 = load double, ptr %787, align 8, !tbaa !5
  %789 = fmul double %752, %788
  %790 = tail call double @llvm.fmuladd.f64(double %754, double %786, double %789)
  %791 = fmul double %788, %759
  %792 = tail call double @llvm.fmuladd.f64(double %752, double %786, double %791)
  store double %792, ptr %787, align 8, !tbaa !5
  store double %790, ptr %785, align 8, !tbaa !5
  %793 = getelementptr inbounds i8, ptr %.18481727, i64 16
  %794 = load double, ptr %793, align 8, !tbaa !5
  %795 = getelementptr inbounds i8, ptr %.18728, i64 16
  %796 = load double, ptr %795, align 8, !tbaa !5
  %797 = fmul double %752, %796
  %798 = tail call double @llvm.fmuladd.f64(double %754, double %794, double %797)
  %799 = fmul double %796, %759
  %800 = tail call double @llvm.fmuladd.f64(double %752, double %794, double %799)
  store double %800, ptr %795, align 8, !tbaa !5
  store double %798, ptr %793, align 8, !tbaa !5
  %801 = add nuw nsw i32 %.10513726, 2
  %exitcond854.not.1 = icmp eq i32 %801, %4
  br i1 %exitcond854.not.1, label %._crit_edge731, label %.lr.ph730, !llvm.loop !132

._crit_edge731:                                   ; preds = %.lr.ph730.prol.loopexit, %.lr.ph730, %middle.block1387, %._crit_edge721
  %.18481.lcssa = phi ptr [ %0, %._crit_edge721 ], [ %ind.end1395, %middle.block1387 ], [ %.lcssa1556.unr, %.lr.ph730.prol.loopexit ], [ %793, %.lr.ph730 ]
  %.18.lcssa = phi ptr [ %.16.lcssa, %._crit_edge721 ], [ %ind.end1393, %middle.block1387 ], [ %.lcssa1555.unr, %.lr.ph730.prol.loopexit ], [ %795, %.lr.ph730 ]
  %802 = getelementptr inbounds i8, ptr %.18.lcssa, i64 8
  %803 = load double, ptr %802, align 8, !tbaa !5
  %804 = fmul double %752, %803
  %805 = getelementptr inbounds i8, ptr %.18481.lcssa, i64 8
  store double %804, ptr %805, align 8, !tbaa !5
  %806 = load double, ptr %802, align 8, !tbaa !5
  %807 = fmul double %806, %759
  store double %807, ptr %802, align 8, !tbaa !5
  %.not539.not744 = icmp slt i32 %4, %3
  br i1 %.not539.not744, label %.lr.ph751.preheader, label %.loopexit558

.lr.ph751.preheader:                              ; preds = %._crit_edge731
  %808 = add i32 %.6501.in.lcssa, -2
  %809 = sext i32 %808 to i64
  %810 = shl nsw i64 %809, 3
  %811 = add i32 %4, -1
  %scevgep1422 = getelementptr i8, ptr %0, i64 8
  %scevgep1423 = getelementptr i8, ptr %0, i64 16
  %scevgep1425 = getelementptr i8, ptr %.6533.lcssa, i64 16
  %812 = xor i32 %4, -1
  %813 = add i32 %812, %3
  %814 = zext i32 %813 to i64
  %815 = shl nuw nsw i64 %814, 3
  %816 = add nuw nsw i64 %815, 24
  %scevgep1426 = getelementptr i8, ptr %.6533.lcssa, i64 %816
  %817 = getelementptr i8, ptr %1, i64 %810
  %818 = getelementptr i8, ptr %817, i64 8
  %819 = getelementptr i8, ptr %1, i64 %810
  %820 = getelementptr i8, ptr %819, i64 16
  %bound01434 = icmp ult ptr %scevgep1422, %scevgep1426
  %invariant.gep1694 = getelementptr i8, ptr %0, i64 8
  br label %.lr.ph751

.lr.ph751:                                        ; preds = %.lr.ph751.preheader, %._crit_edge740
  %indvar1417 = phi i64 [ 0, %.lr.ph751.preheader ], [ %indvar.next1418, %._crit_edge740 ]
  %indvars.iv858 = phi i64 [ %809, %.lr.ph751.preheader ], [ %indvars.iv.next859, %._crit_edge740 ]
  %indvars.iv855.in = phi i32 [ %4, %.lr.ph751.preheader ], [ %indvars.iv855, %._crit_edge740 ]
  %.8493748 = phi double [ %.7492.lcssa, %.lr.ph751.preheader ], [ %876, %._crit_edge740 ]
  %.8523.in746 = phi i32 [ %4, %.lr.ph751.preheader ], [ %.8523749, %._crit_edge740 ]
  %.7534745 = phi ptr [ %745, %.lr.ph751.preheader ], [ %829, %._crit_edge740 ]
  %821 = trunc i64 %indvar1417 to i32
  %822 = zext i32 %indvars.iv855.in to i64
  %823 = mul nsw i64 %indvar1417, -8
  %scevgep1419 = getelementptr i8, ptr %818, i64 %823
  %scevgep1420 = getelementptr i8, ptr %820, i64 %823
  %824 = trunc i64 %indvar1417 to i32
  %825 = add i32 %811, %824
  %826 = zext i32 %825 to i64
  %827 = shl nuw nsw i64 %826, 3
  %scevgep1421 = getelementptr i8, ptr %scevgep1420, i64 %827
  %scevgep1424 = getelementptr i8, ptr %scevgep1423, i64 %827
  %indvars.iv855 = add i32 %indvars.iv855.in, 1
  %.8523749 = add nsw i32 %.8523.in746, 1
  %.19 = getelementptr inbounds double, ptr %1, i64 %indvars.iv858
  %828 = load double, ptr %0, align 8, !tbaa !5
  store double %828, ptr %.19, align 8, !tbaa !5
  %829 = getelementptr inbounds i8, ptr %.7534745, i64 8
  %830 = load double, ptr %829, align 8, !tbaa !5
  %831 = fmul double %830, %828
  store double %831, ptr %0, align 8, !tbaa !5
  %.not540734 = icmp slt i32 %.8523.in746, 1
  br i1 %.not540734, label %._crit_edge740, label %.lr.ph739.preheader

.lr.ph739.preheader:                              ; preds = %.lr.ph751
  %min.iters.check1440 = icmp ult i32 %indvars.iv855.in, 4
  br i1 %min.iters.check1440, label %.lr.ph739.preheader1549, label %vector.memcheck1416

vector.memcheck1416:                              ; preds = %.lr.ph739.preheader
  %bound01427 = icmp ult ptr %scevgep1419, %scevgep1424
  %bound11428 = icmp ult ptr %scevgep1422, %scevgep1421
  %found.conflict1429 = and i1 %bound01427, %bound11428
  %bound01430 = icmp ult ptr %scevgep1419, %scevgep1426
  %bound11431 = icmp ult ptr %scevgep1425, %scevgep1421
  %found.conflict1432 = and i1 %bound01430, %bound11431
  %conflict.rdx1433 = or i1 %found.conflict1429, %found.conflict1432
  %bound11435 = icmp ult ptr %scevgep1425, %scevgep1424
  %found.conflict1436 = and i1 %bound01434, %bound11435
  %conflict.rdx1437 = or i1 %conflict.rdx1433, %found.conflict1436
  br i1 %conflict.rdx1437, label %.lr.ph739.preheader1549, label %vector.ph1441

vector.ph1441:                                    ; preds = %vector.memcheck1416
  %n.vec1443 = and i64 %822, 4294967294
  %832 = shl nuw nsw i64 %n.vec1443, 3
  %ind.end1444 = getelementptr i8, ptr %.19, i64 %832
  %833 = shl nuw nsw i64 %n.vec1443, 3
  %ind.end1446 = getelementptr i8, ptr %0, i64 %833
  %ind.end1449 = or i32 %indvars.iv855.in, 1
  %834 = load double, ptr %829, align 8, !tbaa !5, !alias.scope !133
  %broadcast.splatinsert1459 = insertelement <2 x double> poison, double %834, i64 0
  %broadcast.splat1460 = shufflevector <2 x double> %broadcast.splatinsert1459, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1696 = getelementptr i8, ptr %.19, i64 8
  %835 = fneg <2 x double> %broadcast.splat1460
  br label %vector.body1451

vector.body1451:                                  ; preds = %vector.body1451, %vector.ph1441
  %index1452 = phi i64 [ 0, %vector.ph1441 ], [ %index.next1461, %vector.body1451 ]
  %offset.idx1453 = shl i64 %index1452, 3
  %offset.idx1455 = shl i64 %index1452, 3
  %gep1695 = getelementptr i8, ptr %invariant.gep1694, i64 %offset.idx1455
  %wide.load1457 = load <2 x double>, ptr %gep1695, align 8, !tbaa !5, !alias.scope !136, !noalias !133
  %gep1697 = getelementptr i8, ptr %invariant.gep1696, i64 %offset.idx1453
  %wide.load1458 = load <2 x double>, ptr %gep1697, align 8, !tbaa !5, !alias.scope !138, !noalias !140
  %836 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1460, <2 x double> %wide.load1457, <2 x double> %wide.load1458)
  %837 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %835, <2 x double> %wide.load1458, <2 x double> %wide.load1457)
  store <2 x double> %837, ptr %gep1697, align 8, !tbaa !5, !alias.scope !138, !noalias !140
  store <2 x double> %836, ptr %gep1695, align 8, !tbaa !5, !alias.scope !136, !noalias !133
  %index.next1461 = add nuw i64 %index1452, 2
  %838 = icmp eq i64 %index.next1461, %n.vec1443
  br i1 %838, label %middle.block1438, label %vector.body1451, !llvm.loop !141

middle.block1438:                                 ; preds = %vector.body1451
  %cmp.n1462 = icmp eq i64 %n.vec1443, %822
  br i1 %cmp.n1462, label %._crit_edge740, label %.lr.ph739.preheader1549

.lr.ph739.preheader1549:                          ; preds = %middle.block1438, %vector.memcheck1416, %.lr.ph739.preheader
  %.20737.ph = phi ptr [ %.19, %vector.memcheck1416 ], [ %.19, %.lr.ph739.preheader ], [ %ind.end1444, %middle.block1438 ]
  %.20483736.ph = phi ptr [ %0, %vector.memcheck1416 ], [ %0, %.lr.ph739.preheader ], [ %ind.end1446, %middle.block1438 ]
  %.11514735.ph = phi i32 [ 1, %vector.memcheck1416 ], [ 1, %.lr.ph739.preheader ], [ %ind.end1449, %middle.block1438 ]
  %839 = add i32 %821, %4
  %xtraiter1613 = and i32 %839, 1
  %lcmp.mod1614.not = icmp eq i32 %xtraiter1613, 0
  br i1 %lcmp.mod1614.not, label %.lr.ph739.prol.loopexit, label %.lr.ph739.prol

.lr.ph739.prol:                                   ; preds = %.lr.ph739.preheader1549
  %840 = load double, ptr %829, align 8, !tbaa !5
  %841 = getelementptr inbounds i8, ptr %.20483736.ph, i64 8
  %842 = load double, ptr %841, align 8, !tbaa !5
  %843 = getelementptr inbounds i8, ptr %.20737.ph, i64 8
  %844 = load double, ptr %843, align 8, !tbaa !5
  %845 = tail call double @llvm.fmuladd.f64(double %840, double %842, double %844)
  %846 = fneg double %840
  %847 = tail call double @llvm.fmuladd.f64(double %846, double %844, double %842)
  store double %847, ptr %843, align 8, !tbaa !5
  store double %845, ptr %841, align 8, !tbaa !5
  %848 = add nuw i32 %.11514735.ph, 1
  br label %.lr.ph739.prol.loopexit

.lr.ph739.prol.loopexit:                          ; preds = %.lr.ph739.prol, %.lr.ph739.preheader1549
  %.lcssa1552.unr = phi ptr [ poison, %.lr.ph739.preheader1549 ], [ %841, %.lr.ph739.prol ]
  %.lcssa1551.unr = phi ptr [ poison, %.lr.ph739.preheader1549 ], [ %843, %.lr.ph739.prol ]
  %.20737.unr = phi ptr [ %.20737.ph, %.lr.ph739.preheader1549 ], [ %843, %.lr.ph739.prol ]
  %.20483736.unr = phi ptr [ %.20483736.ph, %.lr.ph739.preheader1549 ], [ %841, %.lr.ph739.prol ]
  %.11514735.unr = phi i32 [ %.11514735.ph, %.lr.ph739.preheader1549 ], [ %848, %.lr.ph739.prol ]
  %849 = icmp eq i32 %indvars.iv855.in, %.11514735.ph
  br i1 %849, label %._crit_edge740, label %.lr.ph739

.lr.ph739:                                        ; preds = %.lr.ph739.prol.loopexit, %.lr.ph739
  %.20737 = phi ptr [ %862, %.lr.ph739 ], [ %.20737.unr, %.lr.ph739.prol.loopexit ]
  %.20483736 = phi ptr [ %860, %.lr.ph739 ], [ %.20483736.unr, %.lr.ph739.prol.loopexit ]
  %.11514735 = phi i32 [ %867, %.lr.ph739 ], [ %.11514735.unr, %.lr.ph739.prol.loopexit ]
  %850 = load double, ptr %829, align 8, !tbaa !5
  %851 = getelementptr inbounds i8, ptr %.20483736, i64 8
  %852 = load double, ptr %851, align 8, !tbaa !5
  %853 = getelementptr inbounds i8, ptr %.20737, i64 8
  %854 = load double, ptr %853, align 8, !tbaa !5
  %855 = tail call double @llvm.fmuladd.f64(double %850, double %852, double %854)
  %856 = fneg double %850
  %857 = tail call double @llvm.fmuladd.f64(double %856, double %854, double %852)
  store double %857, ptr %853, align 8, !tbaa !5
  store double %855, ptr %851, align 8, !tbaa !5
  %858 = add nuw i32 %.11514735, 1
  %859 = load double, ptr %829, align 8, !tbaa !5
  %860 = getelementptr inbounds i8, ptr %.20483736, i64 16
  %861 = load double, ptr %860, align 8, !tbaa !5
  %862 = getelementptr inbounds i8, ptr %.20737, i64 16
  %863 = load double, ptr %862, align 8, !tbaa !5
  %864 = tail call double @llvm.fmuladd.f64(double %859, double %861, double %863)
  %865 = fneg double %859
  %866 = tail call double @llvm.fmuladd.f64(double %865, double %863, double %861)
  store double %866, ptr %862, align 8, !tbaa !5
  store double %864, ptr %860, align 8, !tbaa !5
  %867 = add nuw i32 %.11514735, 2
  %exitcond857.not.1 = icmp eq i32 %858, %indvars.iv855.in
  br i1 %exitcond857.not.1, label %._crit_edge740, label %.lr.ph739, !llvm.loop !142

._crit_edge740:                                   ; preds = %.lr.ph739.prol.loopexit, %.lr.ph739, %middle.block1438, %.lr.ph751
  %.20483.lcssa = phi ptr [ %0, %.lr.ph751 ], [ %ind.end1446, %middle.block1438 ], [ %.lcssa1552.unr, %.lr.ph739.prol.loopexit ], [ %860, %.lr.ph739 ]
  %.20.lcssa = phi ptr [ %.19, %.lr.ph751 ], [ %ind.end1444, %middle.block1438 ], [ %.lcssa1551.unr, %.lr.ph739.prol.loopexit ], [ %862, %.lr.ph739 ]
  %868 = getelementptr inbounds i8, ptr %.20.lcssa, i64 8
  %869 = load double, ptr %868, align 8, !tbaa !5
  %870 = getelementptr inbounds i8, ptr %.20483.lcssa, i64 8
  store double %869, ptr %870, align 8, !tbaa !5
  %871 = load double, ptr %829, align 8, !tbaa !5
  %872 = fneg double %871
  %873 = fmul double %869, %872
  store double %873, ptr %868, align 8, !tbaa !5
  %874 = load double, ptr %829, align 8, !tbaa !5
  %875 = tail call double @llvm.fmuladd.f64(double %874, double %874, double 1.000000e+00)
  %876 = fmul double %.8493748, %875
  %indvars.iv.next859 = add nsw i64 %indvars.iv858, -1
  %exitcond861.not = icmp eq i32 %.8523749, %3
  %indvar.next1418 = add i64 %indvar1417, 1
  br i1 %exitcond861.not, label %.loopexit558, label %.lr.ph751, !llvm.loop !143

.loopexit558:                                     ; preds = %._crit_edge740, %._crit_edge758, %._crit_edge731, %600
  %.9494 = phi double [ 1.000000e+00, %600 ], [ %.7492.lcssa, %._crit_edge731 ], [ %672, %._crit_edge758 ], [ %876, %._crit_edge740 ]
  %877 = tail call double @sqrt(double noundef %.9494) #4
  %878 = fdiv double 1.000000e+00, %877
  %.not543770 = icmp slt i32 %3, 0
  br i1 %.not543770, label %.loopexit, label %.lr.ph775.preheader

.lr.ph775.preheader:                              ; preds = %.loopexit558
  %879 = add nuw i32 %3, 1
  %880 = zext i32 %879 to i64
  %min.iters.check1518 = icmp ult i32 %3, 5
  br i1 %min.iters.check1518, label %.lr.ph775.preheader1545, label %vector.memcheck1510

vector.memcheck1510:                              ; preds = %.lr.ph775.preheader
  %881 = zext nneg i32 %3 to i64
  %882 = shl nuw nsw i64 %881, 3
  %883 = add nuw nsw i64 %882, 8
  %scevgep1511 = getelementptr i8, ptr %0, i64 %883
  %scevgep1512 = getelementptr i8, ptr %1, i64 %883
  %bound01513 = icmp ugt ptr %scevgep1512, %0
  %bound11514 = icmp ugt ptr %scevgep1511, %1
  %found.conflict1515 = and i1 %bound01513, %bound11514
  br i1 %found.conflict1515, label %.lr.ph775.preheader1545, label %vector.ph1519

vector.ph1519:                                    ; preds = %vector.memcheck1510
  %n.vec1521 = and i64 %880, 4294967292
  %884 = shl nuw nsw i64 %n.vec1521, 3
  %ind.end1522 = getelementptr i8, ptr %1, i64 %884
  %885 = shl nuw nsw i64 %n.vec1521, 3
  %ind.end1524 = getelementptr i8, ptr %0, i64 %885
  %ind.end1527 = trunc nuw i64 %n.vec1521 to i32
  %broadcast.splatinsert1539 = insertelement <2 x double> poison, double %878, i64 0
  %broadcast.splat1540 = shufflevector <2 x double> %broadcast.splatinsert1539, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1529

vector.body1529:                                  ; preds = %vector.body1529, %vector.ph1519
  %index1530 = phi i64 [ 0, %vector.ph1519 ], [ %index.next1543, %vector.body1529 ]
  %offset.idx1531 = shl i64 %index1530, 3
  %next.gep1532 = getelementptr i8, ptr %1, i64 %offset.idx1531
  %offset.idx1534 = shl i64 %index1530, 3
  %next.gep1535 = getelementptr i8, ptr %0, i64 %offset.idx1534
  %886 = getelementptr i8, ptr %next.gep1535, i64 16
  %wide.load1537 = load <2 x double>, ptr %next.gep1535, align 8, !tbaa !5, !alias.scope !144, !noalias !147
  %wide.load1538 = load <2 x double>, ptr %886, align 8, !tbaa !5, !alias.scope !144, !noalias !147
  %887 = fmul <2 x double> %broadcast.splat1540, %wide.load1537
  %888 = fmul <2 x double> %broadcast.splat1540, %wide.load1538
  store <2 x double> %887, ptr %next.gep1535, align 8, !tbaa !5, !alias.scope !144, !noalias !147
  store <2 x double> %888, ptr %886, align 8, !tbaa !5, !alias.scope !144, !noalias !147
  %889 = getelementptr i8, ptr %next.gep1532, i64 16
  %wide.load1541 = load <2 x double>, ptr %next.gep1532, align 8, !tbaa !5, !alias.scope !147
  %wide.load1542 = load <2 x double>, ptr %889, align 8, !tbaa !5, !alias.scope !147
  %890 = fmul <2 x double> %broadcast.splat1540, %wide.load1541
  %891 = fmul <2 x double> %broadcast.splat1540, %wide.load1542
  store <2 x double> %890, ptr %next.gep1532, align 8, !tbaa !5, !alias.scope !147
  store <2 x double> %891, ptr %889, align 8, !tbaa !5, !alias.scope !147
  %index.next1543 = add nuw i64 %index1530, 4
  %892 = icmp eq i64 %index.next1543, %n.vec1521
  br i1 %892, label %middle.block1516, label %vector.body1529, !llvm.loop !149

middle.block1516:                                 ; preds = %vector.body1529
  %cmp.n1544 = icmp eq i64 %n.vec1521, %880
  br i1 %cmp.n1544, label %.loopexit, label %.lr.ph775.preheader1545

.lr.ph775.preheader1545:                          ; preds = %middle.block1516, %vector.memcheck1510, %.lr.ph775.preheader
  %.21773.ph = phi ptr [ %1, %vector.memcheck1510 ], [ %1, %.lr.ph775.preheader ], [ %ind.end1522, %middle.block1516 ]
  %.21484772.ph = phi ptr [ %0, %vector.memcheck1510 ], [ %0, %.lr.ph775.preheader ], [ %ind.end1524, %middle.block1516 ]
  %.9524771.ph = phi i32 [ 0, %vector.memcheck1510 ], [ 0, %.lr.ph775.preheader ], [ %ind.end1527, %middle.block1516 ]
  %893 = add i32 %.9524771.ph, %3
  %894 = and i32 %893, 1
  %lcmp.mod1618.not.not = icmp eq i32 %894, 0
  br i1 %lcmp.mod1618.not.not, label %.lr.ph775.prol, label %.lr.ph775.prol.loopexit

.lr.ph775.prol:                                   ; preds = %.lr.ph775.preheader1545
  %895 = load double, ptr %.21484772.ph, align 8, !tbaa !5
  %896 = fmul double %878, %895
  %897 = getelementptr inbounds i8, ptr %.21484772.ph, i64 8
  store double %896, ptr %.21484772.ph, align 8, !tbaa !5
  %898 = load double, ptr %.21773.ph, align 8, !tbaa !5
  %899 = fmul double %878, %898
  %900 = getelementptr inbounds i8, ptr %.21773.ph, i64 8
  store double %899, ptr %.21773.ph, align 8, !tbaa !5
  %901 = add nuw i32 %.9524771.ph, 1
  br label %.lr.ph775.prol.loopexit

.lr.ph775.prol.loopexit:                          ; preds = %.lr.ph775.prol, %.lr.ph775.preheader1545
  %.21773.unr = phi ptr [ %.21773.ph, %.lr.ph775.preheader1545 ], [ %900, %.lr.ph775.prol ]
  %.21484772.unr = phi ptr [ %.21484772.ph, %.lr.ph775.preheader1545 ], [ %897, %.lr.ph775.prol ]
  %.9524771.unr = phi i32 [ %.9524771.ph, %.lr.ph775.preheader1545 ], [ %901, %.lr.ph775.prol ]
  %902 = icmp eq i32 %.9524771.ph, %3
  br i1 %902, label %.loopexit, label %.lr.ph775

.lr.ph775:                                        ; preds = %.lr.ph775.prol.loopexit, %.lr.ph775
  %.21773 = phi ptr [ %915, %.lr.ph775 ], [ %.21773.unr, %.lr.ph775.prol.loopexit ]
  %.21484772 = phi ptr [ %912, %.lr.ph775 ], [ %.21484772.unr, %.lr.ph775.prol.loopexit ]
  %.9524771 = phi i32 [ %916, %.lr.ph775 ], [ %.9524771.unr, %.lr.ph775.prol.loopexit ]
  %903 = load double, ptr %.21484772, align 8, !tbaa !5
  %904 = fmul double %878, %903
  %905 = getelementptr inbounds i8, ptr %.21484772, i64 8
  store double %904, ptr %.21484772, align 8, !tbaa !5
  %906 = load double, ptr %.21773, align 8, !tbaa !5
  %907 = fmul double %878, %906
  %908 = getelementptr inbounds i8, ptr %.21773, i64 8
  store double %907, ptr %.21773, align 8, !tbaa !5
  %909 = add nuw i32 %.9524771, 1
  %910 = load double, ptr %905, align 8, !tbaa !5
  %911 = fmul double %878, %910
  %912 = getelementptr inbounds i8, ptr %.21484772, i64 16
  store double %911, ptr %905, align 8, !tbaa !5
  %913 = load double, ptr %908, align 8, !tbaa !5
  %914 = fmul double %878, %913
  %915 = getelementptr inbounds i8, ptr %.21773, i64 16
  store double %914, ptr %908, align 8, !tbaa !5
  %916 = add nuw i32 %.9524771, 2
  %exitcond867.not.1 = icmp eq i32 %909, %3
  br i1 %exitcond867.not.1, label %.loopexit, label %.lr.ph775, !llvm.loop !150

.loopexit:                                        ; preds = %.lr.ph702.prol.loopexit, %.lr.ph702, %.lr.ph775.prol.loopexit, %.lr.ph775, %middle.block1303, %middle.block1516, %.loopexit561, %.loopexit558
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #3

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

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

; 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>) #3

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nofree nounwind memory(readwrite, inaccessiblemem: write) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10}
!10 = distinct !{!10, !11}
!11 = distinct !{!11, !"LVerDomain"}
!12 = !{!13}
!13 = distinct !{!13, !11}
!14 = !{!15}
!15 = distinct !{!15, !11}
!16 = !{!13, !10}
!17 = distinct !{!17, !18, !19, !20}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!"llvm.loop.isvectorized", i32 1}
!20 = !{!"llvm.loop.unroll.runtime.disable"}
!21 = distinct !{!21, !18, !19}
!22 = distinct !{!22, !18}
!23 = !{!24}
!24 = distinct !{!24, !25}
!25 = distinct !{!25, !"LVerDomain"}
!26 = !{!27}
!27 = distinct !{!27, !25}
!28 = !{!29}
!29 = distinct !{!29, !25}
!30 = !{!27, !24}
!31 = distinct !{!31, !18, !19, !20}
!32 = distinct !{!32, !18, !19}
!33 = !{!34}
!34 = distinct !{!34, !35}
!35 = distinct !{!35, !"LVerDomain"}
!36 = !{!37}
!37 = distinct !{!37, !35}
!38 = !{!39}
!39 = distinct !{!39, !35}
!40 = !{!37, !34}
!41 = distinct !{!41, !18, !19, !20}
!42 = distinct !{!42, !18, !19}
!43 = distinct !{!43, !18}
!44 = !{!45}
!45 = distinct !{!45, !46}
!46 = distinct !{!46, !"LVerDomain"}
!47 = !{!48}
!48 = distinct !{!48, !46}
!49 = !{!50}
!50 = distinct !{!50, !46}
!51 = !{!48, !45}
!52 = distinct !{!52, !18, !19, !20}
!53 = distinct !{!53, !18, !19}
!54 = distinct !{!54, !18}
!55 = !{!56}
!56 = distinct !{!56, !57}
!57 = distinct !{!57, !"LVerDomain"}
!58 = !{!59}
!59 = distinct !{!59, !57}
!60 = !{!61}
!61 = distinct !{!61, !57}
!62 = !{!59, !56}
!63 = distinct !{!63, !18, !19, !20}
!64 = distinct !{!64, !18, !19}
!65 = !{!66}
!66 = distinct !{!66, !67}
!67 = distinct !{!67, !"LVerDomain"}
!68 = !{!69}
!69 = distinct !{!69, !67}
!70 = !{!71}
!71 = distinct !{!71, !67}
!72 = !{!69, !66}
!73 = distinct !{!73, !18, !19, !20}
!74 = distinct !{!74, !18, !19}
!75 = distinct !{!75, !18}
!76 = !{!77}
!77 = distinct !{!77, !78}
!78 = distinct !{!78, !"LVerDomain"}
!79 = !{!80}
!80 = distinct !{!80, !78}
!81 = !{!82}
!82 = distinct !{!82, !78}
!83 = !{!80, !77}
!84 = distinct !{!84, !18, !19, !20}
!85 = distinct !{!85, !18, !19}
!86 = !{!87}
!87 = distinct !{!87, !88}
!88 = distinct !{!88, !"LVerDomain"}
!89 = !{!90}
!90 = distinct !{!90, !88}
!91 = !{!92}
!92 = distinct !{!92, !88}
!93 = !{!90, !87}
!94 = distinct !{!94, !18, !19, !20}
!95 = distinct !{!95, !18, !19}
!96 = distinct !{!96, !18}
!97 = !{!98}
!98 = distinct !{!98, !99}
!99 = distinct !{!99, !"LVerDomain"}
!100 = !{!101}
!101 = distinct !{!101, !99}
!102 = distinct !{!102, !18, !19, !20}
!103 = distinct !{!103, !18, !19}
!104 = !{!105}
!105 = distinct !{!105, !106}
!106 = distinct !{!106, !"LVerDomain"}
!107 = !{!108}
!108 = distinct !{!108, !106}
!109 = !{!110}
!110 = distinct !{!110, !106}
!111 = !{!108, !105}
!112 = distinct !{!112, !18, !19, !20}
!113 = distinct !{!113, !18, !19}
!114 = distinct !{!114, !18}
!115 = !{!116}
!116 = distinct !{!116, !117}
!117 = distinct !{!117, !"LVerDomain"}
!118 = !{!119}
!119 = distinct !{!119, !117}
!120 = !{!121}
!121 = distinct !{!121, !117}
!122 = !{!119, !116}
!123 = distinct !{!123, !18, !19, !20}
!124 = distinct !{!124, !18, !19}
!125 = distinct !{!125, !18}
!126 = !{!127}
!127 = distinct !{!127, !128}
!128 = distinct !{!128, !"LVerDomain"}
!129 = !{!130}
!130 = distinct !{!130, !128}
!131 = distinct !{!131, !18, !19, !20}
!132 = distinct !{!132, !18, !19}
!133 = !{!134}
!134 = distinct !{!134, !135}
!135 = distinct !{!135, !"LVerDomain"}
!136 = !{!137}
!137 = distinct !{!137, !135}
!138 = !{!139}
!139 = distinct !{!139, !135}
!140 = !{!137, !134}
!141 = distinct !{!141, !18, !19, !20}
!142 = distinct !{!142, !18, !19}
!143 = distinct !{!143, !18}
!144 = !{!145}
!145 = distinct !{!145, !146}
!146 = distinct !{!146, !"LVerDomain"}
!147 = !{!148}
!148 = distinct !{!148, !146}
!149 = distinct !{!149, !18, !19, !20}
!150 = distinct !{!150, !18, !19}


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