; LLVM IR from glaretechnologies/substrata :: libs/fft2d (fft4g)

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

30:                                               ; preds = %693, %3
  %31 = load i32, ptr %14, align 4, !tbaa !5
  %32 = shl i32 %31, 1
  %33 = load i32, ptr %4, align 4, !tbaa !5
  %34 = icmp slt i32 %32, %33
  br i1 %34, label %35, label %695

35:                                               ; preds = %30
  %36 = load i32, ptr %14, align 4, !tbaa !5
  %37 = shl i32 %36, 2
  store i32 %37, ptr %15, align 4, !tbaa !5
  store i32 0, ptr %7, align 4, !tbaa !5
  br label %38

38:                                               ; preds = %209, %35
  %39 = load i32, ptr %7, align 4, !tbaa !5
  %40 = load i32, ptr %14, align 4, !tbaa !5
  %41 = sub nsw i32 %40, 2
  %42 = icmp sle i32 %39, %41
  br i1 %42, label %43, label %212

43:                                               ; preds = %38
  %44 = load i32, ptr %7, align 4, !tbaa !5
  %45 = load i32, ptr %14, align 4, !tbaa !5
  %46 = add nsw i32 %44, %45
  store i32 %46, ptr %8, align 4, !tbaa !5
  %47 = load i32, ptr %8, align 4, !tbaa !5
  %48 = load i32, ptr %14, align 4, !tbaa !5
  %49 = add nsw i32 %47, %48
  store i32 %49, ptr %9, align 4, !tbaa !5
  %50 = load i32, ptr %9, align 4, !tbaa !5
  %51 = load i32, ptr %14, align 4, !tbaa !5
  %52 = add nsw i32 %50, %51
  store i32 %52, ptr %10, align 4, !tbaa !5
  %53 = load ptr, ptr %5, align 8, !tbaa !9
  %54 = load i32, ptr %7, align 4, !tbaa !5
  %55 = sext i32 %54 to i64
  %56 = getelementptr inbounds double, ptr %53, i64 %55
  %57 = load double, ptr %56, align 8, !tbaa !11
  %58 = load ptr, ptr %5, align 8, !tbaa !9
  %59 = load i32, ptr %8, align 4, !tbaa !5
  %60 = sext i32 %59 to i64
  %61 = getelementptr inbounds double, ptr %58, i64 %60
  %62 = load double, ptr %61, align 8, !tbaa !11
  %63 = fadd double %57, %62
  store double %63, ptr %22, align 8, !tbaa !11
  %64 = load ptr, ptr %5, align 8, !tbaa !9
  %65 = load i32, ptr %7, align 4, !tbaa !5
  %66 = add nsw i32 %65, 1
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds double, ptr %64, i64 %67
  %69 = load double, ptr %68, align 8, !tbaa !11
  %70 = load ptr, ptr %5, align 8, !tbaa !9
  %71 = load i32, ptr %8, align 4, !tbaa !5
  %72 = add nsw i32 %71, 1
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds double, ptr %70, i64 %73
  %75 = load double, ptr %74, align 8, !tbaa !11
  %76 = fadd double %69, %75
  store double %76, ptr %23, align 8, !tbaa !11
  %77 = load ptr, ptr %5, align 8, !tbaa !9
  %78 = load i32, ptr %7, align 4, !tbaa !5
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds double, ptr %77, i64 %79
  %81 = load double, ptr %80, align 8, !tbaa !11
  %82 = load ptr, ptr %5, align 8, !tbaa !9
  %83 = load i32, ptr %8, align 4, !tbaa !5
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds double, ptr %82, i64 %84
  %86 = load double, ptr %85, align 8, !tbaa !11
  %87 = fsub double %81, %86
  store double %87, ptr %24, align 8, !tbaa !11
  %88 = load ptr, ptr %5, align 8, !tbaa !9
  %89 = load i32, ptr %7, align 4, !tbaa !5
  %90 = add nsw i32 %89, 1
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds double, ptr %88, i64 %91
  %93 = load double, ptr %92, align 8, !tbaa !11
  %94 = load ptr, ptr %5, align 8, !tbaa !9
  %95 = load i32, ptr %8, align 4, !tbaa !5
  %96 = add nsw i32 %95, 1
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds double, ptr %94, i64 %97
  %99 = load double, ptr %98, align 8, !tbaa !11
  %100 = fsub double %93, %99
  store double %100, ptr %25, align 8, !tbaa !11
  %101 = load ptr, ptr %5, align 8, !tbaa !9
  %102 = load i32, ptr %9, align 4, !tbaa !5
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds double, ptr %101, i64 %103
  %105 = load double, ptr %104, align 8, !tbaa !11
  %106 = load ptr, ptr %5, align 8, !tbaa !9
  %107 = load i32, ptr %10, align 4, !tbaa !5
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds double, ptr %106, i64 %108
  %110 = load double, ptr %109, align 8, !tbaa !11
  %111 = fadd double %105, %110
  store double %111, ptr %26, align 8, !tbaa !11
  %112 = load ptr, ptr %5, align 8, !tbaa !9
  %113 = load i32, ptr %9, align 4, !tbaa !5
  %114 = add nsw i32 %113, 1
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds double, ptr %112, i64 %115
  %117 = load double, ptr %116, align 8, !tbaa !11
  %118 = load ptr, ptr %5, align 8, !tbaa !9
  %119 = load i32, ptr %10, align 4, !tbaa !5
  %120 = add nsw i32 %119, 1
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds double, ptr %118, i64 %121
  %123 = load double, ptr %122, align 8, !tbaa !11
  %124 = fadd double %117, %123
  store double %124, ptr %27, align 8, !tbaa !11
  %125 = load ptr, ptr %5, align 8, !tbaa !9
  %126 = load i32, ptr %9, align 4, !tbaa !5
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds double, ptr %125, i64 %127
  %129 = load double, ptr %128, align 8, !tbaa !11
  %130 = load ptr, ptr %5, align 8, !tbaa !9
  %131 = load i32, ptr %10, align 4, !tbaa !5
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds double, ptr %130, i64 %132
  %134 = load double, ptr %133, align 8, !tbaa !11
  %135 = fsub double %129, %134
  store double %135, ptr %28, align 8, !tbaa !11
  %136 = load ptr, ptr %5, align 8, !tbaa !9
  %137 = load i32, ptr %9, align 4, !tbaa !5
  %138 = add nsw i32 %137, 1
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds double, ptr %136, i64 %139
  %141 = load double, ptr %140, align 8, !tbaa !11
  %142 = load ptr, ptr %5, align 8, !tbaa !9
  %143 = load i32, ptr %10, align 4, !tbaa !5
  %144 = add nsw i32 %143, 1
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds double, ptr %142, i64 %145
  %147 = load double, ptr %146, align 8, !tbaa !11
  %148 = fsub double %141, %147
  store double %148, ptr %29, align 8, !tbaa !11
  %149 = load double, ptr %22, align 8, !tbaa !11
  %150 = load double, ptr %26, align 8, !tbaa !11
  %151 = fadd double %149, %150
  %152 = load ptr, ptr %5, align 8, !tbaa !9
  %153 = load i32, ptr %7, align 4, !tbaa !5
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds double, ptr %152, i64 %154
  store double %151, ptr %155, align 8, !tbaa !11
  %156 = load double, ptr %23, align 8, !tbaa !11
  %157 = load double, ptr %27, align 8, !tbaa !11
  %158 = fadd double %156, %157
  %159 = load ptr, ptr %5, align 8, !tbaa !9
  %160 = load i32, ptr %7, align 4, !tbaa !5
  %161 = add nsw i32 %160, 1
  %162 = sext i32 %161 to i64
  %163 = getelementptr inbounds double, ptr %159, i64 %162
  store double %158, ptr %163, align 8, !tbaa !11
  %164 = load double, ptr %22, align 8, !tbaa !11
  %165 = load double, ptr %26, align 8, !tbaa !11
  %166 = fsub double %164, %165
  %167 = load ptr, ptr %5, align 8, !tbaa !9
  %168 = load i32, ptr %9, align 4, !tbaa !5
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds double, ptr %167, i64 %169
  store double %166, ptr %170, align 8, !tbaa !11
  %171 = load double, ptr %23, align 8, !tbaa !11
  %172 = load double, ptr %27, align 8, !tbaa !11
  %173 = fsub double %171, %172
  %174 = load ptr, ptr %5, align 8, !tbaa !9
  %175 = load i32, ptr %9, align 4, !tbaa !5
  %176 = add nsw i32 %175, 1
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds double, ptr %174, i64 %177
  store double %173, ptr %178, align 8, !tbaa !11
  %179 = load double, ptr %24, align 8, !tbaa !11
  %180 = load double, ptr %29, align 8, !tbaa !11
  %181 = fadd double %179, %180
  %182 = load ptr, ptr %5, align 8, !tbaa !9
  %183 = load i32, ptr %8, align 4, !tbaa !5
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds double, ptr %182, i64 %184
  store double %181, ptr %185, align 8, !tbaa !11
  %186 = load double, ptr %25, align 8, !tbaa !11
  %187 = load double, ptr %28, align 8, !tbaa !11
  %188 = fsub double %186, %187
  %189 = load ptr, ptr %5, align 8, !tbaa !9
  %190 = load i32, ptr %8, align 4, !tbaa !5
  %191 = add nsw i32 %190, 1
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds double, ptr %189, i64 %192
  store double %188, ptr %193, align 8, !tbaa !11
  %194 = load double, ptr %24, align 8, !tbaa !11
  %195 = load double, ptr %29, align 8, !tbaa !11
  %196 = fsub double %194, %195
  %197 = load ptr, ptr %5, align 8, !tbaa !9
  %198 = load i32, ptr %10, align 4, !tbaa !5
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds double, ptr %197, i64 %199
  store double %196, ptr %200, align 8, !tbaa !11
  %201 = load double, ptr %25, align 8, !tbaa !11
  %202 = load double, ptr %28, align 8, !tbaa !11
  %203 = fadd double %201, %202
  %204 = load ptr, ptr %5, align 8, !tbaa !9
  %205 = load i32, ptr %10, align 4, !tbaa !5
  %206 = add nsw i32 %205, 1
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds double, ptr %204, i64 %207
  store double %203, ptr %208, align 8, !tbaa !11
  br label %209

209:                                              ; preds = %43
  %210 = load i32, ptr %7, align 4, !tbaa !5
  %211 = add nsw i32 %210, 2
  store i32 %211, ptr %7, align 4, !tbaa !5
  br label %38, !llvm.loop !13

212:                                              ; preds = %38
  %213 = load i32, ptr %15, align 4, !tbaa !5
  %214 = load i32, ptr %4, align 4, !tbaa !5
  %215 = icmp slt i32 %213, %214
  br i1 %215, label %216, label %693

216:                                              ; preds = %212
  %217 = load ptr, ptr %6, align 8, !tbaa !9
  %218 = getelementptr inbounds double, ptr %217, i64 2
  %219 = load double, ptr %218, align 8, !tbaa !11
  store double %219, ptr %16, align 8, !tbaa !11
  %220 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %220, ptr %7, align 4, !tbaa !5
  br label %221

221:                                              ; preds = %414, %216
  %222 = load i32, ptr %7, align 4, !tbaa !5
  %223 = load i32, ptr %14, align 4, !tbaa !5
  %224 = load i32, ptr %15, align 4, !tbaa !5
  %225 = add nsw i32 %223, %224
  %226 = sub nsw i32 %225, 2
  %227 = icmp sle i32 %222, %226
  br i1 %227, label %228, label %417

228:                                              ; preds = %221
  %229 = load i32, ptr %7, align 4, !tbaa !5
  %230 = load i32, ptr %14, align 4, !tbaa !5
  %231 = add nsw i32 %229, %230
  store i32 %231, ptr %8, align 4, !tbaa !5
  %232 = load i32, ptr %8, align 4, !tbaa !5
  %233 = load i32, ptr %14, align 4, !tbaa !5
  %234 = add nsw i32 %232, %233
  store i32 %234, ptr %9, align 4, !tbaa !5
  %235 = load i32, ptr %9, align 4, !tbaa !5
  %236 = load i32, ptr %14, align 4, !tbaa !5
  %237 = add nsw i32 %235, %236
  store i32 %237, ptr %10, align 4, !tbaa !5
  %238 = load ptr, ptr %5, align 8, !tbaa !9
  %239 = load i32, ptr %7, align 4, !tbaa !5
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds double, ptr %238, i64 %240
  %242 = load double, ptr %241, align 8, !tbaa !11
  %243 = load ptr, ptr %5, align 8, !tbaa !9
  %244 = load i32, ptr %8, align 4, !tbaa !5
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds double, ptr %243, i64 %245
  %247 = load double, ptr %246, align 8, !tbaa !11
  %248 = fadd double %242, %247
  store double %248, ptr %22, align 8, !tbaa !11
  %249 = load ptr, ptr %5, align 8, !tbaa !9
  %250 = load i32, ptr %7, align 4, !tbaa !5
  %251 = add nsw i32 %250, 1
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds double, ptr %249, i64 %252
  %254 = load double, ptr %253, align 8, !tbaa !11
  %255 = load ptr, ptr %5, align 8, !tbaa !9
  %256 = load i32, ptr %8, align 4, !tbaa !5
  %257 = add nsw i32 %256, 1
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds double, ptr %255, i64 %258
  %260 = load double, ptr %259, align 8, !tbaa !11
  %261 = fadd double %254, %260
  store double %261, ptr %23, align 8, !tbaa !11
  %262 = load ptr, ptr %5, align 8, !tbaa !9
  %263 = load i32, ptr %7, align 4, !tbaa !5
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds double, ptr %262, i64 %264
  %266 = load double, ptr %265, align 8, !tbaa !11
  %267 = load ptr, ptr %5, align 8, !tbaa !9
  %268 = load i32, ptr %8, align 4, !tbaa !5
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds double, ptr %267, i64 %269
  %271 = load double, ptr %270, align 8, !tbaa !11
  %272 = fsub double %266, %271
  store double %272, ptr %24, align 8, !tbaa !11
  %273 = load ptr, ptr %5, align 8, !tbaa !9
  %274 = load i32, ptr %7, align 4, !tbaa !5
  %275 = add nsw i32 %274, 1
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds double, ptr %273, i64 %276
  %278 = load double, ptr %277, align 8, !tbaa !11
  %279 = load ptr, ptr %5, align 8, !tbaa !9
  %280 = load i32, ptr %8, align 4, !tbaa !5
  %281 = add nsw i32 %280, 1
  %282 = sext i32 %281 to i64
  %283 = getelementptr inbounds double, ptr %279, i64 %282
  %284 = load double, ptr %283, align 8, !tbaa !11
  %285 = fsub double %278, %284
  store double %285, ptr %25, align 8, !tbaa !11
  %286 = load ptr, ptr %5, align 8, !tbaa !9
  %287 = load i32, ptr %9, align 4, !tbaa !5
  %288 = sext i32 %287 to i64
  %289 = getelementptr inbounds double, ptr %286, i64 %288
  %290 = load double, ptr %289, align 8, !tbaa !11
  %291 = load ptr, ptr %5, align 8, !tbaa !9
  %292 = load i32, ptr %10, align 4, !tbaa !5
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds double, ptr %291, i64 %293
  %295 = load double, ptr %294, align 8, !tbaa !11
  %296 = fadd double %290, %295
  store double %296, ptr %26, align 8, !tbaa !11
  %297 = load ptr, ptr %5, align 8, !tbaa !9
  %298 = load i32, ptr %9, align 4, !tbaa !5
  %299 = add nsw i32 %298, 1
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds double, ptr %297, i64 %300
  %302 = load double, ptr %301, align 8, !tbaa !11
  %303 = load ptr, ptr %5, align 8, !tbaa !9
  %304 = load i32, ptr %10, align 4, !tbaa !5
  %305 = add nsw i32 %304, 1
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds double, ptr %303, i64 %306
  %308 = load double, ptr %307, align 8, !tbaa !11
  %309 = fadd double %302, %308
  store double %309, ptr %27, align 8, !tbaa !11
  %310 = load ptr, ptr %5, align 8, !tbaa !9
  %311 = load i32, ptr %9, align 4, !tbaa !5
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds double, ptr %310, i64 %312
  %314 = load double, ptr %313, align 8, !tbaa !11
  %315 = load ptr, ptr %5, align 8, !tbaa !9
  %316 = load i32, ptr %10, align 4, !tbaa !5
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds double, ptr %315, i64 %317
  %319 = load double, ptr %318, align 8, !tbaa !11
  %320 = fsub double %314, %319
  store double %320, ptr %28, align 8, !tbaa !11
  %321 = load ptr, ptr %5, align 8, !tbaa !9
  %322 = load i32, ptr %9, align 4, !tbaa !5
  %323 = add nsw i32 %322, 1
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds double, ptr %321, i64 %324
  %326 = load double, ptr %325, align 8, !tbaa !11
  %327 = load ptr, ptr %5, align 8, !tbaa !9
  %328 = load i32, ptr %10, align 4, !tbaa !5
  %329 = add nsw i32 %328, 1
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds double, ptr %327, i64 %330
  %332 = load double, ptr %331, align 8, !tbaa !11
  %333 = fsub double %326, %332
  store double %333, ptr %29, align 8, !tbaa !11
  %334 = load double, ptr %22, align 8, !tbaa !11
  %335 = load double, ptr %26, align 8, !tbaa !11
  %336 = fadd double %334, %335
  %337 = load ptr, ptr %5, align 8, !tbaa !9
  %338 = load i32, ptr %7, align 4, !tbaa !5
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds double, ptr %337, i64 %339
  store double %336, ptr %340, align 8, !tbaa !11
  %341 = load double, ptr %23, align 8, !tbaa !11
  %342 = load double, ptr %27, align 8, !tbaa !11
  %343 = fadd double %341, %342
  %344 = load ptr, ptr %5, align 8, !tbaa !9
  %345 = load i32, ptr %7, align 4, !tbaa !5
  %346 = add nsw i32 %345, 1
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds double, ptr %344, i64 %347
  store double %343, ptr %348, align 8, !tbaa !11
  %349 = load double, ptr %23, align 8, !tbaa !11
  %350 = load double, ptr %27, align 8, !tbaa !11
  %351 = fsub double %349, %350
  %352 = load ptr, ptr %5, align 8, !tbaa !9
  %353 = load i32, ptr %9, align 4, !tbaa !5
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds double, ptr %352, i64 %354
  store double %351, ptr %355, align 8, !tbaa !11
  %356 = load double, ptr %26, align 8, !tbaa !11
  %357 = load double, ptr %22, align 8, !tbaa !11
  %358 = fsub double %356, %357
  %359 = load ptr, ptr %5, align 8, !tbaa !9
  %360 = load i32, ptr %9, align 4, !tbaa !5
  %361 = add nsw i32 %360, 1
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds double, ptr %359, i64 %362
  store double %358, ptr %363, align 8, !tbaa !11
  %364 = load double, ptr %24, align 8, !tbaa !11
  %365 = load double, ptr %29, align 8, !tbaa !11
  %366 = fadd double %364, %365
  store double %366, ptr %22, align 8, !tbaa !11
  %367 = load double, ptr %25, align 8, !tbaa !11
  %368 = load double, ptr %28, align 8, !tbaa !11
  %369 = fsub double %367, %368
  store double %369, ptr %23, align 8, !tbaa !11
  %370 = load double, ptr %16, align 8, !tbaa !11
  %371 = load double, ptr %23, align 8, !tbaa !11
  %372 = load double, ptr %22, align 8, !tbaa !11
  %373 = fadd double %371, %372
  %374 = fmul double %370, %373
  %375 = load ptr, ptr %5, align 8, !tbaa !9
  %376 = load i32, ptr %8, align 4, !tbaa !5
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds double, ptr %375, i64 %377
  store double %374, ptr %378, align 8, !tbaa !11
  %379 = load double, ptr %16, align 8, !tbaa !11
  %380 = load double, ptr %23, align 8, !tbaa !11
  %381 = load double, ptr %22, align 8, !tbaa !11
  %382 = fsub double %380, %381
  %383 = fmul double %379, %382
  %384 = load ptr, ptr %5, align 8, !tbaa !9
  %385 = load i32, ptr %8, align 4, !tbaa !5
  %386 = add nsw i32 %385, 1
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds double, ptr %384, i64 %387
  store double %383, ptr %388, align 8, !tbaa !11
  %389 = load double, ptr %29, align 8, !tbaa !11
  %390 = load double, ptr %24, align 8, !tbaa !11
  %391 = fsub double %389, %390
  store double %391, ptr %22, align 8, !tbaa !11
  %392 = load double, ptr %28, align 8, !tbaa !11
  %393 = load double, ptr %25, align 8, !tbaa !11
  %394 = fadd double %392, %393
  store double %394, ptr %23, align 8, !tbaa !11
  %395 = load double, ptr %16, align 8, !tbaa !11
  %396 = load double, ptr %22, align 8, !tbaa !11
  %397 = load double, ptr %23, align 8, !tbaa !11
  %398 = fadd double %396, %397
  %399 = fmul double %395, %398
  %400 = load ptr, ptr %5, align 8, !tbaa !9
  %401 = load i32, ptr %10, align 4, !tbaa !5
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds double, ptr %400, i64 %402
  store double %399, ptr %403, align 8, !tbaa !11
  %404 = load double, ptr %16, align 8, !tbaa !11
  %405 = load double, ptr %22, align 8, !tbaa !11
  %406 = load double, ptr %23, align 8, !tbaa !11
  %407 = fsub double %405, %406
  %408 = fmul double %404, %407
  %409 = load ptr, ptr %5, align 8, !tbaa !9
  %410 = load i32, ptr %10, align 4, !tbaa !5
  %411 = add nsw i32 %410, 1
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds double, ptr %409, i64 %412
  store double %408, ptr %413, align 8, !tbaa !11
  br label %414

414:                                              ; preds = %228
  %415 = load i32, ptr %7, align 4, !tbaa !5
  %416 = add nsw i32 %415, 2
  store i32 %416, ptr %7, align 4, !tbaa !5
  br label %221, !llvm.loop !15

417:                                              ; preds = %221
  store i32 1, ptr %12, align 4, !tbaa !5
  store i32 -1, ptr %13, align 4, !tbaa !5
  %418 = load i32, ptr %15, align 4, !tbaa !5
  %419 = shl i32 %418, 1
  store i32 %419, ptr %11, align 4, !tbaa !5
  br label %420

420:                                              ; preds = %688, %417
  %421 = load i32, ptr %11, align 4, !tbaa !5
  %422 = load i32, ptr %4, align 4, !tbaa !5
  %423 = load i32, ptr %15, align 4, !tbaa !5
  %424 = sub nsw i32 %422, %423
  %425 = icmp sle i32 %421, %424
  br i1 %425, label %426, label %692

426:                                              ; preds = %420
  %427 = load i32, ptr %12, align 4, !tbaa !5
  %428 = add nsw i32 %427, 1
  store i32 %428, ptr %12, align 4, !tbaa !5
  %429 = load i32, ptr %13, align 4, !tbaa !5
  %430 = sub nsw i32 0, %429
  store i32 %430, ptr %13, align 4, !tbaa !5
  %431 = load ptr, ptr %6, align 8, !tbaa !9
  %432 = load i32, ptr %12, align 4, !tbaa !5
  %433 = shl i32 %432, 1
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds double, ptr %431, i64 %434
  %436 = load double, ptr %435, align 8, !tbaa !11
  store double %436, ptr %16, align 8, !tbaa !11
  %437 = load ptr, ptr %6, align 8, !tbaa !9
  %438 = load i32, ptr %12, align 4, !tbaa !5
  %439 = shl i32 %438, 1
  %440 = add nsw i32 %439, 1
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds double, ptr %437, i64 %441
  %443 = load double, ptr %442, align 8, !tbaa !11
  store double %443, ptr %17, align 8, !tbaa !11
  %444 = load i32, ptr %13, align 4, !tbaa !5
  %445 = sitofp i32 %444 to double
  %446 = load ptr, ptr %6, align 8, !tbaa !9
  %447 = load i32, ptr %12, align 4, !tbaa !5
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds double, ptr %446, i64 %448
  %450 = load double, ptr %449, align 8, !tbaa !11
  %451 = fmul double %445, %450
  store double %451, ptr %18, align 8, !tbaa !11
  %452 = load ptr, ptr %6, align 8, !tbaa !9
  %453 = load i32, ptr %12, align 4, !tbaa !5
  %454 = load i32, ptr %13, align 4, !tbaa !5
  %455 = add nsw i32 %453, %454
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds double, ptr %452, i64 %456
  %458 = load double, ptr %457, align 8, !tbaa !11
  store double %458, ptr %19, align 8, !tbaa !11
  %459 = load double, ptr %16, align 8, !tbaa !11
  %460 = load double, ptr %19, align 8, !tbaa !11
  %461 = fmul double 2.000000e+00, %460
  %462 = load double, ptr %17, align 8, !tbaa !11
  %463 = fneg double %461
  %464 = call double @llvm.fmuladd.f64(double %463, double %462, double %459)
  store double %464, ptr %20, align 8, !tbaa !11
  %465 = load double, ptr %19, align 8, !tbaa !11
  %466 = fmul double 2.000000e+00, %465
  %467 = load double, ptr %16, align 8, !tbaa !11
  %468 = load double, ptr %17, align 8, !tbaa !11
  %469 = fneg double %468
  %470 = call double @llvm.fmuladd.f64(double %466, double %467, double %469)
  store double %470, ptr %21, align 8, !tbaa !11
  %471 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %471, ptr %7, align 4, !tbaa !5
  br label %472

472:                                              ; preds = %684, %426
  %473 = load i32, ptr %7, align 4, !tbaa !5
  %474 = load i32, ptr %14, align 4, !tbaa !5
  %475 = load i32, ptr %11, align 4, !tbaa !5
  %476 = add nsw i32 %474, %475
  %477 = sub nsw i32 %476, 2
  %478 = icmp sle i32 %473, %477
  br i1 %478, label %479, label %687

479:                                              ; preds = %472
  %480 = load i32, ptr %7, align 4, !tbaa !5
  %481 = load i32, ptr %14, align 4, !tbaa !5
  %482 = add nsw i32 %480, %481
  store i32 %482, ptr %8, align 4, !tbaa !5
  %483 = load i32, ptr %8, align 4, !tbaa !5
  %484 = load i32, ptr %14, align 4, !tbaa !5
  %485 = add nsw i32 %483, %484
  store i32 %485, ptr %9, align 4, !tbaa !5
  %486 = load i32, ptr %9, align 4, !tbaa !5
  %487 = load i32, ptr %14, align 4, !tbaa !5
  %488 = add nsw i32 %486, %487
  store i32 %488, ptr %10, align 4, !tbaa !5
  %489 = load ptr, ptr %5, align 8, !tbaa !9
  %490 = load i32, ptr %7, align 4, !tbaa !5
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds double, ptr %489, i64 %491
  %493 = load double, ptr %492, align 8, !tbaa !11
  %494 = load ptr, ptr %5, align 8, !tbaa !9
  %495 = load i32, ptr %8, align 4, !tbaa !5
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds double, ptr %494, i64 %496
  %498 = load double, ptr %497, align 8, !tbaa !11
  %499 = fadd double %493, %498
  store double %499, ptr %22, align 8, !tbaa !11
  %500 = load ptr, ptr %5, align 8, !tbaa !9
  %501 = load i32, ptr %7, align 4, !tbaa !5
  %502 = add nsw i32 %501, 1
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds double, ptr %500, i64 %503
  %505 = load double, ptr %504, align 8, !tbaa !11
  %506 = load ptr, ptr %5, align 8, !tbaa !9
  %507 = load i32, ptr %8, align 4, !tbaa !5
  %508 = add nsw i32 %507, 1
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds double, ptr %506, i64 %509
  %511 = load double, ptr %510, align 8, !tbaa !11
  %512 = fadd double %505, %511
  store double %512, ptr %23, align 8, !tbaa !11
  %513 = load ptr, ptr %5, align 8, !tbaa !9
  %514 = load i32, ptr %7, align 4, !tbaa !5
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds double, ptr %513, i64 %515
  %517 = load double, ptr %516, align 8, !tbaa !11
  %518 = load ptr, ptr %5, align 8, !tbaa !9
  %519 = load i32, ptr %8, align 4, !tbaa !5
  %520 = sext i32 %519 to i64
  %521 = getelementptr inbounds double, ptr %518, i64 %520
  %522 = load double, ptr %521, align 8, !tbaa !11
  %523 = fsub double %517, %522
  store double %523, ptr %24, align 8, !tbaa !11
  %524 = load ptr, ptr %5, align 8, !tbaa !9
  %525 = load i32, ptr %7, align 4, !tbaa !5
  %526 = add nsw i32 %525, 1
  %527 = sext i32 %526 to i64
  %528 = getelementptr inbounds double, ptr %524, i64 %527
  %529 = load double, ptr %528, align 8, !tbaa !11
  %530 = load ptr, ptr %5, align 8, !tbaa !9
  %531 = load i32, ptr %8, align 4, !tbaa !5
  %532 = add nsw i32 %531, 1
  %533 = sext i32 %532 to i64
  %534 = getelementptr inbounds double, ptr %530, i64 %533
  %535 = load double, ptr %534, align 8, !tbaa !11
  %536 = fsub double %529, %535
  store double %536, ptr %25, align 8, !tbaa !11
  %537 = load ptr, ptr %5, align 8, !tbaa !9
  %538 = load i32, ptr %9, align 4, !tbaa !5
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds double, ptr %537, i64 %539
  %541 = load double, ptr %540, align 8, !tbaa !11
  %542 = load ptr, ptr %5, align 8, !tbaa !9
  %543 = load i32, ptr %10, align 4, !tbaa !5
  %544 = sext i32 %543 to i64
  %545 = getelementptr inbounds double, ptr %542, i64 %544
  %546 = load double, ptr %545, align 8, !tbaa !11
  %547 = fadd double %541, %546
  store double %547, ptr %26, align 8, !tbaa !11
  %548 = load ptr, ptr %5, align 8, !tbaa !9
  %549 = load i32, ptr %9, align 4, !tbaa !5
  %550 = add nsw i32 %549, 1
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds double, ptr %548, i64 %551
  %553 = load double, ptr %552, align 8, !tbaa !11
  %554 = load ptr, ptr %5, align 8, !tbaa !9
  %555 = load i32, ptr %10, align 4, !tbaa !5
  %556 = add nsw i32 %555, 1
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds double, ptr %554, i64 %557
  %559 = load double, ptr %558, align 8, !tbaa !11
  %560 = fadd double %553, %559
  store double %560, ptr %27, align 8, !tbaa !11
  %561 = load ptr, ptr %5, align 8, !tbaa !9
  %562 = load i32, ptr %9, align 4, !tbaa !5
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds double, ptr %561, i64 %563
  %565 = load double, ptr %564, align 8, !tbaa !11
  %566 = load ptr, ptr %5, align 8, !tbaa !9
  %567 = load i32, ptr %10, align 4, !tbaa !5
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds double, ptr %566, i64 %568
  %570 = load double, ptr %569, align 8, !tbaa !11
  %571 = fsub double %565, %570
  store double %571, ptr %28, align 8, !tbaa !11
  %572 = load ptr, ptr %5, align 8, !tbaa !9
  %573 = load i32, ptr %9, align 4, !tbaa !5
  %574 = add nsw i32 %573, 1
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds double, ptr %572, i64 %575
  %577 = load double, ptr %576, align 8, !tbaa !11
  %578 = load ptr, ptr %5, align 8, !tbaa !9
  %579 = load i32, ptr %10, align 4, !tbaa !5
  %580 = add nsw i32 %579, 1
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds double, ptr %578, i64 %581
  %583 = load double, ptr %582, align 8, !tbaa !11
  %584 = fsub double %577, %583
  store double %584, ptr %29, align 8, !tbaa !11
  %585 = load double, ptr %22, align 8, !tbaa !11
  %586 = load double, ptr %26, align 8, !tbaa !11
  %587 = fadd double %585, %586
  %588 = load ptr, ptr %5, align 8, !tbaa !9
  %589 = load i32, ptr %7, align 4, !tbaa !5
  %590 = sext i32 %589 to i64
  %591 = getelementptr inbounds double, ptr %588, i64 %590
  store double %587, ptr %591, align 8, !tbaa !11
  %592 = load double, ptr %23, align 8, !tbaa !11
  %593 = load double, ptr %27, align 8, !tbaa !11
  %594 = fadd double %592, %593
  %595 = load ptr, ptr %5, align 8, !tbaa !9
  %596 = load i32, ptr %7, align 4, !tbaa !5
  %597 = add nsw i32 %596, 1
  %598 = sext i32 %597 to i64
  %599 = getelementptr inbounds double, ptr %595, i64 %598
  store double %594, ptr %599, align 8, !tbaa !11
  %600 = load double, ptr %26, align 8, !tbaa !11
  %601 = load double, ptr %22, align 8, !tbaa !11
  %602 = fsub double %601, %600
  store double %602, ptr %22, align 8, !tbaa !11
  %603 = load double, ptr %27, align 8, !tbaa !11
  %604 = load double, ptr %23, align 8, !tbaa !11
  %605 = fsub double %604, %603
  store double %605, ptr %23, align 8, !tbaa !11
  %606 = load double, ptr %18, align 8, !tbaa !11
  %607 = load double, ptr %22, align 8, !tbaa !11
  %608 = load double, ptr %19, align 8, !tbaa !11
  %609 = load double, ptr %23, align 8, !tbaa !11
  %610 = fmul double %608, %609
  %611 = call double @llvm.fmuladd.f64(double %606, double %607, double %610)
  %612 = load ptr, ptr %5, align 8, !tbaa !9
  %613 = load i32, ptr %9, align 4, !tbaa !5
  %614 = sext i32 %613 to i64
  %615 = getelementptr inbounds double, ptr %612, i64 %614
  store double %611, ptr %615, align 8, !tbaa !11
  %616 = load double, ptr %18, align 8, !tbaa !11
  %617 = load double, ptr %23, align 8, !tbaa !11
  %618 = load double, ptr %19, align 8, !tbaa !11
  %619 = load double, ptr %22, align 8, !tbaa !11
  %620 = fmul double %618, %619
  %621 = fneg double %620
  %622 = call double @llvm.fmuladd.f64(double %616, double %617, double %621)
  %623 = load ptr, ptr %5, align 8, !tbaa !9
  %624 = load i32, ptr %9, align 4, !tbaa !5
  %625 = add nsw i32 %624, 1
  %626 = sext i32 %625 to i64
  %627 = getelementptr inbounds double, ptr %623, i64 %626
  store double %622, ptr %627, align 8, !tbaa !11
  %628 = load double, ptr %24, align 8, !tbaa !11
  %629 = load double, ptr %29, align 8, !tbaa !11
  %630 = fadd double %628, %629
  store double %630, ptr %22, align 8, !tbaa !11
  %631 = load double, ptr %25, align 8, !tbaa !11
  %632 = load double, ptr %28, align 8, !tbaa !11
  %633 = fsub double %631, %632
  store double %633, ptr %23, align 8, !tbaa !11
  %634 = load double, ptr %16, align 8, !tbaa !11
  %635 = load double, ptr %22, align 8, !tbaa !11
  %636 = load double, ptr %17, align 8, !tbaa !11
  %637 = load double, ptr %23, align 8, !tbaa !11
  %638 = fmul double %636, %637
  %639 = call double @llvm.fmuladd.f64(double %634, double %635, double %638)
  %640 = load ptr, ptr %5, align 8, !tbaa !9
  %641 = load i32, ptr %8, align 4, !tbaa !5
  %642 = sext i32 %641 to i64
  %643 = getelementptr inbounds double, ptr %640, i64 %642
  store double %639, ptr %643, align 8, !tbaa !11
  %644 = load double, ptr %16, align 8, !tbaa !11
  %645 = load double, ptr %23, align 8, !tbaa !11
  %646 = load double, ptr %17, align 8, !tbaa !11
  %647 = load double, ptr %22, align 8, !tbaa !11
  %648 = fmul double %646, %647
  %649 = fneg double %648
  %650 = call double @llvm.fmuladd.f64(double %644, double %645, double %649)
  %651 = load ptr, ptr %5, align 8, !tbaa !9
  %652 = load i32, ptr %8, align 4, !tbaa !5
  %653 = add nsw i32 %652, 1
  %654 = sext i32 %653 to i64
  %655 = getelementptr inbounds double, ptr %651, i64 %654
  store double %650, ptr %655, align 8, !tbaa !11
  %656 = load double, ptr %24, align 8, !tbaa !11
  %657 = load double, ptr %29, align 8, !tbaa !11
  %658 = fsub double %656, %657
  store double %658, ptr %22, align 8, !tbaa !11
  %659 = load double, ptr %25, align 8, !tbaa !11
  %660 = load double, ptr %28, align 8, !tbaa !11
  %661 = fadd double %659, %660
  store double %661, ptr %23, align 8, !tbaa !11
  %662 = load double, ptr %20, align 8, !tbaa !11
  %663 = load double, ptr %22, align 8, !tbaa !11
  %664 = load double, ptr %21, align 8, !tbaa !11
  %665 = load double, ptr %23, align 8, !tbaa !11
  %666 = fmul double %664, %665
  %667 = call double @llvm.fmuladd.f64(double %662, double %663, double %666)
  %668 = load ptr, ptr %5, align 8, !tbaa !9
  %669 = load i32, ptr %10, align 4, !tbaa !5
  %670 = sext i32 %669 to i64
  %671 = getelementptr inbounds double, ptr %668, i64 %670
  store double %667, ptr %671, align 8, !tbaa !11
  %672 = load double, ptr %20, align 8, !tbaa !11
  %673 = load double, ptr %23, align 8, !tbaa !11
  %674 = load double, ptr %21, align 8, !tbaa !11
  %675 = load double, ptr %22, align 8, !tbaa !11
  %676 = fmul double %674, %675
  %677 = fneg double %676
  %678 = call double @llvm.fmuladd.f64(double %672, double %673, double %677)
  %679 = load ptr, ptr %5, align 8, !tbaa !9
  %680 = load i32, ptr %10, align 4, !tbaa !5
  %681 = add nsw i32 %680, 1
  %682 = sext i32 %681 to i64
  %683 = getelementptr inbounds double, ptr %679, i64 %682
  store double %678, ptr %683, align 8, !tbaa !11
  br label %684

684:                                              ; preds = %479
  %685 = load i32, ptr %7, align 4, !tbaa !5
  %686 = add nsw i32 %685, 2
  store i32 %686, ptr %7, align 4, !tbaa !5
  br label %472, !llvm.loop !16

687:                                              ; preds = %472
  br label %688

688:                                              ; preds = %687
  %689 = load i32, ptr %15, align 4, !tbaa !5
  %690 = load i32, ptr %11, align 4, !tbaa !5
  %691 = add nsw i32 %690, %689
  store i32 %691, ptr %11, align 4, !tbaa !5
  br label %420, !llvm.loop !17

692:                                              ; preds = %420
  br label %693

693:                                              ; preds = %692, %212
  %694 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %694, ptr %14, align 4, !tbaa !5
  br label %30, !llvm.loop !18

695:                                              ; preds = %30
  %696 = load i32, ptr %14, align 4, !tbaa !5
  %697 = load i32, ptr %4, align 4, !tbaa !5
  %698 = icmp slt i32 %696, %697
  br i1 %698, label %699, label %772

699:                                              ; preds = %695
  store i32 0, ptr %7, align 4, !tbaa !5
  br label %700

700:                                              ; preds = %768, %699
  %701 = load i32, ptr %7, align 4, !tbaa !5
  %702 = load i32, ptr %14, align 4, !tbaa !5
  %703 = sub nsw i32 %702, 2
  %704 = icmp sle i32 %701, %703
  br i1 %704, label %705, label %771

705:                                              ; preds = %700
  %706 = load i32, ptr %7, align 4, !tbaa !5
  %707 = load i32, ptr %14, align 4, !tbaa !5
  %708 = add nsw i32 %706, %707
  store i32 %708, ptr %8, align 4, !tbaa !5
  %709 = load ptr, ptr %5, align 8, !tbaa !9
  %710 = load i32, ptr %7, align 4, !tbaa !5
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds double, ptr %709, i64 %711
  %713 = load double, ptr %712, align 8, !tbaa !11
  %714 = load ptr, ptr %5, align 8, !tbaa !9
  %715 = load i32, ptr %8, align 4, !tbaa !5
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds double, ptr %714, i64 %716
  %718 = load double, ptr %717, align 8, !tbaa !11
  %719 = fsub double %713, %718
  store double %719, ptr %22, align 8, !tbaa !11
  %720 = load ptr, ptr %5, align 8, !tbaa !9
  %721 = load i32, ptr %7, align 4, !tbaa !5
  %722 = add nsw i32 %721, 1
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds double, ptr %720, i64 %723
  %725 = load double, ptr %724, align 8, !tbaa !11
  %726 = load ptr, ptr %5, align 8, !tbaa !9
  %727 = load i32, ptr %8, align 4, !tbaa !5
  %728 = add nsw i32 %727, 1
  %729 = sext i32 %728 to i64
  %730 = getelementptr inbounds double, ptr %726, i64 %729
  %731 = load double, ptr %730, align 8, !tbaa !11
  %732 = fsub double %725, %731
  store double %732, ptr %23, align 8, !tbaa !11
  %733 = load ptr, ptr %5, align 8, !tbaa !9
  %734 = load i32, ptr %8, align 4, !tbaa !5
  %735 = sext i32 %734 to i64
  %736 = getelementptr inbounds double, ptr %733, i64 %735
  %737 = load double, ptr %736, align 8, !tbaa !11
  %738 = load ptr, ptr %5, align 8, !tbaa !9
  %739 = load i32, ptr %7, align 4, !tbaa !5
  %740 = sext i32 %739 to i64
  %741 = getelementptr inbounds double, ptr %738, i64 %740
  %742 = load double, ptr %741, align 8, !tbaa !11
  %743 = fadd double %742, %737
  store double %743, ptr %741, align 8, !tbaa !11
  %744 = load ptr, ptr %5, align 8, !tbaa !9
  %745 = load i32, ptr %8, align 4, !tbaa !5
  %746 = add nsw i32 %745, 1
  %747 = sext i32 %746 to i64
  %748 = getelementptr inbounds double, ptr %744, i64 %747
  %749 = load double, ptr %748, align 8, !tbaa !11
  %750 = load ptr, ptr %5, align 8, !tbaa !9
  %751 = load i32, ptr %7, align 4, !tbaa !5
  %752 = add nsw i32 %751, 1
  %753 = sext i32 %752 to i64
  %754 = getelementptr inbounds double, ptr %750, i64 %753
  %755 = load double, ptr %754, align 8, !tbaa !11
  %756 = fadd double %755, %749
  store double %756, ptr %754, align 8, !tbaa !11
  %757 = load double, ptr %22, align 8, !tbaa !11
  %758 = load ptr, ptr %5, align 8, !tbaa !9
  %759 = load i32, ptr %8, align 4, !tbaa !5
  %760 = sext i32 %759 to i64
  %761 = getelementptr inbounds double, ptr %758, i64 %760
  store double %757, ptr %761, align 8, !tbaa !11
  %762 = load double, ptr %23, align 8, !tbaa !11
  %763 = load ptr, ptr %5, align 8, !tbaa !9
  %764 = load i32, ptr %8, align 4, !tbaa !5
  %765 = add nsw i32 %764, 1
  %766 = sext i32 %765 to i64
  %767 = getelementptr inbounds double, ptr %763, i64 %766
  store double %762, ptr %767, align 8, !tbaa !11
  br label %768

768:                                              ; preds = %705
  %769 = load i32, ptr %7, align 4, !tbaa !5
  %770 = add nsw i32 %769, 2
  store i32 %770, ptr %7, align 4, !tbaa !5
  br label %700, !llvm.loop !19

771:                                              ; preds = %700
  br label %772

772:                                              ; preds = %771, %695
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  ret void
}

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}


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

; Function Attrs: nofree norecurse nosync nounwind memory(argmem: readwrite) uwtable
define dso_local void @cftfsub(i32 noundef %0, ptr nocapture noundef %1, ptr nocapture noundef readonly %2) local_unnamed_addr #0 {
  %4 = icmp sgt i32 %0, 4
  br i1 %4, label %.lr.ph351, label %._crit_edge352.thread

.lr.ph351:                                        ; preds = %3
  %5 = getelementptr inbounds i8, ptr %2, i64 16
  %scevgep567 = getelementptr i8, ptr %1, i64 8
  %scevgep576 = getelementptr i8, ptr %1, i64 8
  %scevgep585 = getelementptr i8, ptr %1, i64 8
  %scevgep594 = getelementptr i8, ptr %1, i64 8
  %scevgep601 = getelementptr i8, ptr %1, i64 8
  %scevgep603 = getelementptr i8, ptr %1, i64 8
  %scevgep605 = getelementptr i8, ptr %1, i64 16
  %scevgep608 = getelementptr i8, ptr %1, i64 8
  %scevgep610 = getelementptr i8, ptr %1, i64 8
  %scevgep612 = getelementptr i8, ptr %1, i64 16
  %scevgep615 = getelementptr i8, ptr %1, i64 8
  %scevgep617 = getelementptr i8, ptr %1, i64 8
  %scevgep619 = getelementptr i8, ptr %1, i64 16
  %scevgep622 = getelementptr i8, ptr %1, i64 8
  %scevgep624 = getelementptr i8, ptr %1, i64 8
  %scevgep626 = getelementptr i8, ptr %1, i64 16
  %scevgep771 = getelementptr i8, ptr %1, i64 8
  %scevgep773 = getelementptr i8, ptr %1, i64 16
  %scevgep776 = getelementptr i8, ptr %1, i64 8
  %scevgep778 = getelementptr i8, ptr %1, i64 8
  %scevgep780 = getelementptr i8, ptr %1, i64 16
  %scevgep783 = getelementptr i8, ptr %1, i64 8
  %scevgep785 = getelementptr i8, ptr %1, i64 8
  %scevgep787 = getelementptr i8, ptr %1, i64 16
  %scevgep790 = getelementptr i8, ptr %1, i64 8
  %scevgep792 = getelementptr i8, ptr %1, i64 8
  %scevgep794 = getelementptr i8, ptr %1, i64 16
  %invariant.gep = getelementptr i8, ptr %1, i64 -8
  %invariant.gep994 = getelementptr i8, ptr %1, i64 -8
  %invariant.gep996 = getelementptr i8, ptr %1, i64 -8
  %invariant.gep998 = getelementptr i8, ptr %1, i64 -8
  %invariant.gep1002 = getelementptr i8, ptr %1, i64 -8
  %invariant.gep1004 = getelementptr i8, ptr %1, i64 -8
  %invariant.gep1006 = getelementptr i8, ptr %1, i64 -8
  %invariant.gep1008 = getelementptr i8, ptr %1, i64 -8
  %invariant.gep1020 = getelementptr i8, ptr %1, i64 16
  %invariant.gep1022 = getelementptr i8, ptr %1, i64 16
  %invariant.gep1010 = getelementptr i8, ptr %1, i64 -8
  %invariant.gep1012 = getelementptr i8, ptr %1, i64 -8
  %invariant.gep1014 = getelementptr i8, ptr %1, i64 -8
  %invariant.gep1016 = getelementptr i8, ptr %1, i64 -8
  br label %6

6:                                                ; preds = %.lr.ph351, %.loopexit329
  %.0320349 = phi i32 [ 2, %.lr.ph351 ], [ %7, %.loopexit329 ]
  %7 = shl i32 %.0320349, 2
  %8 = add i32 %.0320349, -2
  %.not325330 = icmp slt i32 %.0320349, 2
  br i1 %.not325330, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %6
  %9 = zext nneg i32 %.0320349 to i64
  %10 = zext i32 %8 to i64
  %11 = lshr exact i64 %10, 1
  %12 = add nuw nsw i64 %11, 1
  %min.iters.check909 = icmp ult i32 %8, 22
  br i1 %min.iters.check909, label %.lr.ph.preheader993, label %vector.memcheck770

vector.memcheck770:                               ; preds = %.lr.ph.preheader
  %13 = shl nuw nsw i64 %10, 3
  %scevgep772 = getelementptr i8, ptr %scevgep771, i64 %13
  %scevgep774 = getelementptr i8, ptr %scevgep773, i64 %13
  %14 = shl nuw nsw i64 %9, 4
  %scevgep775 = getelementptr i8, ptr %1, i64 %14
  %15 = add nuw nsw i64 %13, %14
  %scevgep777 = getelementptr i8, ptr %scevgep776, i64 %15
  %scevgep779 = getelementptr i8, ptr %scevgep778, i64 %14
  %scevgep781 = getelementptr i8, ptr %scevgep780, i64 %15
  %16 = shl nuw nsw i64 %9, 3
  %scevgep782 = getelementptr i8, ptr %1, i64 %16
  %17 = add nuw nsw i64 %13, %16
  %scevgep784 = getelementptr i8, ptr %scevgep783, i64 %17
  %scevgep786 = getelementptr i8, ptr %scevgep785, i64 %16
  %scevgep788 = getelementptr i8, ptr %scevgep787, i64 %17
  %18 = mul nuw nsw i64 %9, 24
  %scevgep789 = getelementptr i8, ptr %1, i64 %18
  %19 = add nuw nsw i64 %18, %13
  %scevgep791 = getelementptr i8, ptr %scevgep790, i64 %19
  %scevgep793 = getelementptr i8, ptr %scevgep792, i64 %18
  %scevgep795 = getelementptr i8, ptr %scevgep794, i64 %19
  %bound0796 = icmp ugt ptr %scevgep774, %1
  %bound1797 = icmp ult ptr %scevgep771, %scevgep772
  %found.conflict798 = and i1 %bound0796, %bound1797
  %bound0799 = icmp ugt ptr %scevgep777, %1
  %bound1800 = icmp ult ptr %scevgep775, %scevgep772
  %found.conflict801 = and i1 %bound0799, %bound1800
  %conflict.rdx802 = or i1 %found.conflict798, %found.conflict801
  %bound0803 = icmp ugt ptr %scevgep781, %1
  %bound1804 = icmp ult ptr %scevgep779, %scevgep772
  %found.conflict805 = and i1 %bound0803, %bound1804
  %conflict.rdx806 = or i1 %conflict.rdx802, %found.conflict805
  %bound0807 = icmp ugt ptr %scevgep784, %1
  %bound1808 = icmp ult ptr %scevgep782, %scevgep772
  %found.conflict809 = and i1 %bound0807, %bound1808
  %conflict.rdx810 = or i1 %conflict.rdx806, %found.conflict809
  %bound0811 = icmp ugt ptr %scevgep788, %1
  %bound1812 = icmp ult ptr %scevgep786, %scevgep772
  %found.conflict813 = and i1 %bound0811, %bound1812
  %conflict.rdx814 = or i1 %conflict.rdx810, %found.conflict813
  %bound0815 = icmp ugt ptr %scevgep791, %1
  %bound1816 = icmp ult ptr %scevgep789, %scevgep772
  %found.conflict817 = and i1 %bound0815, %bound1816
  %conflict.rdx818 = or i1 %conflict.rdx814, %found.conflict817
  %bound0819 = icmp ugt ptr %scevgep795, %1
  %bound1820 = icmp ult ptr %scevgep793, %scevgep772
  %found.conflict821 = and i1 %bound0819, %bound1820
  %conflict.rdx822 = or i1 %conflict.rdx818, %found.conflict821
  %bound0823 = icmp ult ptr %scevgep771, %scevgep777
  %bound1824 = icmp ult ptr %scevgep775, %scevgep774
  %found.conflict825 = and i1 %bound0823, %bound1824
  %conflict.rdx826 = or i1 %conflict.rdx822, %found.conflict825
  %bound0827 = icmp ult ptr %scevgep771, %scevgep781
  %bound1828 = icmp ult ptr %scevgep779, %scevgep774
  %found.conflict829 = and i1 %bound0827, %bound1828
  %conflict.rdx830 = or i1 %conflict.rdx826, %found.conflict829
  %bound0831 = icmp ult ptr %scevgep771, %scevgep784
  %bound1832 = icmp ult ptr %scevgep782, %scevgep774
  %found.conflict833 = and i1 %bound0831, %bound1832
  %conflict.rdx834 = or i1 %conflict.rdx830, %found.conflict833
  %bound0835 = icmp ult ptr %scevgep771, %scevgep788
  %bound1836 = icmp ult ptr %scevgep786, %scevgep774
  %found.conflict837 = and i1 %bound0835, %bound1836
  %conflict.rdx838 = or i1 %conflict.rdx834, %found.conflict837
  %bound0839 = icmp ult ptr %scevgep771, %scevgep791
  %bound1840 = icmp ult ptr %scevgep789, %scevgep774
  %found.conflict841 = and i1 %bound0839, %bound1840
  %conflict.rdx842 = or i1 %conflict.rdx838, %found.conflict841
  %bound0843 = icmp ult ptr %scevgep771, %scevgep795
  %bound1844 = icmp ult ptr %scevgep793, %scevgep774
  %found.conflict845 = and i1 %bound0843, %bound1844
  %conflict.rdx846 = or i1 %conflict.rdx842, %found.conflict845
  %bound0847 = icmp ult ptr %scevgep775, %scevgep781
  %bound1848 = icmp ult ptr %scevgep779, %scevgep777
  %found.conflict849 = and i1 %bound0847, %bound1848
  %conflict.rdx850 = or i1 %conflict.rdx846, %found.conflict849
  %bound0851 = icmp ult ptr %scevgep775, %scevgep784
  %bound1852 = icmp ult ptr %scevgep782, %scevgep777
  %found.conflict853 = and i1 %bound0851, %bound1852
  %conflict.rdx854 = or i1 %conflict.rdx850, %found.conflict853
  %bound0855 = icmp ult ptr %scevgep775, %scevgep788
  %bound1856 = icmp ult ptr %scevgep786, %scevgep777
  %found.conflict857 = and i1 %bound0855, %bound1856
  %conflict.rdx858 = or i1 %conflict.rdx854, %found.conflict857
  %bound0859 = icmp ult ptr %scevgep775, %scevgep791
  %bound1860 = icmp ult ptr %scevgep789, %scevgep777
  %found.conflict861 = and i1 %bound0859, %bound1860
  %conflict.rdx862 = or i1 %conflict.rdx858, %found.conflict861
  %bound0863 = icmp ult ptr %scevgep775, %scevgep795
  %bound1864 = icmp ult ptr %scevgep793, %scevgep777
  %found.conflict865 = and i1 %bound0863, %bound1864
  %conflict.rdx866 = or i1 %conflict.rdx862, %found.conflict865
  %bound0867 = icmp ult ptr %scevgep779, %scevgep784
  %bound1868 = icmp ult ptr %scevgep782, %scevgep781
  %found.conflict869 = and i1 %bound0867, %bound1868
  %conflict.rdx870 = or i1 %conflict.rdx866, %found.conflict869
  %bound0871 = icmp ult ptr %scevgep779, %scevgep788
  %bound1872 = icmp ult ptr %scevgep786, %scevgep781
  %found.conflict873 = and i1 %bound0871, %bound1872
  %conflict.rdx874 = or i1 %conflict.rdx870, %found.conflict873
  %bound0875 = icmp ult ptr %scevgep779, %scevgep791
  %bound1876 = icmp ult ptr %scevgep789, %scevgep781
  %found.conflict877 = and i1 %bound0875, %bound1876
  %conflict.rdx878 = or i1 %conflict.rdx874, %found.conflict877
  %bound0879 = icmp ult ptr %scevgep779, %scevgep795
  %bound1880 = icmp ult ptr %scevgep793, %scevgep781
  %found.conflict881 = and i1 %bound0879, %bound1880
  %conflict.rdx882 = or i1 %conflict.rdx878, %found.conflict881
  %bound0883 = icmp ult ptr %scevgep782, %scevgep788
  %bound1884 = icmp ult ptr %scevgep786, %scevgep784
  %found.conflict885 = and i1 %bound0883, %bound1884
  %conflict.rdx886 = or i1 %conflict.rdx882, %found.conflict885
  %bound0887 = icmp ult ptr %scevgep782, %scevgep791
  %bound1888 = icmp ult ptr %scevgep789, %scevgep784
  %found.conflict889 = and i1 %bound0887, %bound1888
  %conflict.rdx890 = or i1 %conflict.rdx886, %found.conflict889
  %bound0891 = icmp ult ptr %scevgep782, %scevgep795
  %bound1892 = icmp ult ptr %scevgep793, %scevgep784
  %found.conflict893 = and i1 %bound0891, %bound1892
  %conflict.rdx894 = or i1 %conflict.rdx890, %found.conflict893
  %bound0895 = icmp ult ptr %scevgep786, %scevgep791
  %bound1896 = icmp ult ptr %scevgep789, %scevgep788
  %found.conflict897 = and i1 %bound0895, %bound1896
  %conflict.rdx898 = or i1 %conflict.rdx894, %found.conflict897
  %bound0899 = icmp ult ptr %scevgep786, %scevgep795
  %bound1900 = icmp ult ptr %scevgep793, %scevgep788
  %found.conflict901 = and i1 %bound0899, %bound1900
  %conflict.rdx902 = or i1 %conflict.rdx898, %found.conflict901
  %bound0903 = icmp ult ptr %scevgep789, %scevgep795
  %bound1904 = icmp ult ptr %scevgep793, %scevgep791
  %found.conflict905 = and i1 %bound0903, %bound1904
  %conflict.rdx906 = or i1 %conflict.rdx902, %found.conflict905
  br i1 %conflict.rdx906, label %.lr.ph.preheader993, label %vector.ph910

vector.ph910:                                     ; preds = %vector.memcheck770
  %n.vec912 = and i64 %12, 4294967294
  %ind.end913 = shl nuw nsw i64 %n.vec912, 1
  br label %vector.body915

vector.body915:                                   ; preds = %vector.body915, %vector.ph910
  %index916 = phi i64 [ 0, %vector.ph910 ], [ %index.next934, %vector.body915 ]
  %offset.idx917 = shl i64 %index916, 1
  %20 = add nuw nsw i64 %offset.idx917, %9
  %21 = add nuw nsw i64 %20, %9
  %22 = add nuw nsw i64 %21, %9
  %23 = getelementptr inbounds double, ptr %1, i64 %offset.idx917
  %wide.vec918 = load <4 x double>, ptr %23, align 8, !tbaa !5
  %strided.vec919 = shufflevector <4 x double> %wide.vec918, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec920 = shufflevector <4 x double> %wide.vec918, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %24 = getelementptr inbounds double, ptr %1, i64 %20
  %wide.vec921 = load <4 x double>, ptr %24, align 8, !tbaa !5
  %strided.vec922 = shufflevector <4 x double> %wide.vec921, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec923 = shufflevector <4 x double> %wide.vec921, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %25 = fadd <2 x double> %strided.vec919, %strided.vec922
  %26 = or disjoint i64 %offset.idx917, 1
  %27 = or disjoint i64 %20, 1
  %28 = fadd <2 x double> %strided.vec920, %strided.vec923
  %29 = fsub <2 x double> %strided.vec919, %strided.vec922
  %30 = fsub <2 x double> %strided.vec920, %strided.vec923
  %31 = getelementptr inbounds double, ptr %1, i64 %21
  %wide.vec924 = load <4 x double>, ptr %31, align 8, !tbaa !5
  %strided.vec925 = shufflevector <4 x double> %wide.vec924, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec926 = shufflevector <4 x double> %wide.vec924, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %32 = getelementptr inbounds double, ptr %1, i64 %22
  %wide.vec927 = load <4 x double>, ptr %32, align 8, !tbaa !5
  %strided.vec928 = shufflevector <4 x double> %wide.vec927, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec929 = shufflevector <4 x double> %wide.vec927, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %33 = fadd <2 x double> %strided.vec925, %strided.vec928
  %34 = or disjoint i64 %21, 1
  %35 = or disjoint i64 %22, 1
  %36 = fadd <2 x double> %strided.vec926, %strided.vec929
  %37 = fsub <2 x double> %strided.vec925, %strided.vec928
  %38 = fsub <2 x double> %strided.vec926, %strided.vec929
  %39 = fadd <2 x double> %25, %33
  %40 = fadd <2 x double> %28, %36
  %gep = getelementptr double, ptr %invariant.gep, i64 %26
  %interleaved.vec930 = shufflevector <2 x double> %39, <2 x double> %40, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec930, ptr %gep, align 8, !tbaa !5
  %41 = fsub <2 x double> %25, %33
  %42 = fsub <2 x double> %28, %36
  %gep995 = getelementptr double, ptr %invariant.gep994, i64 %34
  %interleaved.vec931 = shufflevector <2 x double> %41, <2 x double> %42, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec931, ptr %gep995, align 8, !tbaa !5
  %43 = fadd <2 x double> %29, %38
  %44 = fsub <2 x double> %30, %37
  %gep997 = getelementptr double, ptr %invariant.gep996, i64 %27
  %interleaved.vec932 = shufflevector <2 x double> %43, <2 x double> %44, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec932, ptr %gep997, align 8, !tbaa !5
  %45 = fsub <2 x double> %29, %38
  %46 = fadd <2 x double> %30, %37
  %gep999 = getelementptr double, ptr %invariant.gep998, i64 %35
  %interleaved.vec933 = shufflevector <2 x double> %45, <2 x double> %46, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec933, ptr %gep999, align 8, !tbaa !5
  %index.next934 = add nuw i64 %index916, 2
  %47 = icmp eq i64 %index.next934, %n.vec912
  br i1 %47, label %middle.block907, label %vector.body915, !llvm.loop !9

middle.block907:                                  ; preds = %vector.body915
  %cmp.n935 = icmp eq i64 %12, %n.vec912
  br i1 %cmp.n935, label %._crit_edge, label %.lr.ph.preheader993

.lr.ph.preheader993:                              ; preds = %middle.block907, %vector.memcheck770, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 0, %vector.memcheck770 ], [ 0, %.lr.ph.preheader ], [ %ind.end913, %middle.block907 ]
  %invariant.gep1000 = getelementptr double, ptr %1, i64 %9
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader993, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader993 ]
  %48 = add nuw nsw i64 %indvars.iv, %9
  %49 = add nuw nsw i64 %48, %9
  %50 = getelementptr inbounds double, ptr %1, i64 %indvars.iv
  %51 = getelementptr inbounds double, ptr %1, i64 %48
  %52 = getelementptr inbounds double, ptr %1, i64 %49
  %gep1001 = getelementptr double, ptr %invariant.gep1000, i64 %49
  %53 = load <2 x double>, ptr %50, align 8, !tbaa !5
  %54 = load <2 x double>, ptr %51, align 8, !tbaa !5
  %55 = fsub <2 x double> %53, %54
  %56 = load <2 x double>, ptr %52, align 8, !tbaa !5
  %57 = load <2 x double>, ptr %gep1001, align 8, !tbaa !5
  %58 = fsub <2 x double> %56, %57
  %59 = shufflevector <2 x double> %58, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %60 = fadd <2 x double> %53, %54
  %61 = fadd <2 x double> %56, %57
  %62 = fadd <2 x double> %60, %61
  store <2 x double> %62, ptr %50, align 8, !tbaa !5
  %63 = fsub <2 x double> %60, %61
  store <2 x double> %63, ptr %52, align 8, !tbaa !5
  %64 = fadd <2 x double> %55, %59
  %65 = fsub <2 x double> %55, %59
  %66 = shufflevector <2 x double> %64, <2 x double> %65, <2 x i32> <i32 0, i32 3>
  store <2 x double> %66, ptr %51, align 8, !tbaa !5
  %67 = shufflevector <2 x double> %65, <2 x double> %64, <2 x i32> <i32 0, i32 3>
  store <2 x double> %67, ptr %gep1001, align 8, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 2
  %.not325 = icmp ugt i64 %indvars.iv.next, %10
  br i1 %.not325, label %._crit_edge, label %.lr.ph, !llvm.loop !13

._crit_edge:                                      ; preds = %.lr.ph, %middle.block907, %6
  %68 = icmp slt i32 %7, %0
  br i1 %68, label %69, label %._crit_edge..loopexit329_crit_edge

._crit_edge..loopexit329_crit_edge:               ; preds = %._crit_edge
  %.pre = shl i32 %.0320349, 3
  br label %.loopexit329

69:                                               ; preds = %._crit_edge
  %70 = load double, ptr %5, align 8, !tbaa !5
  %71 = mul i32 %.0320349, 5
  %72 = add nsw i32 %71, -2
  %.not326332 = icmp sgt i32 %7, %72
  br i1 %.not326332, label %._crit_edge336, label %.lr.ph335.preheader

.lr.ph335.preheader:                              ; preds = %69
  %73 = sext i32 %7 to i64
  %74 = sext i32 %.0320349 to i64
  %75 = sext i32 %72 to i64
  %76 = sub nsw i64 %75, %73
  %77 = lshr exact i64 %76, 1
  %78 = add nuw i64 %77, 1
  %min.iters.check741 = icmp ult i64 %76, 34
  br i1 %min.iters.check741, label %.lr.ph335.preheader992, label %vector.scevcheck562

vector.scevcheck562:                              ; preds = %.lr.ph335.preheader
  %79 = sub nsw i64 %75, %73
  %80 = shl nsw i64 %73, 3
  %scevgep563 = getelementptr i8, ptr %1, i64 %80
  %mul.result565 = shl nsw i64 %79, 3
  %81 = getelementptr i8, ptr %scevgep563, i64 %mul.result565
  %scevgep568 = getelementptr i8, ptr %scevgep567, i64 %80
  %mul.result570 = shl nsw i64 %79, 3
  %mul.overflow571 = icmp ugt i64 %79, 2305843009213693950
  %82 = getelementptr i8, ptr %scevgep568, i64 %mul.result570
  %83 = shl nsw i64 %74, 4
  %84 = add nsw i64 %83, %80
  %scevgep572 = getelementptr i8, ptr %1, i64 %84
  %mul.result574 = shl nsw i64 %79, 3
  %85 = getelementptr i8, ptr %scevgep572, i64 %mul.result574
  %scevgep577 = getelementptr i8, ptr %scevgep576, i64 %84
  %mul.result579 = shl nsw i64 %79, 3
  %86 = getelementptr i8, ptr %scevgep577, i64 %mul.result579
  %87 = add nsw i64 %74, %73
  %88 = shl nsw i64 %87, 3
  %scevgep581 = getelementptr i8, ptr %1, i64 %88
  %mul.result583 = shl nsw i64 %79, 3
  %89 = getelementptr i8, ptr %scevgep581, i64 %mul.result583
  %scevgep586 = getelementptr i8, ptr %scevgep585, i64 %88
  %mul.result588 = shl nsw i64 %79, 3
  %90 = getelementptr i8, ptr %scevgep586, i64 %mul.result588
  %91 = mul nsw i64 %74, 24
  %92 = add nsw i64 %91, %80
  %scevgep590 = getelementptr i8, ptr %1, i64 %92
  %mul.result592 = shl nsw i64 %79, 3
  %93 = getelementptr i8, ptr %scevgep590, i64 %mul.result592
  %scevgep595 = getelementptr i8, ptr %scevgep594, i64 %92
  %mul.result597 = shl nsw i64 %79, 3
  %94 = getelementptr i8, ptr %scevgep595, i64 %mul.result597
  %95 = insertelement <8 x ptr> poison, ptr %82, i64 0
  %96 = insertelement <8 x ptr> %95, ptr %81, i64 1
  %97 = insertelement <8 x ptr> %96, ptr %85, i64 2
  %98 = insertelement <8 x ptr> %97, ptr %86, i64 3
  %99 = insertelement <8 x ptr> %98, ptr %89, i64 4
  %100 = insertelement <8 x ptr> %99, ptr %90, i64 5
  %101 = insertelement <8 x ptr> %100, ptr %93, i64 6
  %102 = insertelement <8 x ptr> %101, ptr %94, i64 7
  %103 = insertelement <8 x ptr> poison, ptr %scevgep568, i64 0
  %104 = insertelement <8 x ptr> %103, ptr %scevgep563, i64 1
  %105 = insertelement <8 x ptr> %104, ptr %scevgep572, i64 2
  %106 = insertelement <8 x ptr> %105, ptr %scevgep577, i64 3
  %107 = insertelement <8 x ptr> %106, ptr %scevgep581, i64 4
  %108 = insertelement <8 x ptr> %107, ptr %scevgep586, i64 5
  %109 = insertelement <8 x ptr> %108, ptr %scevgep590, i64 6
  %110 = insertelement <8 x ptr> %109, ptr %scevgep595, i64 7
  %111 = icmp ult <8 x ptr> %102, %110
  %112 = bitcast <8 x i1> %111 to i8
  %113 = icmp ne i8 %112, 0
  %op.rdx990 = or i1 %113, %mul.overflow571
  br i1 %op.rdx990, label %.lr.ph335.preheader992, label %vector.memcheck599

vector.memcheck599:                               ; preds = %vector.scevcheck562
  %114 = shl nsw i64 %73, 3
  %scevgep600 = getelementptr i8, ptr %1, i64 %114
  %115 = sub nsw i64 %75, %73
  %116 = shl nsw i64 %115, 3
  %117 = shl nsw i64 %75, 3
  %scevgep602 = getelementptr i8, ptr %scevgep601, i64 %117
  %scevgep604 = getelementptr i8, ptr %scevgep603, i64 %114
  %scevgep606 = getelementptr i8, ptr %scevgep605, i64 %117
  %118 = shl nsw i64 %74, 4
  %119 = add nsw i64 %118, %114
  %scevgep607 = getelementptr i8, ptr %1, i64 %119
  %120 = add nsw i64 %116, %118
  %121 = add nsw i64 %120, %114
  %scevgep609 = getelementptr i8, ptr %scevgep608, i64 %121
  %scevgep611 = getelementptr i8, ptr %scevgep610, i64 %119
  %scevgep613 = getelementptr i8, ptr %scevgep612, i64 %121
  %122 = add nsw i64 %74, %73
  %123 = shl nsw i64 %122, 3
  %scevgep614 = getelementptr i8, ptr %1, i64 %123
  %124 = add nsw i64 %116, %123
  %scevgep616 = getelementptr i8, ptr %scevgep615, i64 %124
  %scevgep618 = getelementptr i8, ptr %scevgep617, i64 %123
  %scevgep620 = getelementptr i8, ptr %scevgep619, i64 %124
  %125 = mul nsw i64 %74, 24
  %126 = add nsw i64 %125, %114
  %scevgep621 = getelementptr i8, ptr %1, i64 %126
  %127 = add nsw i64 %125, %116
  %128 = add nsw i64 %127, %114
  %scevgep623 = getelementptr i8, ptr %scevgep622, i64 %128
  %scevgep625 = getelementptr i8, ptr %scevgep624, i64 %126
  %scevgep627 = getelementptr i8, ptr %scevgep626, i64 %128
  %bound0628 = icmp ult ptr %scevgep600, %scevgep606
  %bound1629 = icmp ult ptr %scevgep604, %scevgep602
  %found.conflict630 = and i1 %bound0628, %bound1629
  %bound0631 = icmp ult ptr %scevgep600, %scevgep609
  %bound1632 = icmp ult ptr %scevgep607, %scevgep602
  %found.conflict633 = and i1 %bound0631, %bound1632
  %conflict.rdx634 = or i1 %found.conflict630, %found.conflict633
  %bound0635 = icmp ult ptr %scevgep600, %scevgep613
  %bound1636 = icmp ult ptr %scevgep611, %scevgep602
  %found.conflict637 = and i1 %bound0635, %bound1636
  %conflict.rdx638 = or i1 %conflict.rdx634, %found.conflict637
  %bound0639 = icmp ult ptr %scevgep600, %scevgep616
  %bound1640 = icmp ult ptr %scevgep614, %scevgep602
  %found.conflict641 = and i1 %bound0639, %bound1640
  %conflict.rdx642 = or i1 %conflict.rdx638, %found.conflict641
  %bound0643 = icmp ult ptr %scevgep600, %scevgep620
  %bound1644 = icmp ult ptr %scevgep618, %scevgep602
  %found.conflict645 = and i1 %bound0643, %bound1644
  %conflict.rdx646 = or i1 %conflict.rdx642, %found.conflict645
  %bound0647 = icmp ult ptr %scevgep600, %scevgep623
  %bound1648 = icmp ult ptr %scevgep621, %scevgep602
  %found.conflict649 = and i1 %bound0647, %bound1648
  %conflict.rdx650 = or i1 %conflict.rdx646, %found.conflict649
  %bound0651 = icmp ult ptr %scevgep600, %scevgep627
  %bound1652 = icmp ult ptr %scevgep625, %scevgep602
  %found.conflict653 = and i1 %bound0651, %bound1652
  %conflict.rdx654 = or i1 %conflict.rdx650, %found.conflict653
  %bound0655 = icmp ult ptr %scevgep604, %scevgep609
  %bound1656 = icmp ult ptr %scevgep607, %scevgep606
  %found.conflict657 = and i1 %bound0655, %bound1656
  %conflict.rdx658 = or i1 %conflict.rdx654, %found.conflict657
  %bound0659 = icmp ult ptr %scevgep604, %scevgep613
  %bound1660 = icmp ult ptr %scevgep611, %scevgep606
  %found.conflict661 = and i1 %bound0659, %bound1660
  %conflict.rdx662 = or i1 %conflict.rdx658, %found.conflict661
  %bound0663 = icmp ult ptr %scevgep604, %scevgep616
  %bound1664 = icmp ult ptr %scevgep614, %scevgep606
  %found.conflict665 = and i1 %bound0663, %bound1664
  %conflict.rdx666 = or i1 %conflict.rdx662, %found.conflict665
  %bound0667 = icmp ult ptr %scevgep604, %scevgep620
  %bound1668 = icmp ult ptr %scevgep618, %scevgep606
  %found.conflict669 = and i1 %bound0667, %bound1668
  %conflict.rdx670 = or i1 %conflict.rdx666, %found.conflict669
  %bound0671 = icmp ult ptr %scevgep604, %scevgep623
  %bound1672 = icmp ult ptr %scevgep621, %scevgep606
  %found.conflict673 = and i1 %bound0671, %bound1672
  %conflict.rdx674 = or i1 %conflict.rdx670, %found.conflict673
  %bound0675 = icmp ult ptr %scevgep604, %scevgep627
  %bound1676 = icmp ult ptr %scevgep625, %scevgep606
  %found.conflict677 = and i1 %bound0675, %bound1676
  %conflict.rdx678 = or i1 %conflict.rdx674, %found.conflict677
  %bound0679 = icmp ult ptr %scevgep607, %scevgep613
  %bound1680 = icmp ult ptr %scevgep611, %scevgep609
  %found.conflict681 = and i1 %bound0679, %bound1680
  %conflict.rdx682 = or i1 %conflict.rdx678, %found.conflict681
  %bound0683 = icmp ult ptr %scevgep607, %scevgep616
  %bound1684 = icmp ult ptr %scevgep614, %scevgep609
  %found.conflict685 = and i1 %bound0683, %bound1684
  %conflict.rdx686 = or i1 %conflict.rdx682, %found.conflict685
  %bound0687 = icmp ult ptr %scevgep607, %scevgep620
  %bound1688 = icmp ult ptr %scevgep618, %scevgep609
  %found.conflict689 = and i1 %bound0687, %bound1688
  %conflict.rdx690 = or i1 %conflict.rdx686, %found.conflict689
  %bound0691 = icmp ult ptr %scevgep607, %scevgep623
  %bound1692 = icmp ult ptr %scevgep621, %scevgep609
  %found.conflict693 = and i1 %bound0691, %bound1692
  %conflict.rdx694 = or i1 %conflict.rdx690, %found.conflict693
  %bound0695 = icmp ult ptr %scevgep607, %scevgep627
  %bound1696 = icmp ult ptr %scevgep625, %scevgep609
  %found.conflict697 = and i1 %bound0695, %bound1696
  %conflict.rdx698 = or i1 %conflict.rdx694, %found.conflict697
  %bound0699 = icmp ult ptr %scevgep611, %scevgep616
  %bound1700 = icmp ult ptr %scevgep614, %scevgep613
  %found.conflict701 = and i1 %bound0699, %bound1700
  %conflict.rdx702 = or i1 %conflict.rdx698, %found.conflict701
  %bound0703 = icmp ult ptr %scevgep611, %scevgep620
  %bound1704 = icmp ult ptr %scevgep618, %scevgep613
  %found.conflict705 = and i1 %bound0703, %bound1704
  %conflict.rdx706 = or i1 %conflict.rdx702, %found.conflict705
  %bound0707 = icmp ult ptr %scevgep611, %scevgep623
  %bound1708 = icmp ult ptr %scevgep621, %scevgep613
  %found.conflict709 = and i1 %bound0707, %bound1708
  %conflict.rdx710 = or i1 %conflict.rdx706, %found.conflict709
  %bound0711 = icmp ult ptr %scevgep611, %scevgep627
  %bound1712 = icmp ult ptr %scevgep625, %scevgep613
  %found.conflict713 = and i1 %bound0711, %bound1712
  %conflict.rdx714 = or i1 %conflict.rdx710, %found.conflict713
  %bound0715 = icmp ult ptr %scevgep614, %scevgep620
  %bound1716 = icmp ult ptr %scevgep618, %scevgep616
  %found.conflict717 = and i1 %bound0715, %bound1716
  %conflict.rdx718 = or i1 %conflict.rdx714, %found.conflict717
  %bound0719 = icmp ult ptr %scevgep614, %scevgep623
  %bound1720 = icmp ult ptr %scevgep621, %scevgep616
  %found.conflict721 = and i1 %bound0719, %bound1720
  %conflict.rdx722 = or i1 %conflict.rdx718, %found.conflict721
  %bound0723 = icmp ult ptr %scevgep614, %scevgep627
  %bound1724 = icmp ult ptr %scevgep625, %scevgep616
  %found.conflict725 = and i1 %bound0723, %bound1724
  %conflict.rdx726 = or i1 %conflict.rdx722, %found.conflict725
  %bound0727 = icmp ult ptr %scevgep618, %scevgep623
  %bound1728 = icmp ult ptr %scevgep621, %scevgep620
  %found.conflict729 = and i1 %bound0727, %bound1728
  %conflict.rdx730 = or i1 %conflict.rdx726, %found.conflict729
  %bound0731 = icmp ult ptr %scevgep618, %scevgep627
  %bound1732 = icmp ult ptr %scevgep625, %scevgep620
  %found.conflict733 = and i1 %bound0731, %bound1732
  %conflict.rdx734 = or i1 %conflict.rdx730, %found.conflict733
  %bound0735 = icmp ult ptr %scevgep621, %scevgep627
  %bound1736 = icmp ult ptr %scevgep625, %scevgep623
  %found.conflict737 = and i1 %bound0735, %bound1736
  %conflict.rdx738 = or i1 %conflict.rdx734, %found.conflict737
  br i1 %conflict.rdx738, label %.lr.ph335.preheader992, label %vector.ph742

vector.ph742:                                     ; preds = %vector.memcheck599
  %n.vec744 = and i64 %78, -2
  %129 = shl i64 %n.vec744, 1
  %ind.end745 = add i64 %129, %73
  %broadcast.splatinsert764 = insertelement <2 x double> poison, double %70, i64 0
  %broadcast.splat765 = shufflevector <2 x double> %broadcast.splatinsert764, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body747

vector.body747:                                   ; preds = %vector.body747, %vector.ph742
  %index748 = phi i64 [ 0, %vector.ph742 ], [ %index.next768, %vector.body747 ]
  %130 = shl i64 %index748, 1
  %offset.idx749 = add i64 %130, %73
  %131 = add nsw i64 %offset.idx749, %74
  %132 = add nsw i64 %131, %74
  %133 = add nsw i64 %132, %74
  %134 = getelementptr inbounds double, ptr %1, i64 %offset.idx749
  %wide.vec750 = load <4 x double>, ptr %134, align 8, !tbaa !5
  %strided.vec751 = shufflevector <4 x double> %wide.vec750, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec752 = shufflevector <4 x double> %wide.vec750, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %135 = getelementptr inbounds double, ptr %1, i64 %131
  %wide.vec753 = load <4 x double>, ptr %135, align 8, !tbaa !5
  %strided.vec754 = shufflevector <4 x double> %wide.vec753, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec755 = shufflevector <4 x double> %wide.vec753, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %136 = fadd <2 x double> %strided.vec751, %strided.vec754
  %137 = or disjoint i64 %offset.idx749, 1
  %138 = or disjoint i64 %131, 1
  %139 = fadd <2 x double> %strided.vec752, %strided.vec755
  %140 = fsub <2 x double> %strided.vec751, %strided.vec754
  %141 = fsub <2 x double> %strided.vec752, %strided.vec755
  %142 = getelementptr inbounds double, ptr %1, i64 %132
  %wide.vec756 = load <4 x double>, ptr %142, align 8, !tbaa !5
  %strided.vec757 = shufflevector <4 x double> %wide.vec756, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec758 = shufflevector <4 x double> %wide.vec756, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %143 = getelementptr inbounds double, ptr %1, i64 %133
  %wide.vec759 = load <4 x double>, ptr %143, align 8, !tbaa !5
  %strided.vec760 = shufflevector <4 x double> %wide.vec759, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec761 = shufflevector <4 x double> %wide.vec759, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %144 = fadd <2 x double> %strided.vec757, %strided.vec760
  %145 = or disjoint i64 %132, 1
  %146 = or disjoint i64 %133, 1
  %147 = fadd <2 x double> %strided.vec758, %strided.vec761
  %148 = fsub <2 x double> %strided.vec757, %strided.vec760
  %149 = fsub <2 x double> %strided.vec758, %strided.vec761
  %150 = fadd <2 x double> %136, %144
  %151 = fadd <2 x double> %139, %147
  %gep1003 = getelementptr double, ptr %invariant.gep1002, i64 %137
  %interleaved.vec762 = shufflevector <2 x double> %150, <2 x double> %151, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec762, ptr %gep1003, align 8, !tbaa !5
  %152 = fsub <2 x double> %139, %147
  %153 = fsub <2 x double> %144, %136
  %gep1005 = getelementptr double, ptr %invariant.gep1004, i64 %145
  %interleaved.vec763 = shufflevector <2 x double> %152, <2 x double> %153, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec763, ptr %gep1005, align 8, !tbaa !5
  %154 = fadd <2 x double> %140, %149
  %155 = fsub <2 x double> %141, %148
  %156 = fadd <2 x double> %155, %154
  %157 = fmul <2 x double> %broadcast.splat765, %156
  %158 = fsub <2 x double> %155, %154
  %159 = fmul <2 x double> %broadcast.splat765, %158
  %gep1007 = getelementptr double, ptr %invariant.gep1006, i64 %138
  %interleaved.vec766 = shufflevector <2 x double> %157, <2 x double> %159, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec766, ptr %gep1007, align 8, !tbaa !5
  %160 = fsub <2 x double> %149, %140
  %161 = fadd <2 x double> %141, %148
  %162 = fadd <2 x double> %161, %160
  %163 = fmul <2 x double> %broadcast.splat765, %162
  %164 = fsub <2 x double> %160, %161
  %165 = fmul <2 x double> %broadcast.splat765, %164
  %gep1009 = getelementptr double, ptr %invariant.gep1008, i64 %146
  %interleaved.vec767 = shufflevector <2 x double> %163, <2 x double> %165, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec767, ptr %gep1009, align 8, !tbaa !5
  %index.next768 = add nuw i64 %index748, 2
  %166 = icmp eq i64 %index.next768, %n.vec744
  br i1 %166, label %middle.block739, label %vector.body747, !llvm.loop !14

middle.block739:                                  ; preds = %vector.body747
  %cmp.n769 = icmp eq i64 %78, %n.vec744
  br i1 %cmp.n769, label %._crit_edge336, label %.lr.ph335.preheader992

.lr.ph335.preheader992:                           ; preds = %middle.block739, %vector.memcheck599, %vector.scevcheck562, %.lr.ph335.preheader
  %indvars.iv357.ph = phi i64 [ %73, %vector.memcheck599 ], [ %73, %vector.scevcheck562 ], [ %73, %.lr.ph335.preheader ], [ %ind.end745, %middle.block739 ]
  br label %.lr.ph335

.lr.ph335:                                        ; preds = %.lr.ph335.preheader992, %.lr.ph335
  %indvars.iv357 = phi i64 [ %indvars.iv.next358, %.lr.ph335 ], [ %indvars.iv357.ph, %.lr.ph335.preheader992 ]
  %167 = add nsw i64 %indvars.iv357, %74
  %168 = add nsw i64 %167, %74
  %169 = add nsw i64 %168, %74
  %170 = getelementptr inbounds double, ptr %1, i64 %indvars.iv357
  %171 = load double, ptr %170, align 8, !tbaa !5
  %172 = getelementptr inbounds double, ptr %1, i64 %167
  %173 = load double, ptr %172, align 8, !tbaa !5
  %174 = or disjoint i64 %indvars.iv357, 1
  %175 = getelementptr inbounds double, ptr %1, i64 %174
  %176 = load double, ptr %175, align 8, !tbaa !5
  %177 = or disjoint i64 %167, 1
  %178 = getelementptr inbounds double, ptr %1, i64 %177
  %179 = load double, ptr %178, align 8, !tbaa !5
  %180 = fsub double %171, %173
  %181 = fsub double %176, %179
  %182 = getelementptr inbounds double, ptr %1, i64 %168
  %183 = load double, ptr %182, align 8, !tbaa !5
  %184 = getelementptr inbounds double, ptr %1, i64 %169
  %185 = load double, ptr %184, align 8, !tbaa !5
  %186 = or disjoint i64 %168, 1
  %187 = getelementptr inbounds double, ptr %1, i64 %186
  %188 = load double, ptr %187, align 8, !tbaa !5
  %189 = or disjoint i64 %169, 1
  %190 = getelementptr inbounds double, ptr %1, i64 %189
  %191 = load double, ptr %190, align 8, !tbaa !5
  %192 = fsub double %183, %185
  %193 = fsub double %188, %191
  %194 = insertelement <2 x double> poison, double %176, i64 0
  %195 = insertelement <2 x double> %194, double %183, i64 1
  %196 = insertelement <2 x double> poison, double %179, i64 0
  %197 = insertelement <2 x double> %196, double %185, i64 1
  %198 = fadd <2 x double> %195, %197
  %199 = insertelement <2 x double> poison, double %188, i64 0
  %200 = insertelement <2 x double> %199, double %171, i64 1
  %201 = insertelement <2 x double> poison, double %191, i64 0
  %202 = insertelement <2 x double> %201, double %173, i64 1
  %203 = fadd <2 x double> %200, %202
  %204 = fadd <2 x double> %198, %203
  %205 = shufflevector <2 x double> %204, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  store <2 x double> %205, ptr %170, align 8, !tbaa !5
  %206 = fsub <2 x double> %198, %203
  store <2 x double> %206, ptr %182, align 8, !tbaa !5
  %207 = fadd double %180, %193
  %208 = fsub double %181, %192
  %209 = fadd double %208, %207
  %210 = fmul double %70, %209
  store double %210, ptr %172, align 8, !tbaa !5
  %211 = fsub double %208, %207
  %212 = fmul double %70, %211
  store double %212, ptr %178, align 8, !tbaa !5
  %213 = fsub double %193, %180
  %214 = fadd double %181, %192
  %215 = fadd double %214, %213
  %216 = fmul double %70, %215
  store double %216, ptr %184, align 8, !tbaa !5
  %217 = fsub double %213, %214
  %218 = fmul double %70, %217
  store double %218, ptr %190, align 8, !tbaa !5
  %indvars.iv.next358 = add nsw i64 %indvars.iv357, 2
  %.not326 = icmp sgt i64 %indvars.iv.next358, %75
  br i1 %.not326, label %._crit_edge336, label %.lr.ph335, !llvm.loop !15

._crit_edge336:                                   ; preds = %.lr.ph335, %middle.block739, %69
  %219 = shl i32 %.0320349, 3
  %220 = sub nsw i32 %0, %7
  %.not327342 = icmp sgt i32 %219, %220
  br i1 %.not327342, label %.loopexit329, label %.lr.ph348

.lr.ph348:                                        ; preds = %._crit_edge336
  %221 = sext i32 %219 to i64
  %222 = sext i32 %7 to i64
  %223 = sext i32 %.0320349 to i64
  %224 = sext i32 %220 to i64
  %225 = mul i32 %.0320349, 9
  %226 = add i32 %225, -2
  %227 = mul nsw i64 %223, 24
  %228 = or disjoint i64 %227, 8
  %229 = shl nsw i64 %221, 3
  %230 = shl nsw i64 %222, 3
  %231 = add nsw i64 %223, %221
  %232 = shl nsw i64 %231, 3
  %233 = or disjoint i64 %232, 8
  %234 = shl nsw i64 %223, 4
  %235 = or disjoint i64 %234, 8
  %236 = or disjoint i64 %229, 8
  %237 = shl nsw i64 %221, 3
  %238 = shl nsw i64 %222, 3
  %239 = or disjoint i64 %237, 8
  %240 = mul i32 %.0320349, 9
  %241 = add i32 %240, -2
  %242 = or disjoint i64 %237, 16
  %243 = shl nsw i64 %223, 4
  %244 = or disjoint i64 %243, 8
  %245 = or disjoint i64 %243, 16
  %246 = add nsw i64 %223, %221
  %247 = shl nsw i64 %246, 3
  %248 = or disjoint i64 %247, 8
  %249 = mul nsw i64 %223, 24
  %250 = or disjoint i64 %249, 8
  %251 = mul i32 %.0320349, 9
  %252 = add i32 %251, -2
  %253 = getelementptr i8, ptr %1, i64 %237
  %254 = getelementptr i8, ptr %1, i64 %239
  %255 = getelementptr i8, ptr %1, i64 %242
  %256 = getelementptr i8, ptr %1, i64 %243
  %257 = getelementptr i8, ptr %256, i64 %237
  %258 = getelementptr i8, ptr %1, i64 %244
  %259 = getelementptr i8, ptr %258, i64 %237
  %260 = getelementptr i8, ptr %1, i64 %245
  %261 = getelementptr i8, ptr %260, i64 %237
  %262 = getelementptr i8, ptr %1, i64 %247
  %263 = getelementptr i8, ptr %1, i64 %248
  %gep1021 = getelementptr i8, ptr %invariant.gep1020, i64 %247
  %264 = getelementptr i8, ptr %1, i64 %249
  %265 = getelementptr i8, ptr %264, i64 %237
  %266 = getelementptr i8, ptr %1, i64 %250
  %267 = getelementptr i8, ptr %266, i64 %237
  %gep1023 = getelementptr i8, ptr %invariant.gep1022, i64 %249
  %268 = getelementptr i8, ptr %gep1023, i64 %237
  %269 = getelementptr i8, ptr %1, i64 %228
  %270 = getelementptr i8, ptr %269, i64 %229
  %271 = getelementptr i8, ptr %1, i64 %227
  %272 = getelementptr i8, ptr %271, i64 %229
  %273 = getelementptr i8, ptr %1, i64 %233
  %274 = getelementptr i8, ptr %1, i64 %232
  %275 = getelementptr i8, ptr %1, i64 %235
  %276 = getelementptr i8, ptr %275, i64 %229
  %277 = getelementptr i8, ptr %1, i64 %234
  %278 = getelementptr i8, ptr %277, i64 %229
  %279 = getelementptr i8, ptr %1, i64 %236
  %280 = getelementptr i8, ptr %1, i64 %229
  %invariant.gep1018 = getelementptr double, ptr %1, i64 %223
  br label %281

281:                                              ; preds = %.lr.ph348, %._crit_edge341
  %indvar = phi i64 [ 0, %.lr.ph348 ], [ %indvar.next, %._crit_edge341 ]
  %indvars.iv365 = phi i64 [ 1, %.lr.ph348 ], [ %indvars.iv.next366, %._crit_edge341 ]
  %indvars.iv360 = phi i64 [ %221, %.lr.ph348 ], [ %indvars.iv.next361, %._crit_edge341 ]
  %.0321344 = phi i32 [ -1, %.lr.ph348 ], [ %.0321.neg343, %._crit_edge341 ]
  %.0321.neg343 = phi i32 [ 1, %.lr.ph348 ], [ %.0321344, %._crit_edge341 ]
  %282 = mul i64 %indvar, %222
  %283 = add i64 %282, %221
  %284 = trunc i64 %indvar to i32
  %285 = mul i32 %7, %284
  %286 = add i32 %285, %252
  %287 = sext i32 %286 to i64
  %288 = sub i64 %287, %283
  %289 = lshr exact i64 %288, 1
  %290 = add nuw i64 %289, 1
  %291 = mul i64 %238, %indvar
  %scevgep406 = getelementptr i8, ptr %253, i64 %291
  %scevgep407 = getelementptr i8, ptr %254, i64 %291
  %292 = mul i64 %indvar, %222
  %293 = add i64 %292, %221
  %294 = trunc i64 %indvar to i32
  %295 = mul i32 %7, %294
  %296 = add i32 %295, %241
  %297 = sext i32 %296 to i64
  %298 = sub i64 %297, %293
  %299 = shl i64 %298, 3
  %scevgep408 = getelementptr i8, ptr %scevgep407, i64 %299
  %scevgep409 = getelementptr i8, ptr %255, i64 %291
  %scevgep410 = getelementptr i8, ptr %scevgep409, i64 %299
  %scevgep411 = getelementptr i8, ptr %257, i64 %291
  %scevgep412 = getelementptr i8, ptr %259, i64 %291
  %scevgep413 = getelementptr i8, ptr %scevgep412, i64 %299
  %scevgep414 = getelementptr i8, ptr %261, i64 %291
  %scevgep415 = getelementptr i8, ptr %scevgep414, i64 %299
  %scevgep416 = getelementptr i8, ptr %262, i64 %291
  %scevgep417 = getelementptr i8, ptr %263, i64 %291
  %scevgep418 = getelementptr i8, ptr %scevgep417, i64 %299
  %scevgep419 = getelementptr i8, ptr %gep1021, i64 %291
  %scevgep420 = getelementptr i8, ptr %scevgep419, i64 %299
  %scevgep421 = getelementptr i8, ptr %265, i64 %291
  %scevgep422 = getelementptr i8, ptr %267, i64 %291
  %scevgep423 = getelementptr i8, ptr %scevgep422, i64 %299
  %scevgep424 = getelementptr i8, ptr %268, i64 %291
  %scevgep425 = getelementptr i8, ptr %scevgep424, i64 %299
  %300 = mul i64 %indvar, %222
  %301 = add i64 %300, %221
  %302 = trunc i64 %indvar to i32
  %303 = mul i32 %7, %302
  %304 = add i32 %303, %226
  %305 = sext i32 %304 to i64
  %306 = sub i64 %305, %301
  %307 = mul i64 %230, %indvar
  %scevgep = getelementptr i8, ptr %270, i64 %307
  %scevgep378 = getelementptr i8, ptr %272, i64 %307
  %scevgep382 = getelementptr i8, ptr %273, i64 %307
  %scevgep386 = getelementptr i8, ptr %274, i64 %307
  %scevgep390 = getelementptr i8, ptr %276, i64 %307
  %scevgep394 = getelementptr i8, ptr %278, i64 %307
  %scevgep398 = getelementptr i8, ptr %279, i64 %307
  %scevgep402 = getelementptr i8, ptr %280, i64 %307
  %indvars.iv.next366 = add nuw nsw i64 %indvars.iv365, 1
  %sext = shl i64 %indvars.iv.next366, 33
  %308 = ashr exact i64 %sext, 29
  %309 = getelementptr inbounds i8, ptr %2, i64 %308
  %310 = load double, ptr %309, align 8, !tbaa !5
  %indvars.iv.next366.tr = trunc i64 %indvars.iv.next366 to i32
  %311 = shl i32 %indvars.iv.next366.tr, 1
  %312 = or disjoint i32 %311, 1
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds double, ptr %2, i64 %313
  %315 = load double, ptr %314, align 8, !tbaa !5
  %316 = sitofp i32 %.0321.neg343 to double
  %317 = getelementptr inbounds double, ptr %2, i64 %indvars.iv.next366
  %318 = load double, ptr %317, align 8, !tbaa !5
  %319 = fmul double %318, %316
  %320 = sext i32 %.0321.neg343 to i64
  %321 = getelementptr double, ptr %2, i64 %indvars.iv.next366
  %322 = getelementptr double, ptr %321, i64 %320
  %323 = load double, ptr %322, align 8, !tbaa !5
  %324 = fmul double %323, 2.000000e+00
  %325 = fneg double %324
  %326 = tail call double @llvm.fmuladd.f64(double %325, double %315, double %310)
  %327 = fneg double %315
  %328 = tail call double @llvm.fmuladd.f64(double %324, double %310, double %327)
  %329 = trunc nsw i64 %indvars.iv360 to i32
  %330 = add i32 %8, %329
  %331 = sext i32 %330 to i64
  %.not328337 = icmp sgt i64 %indvars.iv360, %331
  br i1 %.not328337, label %._crit_edge341, label %.lr.ph340

.lr.ph340:                                        ; preds = %281
  %332 = fneg double %323
  %333 = fneg double %328
  %min.iters.check = icmp ult i64 %288, 22
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph340
  %mul.result = shl i64 %306, 3
  %334 = getelementptr i8, ptr %scevgep, i64 %mul.result
  %mul.result380 = shl i64 %306, 3
  %mul.overflow381 = icmp ugt i64 %306, 2305843009213693950
  %335 = getelementptr i8, ptr %scevgep378, i64 %mul.result380
  %mul.result384 = shl i64 %306, 3
  %336 = getelementptr i8, ptr %scevgep382, i64 %mul.result384
  %mul.result388 = shl i64 %306, 3
  %337 = getelementptr i8, ptr %scevgep386, i64 %mul.result388
  %mul.result392 = shl i64 %306, 3
  %338 = getelementptr i8, ptr %scevgep390, i64 %mul.result392
  %mul.result396 = shl i64 %306, 3
  %339 = getelementptr i8, ptr %scevgep394, i64 %mul.result396
  %mul.result400 = shl i64 %306, 3
  %340 = getelementptr i8, ptr %scevgep398, i64 %mul.result400
  %mul.result404 = shl i64 %306, 3
  %341 = getelementptr i8, ptr %scevgep402, i64 %mul.result404
  %342 = insertelement <8 x ptr> poison, ptr %335, i64 0
  %343 = insertelement <8 x ptr> %342, ptr %334, i64 1
  %344 = insertelement <8 x ptr> %343, ptr %336, i64 2
  %345 = insertelement <8 x ptr> %344, ptr %337, i64 3
  %346 = insertelement <8 x ptr> %345, ptr %338, i64 4
  %347 = insertelement <8 x ptr> %346, ptr %339, i64 5
  %348 = insertelement <8 x ptr> %347, ptr %340, i64 6
  %349 = insertelement <8 x ptr> %348, ptr %341, i64 7
  %350 = insertelement <8 x ptr> poison, ptr %scevgep378, i64 0
  %351 = insertelement <8 x ptr> %350, ptr %scevgep, i64 1
  %352 = insertelement <8 x ptr> %351, ptr %scevgep382, i64 2
  %353 = insertelement <8 x ptr> %352, ptr %scevgep386, i64 3
  %354 = insertelement <8 x ptr> %353, ptr %scevgep390, i64 4
  %355 = insertelement <8 x ptr> %354, ptr %scevgep394, i64 5
  %356 = insertelement <8 x ptr> %355, ptr %scevgep398, i64 6
  %357 = insertelement <8 x ptr> %356, ptr %scevgep402, i64 7
  %358 = icmp ult <8 x ptr> %349, %357
  %359 = bitcast <8 x i1> %358 to i8
  %360 = icmp ne i8 %359, 0
  %op.rdx = or i1 %360, %mul.overflow381
  br i1 %op.rdx, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %vector.scevcheck
  %bound0 = icmp ult ptr %scevgep406, %scevgep410
  %bound1 = icmp ult ptr %scevgep407, %scevgep408
  %found.conflict = and i1 %bound0, %bound1
  %bound0426 = icmp ult ptr %scevgep406, %scevgep413
  %bound1427 = icmp ult ptr %scevgep411, %scevgep408
  %found.conflict428 = and i1 %bound0426, %bound1427
  %conflict.rdx = or i1 %found.conflict, %found.conflict428
  %bound0429 = icmp ult ptr %scevgep406, %scevgep415
  %bound1430 = icmp ult ptr %scevgep412, %scevgep408
  %found.conflict431 = and i1 %bound0429, %bound1430
  %conflict.rdx432 = or i1 %conflict.rdx, %found.conflict431
  %bound0433 = icmp ult ptr %scevgep406, %scevgep418
  %bound1434 = icmp ult ptr %scevgep416, %scevgep408
  %found.conflict435 = and i1 %bound0433, %bound1434
  %conflict.rdx436 = or i1 %conflict.rdx432, %found.conflict435
  %bound0437 = icmp ult ptr %scevgep406, %scevgep420
  %bound1438 = icmp ult ptr %scevgep417, %scevgep408
  %found.conflict439 = and i1 %bound0437, %bound1438
  %conflict.rdx440 = or i1 %conflict.rdx436, %found.conflict439
  %bound0441 = icmp ult ptr %scevgep406, %scevgep423
  %bound1442 = icmp ult ptr %scevgep421, %scevgep408
  %found.conflict443 = and i1 %bound0441, %bound1442
  %conflict.rdx444 = or i1 %conflict.rdx440, %found.conflict443
  %bound0445 = icmp ult ptr %scevgep406, %scevgep425
  %bound1446 = icmp ult ptr %scevgep422, %scevgep408
  %found.conflict447 = and i1 %bound0445, %bound1446
  %conflict.rdx448 = or i1 %conflict.rdx444, %found.conflict447
  %bound0449 = icmp ult ptr %scevgep407, %scevgep413
  %bound1450 = icmp ult ptr %scevgep411, %scevgep410
  %found.conflict451 = and i1 %bound0449, %bound1450
  %conflict.rdx452 = or i1 %conflict.rdx448, %found.conflict451
  %bound0453 = icmp ult ptr %scevgep407, %scevgep415
  %bound1454 = icmp ult ptr %scevgep412, %scevgep410
  %found.conflict455 = and i1 %bound0453, %bound1454
  %conflict.rdx456 = or i1 %conflict.rdx452, %found.conflict455
  %bound0457 = icmp ult ptr %scevgep407, %scevgep418
  %bound1458 = icmp ult ptr %scevgep416, %scevgep410
  %found.conflict459 = and i1 %bound0457, %bound1458
  %conflict.rdx460 = or i1 %conflict.rdx456, %found.conflict459
  %bound0461 = icmp ult ptr %scevgep407, %scevgep420
  %bound1462 = icmp ult ptr %scevgep417, %scevgep410
  %found.conflict463 = and i1 %bound0461, %bound1462
  %conflict.rdx464 = or i1 %conflict.rdx460, %found.conflict463
  %bound0465 = icmp ult ptr %scevgep407, %scevgep423
  %bound1466 = icmp ult ptr %scevgep421, %scevgep410
  %found.conflict467 = and i1 %bound0465, %bound1466
  %conflict.rdx468 = or i1 %conflict.rdx464, %found.conflict467
  %bound0469 = icmp ult ptr %scevgep407, %scevgep425
  %bound1470 = icmp ult ptr %scevgep422, %scevgep410
  %found.conflict471 = and i1 %bound0469, %bound1470
  %conflict.rdx472 = or i1 %conflict.rdx468, %found.conflict471
  %bound0473 = icmp ult ptr %scevgep411, %scevgep415
  %bound1474 = icmp ult ptr %scevgep412, %scevgep413
  %found.conflict475 = and i1 %bound0473, %bound1474
  %conflict.rdx476 = or i1 %conflict.rdx472, %found.conflict475
  %bound0477 = icmp ult ptr %scevgep411, %scevgep418
  %bound1478 = icmp ult ptr %scevgep416, %scevgep413
  %found.conflict479 = and i1 %bound0477, %bound1478
  %conflict.rdx480 = or i1 %conflict.rdx476, %found.conflict479
  %bound0481 = icmp ult ptr %scevgep411, %scevgep420
  %bound1482 = icmp ult ptr %scevgep417, %scevgep413
  %found.conflict483 = and i1 %bound0481, %bound1482
  %conflict.rdx484 = or i1 %conflict.rdx480, %found.conflict483
  %bound0485 = icmp ult ptr %scevgep411, %scevgep423
  %bound1486 = icmp ult ptr %scevgep421, %scevgep413
  %found.conflict487 = and i1 %bound0485, %bound1486
  %conflict.rdx488 = or i1 %conflict.rdx484, %found.conflict487
  %bound0489 = icmp ult ptr %scevgep411, %scevgep425
  %bound1490 = icmp ult ptr %scevgep422, %scevgep413
  %found.conflict491 = and i1 %bound0489, %bound1490
  %conflict.rdx492 = or i1 %conflict.rdx488, %found.conflict491
  %bound0493 = icmp ult ptr %scevgep412, %scevgep418
  %bound1494 = icmp ult ptr %scevgep416, %scevgep415
  %found.conflict495 = and i1 %bound0493, %bound1494
  %conflict.rdx496 = or i1 %conflict.rdx492, %found.conflict495
  %bound0497 = icmp ult ptr %scevgep412, %scevgep420
  %bound1498 = icmp ult ptr %scevgep417, %scevgep415
  %found.conflict499 = and i1 %bound0497, %bound1498
  %conflict.rdx500 = or i1 %conflict.rdx496, %found.conflict499
  %bound0501 = icmp ult ptr %scevgep412, %scevgep423
  %bound1502 = icmp ult ptr %scevgep421, %scevgep415
  %found.conflict503 = and i1 %bound0501, %bound1502
  %conflict.rdx504 = or i1 %conflict.rdx500, %found.conflict503
  %bound0505 = icmp ult ptr %scevgep412, %scevgep425
  %bound1506 = icmp ult ptr %scevgep422, %scevgep415
  %found.conflict507 = and i1 %bound0505, %bound1506
  %conflict.rdx508 = or i1 %conflict.rdx504, %found.conflict507
  %bound0509 = icmp ult ptr %scevgep416, %scevgep420
  %bound1510 = icmp ult ptr %scevgep417, %scevgep418
  %found.conflict511 = and i1 %bound0509, %bound1510
  %conflict.rdx512 = or i1 %conflict.rdx508, %found.conflict511
  %bound0513 = icmp ult ptr %scevgep416, %scevgep423
  %bound1514 = icmp ult ptr %scevgep421, %scevgep418
  %found.conflict515 = and i1 %bound0513, %bound1514
  %conflict.rdx516 = or i1 %conflict.rdx512, %found.conflict515
  %bound0517 = icmp ult ptr %scevgep416, %scevgep425
  %bound1518 = icmp ult ptr %scevgep422, %scevgep418
  %found.conflict519 = and i1 %bound0517, %bound1518
  %conflict.rdx520 = or i1 %conflict.rdx516, %found.conflict519
  %bound0521 = icmp ult ptr %scevgep417, %scevgep423
  %bound1522 = icmp ult ptr %scevgep421, %scevgep420
  %found.conflict523 = and i1 %bound0521, %bound1522
  %conflict.rdx524 = or i1 %conflict.rdx520, %found.conflict523
  %bound0525 = icmp ult ptr %scevgep417, %scevgep425
  %bound1526 = icmp ult ptr %scevgep422, %scevgep420
  %found.conflict527 = and i1 %bound0525, %bound1526
  %conflict.rdx528 = or i1 %conflict.rdx524, %found.conflict527
  %bound0529 = icmp ult ptr %scevgep421, %scevgep425
  %bound1530 = icmp ult ptr %scevgep422, %scevgep423
  %found.conflict531 = and i1 %bound0529, %bound1530
  %conflict.rdx532 = or i1 %conflict.rdx528, %found.conflict531
  br i1 %conflict.rdx532, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %290, -2
  %361 = shl i64 %n.vec, 1
  %ind.end = add i64 %indvars.iv360, %361
  %broadcast.splatinsert = insertelement <2 x double> poison, double %323, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert543 = insertelement <2 x double> poison, double %319, i64 0
  %broadcast.splat544 = shufflevector <2 x double> %broadcast.splatinsert543, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert545 = insertelement <2 x double> poison, double %332, i64 0
  %broadcast.splat546 = shufflevector <2 x double> %broadcast.splatinsert545, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert548 = insertelement <2 x double> poison, double %315, i64 0
  %broadcast.splat549 = shufflevector <2 x double> %broadcast.splatinsert548, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert550 = insertelement <2 x double> poison, double %310, i64 0
  %broadcast.splat551 = shufflevector <2 x double> %broadcast.splatinsert550, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert552 = insertelement <2 x double> poison, double %327, i64 0
  %broadcast.splat553 = shufflevector <2 x double> %broadcast.splatinsert552, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert555 = insertelement <2 x double> poison, double %328, i64 0
  %broadcast.splat556 = shufflevector <2 x double> %broadcast.splatinsert555, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert557 = insertelement <2 x double> poison, double %326, i64 0
  %broadcast.splat558 = shufflevector <2 x double> %broadcast.splatinsert557, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert559 = insertelement <2 x double> poison, double %333, i64 0
  %broadcast.splat560 = shufflevector <2 x double> %broadcast.splatinsert559, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %362 = shl i64 %index, 1
  %offset.idx = add i64 %indvars.iv360, %362
  %363 = add nsw i64 %offset.idx, %223
  %364 = add nsw i64 %363, %223
  %365 = add nsw i64 %364, %223
  %366 = getelementptr inbounds double, ptr %1, i64 %offset.idx
  %wide.vec = load <4 x double>, ptr %366, align 8, !tbaa !5
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec533 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %367 = getelementptr inbounds double, ptr %1, i64 %363
  %wide.vec534 = load <4 x double>, ptr %367, align 8, !tbaa !5
  %strided.vec535 = shufflevector <4 x double> %wide.vec534, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec536 = shufflevector <4 x double> %wide.vec534, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %368 = fadd <2 x double> %strided.vec, %strided.vec535
  %369 = or disjoint i64 %offset.idx, 1
  %370 = or disjoint i64 %363, 1
  %371 = fadd <2 x double> %strided.vec533, %strided.vec536
  %372 = fsub <2 x double> %strided.vec, %strided.vec535
  %373 = fsub <2 x double> %strided.vec533, %strided.vec536
  %374 = getelementptr inbounds double, ptr %1, i64 %364
  %wide.vec537 = load <4 x double>, ptr %374, align 8, !tbaa !5
  %strided.vec538 = shufflevector <4 x double> %wide.vec537, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec539 = shufflevector <4 x double> %wide.vec537, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %375 = getelementptr inbounds double, ptr %1, i64 %365
  %wide.vec540 = load <4 x double>, ptr %375, align 8, !tbaa !5
  %strided.vec541 = shufflevector <4 x double> %wide.vec540, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec542 = shufflevector <4 x double> %wide.vec540, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %376 = fadd <2 x double> %strided.vec538, %strided.vec541
  %377 = or disjoint i64 %364, 1
  %378 = or disjoint i64 %365, 1
  %379 = fadd <2 x double> %strided.vec539, %strided.vec542
  %380 = fsub <2 x double> %strided.vec538, %strided.vec541
  %381 = fsub <2 x double> %strided.vec539, %strided.vec542
  %382 = fadd <2 x double> %368, %376
  %383 = fadd <2 x double> %371, %379
  %gep1011 = getelementptr double, ptr %invariant.gep1010, i64 %369
  %interleaved.vec = shufflevector <2 x double> %382, <2 x double> %383, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %gep1011, align 8, !tbaa !5
  %384 = fsub <2 x double> %368, %376
  %385 = fsub <2 x double> %371, %379
  %386 = fmul <2 x double> %broadcast.splat, %385
  %387 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat544, <2 x double> %384, <2 x double> %386)
  %388 = fmul <2 x double> %384, %broadcast.splat546
  %389 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat544, <2 x double> %385, <2 x double> %388)
  %gep1013 = getelementptr double, ptr %invariant.gep1012, i64 %377
  %interleaved.vec547 = shufflevector <2 x double> %387, <2 x double> %389, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec547, ptr %gep1013, align 8, !tbaa !5
  %390 = fadd <2 x double> %372, %381
  %391 = fsub <2 x double> %373, %380
  %392 = fmul <2 x double> %broadcast.splat549, %391
  %393 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat551, <2 x double> %390, <2 x double> %392)
  %394 = fmul <2 x double> %390, %broadcast.splat553
  %395 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat551, <2 x double> %391, <2 x double> %394)
  %gep1015 = getelementptr double, ptr %invariant.gep1014, i64 %370
  %interleaved.vec554 = shufflevector <2 x double> %393, <2 x double> %395, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec554, ptr %gep1015, align 8, !tbaa !5
  %396 = fsub <2 x double> %372, %381
  %397 = fadd <2 x double> %373, %380
  %398 = fmul <2 x double> %broadcast.splat556, %397
  %399 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat558, <2 x double> %396, <2 x double> %398)
  %400 = fmul <2 x double> %396, %broadcast.splat560
  %401 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat558, <2 x double> %397, <2 x double> %400)
  %gep1017 = getelementptr double, ptr %invariant.gep1016, i64 %378
  %interleaved.vec561 = shufflevector <2 x double> %399, <2 x double> %401, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec561, ptr %gep1017, align 8, !tbaa !5
  %index.next = add nuw i64 %index, 2
  %402 = icmp eq i64 %index.next, %n.vec
  br i1 %402, label %middle.block, label %vector.body, !llvm.loop !16

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %290, %n.vec
  br i1 %cmp.n, label %._crit_edge341, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %vector.scevcheck, %.lr.ph340
  %indvars.iv362.ph = phi i64 [ %indvars.iv360, %vector.memcheck ], [ %indvars.iv360, %vector.scevcheck ], [ %indvars.iv360, %.lr.ph340 ], [ %ind.end, %middle.block ]
  %403 = insertelement <2 x double> poison, double %332, i64 0
  %404 = insertelement <2 x double> %403, double %323, i64 1
  %405 = insertelement <2 x double> poison, double %319, i64 0
  %406 = shufflevector <2 x double> %405, <2 x double> poison, <2 x i32> zeroinitializer
  %407 = insertelement <2 x double> poison, double %315, i64 0
  %408 = insertelement <2 x double> %407, double %327, i64 1
  %409 = insertelement <2 x double> poison, double %310, i64 0
  %410 = shufflevector <2 x double> %409, <2 x double> poison, <2 x i32> zeroinitializer
  %411 = insertelement <2 x double> poison, double %328, i64 0
  %412 = insertelement <2 x double> %411, double %333, i64 1
  %413 = insertelement <2 x double> poison, double %326, i64 0
  %414 = shufflevector <2 x double> %413, <2 x double> poison, <2 x i32> zeroinitializer
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv362 = phi i64 [ %indvars.iv.next363, %scalar.ph ], [ %indvars.iv362.ph, %scalar.ph.preheader ]
  %415 = add nsw i64 %indvars.iv362, %223
  %416 = add nsw i64 %415, %223
  %417 = getelementptr inbounds double, ptr %1, i64 %indvars.iv362
  %418 = getelementptr inbounds double, ptr %1, i64 %415
  %419 = getelementptr inbounds double, ptr %1, i64 %416
  %gep1019 = getelementptr double, ptr %invariant.gep1018, i64 %416
  %420 = load <2 x double>, ptr %417, align 8, !tbaa !5
  %421 = load <2 x double>, ptr %418, align 8, !tbaa !5
  %422 = fadd <2 x double> %420, %421
  %423 = load <2 x double>, ptr %419, align 8, !tbaa !5
  %424 = load <2 x double>, ptr %gep1019, align 8, !tbaa !5
  %425 = fadd <2 x double> %423, %424
  %426 = fadd <2 x double> %422, %425
  store <2 x double> %426, ptr %417, align 8, !tbaa !5
  %427 = fsub <2 x double> %422, %425
  %428 = fmul <2 x double> %404, %427
  %429 = shufflevector <2 x double> %428, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %430 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %406, <2 x double> %427, <2 x double> %429)
  store <2 x double> %430, ptr %419, align 8, !tbaa !5
  %431 = fsub <2 x double> %420, %421
  %432 = fsub <2 x double> %423, %424
  %433 = shufflevector <2 x double> %432, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %434 = fadd <2 x double> %431, %433
  %435 = fsub <2 x double> %431, %433
  %436 = shufflevector <2 x double> %434, <2 x double> %435, <2 x i32> <i32 0, i32 3>
  %437 = shufflevector <2 x double> %436, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %438 = fmul <2 x double> %408, %437
  %439 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %410, <2 x double> %436, <2 x double> %438)
  store <2 x double> %439, ptr %418, align 8, !tbaa !5
  %440 = shufflevector <2 x double> %435, <2 x double> %434, <2 x i32> <i32 0, i32 3>
  %441 = shufflevector <2 x double> %440, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %442 = fmul <2 x double> %412, %441
  %443 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %414, <2 x double> %440, <2 x double> %442)
  store <2 x double> %443, ptr %gep1019, align 8, !tbaa !5
  %indvars.iv.next363 = add nsw i64 %indvars.iv362, 2
  %.not328 = icmp sgt i64 %indvars.iv.next363, %331
  br i1 %.not328, label %._crit_edge341, label %scalar.ph, !llvm.loop !17

._crit_edge341:                                   ; preds = %scalar.ph, %middle.block, %281
  %indvars.iv.next361 = add nsw i64 %indvars.iv360, %222
  %.not327 = icmp sgt i64 %indvars.iv.next361, %224
  %indvar.next = add i64 %indvar, 1
  br i1 %.not327, label %.loopexit329, label %281, !llvm.loop !18

.loopexit329:                                     ; preds = %._crit_edge341, %._crit_edge..loopexit329_crit_edge, %._crit_edge336
  %.pre-phi = phi i32 [ %.pre, %._crit_edge..loopexit329_crit_edge ], [ %219, %._crit_edge336 ], [ %219, %._crit_edge341 ]
  %444 = icmp slt i32 %.pre-phi, %0
  br i1 %444, label %6, label %._crit_edge352, !llvm.loop !19

._crit_edge352:                                   ; preds = %.loopexit329
  %445 = icmp sge i32 %7, %0
  %.not353 = icmp slt i32 %7, 2
  %or.cond = or i1 %445, %.not353
  br i1 %or.cond, label %.loopexit, label %.lr.ph355.preheader

._crit_edge352.thread:                            ; preds = %3
  %446 = icmp sgt i32 %0, 2
  br i1 %446, label %.lr.ph355.preheader, label %.loopexit

.lr.ph355.preheader:                              ; preds = %._crit_edge352, %._crit_edge352.thread
  %.0320.lcssa374377 = phi i32 [ 2, %._crit_edge352.thread ], [ %7, %._crit_edge352 ]
  %447 = add nsw i32 %.0320.lcssa374377, -2
  %448 = zext nneg i32 %.0320.lcssa374377 to i64
  %449 = zext nneg i32 %447 to i64
  %450 = lshr exact i64 %449, 1
  %451 = add nuw nsw i64 %450, 1
  %min.iters.check969 = icmp ult i32 %447, 32
  br i1 %min.iters.check969, label %.lr.ph355.preheader991, label %vector.memcheck936

vector.memcheck936:                               ; preds = %.lr.ph355.preheader
  %452 = shl nuw nsw i64 %449, 3
  %453 = or disjoint i64 %452, 8
  %scevgep937 = getelementptr i8, ptr %1, i64 %453
  %scevgep938 = getelementptr i8, ptr %1, i64 8
  %454 = getelementptr i8, ptr %1, i64 %452
  %scevgep939 = getelementptr i8, ptr %454, i64 16
  %455 = shl nuw nsw i64 %448, 3
  %scevgep940 = getelementptr i8, ptr %1, i64 %455
  %456 = add nuw nsw i64 %452, %455
  %457 = or disjoint i64 %456, 8
  %scevgep941 = getelementptr i8, ptr %1, i64 %457
  %458 = or disjoint i64 %455, 8
  %scevgep942 = getelementptr i8, ptr %1, i64 %458
  %459 = getelementptr i8, ptr %1, i64 %456
  %scevgep943 = getelementptr i8, ptr %459, i64 16
  %bound0944 = icmp ugt ptr %scevgep939, %1
  %bound1945 = icmp ult ptr %scevgep938, %scevgep937
  %found.conflict946 = and i1 %bound0944, %bound1945
  %bound0947 = icmp ugt ptr %scevgep941, %1
  %bound1948 = icmp ult ptr %scevgep940, %scevgep937
  %found.conflict949 = and i1 %bound0947, %bound1948
  %conflict.rdx950 = or i1 %found.conflict946, %found.conflict949
  %bound0951 = icmp ugt ptr %scevgep943, %1
  %bound1952 = icmp ult ptr %scevgep942, %scevgep937
  %found.conflict953 = and i1 %bound0951, %bound1952
  %conflict.rdx954 = or i1 %conflict.rdx950, %found.conflict953
  %bound0955 = icmp ult ptr %scevgep938, %scevgep941
  %bound1956 = icmp ult ptr %scevgep940, %scevgep939
  %found.conflict957 = and i1 %bound0955, %bound1956
  %conflict.rdx958 = or i1 %conflict.rdx954, %found.conflict957
  %bound0959 = icmp ult ptr %scevgep938, %scevgep943
  %bound1960 = icmp ult ptr %scevgep942, %scevgep939
  %found.conflict961 = and i1 %bound0959, %bound1960
  %conflict.rdx962 = or i1 %conflict.rdx958, %found.conflict961
  %bound0963 = icmp ult ptr %scevgep940, %scevgep943
  %bound1964 = icmp ult ptr %scevgep942, %scevgep941
  %found.conflict965 = and i1 %bound0963, %bound1964
  %conflict.rdx966 = or i1 %conflict.rdx962, %found.conflict965
  br i1 %conflict.rdx966, label %.lr.ph355.preheader991, label %vector.ph970

vector.ph970:                                     ; preds = %vector.memcheck936
  %460 = and i64 %449, 2
  %.not989 = icmp eq i64 %460, 0
  %.neg = select i1 %.not989, i64 -1, i64 -2
  %n.vec972 = add nsw i64 %.neg, %451
  %ind.end973 = shl nsw i64 %n.vec972, 1
  %invariant.gep1024 = getelementptr i8, ptr %1, i64 -8
  br label %vector.body975

vector.body975:                                   ; preds = %vector.body975, %vector.ph970
  %index976 = phi i64 [ 0, %vector.ph970 ], [ %index.next988, %vector.body975 ]
  %offset.idx977 = shl i64 %index976, 1
  %461 = add nuw nsw i64 %offset.idx977, %448
  %462 = getelementptr inbounds double, ptr %1, i64 %offset.idx977
  %wide.vec978 = load <4 x double>, ptr %462, align 8, !tbaa !5
  %strided.vec980 = shufflevector <4 x double> %wide.vec978, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %463 = getelementptr inbounds double, ptr %1, i64 %461
  %wide.vec981 = load <4 x double>, ptr %463, align 8, !tbaa !5
  %464 = fsub <4 x double> %wide.vec978, %wide.vec981
  %465 = shufflevector <4 x double> %464, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %466 = or disjoint i64 %offset.idx977, 1
  %467 = or disjoint i64 %461, 1
  %468 = getelementptr inbounds double, ptr %1, i64 %467
  %wide.vec984 = load <4 x double>, ptr %468, align 8, !tbaa !5
  %strided.vec985 = shufflevector <4 x double> %wide.vec984, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %469 = fsub <2 x double> %strided.vec980, %strided.vec985
  %gep1025 = getelementptr double, ptr %invariant.gep1024, i64 %466
  %interleaved.vec986 = fadd <4 x double> %wide.vec978, %wide.vec981
  store <4 x double> %interleaved.vec986, ptr %gep1025, align 8, !tbaa !5
  %470 = getelementptr inbounds i8, ptr %468, i64 -8
  %interleaved.vec987 = shufflevector <2 x double> %465, <2 x double> %469, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec987, ptr %470, align 8, !tbaa !5
  %index.next988 = add nuw i64 %index976, 2
  %471 = icmp eq i64 %index.next988, %n.vec972
  br i1 %471, label %.lr.ph355.preheader991, label %vector.body975, !llvm.loop !20

.lr.ph355.preheader991:                           ; preds = %vector.body975, %vector.memcheck936, %.lr.ph355.preheader
  %indvars.iv370.ph = phi i64 [ 0, %vector.memcheck936 ], [ 0, %.lr.ph355.preheader ], [ %ind.end973, %vector.body975 ]
  br label %.lr.ph355

.lr.ph355:                                        ; preds = %.lr.ph355.preheader991, %.lr.ph355
  %indvars.iv370 = phi i64 [ %indvars.iv.next371, %.lr.ph355 ], [ %indvars.iv370.ph, %.lr.ph355.preheader991 ]
  %472 = add nuw nsw i64 %indvars.iv370, %448
  %473 = getelementptr inbounds double, ptr %1, i64 %indvars.iv370
  %474 = getelementptr inbounds double, ptr %1, i64 %472
  %475 = or disjoint i64 %indvars.iv370, 1
  %476 = getelementptr inbounds double, ptr %1, i64 %475
  %477 = or disjoint i64 %472, 1
  %478 = getelementptr inbounds double, ptr %1, i64 %477
  %479 = load <2 x double>, ptr %473, align 8, !tbaa !5
  %480 = load <2 x double>, ptr %474, align 8, !tbaa !5
  %481 = fsub <2 x double> %479, %480
  %482 = fadd <2 x double> %479, %480
  %483 = extractelement <2 x double> %482, i64 0
  store double %483, ptr %473, align 8, !tbaa !5
  %484 = load double, ptr %478, align 8, !tbaa !5
  %485 = extractelement <2 x double> %479, i64 1
  %486 = fadd double %485, %484
  store double %486, ptr %476, align 8, !tbaa !5
  store <2 x double> %481, ptr %474, align 8, !tbaa !5
  %indvars.iv.next371 = add nuw nsw i64 %indvars.iv370, 2
  %.not = icmp ugt i64 %indvars.iv.next371, %449
  br i1 %.not, label %.loopexit, label %.lr.ph355, !llvm.loop !21

.loopexit:                                        ; preds = %.lr.ph355, %._crit_edge352.thread, %._crit_edge352
  ret void
}

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

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

attributes #0 = { nofree norecurse nosync nounwind memory(argmem: readwrite) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10, !11, !12}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!"llvm.loop.isvectorized", i32 1}
!12 = !{!"llvm.loop.unroll.runtime.disable"}
!13 = distinct !{!13, !10, !11}
!14 = distinct !{!14, !10, !11, !12}
!15 = distinct !{!15, !10, !11}
!16 = distinct !{!16, !10, !11, !12}
!17 = distinct !{!17, !10, !11}
!18 = distinct !{!18, !10}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !10, !11, !12}
!21 = distinct !{!21, !10, !11}


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