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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @cftfrow(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3) #1 {
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca 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 i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %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
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  store i32 %0, ptr %5, align 4, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !9
  store ptr %3, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 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 4, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 4, 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
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  store i32 1, ptr %17, align 4, !tbaa !5
  br label %33

33:                                               ; preds = %1014, %4
  %34 = load i32, ptr %17, align 4, !tbaa !5
  %35 = shl i32 %34, 1
  %36 = load i32, ptr %5, align 4, !tbaa !5
  %37 = icmp slt i32 %35, %36
  br i1 %37, label %38, label %1016

38:                                               ; preds = %33
  %39 = load i32, ptr %17, align 4, !tbaa !5
  %40 = shl i32 %39, 2
  store i32 %40, ptr %18, align 4, !tbaa !5
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %41

41:                                               ; preds = %318, %38
  %42 = load i32, ptr %10, align 4, !tbaa !5
  %43 = load i32, ptr %17, align 4, !tbaa !5
  %44 = sub nsw i32 %43, 1
  %45 = icmp sle i32 %42, %44
  br i1 %45, label %46, label %321

46:                                               ; preds = %41
  %47 = load i32, ptr %10, align 4, !tbaa !5
  %48 = load i32, ptr %17, align 4, !tbaa !5
  %49 = add nsw i32 %47, %48
  store i32 %49, ptr %11, align 4, !tbaa !5
  %50 = load i32, ptr %11, align 4, !tbaa !5
  %51 = load i32, ptr %17, align 4, !tbaa !5
  %52 = add nsw i32 %50, %51
  store i32 %52, ptr %12, align 4, !tbaa !5
  %53 = load i32, ptr %12, align 4, !tbaa !5
  %54 = load i32, ptr %17, align 4, !tbaa !5
  %55 = add nsw i32 %53, %54
  store i32 %55, ptr %13, align 4, !tbaa !5
  store i32 0, ptr %9, align 4, !tbaa !5
  br label %56

56:                                               ; preds = %314, %46
  %57 = load i32, ptr %9, align 4, !tbaa !5
  %58 = load i32, ptr %6, align 4, !tbaa !5
  %59 = sub nsw i32 %58, 2
  %60 = icmp sle i32 %57, %59
  br i1 %60, label %61, label %317

61:                                               ; preds = %56
  %62 = load ptr, ptr %7, align 8, !tbaa !9
  %63 = load i32, ptr %10, align 4, !tbaa !5
  %64 = sext i32 %63 to i64
  %65 = getelementptr inbounds ptr, ptr %62, i64 %64
  %66 = load ptr, ptr %65, align 8, !tbaa !9
  %67 = load i32, ptr %9, align 4, !tbaa !5
  %68 = sext i32 %67 to i64
  %69 = getelementptr inbounds double, ptr %66, i64 %68
  %70 = load double, ptr %69, align 8, !tbaa !11
  %71 = load ptr, ptr %7, align 8, !tbaa !9
  %72 = load i32, ptr %11, align 4, !tbaa !5
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds ptr, ptr %71, i64 %73
  %75 = load ptr, ptr %74, align 8, !tbaa !9
  %76 = load i32, ptr %9, align 4, !tbaa !5
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds double, ptr %75, i64 %77
  %79 = load double, ptr %78, align 8, !tbaa !11
  %80 = fadd double %70, %79
  store double %80, ptr %25, align 8, !tbaa !11
  %81 = load ptr, ptr %7, align 8, !tbaa !9
  %82 = load i32, ptr %10, align 4, !tbaa !5
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds ptr, ptr %81, i64 %83
  %85 = load ptr, ptr %84, align 8, !tbaa !9
  %86 = load i32, ptr %9, align 4, !tbaa !5
  %87 = add nsw i32 %86, 1
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds double, ptr %85, i64 %88
  %90 = load double, ptr %89, align 8, !tbaa !11
  %91 = load ptr, ptr %7, align 8, !tbaa !9
  %92 = load i32, ptr %11, align 4, !tbaa !5
  %93 = sext i32 %92 to i64
  %94 = getelementptr inbounds ptr, ptr %91, i64 %93
  %95 = load ptr, ptr %94, align 8, !tbaa !9
  %96 = load i32, ptr %9, align 4, !tbaa !5
  %97 = add nsw i32 %96, 1
  %98 = sext i32 %97 to i64
  %99 = getelementptr inbounds double, ptr %95, i64 %98
  %100 = load double, ptr %99, align 8, !tbaa !11
  %101 = fadd double %90, %100
  store double %101, ptr %26, align 8, !tbaa !11
  %102 = load ptr, ptr %7, align 8, !tbaa !9
  %103 = load i32, ptr %10, align 4, !tbaa !5
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds ptr, ptr %102, i64 %104
  %106 = load ptr, ptr %105, align 8, !tbaa !9
  %107 = load i32, ptr %9, 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 = load ptr, ptr %7, align 8, !tbaa !9
  %112 = load i32, ptr %11, align 4, !tbaa !5
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds ptr, ptr %111, i64 %113
  %115 = load ptr, ptr %114, align 8, !tbaa !9
  %116 = load i32, ptr %9, align 4, !tbaa !5
  %117 = sext i32 %116 to i64
  %118 = getelementptr inbounds double, ptr %115, i64 %117
  %119 = load double, ptr %118, align 8, !tbaa !11
  %120 = fsub double %110, %119
  store double %120, ptr %27, align 8, !tbaa !11
  %121 = load ptr, ptr %7, align 8, !tbaa !9
  %122 = load i32, ptr %10, align 4, !tbaa !5
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds ptr, ptr %121, i64 %123
  %125 = load ptr, ptr %124, align 8, !tbaa !9
  %126 = load i32, ptr %9, align 4, !tbaa !5
  %127 = add nsw i32 %126, 1
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds double, ptr %125, i64 %128
  %130 = load double, ptr %129, align 8, !tbaa !11
  %131 = load ptr, ptr %7, align 8, !tbaa !9
  %132 = load i32, ptr %11, align 4, !tbaa !5
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds ptr, ptr %131, i64 %133
  %135 = load ptr, ptr %134, align 8, !tbaa !9
  %136 = load i32, ptr %9, align 4, !tbaa !5
  %137 = add nsw i32 %136, 1
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds double, ptr %135, i64 %138
  %140 = load double, ptr %139, align 8, !tbaa !11
  %141 = fsub double %130, %140
  store double %141, ptr %28, align 8, !tbaa !11
  %142 = load ptr, ptr %7, align 8, !tbaa !9
  %143 = load i32, ptr %12, align 4, !tbaa !5
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds ptr, ptr %142, i64 %144
  %146 = load ptr, ptr %145, align 8, !tbaa !9
  %147 = load i32, ptr %9, align 4, !tbaa !5
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds double, ptr %146, i64 %148
  %150 = load double, ptr %149, align 8, !tbaa !11
  %151 = load ptr, ptr %7, align 8, !tbaa !9
  %152 = load i32, ptr %13, align 4, !tbaa !5
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds ptr, ptr %151, i64 %153
  %155 = load ptr, ptr %154, align 8, !tbaa !9
  %156 = load i32, ptr %9, align 4, !tbaa !5
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds double, ptr %155, i64 %157
  %159 = load double, ptr %158, align 8, !tbaa !11
  %160 = fadd double %150, %159
  store double %160, ptr %29, align 8, !tbaa !11
  %161 = load ptr, ptr %7, align 8, !tbaa !9
  %162 = load i32, ptr %12, align 4, !tbaa !5
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds ptr, ptr %161, i64 %163
  %165 = load ptr, ptr %164, align 8, !tbaa !9
  %166 = load i32, ptr %9, align 4, !tbaa !5
  %167 = add nsw i32 %166, 1
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds double, ptr %165, i64 %168
  %170 = load double, ptr %169, align 8, !tbaa !11
  %171 = load ptr, ptr %7, align 8, !tbaa !9
  %172 = load i32, ptr %13, align 4, !tbaa !5
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds ptr, ptr %171, i64 %173
  %175 = load ptr, ptr %174, align 8, !tbaa !9
  %176 = load i32, ptr %9, align 4, !tbaa !5
  %177 = add nsw i32 %176, 1
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds double, ptr %175, i64 %178
  %180 = load double, ptr %179, align 8, !tbaa !11
  %181 = fadd double %170, %180
  store double %181, ptr %30, align 8, !tbaa !11
  %182 = load ptr, ptr %7, align 8, !tbaa !9
  %183 = load i32, ptr %12, align 4, !tbaa !5
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds ptr, ptr %182, i64 %184
  %186 = load ptr, ptr %185, align 8, !tbaa !9
  %187 = load i32, ptr %9, align 4, !tbaa !5
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds double, ptr %186, i64 %188
  %190 = load double, ptr %189, align 8, !tbaa !11
  %191 = load ptr, ptr %7, align 8, !tbaa !9
  %192 = load i32, ptr %13, align 4, !tbaa !5
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds ptr, ptr %191, i64 %193
  %195 = load ptr, ptr %194, align 8, !tbaa !9
  %196 = load i32, ptr %9, align 4, !tbaa !5
  %197 = sext i32 %196 to i64
  %198 = getelementptr inbounds double, ptr %195, i64 %197
  %199 = load double, ptr %198, align 8, !tbaa !11
  %200 = fsub double %190, %199
  store double %200, ptr %31, align 8, !tbaa !11
  %201 = load ptr, ptr %7, align 8, !tbaa !9
  %202 = load i32, ptr %12, align 4, !tbaa !5
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds ptr, ptr %201, i64 %203
  %205 = load ptr, ptr %204, align 8, !tbaa !9
  %206 = load i32, ptr %9, align 4, !tbaa !5
  %207 = add nsw i32 %206, 1
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds double, ptr %205, i64 %208
  %210 = load double, ptr %209, align 8, !tbaa !11
  %211 = load ptr, ptr %7, align 8, !tbaa !9
  %212 = load i32, ptr %13, align 4, !tbaa !5
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds ptr, ptr %211, i64 %213
  %215 = load ptr, ptr %214, align 8, !tbaa !9
  %216 = load i32, ptr %9, align 4, !tbaa !5
  %217 = add nsw i32 %216, 1
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds double, ptr %215, i64 %218
  %220 = load double, ptr %219, align 8, !tbaa !11
  %221 = fsub double %210, %220
  store double %221, ptr %32, align 8, !tbaa !11
  %222 = load double, ptr %25, align 8, !tbaa !11
  %223 = load double, ptr %29, align 8, !tbaa !11
  %224 = fadd double %222, %223
  %225 = load ptr, ptr %7, align 8, !tbaa !9
  %226 = load i32, ptr %10, align 4, !tbaa !5
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds ptr, ptr %225, i64 %227
  %229 = load ptr, ptr %228, align 8, !tbaa !9
  %230 = load i32, ptr %9, align 4, !tbaa !5
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds double, ptr %229, i64 %231
  store double %224, ptr %232, align 8, !tbaa !11
  %233 = load double, ptr %26, align 8, !tbaa !11
  %234 = load double, ptr %30, align 8, !tbaa !11
  %235 = fadd double %233, %234
  %236 = load ptr, ptr %7, align 8, !tbaa !9
  %237 = load i32, ptr %10, align 4, !tbaa !5
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds ptr, ptr %236, i64 %238
  %240 = load ptr, ptr %239, align 8, !tbaa !9
  %241 = load i32, ptr %9, align 4, !tbaa !5
  %242 = add nsw i32 %241, 1
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds double, ptr %240, i64 %243
  store double %235, ptr %244, align 8, !tbaa !11
  %245 = load double, ptr %25, align 8, !tbaa !11
  %246 = load double, ptr %29, align 8, !tbaa !11
  %247 = fsub double %245, %246
  %248 = load ptr, ptr %7, align 8, !tbaa !9
  %249 = load i32, ptr %12, align 4, !tbaa !5
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds ptr, ptr %248, i64 %250
  %252 = load ptr, ptr %251, align 8, !tbaa !9
  %253 = load i32, ptr %9, align 4, !tbaa !5
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds double, ptr %252, i64 %254
  store double %247, ptr %255, align 8, !tbaa !11
  %256 = load double, ptr %26, align 8, !tbaa !11
  %257 = load double, ptr %30, align 8, !tbaa !11
  %258 = fsub double %256, %257
  %259 = load ptr, ptr %7, align 8, !tbaa !9
  %260 = load i32, ptr %12, align 4, !tbaa !5
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds ptr, ptr %259, i64 %261
  %263 = load ptr, ptr %262, align 8, !tbaa !9
  %264 = load i32, ptr %9, align 4, !tbaa !5
  %265 = add nsw i32 %264, 1
  %266 = sext i32 %265 to i64
  %267 = getelementptr inbounds double, ptr %263, i64 %266
  store double %258, ptr %267, align 8, !tbaa !11
  %268 = load double, ptr %27, align 8, !tbaa !11
  %269 = load double, ptr %32, align 8, !tbaa !11
  %270 = fadd double %268, %269
  %271 = load ptr, ptr %7, align 8, !tbaa !9
  %272 = load i32, ptr %11, align 4, !tbaa !5
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds ptr, ptr %271, i64 %273
  %275 = load ptr, ptr %274, align 8, !tbaa !9
  %276 = load i32, ptr %9, align 4, !tbaa !5
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds double, ptr %275, i64 %277
  store double %270, ptr %278, align 8, !tbaa !11
  %279 = load double, ptr %28, align 8, !tbaa !11
  %280 = load double, ptr %31, align 8, !tbaa !11
  %281 = fsub double %279, %280
  %282 = load ptr, ptr %7, align 8, !tbaa !9
  %283 = load i32, ptr %11, align 4, !tbaa !5
  %284 = sext i32 %283 to i64
  %285 = getelementptr inbounds ptr, ptr %282, i64 %284
  %286 = load ptr, ptr %285, align 8, !tbaa !9
  %287 = load i32, ptr %9, align 4, !tbaa !5
  %288 = add nsw i32 %287, 1
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds double, ptr %286, i64 %289
  store double %281, ptr %290, align 8, !tbaa !11
  %291 = load double, ptr %27, align 8, !tbaa !11
  %292 = load double, ptr %32, align 8, !tbaa !11
  %293 = fsub double %291, %292
  %294 = load ptr, ptr %7, align 8, !tbaa !9
  %295 = load i32, ptr %13, align 4, !tbaa !5
  %296 = sext i32 %295 to i64
  %297 = getelementptr inbounds ptr, ptr %294, i64 %296
  %298 = load ptr, ptr %297, align 8, !tbaa !9
  %299 = load i32, ptr %9, align 4, !tbaa !5
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds double, ptr %298, i64 %300
  store double %293, ptr %301, align 8, !tbaa !11
  %302 = load double, ptr %28, align 8, !tbaa !11
  %303 = load double, ptr %31, align 8, !tbaa !11
  %304 = fadd double %302, %303
  %305 = load ptr, ptr %7, align 8, !tbaa !9
  %306 = load i32, ptr %13, align 4, !tbaa !5
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds ptr, ptr %305, i64 %307
  %309 = load ptr, ptr %308, align 8, !tbaa !9
  %310 = load i32, ptr %9, align 4, !tbaa !5
  %311 = add nsw i32 %310, 1
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds double, ptr %309, i64 %312
  store double %304, ptr %313, align 8, !tbaa !11
  br label %314

314:                                              ; preds = %61
  %315 = load i32, ptr %9, align 4, !tbaa !5
  %316 = add nsw i32 %315, 2
  store i32 %316, ptr %9, align 4, !tbaa !5
  br label %56, !llvm.loop !13

317:                                              ; preds = %56
  br label %318

318:                                              ; preds = %317
  %319 = load i32, ptr %10, align 4, !tbaa !5
  %320 = add nsw i32 %319, 1
  store i32 %320, ptr %10, align 4, !tbaa !5
  br label %41, !llvm.loop !15

321:                                              ; preds = %41
  %322 = load i32, ptr %18, align 4, !tbaa !5
  %323 = load i32, ptr %5, align 4, !tbaa !5
  %324 = icmp slt i32 %322, %323
  br i1 %324, label %325, label %1014

325:                                              ; preds = %321
  %326 = load ptr, ptr %8, align 8, !tbaa !9
  %327 = getelementptr inbounds double, ptr %326, i64 2
  %328 = load double, ptr %327, align 8, !tbaa !11
  store double %328, ptr %19, align 8, !tbaa !11
  %329 = load i32, ptr %18, align 4, !tbaa !5
  store i32 %329, ptr %10, align 4, !tbaa !5
  br label %330

330:                                              ; preds = %629, %325
  %331 = load i32, ptr %10, align 4, !tbaa !5
  %332 = load i32, ptr %17, align 4, !tbaa !5
  %333 = load i32, ptr %18, align 4, !tbaa !5
  %334 = add nsw i32 %332, %333
  %335 = sub nsw i32 %334, 1
  %336 = icmp sle i32 %331, %335
  br i1 %336, label %337, label %632

337:                                              ; preds = %330
  %338 = load i32, ptr %10, align 4, !tbaa !5
  %339 = load i32, ptr %17, align 4, !tbaa !5
  %340 = add nsw i32 %338, %339
  store i32 %340, ptr %11, align 4, !tbaa !5
  %341 = load i32, ptr %11, align 4, !tbaa !5
  %342 = load i32, ptr %17, align 4, !tbaa !5
  %343 = add nsw i32 %341, %342
  store i32 %343, ptr %12, align 4, !tbaa !5
  %344 = load i32, ptr %12, align 4, !tbaa !5
  %345 = load i32, ptr %17, align 4, !tbaa !5
  %346 = add nsw i32 %344, %345
  store i32 %346, ptr %13, align 4, !tbaa !5
  store i32 0, ptr %9, align 4, !tbaa !5
  br label %347

347:                                              ; preds = %625, %337
  %348 = load i32, ptr %9, align 4, !tbaa !5
  %349 = load i32, ptr %6, align 4, !tbaa !5
  %350 = sub nsw i32 %349, 2
  %351 = icmp sle i32 %348, %350
  br i1 %351, label %352, label %628

352:                                              ; preds = %347
  %353 = load ptr, ptr %7, align 8, !tbaa !9
  %354 = load i32, ptr %10, align 4, !tbaa !5
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds ptr, ptr %353, i64 %355
  %357 = load ptr, ptr %356, align 8, !tbaa !9
  %358 = load i32, ptr %9, align 4, !tbaa !5
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds double, ptr %357, i64 %359
  %361 = load double, ptr %360, align 8, !tbaa !11
  %362 = load ptr, ptr %7, align 8, !tbaa !9
  %363 = load i32, ptr %11, align 4, !tbaa !5
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds ptr, ptr %362, i64 %364
  %366 = load ptr, ptr %365, align 8, !tbaa !9
  %367 = load i32, ptr %9, align 4, !tbaa !5
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds double, ptr %366, i64 %368
  %370 = load double, ptr %369, align 8, !tbaa !11
  %371 = fadd double %361, %370
  store double %371, ptr %25, align 8, !tbaa !11
  %372 = load ptr, ptr %7, align 8, !tbaa !9
  %373 = load i32, ptr %10, align 4, !tbaa !5
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds ptr, ptr %372, i64 %374
  %376 = load ptr, ptr %375, align 8, !tbaa !9
  %377 = load i32, ptr %9, align 4, !tbaa !5
  %378 = add nsw i32 %377, 1
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds double, ptr %376, i64 %379
  %381 = load double, ptr %380, align 8, !tbaa !11
  %382 = load ptr, ptr %7, align 8, !tbaa !9
  %383 = load i32, ptr %11, align 4, !tbaa !5
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds ptr, ptr %382, i64 %384
  %386 = load ptr, ptr %385, align 8, !tbaa !9
  %387 = load i32, ptr %9, align 4, !tbaa !5
  %388 = add nsw i32 %387, 1
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds double, ptr %386, i64 %389
  %391 = load double, ptr %390, align 8, !tbaa !11
  %392 = fadd double %381, %391
  store double %392, ptr %26, align 8, !tbaa !11
  %393 = load ptr, ptr %7, align 8, !tbaa !9
  %394 = load i32, ptr %10, align 4, !tbaa !5
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds ptr, ptr %393, i64 %395
  %397 = load ptr, ptr %396, align 8, !tbaa !9
  %398 = load i32, ptr %9, align 4, !tbaa !5
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds double, ptr %397, i64 %399
  %401 = load double, ptr %400, align 8, !tbaa !11
  %402 = load ptr, ptr %7, align 8, !tbaa !9
  %403 = load i32, ptr %11, align 4, !tbaa !5
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds ptr, ptr %402, i64 %404
  %406 = load ptr, ptr %405, align 8, !tbaa !9
  %407 = load i32, ptr %9, align 4, !tbaa !5
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds double, ptr %406, i64 %408
  %410 = load double, ptr %409, align 8, !tbaa !11
  %411 = fsub double %401, %410
  store double %411, ptr %27, align 8, !tbaa !11
  %412 = load ptr, ptr %7, align 8, !tbaa !9
  %413 = load i32, ptr %10, align 4, !tbaa !5
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds ptr, ptr %412, i64 %414
  %416 = load ptr, ptr %415, align 8, !tbaa !9
  %417 = load i32, ptr %9, align 4, !tbaa !5
  %418 = add nsw i32 %417, 1
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds double, ptr %416, i64 %419
  %421 = load double, ptr %420, align 8, !tbaa !11
  %422 = load ptr, ptr %7, align 8, !tbaa !9
  %423 = load i32, ptr %11, align 4, !tbaa !5
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds ptr, ptr %422, i64 %424
  %426 = load ptr, ptr %425, align 8, !tbaa !9
  %427 = load i32, ptr %9, align 4, !tbaa !5
  %428 = add nsw i32 %427, 1
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds double, ptr %426, i64 %429
  %431 = load double, ptr %430, align 8, !tbaa !11
  %432 = fsub double %421, %431
  store double %432, ptr %28, align 8, !tbaa !11
  %433 = load ptr, ptr %7, align 8, !tbaa !9
  %434 = load i32, ptr %12, align 4, !tbaa !5
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds ptr, ptr %433, i64 %435
  %437 = load ptr, ptr %436, align 8, !tbaa !9
  %438 = load i32, ptr %9, align 4, !tbaa !5
  %439 = sext i32 %438 to i64
  %440 = getelementptr inbounds double, ptr %437, i64 %439
  %441 = load double, ptr %440, align 8, !tbaa !11
  %442 = load ptr, ptr %7, align 8, !tbaa !9
  %443 = load i32, ptr %13, align 4, !tbaa !5
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds ptr, ptr %442, i64 %444
  %446 = load ptr, ptr %445, align 8, !tbaa !9
  %447 = load i32, ptr %9, 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 = fadd double %441, %450
  store double %451, ptr %29, align 8, !tbaa !11
  %452 = load ptr, ptr %7, align 8, !tbaa !9
  %453 = load i32, ptr %12, align 4, !tbaa !5
  %454 = sext i32 %453 to i64
  %455 = getelementptr inbounds ptr, ptr %452, i64 %454
  %456 = load ptr, ptr %455, align 8, !tbaa !9
  %457 = load i32, ptr %9, align 4, !tbaa !5
  %458 = add nsw i32 %457, 1
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds double, ptr %456, i64 %459
  %461 = load double, ptr %460, align 8, !tbaa !11
  %462 = load ptr, ptr %7, align 8, !tbaa !9
  %463 = load i32, ptr %13, align 4, !tbaa !5
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds ptr, ptr %462, i64 %464
  %466 = load ptr, ptr %465, align 8, !tbaa !9
  %467 = load i32, ptr %9, align 4, !tbaa !5
  %468 = add nsw i32 %467, 1
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds double, ptr %466, i64 %469
  %471 = load double, ptr %470, align 8, !tbaa !11
  %472 = fadd double %461, %471
  store double %472, ptr %30, align 8, !tbaa !11
  %473 = load ptr, ptr %7, align 8, !tbaa !9
  %474 = load i32, ptr %12, align 4, !tbaa !5
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds ptr, ptr %473, i64 %475
  %477 = load ptr, ptr %476, align 8, !tbaa !9
  %478 = load i32, ptr %9, align 4, !tbaa !5
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds double, ptr %477, i64 %479
  %481 = load double, ptr %480, align 8, !tbaa !11
  %482 = load ptr, ptr %7, align 8, !tbaa !9
  %483 = load i32, ptr %13, align 4, !tbaa !5
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds ptr, ptr %482, i64 %484
  %486 = load ptr, ptr %485, align 8, !tbaa !9
  %487 = load i32, ptr %9, align 4, !tbaa !5
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds double, ptr %486, i64 %488
  %490 = load double, ptr %489, align 8, !tbaa !11
  %491 = fsub double %481, %490
  store double %491, ptr %31, align 8, !tbaa !11
  %492 = load ptr, ptr %7, align 8, !tbaa !9
  %493 = load i32, ptr %12, align 4, !tbaa !5
  %494 = sext i32 %493 to i64
  %495 = getelementptr inbounds ptr, ptr %492, i64 %494
  %496 = load ptr, ptr %495, align 8, !tbaa !9
  %497 = load i32, ptr %9, align 4, !tbaa !5
  %498 = add nsw i32 %497, 1
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds double, ptr %496, i64 %499
  %501 = load double, ptr %500, align 8, !tbaa !11
  %502 = load ptr, ptr %7, align 8, !tbaa !9
  %503 = load i32, ptr %13, align 4, !tbaa !5
  %504 = sext i32 %503 to i64
  %505 = getelementptr inbounds ptr, ptr %502, i64 %504
  %506 = load ptr, ptr %505, align 8, !tbaa !9
  %507 = load i32, ptr %9, 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 = fsub double %501, %511
  store double %512, ptr %32, align 8, !tbaa !11
  %513 = load double, ptr %25, align 8, !tbaa !11
  %514 = load double, ptr %29, align 8, !tbaa !11
  %515 = fadd double %513, %514
  %516 = load ptr, ptr %7, align 8, !tbaa !9
  %517 = load i32, ptr %10, align 4, !tbaa !5
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds ptr, ptr %516, i64 %518
  %520 = load ptr, ptr %519, align 8, !tbaa !9
  %521 = load i32, ptr %9, align 4, !tbaa !5
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds double, ptr %520, i64 %522
  store double %515, ptr %523, align 8, !tbaa !11
  %524 = load double, ptr %26, align 8, !tbaa !11
  %525 = load double, ptr %30, align 8, !tbaa !11
  %526 = fadd double %524, %525
  %527 = load ptr, ptr %7, align 8, !tbaa !9
  %528 = load i32, ptr %10, align 4, !tbaa !5
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds ptr, ptr %527, i64 %529
  %531 = load ptr, ptr %530, align 8, !tbaa !9
  %532 = load i32, ptr %9, align 4, !tbaa !5
  %533 = add nsw i32 %532, 1
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds double, ptr %531, i64 %534
  store double %526, ptr %535, align 8, !tbaa !11
  %536 = load double, ptr %26, align 8, !tbaa !11
  %537 = load double, ptr %30, align 8, !tbaa !11
  %538 = fsub double %536, %537
  %539 = load ptr, ptr %7, align 8, !tbaa !9
  %540 = load i32, ptr %12, align 4, !tbaa !5
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds ptr, ptr %539, i64 %541
  %543 = load ptr, ptr %542, align 8, !tbaa !9
  %544 = load i32, ptr %9, align 4, !tbaa !5
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds double, ptr %543, i64 %545
  store double %538, ptr %546, align 8, !tbaa !11
  %547 = load double, ptr %29, align 8, !tbaa !11
  %548 = load double, ptr %25, align 8, !tbaa !11
  %549 = fsub double %547, %548
  %550 = load ptr, ptr %7, align 8, !tbaa !9
  %551 = load i32, ptr %12, align 4, !tbaa !5
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds ptr, ptr %550, i64 %552
  %554 = load ptr, ptr %553, align 8, !tbaa !9
  %555 = load i32, ptr %9, align 4, !tbaa !5
  %556 = add nsw i32 %555, 1
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds double, ptr %554, i64 %557
  store double %549, ptr %558, align 8, !tbaa !11
  %559 = load double, ptr %27, align 8, !tbaa !11
  %560 = load double, ptr %32, align 8, !tbaa !11
  %561 = fadd double %559, %560
  store double %561, ptr %25, align 8, !tbaa !11
  %562 = load double, ptr %28, align 8, !tbaa !11
  %563 = load double, ptr %31, align 8, !tbaa !11
  %564 = fsub double %562, %563
  store double %564, ptr %26, align 8, !tbaa !11
  %565 = load double, ptr %19, align 8, !tbaa !11
  %566 = load double, ptr %26, align 8, !tbaa !11
  %567 = load double, ptr %25, align 8, !tbaa !11
  %568 = fadd double %566, %567
  %569 = fmul double %565, %568
  %570 = load ptr, ptr %7, align 8, !tbaa !9
  %571 = load i32, ptr %11, align 4, !tbaa !5
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds ptr, ptr %570, i64 %572
  %574 = load ptr, ptr %573, align 8, !tbaa !9
  %575 = load i32, ptr %9, align 4, !tbaa !5
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds double, ptr %574, i64 %576
  store double %569, ptr %577, align 8, !tbaa !11
  %578 = load double, ptr %19, align 8, !tbaa !11
  %579 = load double, ptr %26, align 8, !tbaa !11
  %580 = load double, ptr %25, align 8, !tbaa !11
  %581 = fsub double %579, %580
  %582 = fmul double %578, %581
  %583 = load ptr, ptr %7, align 8, !tbaa !9
  %584 = load i32, ptr %11, align 4, !tbaa !5
  %585 = sext i32 %584 to i64
  %586 = getelementptr inbounds ptr, ptr %583, i64 %585
  %587 = load ptr, ptr %586, align 8, !tbaa !9
  %588 = load i32, ptr %9, align 4, !tbaa !5
  %589 = add nsw i32 %588, 1
  %590 = sext i32 %589 to i64
  %591 = getelementptr inbounds double, ptr %587, i64 %590
  store double %582, ptr %591, align 8, !tbaa !11
  %592 = load double, ptr %32, align 8, !tbaa !11
  %593 = load double, ptr %27, align 8, !tbaa !11
  %594 = fsub double %592, %593
  store double %594, ptr %25, align 8, !tbaa !11
  %595 = load double, ptr %31, align 8, !tbaa !11
  %596 = load double, ptr %28, align 8, !tbaa !11
  %597 = fadd double %595, %596
  store double %597, ptr %26, align 8, !tbaa !11
  %598 = load double, ptr %19, align 8, !tbaa !11
  %599 = load double, ptr %25, align 8, !tbaa !11
  %600 = load double, ptr %26, align 8, !tbaa !11
  %601 = fadd double %599, %600
  %602 = fmul double %598, %601
  %603 = load ptr, ptr %7, align 8, !tbaa !9
  %604 = load i32, ptr %13, align 4, !tbaa !5
  %605 = sext i32 %604 to i64
  %606 = getelementptr inbounds ptr, ptr %603, i64 %605
  %607 = load ptr, ptr %606, align 8, !tbaa !9
  %608 = load i32, ptr %9, align 4, !tbaa !5
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds double, ptr %607, i64 %609
  store double %602, ptr %610, align 8, !tbaa !11
  %611 = load double, ptr %19, align 8, !tbaa !11
  %612 = load double, ptr %25, align 8, !tbaa !11
  %613 = load double, ptr %26, align 8, !tbaa !11
  %614 = fsub double %612, %613
  %615 = fmul double %611, %614
  %616 = load ptr, ptr %7, align 8, !tbaa !9
  %617 = load i32, ptr %13, align 4, !tbaa !5
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds ptr, ptr %616, i64 %618
  %620 = load ptr, ptr %619, align 8, !tbaa !9
  %621 = load i32, ptr %9, align 4, !tbaa !5
  %622 = add nsw i32 %621, 1
  %623 = sext i32 %622 to i64
  %624 = getelementptr inbounds double, ptr %620, i64 %623
  store double %615, ptr %624, align 8, !tbaa !11
  br label %625

625:                                              ; preds = %352
  %626 = load i32, ptr %9, align 4, !tbaa !5
  %627 = add nsw i32 %626, 2
  store i32 %627, ptr %9, align 4, !tbaa !5
  br label %347, !llvm.loop !16

628:                                              ; preds = %347
  br label %629

629:                                              ; preds = %628
  %630 = load i32, ptr %10, align 4, !tbaa !5
  %631 = add nsw i32 %630, 1
  store i32 %631, ptr %10, align 4, !tbaa !5
  br label %330, !llvm.loop !17

632:                                              ; preds = %330
  store i32 1, ptr %15, align 4, !tbaa !5
  store i32 -1, ptr %16, align 4, !tbaa !5
  %633 = load i32, ptr %18, align 4, !tbaa !5
  %634 = shl i32 %633, 1
  store i32 %634, ptr %14, align 4, !tbaa !5
  br label %635

635:                                              ; preds = %1009, %632
  %636 = load i32, ptr %14, align 4, !tbaa !5
  %637 = load i32, ptr %5, align 4, !tbaa !5
  %638 = load i32, ptr %18, align 4, !tbaa !5
  %639 = sub nsw i32 %637, %638
  %640 = icmp sle i32 %636, %639
  br i1 %640, label %641, label %1013

641:                                              ; preds = %635
  %642 = load i32, ptr %15, align 4, !tbaa !5
  %643 = add nsw i32 %642, 1
  store i32 %643, ptr %15, align 4, !tbaa !5
  %644 = load i32, ptr %16, align 4, !tbaa !5
  %645 = sub nsw i32 0, %644
  store i32 %645, ptr %16, align 4, !tbaa !5
  %646 = load ptr, ptr %8, align 8, !tbaa !9
  %647 = load i32, ptr %15, align 4, !tbaa !5
  %648 = shl i32 %647, 1
  %649 = sext i32 %648 to i64
  %650 = getelementptr inbounds double, ptr %646, i64 %649
  %651 = load double, ptr %650, align 8, !tbaa !11
  store double %651, ptr %19, align 8, !tbaa !11
  %652 = load ptr, ptr %8, align 8, !tbaa !9
  %653 = load i32, ptr %15, align 4, !tbaa !5
  %654 = shl i32 %653, 1
  %655 = add nsw i32 %654, 1
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds double, ptr %652, i64 %656
  %658 = load double, ptr %657, align 8, !tbaa !11
  store double %658, ptr %20, align 8, !tbaa !11
  %659 = load i32, ptr %16, align 4, !tbaa !5
  %660 = sitofp i32 %659 to double
  %661 = load ptr, ptr %8, align 8, !tbaa !9
  %662 = load i32, ptr %15, align 4, !tbaa !5
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds double, ptr %661, i64 %663
  %665 = load double, ptr %664, align 8, !tbaa !11
  %666 = fmul double %660, %665
  store double %666, ptr %21, align 8, !tbaa !11
  %667 = load ptr, ptr %8, align 8, !tbaa !9
  %668 = load i32, ptr %15, align 4, !tbaa !5
  %669 = load i32, ptr %16, align 4, !tbaa !5
  %670 = add nsw i32 %668, %669
  %671 = sext i32 %670 to i64
  %672 = getelementptr inbounds double, ptr %667, i64 %671
  %673 = load double, ptr %672, align 8, !tbaa !11
  store double %673, ptr %22, align 8, !tbaa !11
  %674 = load double, ptr %19, align 8, !tbaa !11
  %675 = load double, ptr %22, align 8, !tbaa !11
  %676 = fmul double 2.000000e+00, %675
  %677 = load double, ptr %20, align 8, !tbaa !11
  %678 = fneg double %676
  %679 = call double @llvm.fmuladd.f64(double %678, double %677, double %674)
  store double %679, ptr %23, align 8, !tbaa !11
  %680 = load double, ptr %22, align 8, !tbaa !11
  %681 = fmul double 2.000000e+00, %680
  %682 = load double, ptr %19, align 8, !tbaa !11
  %683 = load double, ptr %20, align 8, !tbaa !11
  %684 = fneg double %683
  %685 = call double @llvm.fmuladd.f64(double %681, double %682, double %684)
  store double %685, ptr %24, align 8, !tbaa !11
  %686 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %686, ptr %10, align 4, !tbaa !5
  br label %687

687:                                              ; preds = %1005, %641
  %688 = load i32, ptr %10, align 4, !tbaa !5
  %689 = load i32, ptr %17, align 4, !tbaa !5
  %690 = load i32, ptr %14, align 4, !tbaa !5
  %691 = add nsw i32 %689, %690
  %692 = sub nsw i32 %691, 1
  %693 = icmp sle i32 %688, %692
  br i1 %693, label %694, label %1008

694:                                              ; preds = %687
  %695 = load i32, ptr %10, align 4, !tbaa !5
  %696 = load i32, ptr %17, align 4, !tbaa !5
  %697 = add nsw i32 %695, %696
  store i32 %697, ptr %11, align 4, !tbaa !5
  %698 = load i32, ptr %11, align 4, !tbaa !5
  %699 = load i32, ptr %17, align 4, !tbaa !5
  %700 = add nsw i32 %698, %699
  store i32 %700, ptr %12, align 4, !tbaa !5
  %701 = load i32, ptr %12, align 4, !tbaa !5
  %702 = load i32, ptr %17, align 4, !tbaa !5
  %703 = add nsw i32 %701, %702
  store i32 %703, ptr %13, align 4, !tbaa !5
  store i32 0, ptr %9, align 4, !tbaa !5
  br label %704

704:                                              ; preds = %1001, %694
  %705 = load i32, ptr %9, align 4, !tbaa !5
  %706 = load i32, ptr %6, align 4, !tbaa !5
  %707 = sub nsw i32 %706, 2
  %708 = icmp sle i32 %705, %707
  br i1 %708, label %709, label %1004

709:                                              ; preds = %704
  %710 = load ptr, ptr %7, align 8, !tbaa !9
  %711 = load i32, ptr %10, align 4, !tbaa !5
  %712 = sext i32 %711 to i64
  %713 = getelementptr inbounds ptr, ptr %710, i64 %712
  %714 = load ptr, ptr %713, align 8, !tbaa !9
  %715 = load i32, ptr %9, 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 = load ptr, ptr %7, align 8, !tbaa !9
  %720 = load i32, ptr %11, align 4, !tbaa !5
  %721 = sext i32 %720 to i64
  %722 = getelementptr inbounds ptr, ptr %719, i64 %721
  %723 = load ptr, ptr %722, align 8, !tbaa !9
  %724 = load i32, ptr %9, align 4, !tbaa !5
  %725 = sext i32 %724 to i64
  %726 = getelementptr inbounds double, ptr %723, i64 %725
  %727 = load double, ptr %726, align 8, !tbaa !11
  %728 = fadd double %718, %727
  store double %728, ptr %25, align 8, !tbaa !11
  %729 = load ptr, ptr %7, align 8, !tbaa !9
  %730 = load i32, ptr %10, align 4, !tbaa !5
  %731 = sext i32 %730 to i64
  %732 = getelementptr inbounds ptr, ptr %729, i64 %731
  %733 = load ptr, ptr %732, align 8, !tbaa !9
  %734 = load i32, ptr %9, align 4, !tbaa !5
  %735 = add nsw i32 %734, 1
  %736 = sext i32 %735 to i64
  %737 = getelementptr inbounds double, ptr %733, i64 %736
  %738 = load double, ptr %737, align 8, !tbaa !11
  %739 = load ptr, ptr %7, align 8, !tbaa !9
  %740 = load i32, ptr %11, align 4, !tbaa !5
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds ptr, ptr %739, i64 %741
  %743 = load ptr, ptr %742, align 8, !tbaa !9
  %744 = load i32, ptr %9, align 4, !tbaa !5
  %745 = add nsw i32 %744, 1
  %746 = sext i32 %745 to i64
  %747 = getelementptr inbounds double, ptr %743, i64 %746
  %748 = load double, ptr %747, align 8, !tbaa !11
  %749 = fadd double %738, %748
  store double %749, ptr %26, align 8, !tbaa !11
  %750 = load ptr, ptr %7, align 8, !tbaa !9
  %751 = load i32, ptr %10, align 4, !tbaa !5
  %752 = sext i32 %751 to i64
  %753 = getelementptr inbounds ptr, ptr %750, i64 %752
  %754 = load ptr, ptr %753, align 8, !tbaa !9
  %755 = load i32, ptr %9, align 4, !tbaa !5
  %756 = sext i32 %755 to i64
  %757 = getelementptr inbounds double, ptr %754, i64 %756
  %758 = load double, ptr %757, align 8, !tbaa !11
  %759 = load ptr, ptr %7, align 8, !tbaa !9
  %760 = load i32, ptr %11, align 4, !tbaa !5
  %761 = sext i32 %760 to i64
  %762 = getelementptr inbounds ptr, ptr %759, i64 %761
  %763 = load ptr, ptr %762, align 8, !tbaa !9
  %764 = load i32, ptr %9, align 4, !tbaa !5
  %765 = sext i32 %764 to i64
  %766 = getelementptr inbounds double, ptr %763, i64 %765
  %767 = load double, ptr %766, align 8, !tbaa !11
  %768 = fsub double %758, %767
  store double %768, ptr %27, align 8, !tbaa !11
  %769 = load ptr, ptr %7, align 8, !tbaa !9
  %770 = load i32, ptr %10, align 4, !tbaa !5
  %771 = sext i32 %770 to i64
  %772 = getelementptr inbounds ptr, ptr %769, i64 %771
  %773 = load ptr, ptr %772, align 8, !tbaa !9
  %774 = load i32, ptr %9, align 4, !tbaa !5
  %775 = add nsw i32 %774, 1
  %776 = sext i32 %775 to i64
  %777 = getelementptr inbounds double, ptr %773, i64 %776
  %778 = load double, ptr %777, align 8, !tbaa !11
  %779 = load ptr, ptr %7, align 8, !tbaa !9
  %780 = load i32, ptr %11, align 4, !tbaa !5
  %781 = sext i32 %780 to i64
  %782 = getelementptr inbounds ptr, ptr %779, i64 %781
  %783 = load ptr, ptr %782, align 8, !tbaa !9
  %784 = load i32, ptr %9, align 4, !tbaa !5
  %785 = add nsw i32 %784, 1
  %786 = sext i32 %785 to i64
  %787 = getelementptr inbounds double, ptr %783, i64 %786
  %788 = load double, ptr %787, align 8, !tbaa !11
  %789 = fsub double %778, %788
  store double %789, ptr %28, align 8, !tbaa !11
  %790 = load ptr, ptr %7, align 8, !tbaa !9
  %791 = load i32, ptr %12, align 4, !tbaa !5
  %792 = sext i32 %791 to i64
  %793 = getelementptr inbounds ptr, ptr %790, i64 %792
  %794 = load ptr, ptr %793, align 8, !tbaa !9
  %795 = load i32, ptr %9, align 4, !tbaa !5
  %796 = sext i32 %795 to i64
  %797 = getelementptr inbounds double, ptr %794, i64 %796
  %798 = load double, ptr %797, align 8, !tbaa !11
  %799 = load ptr, ptr %7, align 8, !tbaa !9
  %800 = load i32, ptr %13, align 4, !tbaa !5
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds ptr, ptr %799, i64 %801
  %803 = load ptr, ptr %802, align 8, !tbaa !9
  %804 = load i32, ptr %9, align 4, !tbaa !5
  %805 = sext i32 %804 to i64
  %806 = getelementptr inbounds double, ptr %803, i64 %805
  %807 = load double, ptr %806, align 8, !tbaa !11
  %808 = fadd double %798, %807
  store double %808, ptr %29, align 8, !tbaa !11
  %809 = load ptr, ptr %7, align 8, !tbaa !9
  %810 = load i32, ptr %12, align 4, !tbaa !5
  %811 = sext i32 %810 to i64
  %812 = getelementptr inbounds ptr, ptr %809, i64 %811
  %813 = load ptr, ptr %812, align 8, !tbaa !9
  %814 = load i32, ptr %9, align 4, !tbaa !5
  %815 = add nsw i32 %814, 1
  %816 = sext i32 %815 to i64
  %817 = getelementptr inbounds double, ptr %813, i64 %816
  %818 = load double, ptr %817, align 8, !tbaa !11
  %819 = load ptr, ptr %7, align 8, !tbaa !9
  %820 = load i32, ptr %13, align 4, !tbaa !5
  %821 = sext i32 %820 to i64
  %822 = getelementptr inbounds ptr, ptr %819, i64 %821
  %823 = load ptr, ptr %822, align 8, !tbaa !9
  %824 = load i32, ptr %9, align 4, !tbaa !5
  %825 = add nsw i32 %824, 1
  %826 = sext i32 %825 to i64
  %827 = getelementptr inbounds double, ptr %823, i64 %826
  %828 = load double, ptr %827, align 8, !tbaa !11
  %829 = fadd double %818, %828
  store double %829, ptr %30, align 8, !tbaa !11
  %830 = load ptr, ptr %7, align 8, !tbaa !9
  %831 = load i32, ptr %12, align 4, !tbaa !5
  %832 = sext i32 %831 to i64
  %833 = getelementptr inbounds ptr, ptr %830, i64 %832
  %834 = load ptr, ptr %833, align 8, !tbaa !9
  %835 = load i32, ptr %9, align 4, !tbaa !5
  %836 = sext i32 %835 to i64
  %837 = getelementptr inbounds double, ptr %834, i64 %836
  %838 = load double, ptr %837, align 8, !tbaa !11
  %839 = load ptr, ptr %7, align 8, !tbaa !9
  %840 = load i32, ptr %13, align 4, !tbaa !5
  %841 = sext i32 %840 to i64
  %842 = getelementptr inbounds ptr, ptr %839, i64 %841
  %843 = load ptr, ptr %842, align 8, !tbaa !9
  %844 = load i32, ptr %9, align 4, !tbaa !5
  %845 = sext i32 %844 to i64
  %846 = getelementptr inbounds double, ptr %843, i64 %845
  %847 = load double, ptr %846, align 8, !tbaa !11
  %848 = fsub double %838, %847
  store double %848, ptr %31, align 8, !tbaa !11
  %849 = load ptr, ptr %7, align 8, !tbaa !9
  %850 = load i32, ptr %12, align 4, !tbaa !5
  %851 = sext i32 %850 to i64
  %852 = getelementptr inbounds ptr, ptr %849, i64 %851
  %853 = load ptr, ptr %852, align 8, !tbaa !9
  %854 = load i32, ptr %9, align 4, !tbaa !5
  %855 = add nsw i32 %854, 1
  %856 = sext i32 %855 to i64
  %857 = getelementptr inbounds double, ptr %853, i64 %856
  %858 = load double, ptr %857, align 8, !tbaa !11
  %859 = load ptr, ptr %7, align 8, !tbaa !9
  %860 = load i32, ptr %13, align 4, !tbaa !5
  %861 = sext i32 %860 to i64
  %862 = getelementptr inbounds ptr, ptr %859, i64 %861
  %863 = load ptr, ptr %862, align 8, !tbaa !9
  %864 = load i32, ptr %9, align 4, !tbaa !5
  %865 = add nsw i32 %864, 1
  %866 = sext i32 %865 to i64
  %867 = getelementptr inbounds double, ptr %863, i64 %866
  %868 = load double, ptr %867, align 8, !tbaa !11
  %869 = fsub double %858, %868
  store double %869, ptr %32, align 8, !tbaa !11
  %870 = load double, ptr %25, align 8, !tbaa !11
  %871 = load double, ptr %29, align 8, !tbaa !11
  %872 = fadd double %870, %871
  %873 = load ptr, ptr %7, align 8, !tbaa !9
  %874 = load i32, ptr %10, align 4, !tbaa !5
  %875 = sext i32 %874 to i64
  %876 = getelementptr inbounds ptr, ptr %873, i64 %875
  %877 = load ptr, ptr %876, align 8, !tbaa !9
  %878 = load i32, ptr %9, align 4, !tbaa !5
  %879 = sext i32 %878 to i64
  %880 = getelementptr inbounds double, ptr %877, i64 %879
  store double %872, ptr %880, align 8, !tbaa !11
  %881 = load double, ptr %26, align 8, !tbaa !11
  %882 = load double, ptr %30, align 8, !tbaa !11
  %883 = fadd double %881, %882
  %884 = load ptr, ptr %7, align 8, !tbaa !9
  %885 = load i32, ptr %10, align 4, !tbaa !5
  %886 = sext i32 %885 to i64
  %887 = getelementptr inbounds ptr, ptr %884, i64 %886
  %888 = load ptr, ptr %887, align 8, !tbaa !9
  %889 = load i32, ptr %9, align 4, !tbaa !5
  %890 = add nsw i32 %889, 1
  %891 = sext i32 %890 to i64
  %892 = getelementptr inbounds double, ptr %888, i64 %891
  store double %883, ptr %892, align 8, !tbaa !11
  %893 = load double, ptr %29, align 8, !tbaa !11
  %894 = load double, ptr %25, align 8, !tbaa !11
  %895 = fsub double %894, %893
  store double %895, ptr %25, align 8, !tbaa !11
  %896 = load double, ptr %30, align 8, !tbaa !11
  %897 = load double, ptr %26, align 8, !tbaa !11
  %898 = fsub double %897, %896
  store double %898, ptr %26, align 8, !tbaa !11
  %899 = load double, ptr %21, align 8, !tbaa !11
  %900 = load double, ptr %25, align 8, !tbaa !11
  %901 = load double, ptr %22, align 8, !tbaa !11
  %902 = load double, ptr %26, align 8, !tbaa !11
  %903 = fmul double %901, %902
  %904 = call double @llvm.fmuladd.f64(double %899, double %900, double %903)
  %905 = load ptr, ptr %7, align 8, !tbaa !9
  %906 = load i32, ptr %12, align 4, !tbaa !5
  %907 = sext i32 %906 to i64
  %908 = getelementptr inbounds ptr, ptr %905, i64 %907
  %909 = load ptr, ptr %908, align 8, !tbaa !9
  %910 = load i32, ptr %9, align 4, !tbaa !5
  %911 = sext i32 %910 to i64
  %912 = getelementptr inbounds double, ptr %909, i64 %911
  store double %904, ptr %912, align 8, !tbaa !11
  %913 = load double, ptr %21, align 8, !tbaa !11
  %914 = load double, ptr %26, align 8, !tbaa !11
  %915 = load double, ptr %22, align 8, !tbaa !11
  %916 = load double, ptr %25, align 8, !tbaa !11
  %917 = fmul double %915, %916
  %918 = fneg double %917
  %919 = call double @llvm.fmuladd.f64(double %913, double %914, double %918)
  %920 = load ptr, ptr %7, align 8, !tbaa !9
  %921 = load i32, ptr %12, align 4, !tbaa !5
  %922 = sext i32 %921 to i64
  %923 = getelementptr inbounds ptr, ptr %920, i64 %922
  %924 = load ptr, ptr %923, align 8, !tbaa !9
  %925 = load i32, ptr %9, align 4, !tbaa !5
  %926 = add nsw i32 %925, 1
  %927 = sext i32 %926 to i64
  %928 = getelementptr inbounds double, ptr %924, i64 %927
  store double %919, ptr %928, align 8, !tbaa !11
  %929 = load double, ptr %27, align 8, !tbaa !11
  %930 = load double, ptr %32, align 8, !tbaa !11
  %931 = fadd double %929, %930
  store double %931, ptr %25, align 8, !tbaa !11
  %932 = load double, ptr %28, align 8, !tbaa !11
  %933 = load double, ptr %31, align 8, !tbaa !11
  %934 = fsub double %932, %933
  store double %934, ptr %26, align 8, !tbaa !11
  %935 = load double, ptr %19, align 8, !tbaa !11
  %936 = load double, ptr %25, align 8, !tbaa !11
  %937 = load double, ptr %20, align 8, !tbaa !11
  %938 = load double, ptr %26, align 8, !tbaa !11
  %939 = fmul double %937, %938
  %940 = call double @llvm.fmuladd.f64(double %935, double %936, double %939)
  %941 = load ptr, ptr %7, align 8, !tbaa !9
  %942 = load i32, ptr %11, align 4, !tbaa !5
  %943 = sext i32 %942 to i64
  %944 = getelementptr inbounds ptr, ptr %941, i64 %943
  %945 = load ptr, ptr %944, align 8, !tbaa !9
  %946 = load i32, ptr %9, align 4, !tbaa !5
  %947 = sext i32 %946 to i64
  %948 = getelementptr inbounds double, ptr %945, i64 %947
  store double %940, ptr %948, align 8, !tbaa !11
  %949 = load double, ptr %19, align 8, !tbaa !11
  %950 = load double, ptr %26, align 8, !tbaa !11
  %951 = load double, ptr %20, align 8, !tbaa !11
  %952 = load double, ptr %25, align 8, !tbaa !11
  %953 = fmul double %951, %952
  %954 = fneg double %953
  %955 = call double @llvm.fmuladd.f64(double %949, double %950, double %954)
  %956 = load ptr, ptr %7, align 8, !tbaa !9
  %957 = load i32, ptr %11, align 4, !tbaa !5
  %958 = sext i32 %957 to i64
  %959 = getelementptr inbounds ptr, ptr %956, i64 %958
  %960 = load ptr, ptr %959, align 8, !tbaa !9
  %961 = load i32, ptr %9, align 4, !tbaa !5
  %962 = add nsw i32 %961, 1
  %963 = sext i32 %962 to i64
  %964 = getelementptr inbounds double, ptr %960, i64 %963
  store double %955, ptr %964, align 8, !tbaa !11
  %965 = load double, ptr %27, align 8, !tbaa !11
  %966 = load double, ptr %32, align 8, !tbaa !11
  %967 = fsub double %965, %966
  store double %967, ptr %25, align 8, !tbaa !11
  %968 = load double, ptr %28, align 8, !tbaa !11
  %969 = load double, ptr %31, align 8, !tbaa !11
  %970 = fadd double %968, %969
  store double %970, ptr %26, align 8, !tbaa !11
  %971 = load double, ptr %23, align 8, !tbaa !11
  %972 = load double, ptr %25, align 8, !tbaa !11
  %973 = load double, ptr %24, align 8, !tbaa !11
  %974 = load double, ptr %26, align 8, !tbaa !11
  %975 = fmul double %973, %974
  %976 = call double @llvm.fmuladd.f64(double %971, double %972, double %975)
  %977 = load ptr, ptr %7, align 8, !tbaa !9
  %978 = load i32, ptr %13, align 4, !tbaa !5
  %979 = sext i32 %978 to i64
  %980 = getelementptr inbounds ptr, ptr %977, i64 %979
  %981 = load ptr, ptr %980, align 8, !tbaa !9
  %982 = load i32, ptr %9, align 4, !tbaa !5
  %983 = sext i32 %982 to i64
  %984 = getelementptr inbounds double, ptr %981, i64 %983
  store double %976, ptr %984, align 8, !tbaa !11
  %985 = load double, ptr %23, align 8, !tbaa !11
  %986 = load double, ptr %26, align 8, !tbaa !11
  %987 = load double, ptr %24, align 8, !tbaa !11
  %988 = load double, ptr %25, align 8, !tbaa !11
  %989 = fmul double %987, %988
  %990 = fneg double %989
  %991 = call double @llvm.fmuladd.f64(double %985, double %986, double %990)
  %992 = load ptr, ptr %7, align 8, !tbaa !9
  %993 = load i32, ptr %13, align 4, !tbaa !5
  %994 = sext i32 %993 to i64
  %995 = getelementptr inbounds ptr, ptr %992, i64 %994
  %996 = load ptr, ptr %995, align 8, !tbaa !9
  %997 = load i32, ptr %9, align 4, !tbaa !5
  %998 = add nsw i32 %997, 1
  %999 = sext i32 %998 to i64
  %1000 = getelementptr inbounds double, ptr %996, i64 %999
  store double %991, ptr %1000, align 8, !tbaa !11
  br label %1001

1001:                                             ; preds = %709
  %1002 = load i32, ptr %9, align 4, !tbaa !5
  %1003 = add nsw i32 %1002, 2
  store i32 %1003, ptr %9, align 4, !tbaa !5
  br label %704, !llvm.loop !18

1004:                                             ; preds = %704
  br label %1005

1005:                                             ; preds = %1004
  %1006 = load i32, ptr %10, align 4, !tbaa !5
  %1007 = add nsw i32 %1006, 1
  store i32 %1007, ptr %10, align 4, !tbaa !5
  br label %687, !llvm.loop !19

1008:                                             ; preds = %687
  br label %1009

1009:                                             ; preds = %1008
  %1010 = load i32, ptr %18, align 4, !tbaa !5
  %1011 = load i32, ptr %14, align 4, !tbaa !5
  %1012 = add nsw i32 %1011, %1010
  store i32 %1012, ptr %14, align 4, !tbaa !5
  br label %635, !llvm.loop !20

1013:                                             ; preds = %635
  br label %1014

1014:                                             ; preds = %1013, %321
  %1015 = load i32, ptr %18, align 4, !tbaa !5
  store i32 %1015, ptr %17, align 4, !tbaa !5
  br label %33, !llvm.loop !21

1016:                                             ; preds = %33
  %1017 = load i32, ptr %17, align 4, !tbaa !5
  %1018 = load i32, ptr %5, align 4, !tbaa !5
  %1019 = icmp slt i32 %1017, %1018
  br i1 %1019, label %1020, label %1143

1020:                                             ; preds = %1016
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %1021

1021:                                             ; preds = %1139, %1020
  %1022 = load i32, ptr %10, align 4, !tbaa !5
  %1023 = load i32, ptr %17, align 4, !tbaa !5
  %1024 = sub nsw i32 %1023, 1
  %1025 = icmp sle i32 %1022, %1024
  br i1 %1025, label %1026, label %1142

1026:                                             ; preds = %1021
  %1027 = load i32, ptr %10, align 4, !tbaa !5
  %1028 = load i32, ptr %17, align 4, !tbaa !5
  %1029 = add nsw i32 %1027, %1028
  store i32 %1029, ptr %11, align 4, !tbaa !5
  store i32 0, ptr %9, align 4, !tbaa !5
  br label %1030

1030:                                             ; preds = %1135, %1026
  %1031 = load i32, ptr %9, align 4, !tbaa !5
  %1032 = load i32, ptr %6, align 4, !tbaa !5
  %1033 = sub nsw i32 %1032, 2
  %1034 = icmp sle i32 %1031, %1033
  br i1 %1034, label %1035, label %1138

1035:                                             ; preds = %1030
  %1036 = load ptr, ptr %7, align 8, !tbaa !9
  %1037 = load i32, ptr %10, align 4, !tbaa !5
  %1038 = sext i32 %1037 to i64
  %1039 = getelementptr inbounds ptr, ptr %1036, i64 %1038
  %1040 = load ptr, ptr %1039, align 8, !tbaa !9
  %1041 = load i32, ptr %9, align 4, !tbaa !5
  %1042 = sext i32 %1041 to i64
  %1043 = getelementptr inbounds double, ptr %1040, i64 %1042
  %1044 = load double, ptr %1043, align 8, !tbaa !11
  %1045 = load ptr, ptr %7, align 8, !tbaa !9
  %1046 = load i32, ptr %11, align 4, !tbaa !5
  %1047 = sext i32 %1046 to i64
  %1048 = getelementptr inbounds ptr, ptr %1045, i64 %1047
  %1049 = load ptr, ptr %1048, align 8, !tbaa !9
  %1050 = load i32, ptr %9, align 4, !tbaa !5
  %1051 = sext i32 %1050 to i64
  %1052 = getelementptr inbounds double, ptr %1049, i64 %1051
  %1053 = load double, ptr %1052, align 8, !tbaa !11
  %1054 = fsub double %1044, %1053
  store double %1054, ptr %25, align 8, !tbaa !11
  %1055 = load ptr, ptr %7, align 8, !tbaa !9
  %1056 = load i32, ptr %10, align 4, !tbaa !5
  %1057 = sext i32 %1056 to i64
  %1058 = getelementptr inbounds ptr, ptr %1055, i64 %1057
  %1059 = load ptr, ptr %1058, align 8, !tbaa !9
  %1060 = load i32, ptr %9, align 4, !tbaa !5
  %1061 = add nsw i32 %1060, 1
  %1062 = sext i32 %1061 to i64
  %1063 = getelementptr inbounds double, ptr %1059, i64 %1062
  %1064 = load double, ptr %1063, align 8, !tbaa !11
  %1065 = load ptr, ptr %7, align 8, !tbaa !9
  %1066 = load i32, ptr %11, align 4, !tbaa !5
  %1067 = sext i32 %1066 to i64
  %1068 = getelementptr inbounds ptr, ptr %1065, i64 %1067
  %1069 = load ptr, ptr %1068, align 8, !tbaa !9
  %1070 = load i32, ptr %9, align 4, !tbaa !5
  %1071 = add nsw i32 %1070, 1
  %1072 = sext i32 %1071 to i64
  %1073 = getelementptr inbounds double, ptr %1069, i64 %1072
  %1074 = load double, ptr %1073, align 8, !tbaa !11
  %1075 = fsub double %1064, %1074
  store double %1075, ptr %26, align 8, !tbaa !11
  %1076 = load ptr, ptr %7, align 8, !tbaa !9
  %1077 = load i32, ptr %11, align 4, !tbaa !5
  %1078 = sext i32 %1077 to i64
  %1079 = getelementptr inbounds ptr, ptr %1076, i64 %1078
  %1080 = load ptr, ptr %1079, align 8, !tbaa !9
  %1081 = load i32, ptr %9, align 4, !tbaa !5
  %1082 = sext i32 %1081 to i64
  %1083 = getelementptr inbounds double, ptr %1080, i64 %1082
  %1084 = load double, ptr %1083, align 8, !tbaa !11
  %1085 = load ptr, ptr %7, align 8, !tbaa !9
  %1086 = load i32, ptr %10, align 4, !tbaa !5
  %1087 = sext i32 %1086 to i64
  %1088 = getelementptr inbounds ptr, ptr %1085, i64 %1087
  %1089 = load ptr, ptr %1088, align 8, !tbaa !9
  %1090 = load i32, ptr %9, align 4, !tbaa !5
  %1091 = sext i32 %1090 to i64
  %1092 = getelementptr inbounds double, ptr %1089, i64 %1091
  %1093 = load double, ptr %1092, align 8, !tbaa !11
  %1094 = fadd double %1093, %1084
  store double %1094, ptr %1092, align 8, !tbaa !11
  %1095 = load ptr, ptr %7, align 8, !tbaa !9
  %1096 = load i32, ptr %11, align 4, !tbaa !5
  %1097 = sext i32 %1096 to i64
  %1098 = getelementptr inbounds ptr, ptr %1095, i64 %1097
  %1099 = load ptr, ptr %1098, align 8, !tbaa !9
  %1100 = load i32, ptr %9, align 4, !tbaa !5
  %1101 = add nsw i32 %1100, 1
  %1102 = sext i32 %1101 to i64
  %1103 = getelementptr inbounds double, ptr %1099, i64 %1102
  %1104 = load double, ptr %1103, align 8, !tbaa !11
  %1105 = load ptr, ptr %7, align 8, !tbaa !9
  %1106 = load i32, ptr %10, align 4, !tbaa !5
  %1107 = sext i32 %1106 to i64
  %1108 = getelementptr inbounds ptr, ptr %1105, i64 %1107
  %1109 = load ptr, ptr %1108, align 8, !tbaa !9
  %1110 = load i32, ptr %9, align 4, !tbaa !5
  %1111 = add nsw i32 %1110, 1
  %1112 = sext i32 %1111 to i64
  %1113 = getelementptr inbounds double, ptr %1109, i64 %1112
  %1114 = load double, ptr %1113, align 8, !tbaa !11
  %1115 = fadd double %1114, %1104
  store double %1115, ptr %1113, align 8, !tbaa !11
  %1116 = load double, ptr %25, align 8, !tbaa !11
  %1117 = load ptr, ptr %7, align 8, !tbaa !9
  %1118 = load i32, ptr %11, align 4, !tbaa !5
  %1119 = sext i32 %1118 to i64
  %1120 = getelementptr inbounds ptr, ptr %1117, i64 %1119
  %1121 = load ptr, ptr %1120, align 8, !tbaa !9
  %1122 = load i32, ptr %9, align 4, !tbaa !5
  %1123 = sext i32 %1122 to i64
  %1124 = getelementptr inbounds double, ptr %1121, i64 %1123
  store double %1116, ptr %1124, align 8, !tbaa !11
  %1125 = load double, ptr %26, align 8, !tbaa !11
  %1126 = load ptr, ptr %7, align 8, !tbaa !9
  %1127 = load i32, ptr %11, align 4, !tbaa !5
  %1128 = sext i32 %1127 to i64
  %1129 = getelementptr inbounds ptr, ptr %1126, i64 %1128
  %1130 = load ptr, ptr %1129, align 8, !tbaa !9
  %1131 = load i32, ptr %9, align 4, !tbaa !5
  %1132 = add nsw i32 %1131, 1
  %1133 = sext i32 %1132 to i64
  %1134 = getelementptr inbounds double, ptr %1130, i64 %1133
  store double %1125, ptr %1134, align 8, !tbaa !11
  br label %1135

1135:                                             ; preds = %1035
  %1136 = load i32, ptr %9, align 4, !tbaa !5
  %1137 = add nsw i32 %1136, 2
  store i32 %1137, ptr %9, align 4, !tbaa !5
  br label %1030, !llvm.loop !22

1138:                                             ; preds = %1030
  br label %1139

1139:                                             ; preds = %1138
  %1140 = load i32, ptr %10, align 4, !tbaa !5
  %1141 = add nsw i32 %1140, 1
  store i32 %1141, ptr %10, align 4, !tbaa !5
  br label %1021, !llvm.loop !23

1142:                                             ; preds = %1021
  br label %1143

1143:                                             ; preds = %1142, %1016
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  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 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, 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
  ret void
}

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !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(readwrite, inaccessiblemem: none) uwtable
define dso_local void @cftfrow(i32 noundef %0, i32 noundef %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3) local_unnamed_addr #0 {
  %5 = icmp sgt i32 %0, 2
  br i1 %5, label %.lr.ph469, label %._crit_edge470

.lr.ph469:                                        ; preds = %4
  %6 = add i32 %1, -2
  %.not429431 = icmp slt i32 %1, 2
  %7 = getelementptr inbounds i8, ptr %3, i64 16
  %8 = sext i32 %6 to i64
  %9 = tail call i64 @llvm.smax.i64(i64 %8, i64 1)
  %10 = shl nuw nsw i64 %9, 3
  %11 = and i64 %10, 9223372036854775792
  %12 = add nuw nsw i64 %11, 16
  %13 = tail call i64 @llvm.smax.i64(i64 %8, i64 1)
  %14 = lshr i64 %13, 1
  %15 = add nuw nsw i64 %14, 1
  %16 = tail call i64 @llvm.smax.i64(i64 %8, i64 1)
  %17 = shl nuw nsw i64 %16, 3
  %18 = and i64 %17, 9223372036854775792
  %19 = add nuw nsw i64 %18, 16
  %20 = tail call i64 @llvm.smax.i64(i64 %8, i64 1)
  %21 = lshr i64 %20, 1
  %22 = add nuw nsw i64 %21, 1
  %23 = tail call i64 @llvm.smax.i64(i64 %8, i64 1)
  %24 = shl nuw nsw i64 %23, 3
  %25 = and i64 %24, 9223372036854775792
  %26 = add nuw nsw i64 %25, 16
  %27 = tail call i64 @llvm.smax.i64(i64 %8, i64 1)
  %28 = lshr i64 %27, 1
  %29 = add nuw nsw i64 %28, 1
  %min.iters.check671 = icmp slt i32 %6, 6
  %n.vec674 = and i64 %29, 2147483646
  %ind.end675 = shl nuw nsw i64 %n.vec674, 1
  %cmp.n697 = icmp eq i64 %29, %n.vec674
  %min.iters.check610 = icmp slt i32 %6, 2
  %n.vec613 = and i64 %22, 2147483646
  %ind.end614 = shl nuw nsw i64 %n.vec613, 1
  %cmp.n638 = icmp eq i64 %22, %n.vec613
  %min.iters.check = icmp slt i32 %6, 2
  %n.vec = and i64 %15, 2147483646
  %ind.end = shl nuw nsw i64 %n.vec, 1
  %cmp.n = icmp eq i64 %15, %n.vec
  br label %30

30:                                               ; preds = %.lr.ph469, %.loopexit430
  %.0417466 = phi i32 [ 1, %.lr.ph469 ], [ %31, %.loopexit430 ]
  %31 = shl i32 %.0417466, 2
  %.not423.not433 = icmp slt i32 %.0417466, 1
  %brmerge = or i1 %.not423.not433, %.not429431
  br i1 %brmerge, label %._crit_edge437, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %30
  %32 = zext nneg i32 %.0417466 to i64
  %invariant.gep = getelementptr inbounds ptr, ptr %2, i64 %32
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %._crit_edge
  %indvars.iv484 = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next485, %._crit_edge ]
  %33 = add nuw nsw i64 %indvars.iv484, %32
  %34 = add nuw nsw i64 %33, %32
  %35 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv484
  %36 = load ptr, ptr %35, align 8, !tbaa !5
  %37 = getelementptr inbounds ptr, ptr %2, i64 %33
  %38 = load ptr, ptr %37, align 8, !tbaa !5
  %39 = getelementptr inbounds ptr, ptr %2, i64 %34
  %40 = load ptr, ptr %39, align 8, !tbaa !5
  %gep = getelementptr inbounds ptr, ptr %invariant.gep, i64 %34
  %41 = load ptr, ptr %gep, align 8, !tbaa !5
  br i1 %min.iters.check671, label %scalar.ph670.preheader, label %vector.memcheck639

vector.memcheck639:                               ; preds = %.lr.ph
  %scevgep641 = getelementptr i8, ptr %36, i64 %26
  %scevgep642 = getelementptr i8, ptr %40, i64 %26
  %scevgep643 = getelementptr i8, ptr %38, i64 %26
  %scevgep644 = getelementptr i8, ptr %41, i64 %26
  %bound0645 = icmp ult ptr %36, %scevgep642
  %bound1646 = icmp ult ptr %40, %scevgep641
  %found.conflict647 = and i1 %bound0645, %bound1646
  %bound0648 = icmp ult ptr %36, %scevgep643
  %bound1649 = icmp ult ptr %38, %scevgep641
  %found.conflict650 = and i1 %bound0648, %bound1649
  %conflict.rdx651 = or i1 %found.conflict647, %found.conflict650
  %bound0652 = icmp ult ptr %36, %scevgep644
  %bound1653 = icmp ult ptr %41, %scevgep641
  %found.conflict654 = and i1 %bound0652, %bound1653
  %conflict.rdx655 = or i1 %conflict.rdx651, %found.conflict654
  %bound0656 = icmp ult ptr %40, %scevgep643
  %bound1657 = icmp ult ptr %38, %scevgep642
  %found.conflict658 = and i1 %bound0656, %bound1657
  %conflict.rdx659 = or i1 %conflict.rdx655, %found.conflict658
  %bound0660 = icmp ult ptr %40, %scevgep644
  %bound1661 = icmp ult ptr %41, %scevgep642
  %found.conflict662 = and i1 %bound0660, %bound1661
  %conflict.rdx663 = or i1 %conflict.rdx659, %found.conflict662
  %bound0664 = icmp ult ptr %38, %scevgep644
  %bound1665 = icmp ult ptr %41, %scevgep643
  %found.conflict666 = and i1 %bound0664, %bound1665
  %conflict.rdx667 = or i1 %conflict.rdx663, %found.conflict666
  br i1 %conflict.rdx667, label %scalar.ph670.preheader, label %vector.ph672

vector.ph672:                                     ; preds = %vector.memcheck639
  %invariant.gep727 = getelementptr i8, ptr %36, i64 -8
  %invariant.gep729 = getelementptr i8, ptr %40, i64 -8
  %invariant.gep731 = getelementptr i8, ptr %38, i64 -8
  %invariant.gep733 = getelementptr i8, ptr %41, i64 -8
  br label %vector.body677

vector.body677:                                   ; preds = %vector.body677, %vector.ph672
  %index678 = phi i64 [ 0, %vector.ph672 ], [ %index.next696, %vector.body677 ]
  %offset.idx679 = shl i64 %index678, 1
  %42 = getelementptr inbounds double, ptr %36, i64 %offset.idx679
  %wide.vec680 = load <4 x double>, ptr %42, align 8, !tbaa !9
  %strided.vec681 = shufflevector <4 x double> %wide.vec680, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec682 = shufflevector <4 x double> %wide.vec680, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %43 = getelementptr inbounds double, ptr %38, i64 %offset.idx679
  %wide.vec683 = load <4 x double>, ptr %43, align 8, !tbaa !9
  %strided.vec684 = shufflevector <4 x double> %wide.vec683, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec685 = shufflevector <4 x double> %wide.vec683, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %44 = fadd <2 x double> %strided.vec681, %strided.vec684
  %45 = or disjoint i64 %offset.idx679, 1
  %46 = fadd <2 x double> %strided.vec682, %strided.vec685
  %47 = fsub <2 x double> %strided.vec681, %strided.vec684
  %48 = fsub <2 x double> %strided.vec682, %strided.vec685
  %49 = getelementptr inbounds double, ptr %40, i64 %offset.idx679
  %wide.vec686 = load <4 x double>, ptr %49, align 8, !tbaa !9
  %strided.vec687 = shufflevector <4 x double> %wide.vec686, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec688 = shufflevector <4 x double> %wide.vec686, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %50 = getelementptr inbounds double, ptr %41, i64 %offset.idx679
  %wide.vec689 = load <4 x double>, ptr %50, align 8, !tbaa !9
  %strided.vec690 = shufflevector <4 x double> %wide.vec689, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec691 = shufflevector <4 x double> %wide.vec689, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %51 = fadd <2 x double> %strided.vec687, %strided.vec690
  %52 = fadd <2 x double> %strided.vec688, %strided.vec691
  %53 = fsub <2 x double> %strided.vec687, %strided.vec690
  %54 = fsub <2 x double> %strided.vec688, %strided.vec691
  %55 = fadd <2 x double> %44, %51
  %56 = fadd <2 x double> %46, %52
  %gep728 = getelementptr double, ptr %invariant.gep727, i64 %45
  %interleaved.vec692 = shufflevector <2 x double> %55, <2 x double> %56, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec692, ptr %gep728, align 8, !tbaa !9
  %57 = fsub <2 x double> %44, %51
  %58 = fsub <2 x double> %46, %52
  %gep730 = getelementptr double, ptr %invariant.gep729, i64 %45
  %interleaved.vec693 = shufflevector <2 x double> %57, <2 x double> %58, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec693, ptr %gep730, align 8, !tbaa !9
  %59 = fadd <2 x double> %47, %54
  %60 = fsub <2 x double> %48, %53
  %gep732 = getelementptr double, ptr %invariant.gep731, i64 %45
  %interleaved.vec694 = shufflevector <2 x double> %59, <2 x double> %60, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec694, ptr %gep732, align 8, !tbaa !9
  %61 = fsub <2 x double> %47, %54
  %62 = fadd <2 x double> %48, %53
  %gep734 = getelementptr double, ptr %invariant.gep733, i64 %45
  %interleaved.vec695 = shufflevector <2 x double> %61, <2 x double> %62, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec695, ptr %gep734, align 8, !tbaa !9
  %index.next696 = add nuw i64 %index678, 2
  %63 = icmp eq i64 %index.next696, %n.vec674
  br i1 %63, label %middle.block669, label %vector.body677, !llvm.loop !11

middle.block669:                                  ; preds = %vector.body677
  br i1 %cmp.n697, label %._crit_edge, label %scalar.ph670.preheader

scalar.ph670.preheader:                           ; preds = %middle.block669, %vector.memcheck639, %.lr.ph
  %indvars.iv.ph = phi i64 [ 0, %vector.memcheck639 ], [ 0, %.lr.ph ], [ %ind.end675, %middle.block669 ]
  br label %scalar.ph670

scalar.ph670:                                     ; preds = %scalar.ph670.preheader, %scalar.ph670
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph670 ], [ %indvars.iv.ph, %scalar.ph670.preheader ]
  %64 = getelementptr inbounds double, ptr %36, i64 %indvars.iv
  %65 = getelementptr inbounds double, ptr %38, i64 %indvars.iv
  %66 = getelementptr inbounds double, ptr %40, i64 %indvars.iv
  %67 = getelementptr inbounds double, ptr %41, i64 %indvars.iv
  %68 = load <2 x double>, ptr %64, align 8, !tbaa !9
  %69 = load <2 x double>, ptr %65, align 8, !tbaa !9
  %70 = fadd <2 x double> %68, %69
  %71 = load <2 x double>, ptr %66, align 8, !tbaa !9
  %72 = load <2 x double>, ptr %67, align 8, !tbaa !9
  %73 = fadd <2 x double> %71, %72
  %74 = fadd <2 x double> %70, %73
  store <2 x double> %74, ptr %64, align 8, !tbaa !9
  %75 = fsub <2 x double> %70, %73
  store <2 x double> %75, ptr %66, align 8, !tbaa !9
  %76 = fsub <2 x double> %68, %69
  %77 = fsub <2 x double> %71, %72
  %78 = shufflevector <2 x double> %77, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %79 = fadd <2 x double> %76, %78
  %80 = fsub <2 x double> %76, %78
  %81 = shufflevector <2 x double> %79, <2 x double> %80, <2 x i32> <i32 0, i32 3>
  store <2 x double> %81, ptr %65, align 8, !tbaa !9
  %82 = shufflevector <2 x double> %80, <2 x double> %79, <2 x i32> <i32 0, i32 3>
  store <2 x double> %82, ptr %67, align 8, !tbaa !9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 2
  %.not429 = icmp sgt i64 %indvars.iv.next, %8
  br i1 %.not429, label %._crit_edge, label %scalar.ph670, !llvm.loop !15

._crit_edge:                                      ; preds = %scalar.ph670, %middle.block669
  %indvars.iv.next485 = add nuw nsw i64 %indvars.iv484, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next485, %32
  br i1 %exitcond.not, label %._crit_edge437, label %.lr.ph, !llvm.loop !16

._crit_edge437:                                   ; preds = %._crit_edge, %30
  %83 = icmp slt i32 %31, %0
  br i1 %83, label %84, label %._crit_edge437..loopexit430_crit_edge

._crit_edge437..loopexit430_crit_edge:            ; preds = %._crit_edge437
  %.pre = shl i32 %.0417466, 3
  br label %.loopexit430

84:                                               ; preds = %._crit_edge437
  %85 = load double, ptr %7, align 8, !tbaa !9
  %86 = mul i32 %.0417466, 5
  %.not424.not443 = icmp sge i32 %31, %86
  %brmerge522 = or i1 %.not424.not443, %.not429431
  br i1 %brmerge522, label %._crit_edge447, label %.lr.ph441.preheader

.lr.ph441.preheader:                              ; preds = %84
  %87 = sext i32 %31 to i64
  %88 = sext i32 %.0417466 to i64
  %wide.trip.count493 = sext i32 %86 to i64
  %invariant.gep516 = getelementptr ptr, ptr %2, i64 %88
  %broadcast.splatinsert633 = insertelement <2 x double> poison, double %85, i64 0
  %broadcast.splat634 = shufflevector <2 x double> %broadcast.splatinsert633, <2 x double> poison, <2 x i32> zeroinitializer
  br label %.lr.ph441

.lr.ph441:                                        ; preds = %.lr.ph441.preheader, %._crit_edge442
  %indvars.iv490 = phi i64 [ %87, %.lr.ph441.preheader ], [ %indvars.iv.next491, %._crit_edge442 ]
  %89 = add nsw i64 %indvars.iv490, %88
  %90 = add nsw i64 %89, %88
  %91 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv490
  %92 = load ptr, ptr %91, align 8, !tbaa !5
  %93 = getelementptr inbounds ptr, ptr %2, i64 %89
  %94 = load ptr, ptr %93, align 8, !tbaa !5
  %95 = getelementptr inbounds ptr, ptr %2, i64 %90
  %96 = load ptr, ptr %95, align 8, !tbaa !5
  %gep517 = getelementptr ptr, ptr %invariant.gep516, i64 %90
  %97 = load ptr, ptr %gep517, align 8, !tbaa !5
  br i1 %min.iters.check610, label %scalar.ph609.preheader, label %vector.memcheck578

vector.memcheck578:                               ; preds = %.lr.ph441
  %scevgep580 = getelementptr i8, ptr %92, i64 %19
  %scevgep581 = getelementptr i8, ptr %96, i64 %19
  %scevgep582 = getelementptr i8, ptr %94, i64 %19
  %scevgep583 = getelementptr i8, ptr %97, i64 %19
  %bound0584 = icmp ult ptr %92, %scevgep581
  %bound1585 = icmp ult ptr %96, %scevgep580
  %found.conflict586 = and i1 %bound0584, %bound1585
  %bound0587 = icmp ult ptr %92, %scevgep582
  %bound1588 = icmp ult ptr %94, %scevgep580
  %found.conflict589 = and i1 %bound0587, %bound1588
  %conflict.rdx590 = or i1 %found.conflict586, %found.conflict589
  %bound0591 = icmp ult ptr %92, %scevgep583
  %bound1592 = icmp ult ptr %97, %scevgep580
  %found.conflict593 = and i1 %bound0591, %bound1592
  %conflict.rdx594 = or i1 %conflict.rdx590, %found.conflict593
  %bound0595 = icmp ult ptr %96, %scevgep582
  %bound1596 = icmp ult ptr %94, %scevgep581
  %found.conflict597 = and i1 %bound0595, %bound1596
  %conflict.rdx598 = or i1 %conflict.rdx594, %found.conflict597
  %bound0599 = icmp ult ptr %96, %scevgep583
  %bound1600 = icmp ult ptr %97, %scevgep581
  %found.conflict601 = and i1 %bound0599, %bound1600
  %conflict.rdx602 = or i1 %conflict.rdx598, %found.conflict601
  %bound0603 = icmp ult ptr %94, %scevgep583
  %bound1604 = icmp ult ptr %97, %scevgep582
  %found.conflict605 = and i1 %bound0603, %bound1604
  %conflict.rdx606 = or i1 %conflict.rdx602, %found.conflict605
  br i1 %conflict.rdx606, label %scalar.ph609.preheader, label %vector.ph611

vector.ph611:                                     ; preds = %vector.memcheck578
  %invariant.gep735 = getelementptr i8, ptr %92, i64 -8
  %invariant.gep737 = getelementptr i8, ptr %96, i64 -8
  %invariant.gep739 = getelementptr i8, ptr %94, i64 -8
  %invariant.gep741 = getelementptr i8, ptr %97, i64 -8
  br label %vector.body616

vector.body616:                                   ; preds = %vector.body616, %vector.ph611
  %index617 = phi i64 [ 0, %vector.ph611 ], [ %index.next637, %vector.body616 ]
  %offset.idx618 = shl i64 %index617, 1
  %98 = getelementptr inbounds double, ptr %92, i64 %offset.idx618
  %wide.vec619 = load <4 x double>, ptr %98, align 8, !tbaa !9
  %strided.vec620 = shufflevector <4 x double> %wide.vec619, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec621 = shufflevector <4 x double> %wide.vec619, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %99 = getelementptr inbounds double, ptr %94, i64 %offset.idx618
  %wide.vec622 = load <4 x double>, ptr %99, align 8, !tbaa !9
  %strided.vec623 = shufflevector <4 x double> %wide.vec622, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec624 = shufflevector <4 x double> %wide.vec622, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %100 = fadd <2 x double> %strided.vec620, %strided.vec623
  %101 = or disjoint i64 %offset.idx618, 1
  %102 = fadd <2 x double> %strided.vec621, %strided.vec624
  %103 = fsub <2 x double> %strided.vec620, %strided.vec623
  %104 = fsub <2 x double> %strided.vec621, %strided.vec624
  %105 = getelementptr inbounds double, ptr %96, i64 %offset.idx618
  %wide.vec625 = load <4 x double>, ptr %105, align 8, !tbaa !9
  %strided.vec626 = shufflevector <4 x double> %wide.vec625, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec627 = shufflevector <4 x double> %wide.vec625, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %106 = getelementptr inbounds double, ptr %97, i64 %offset.idx618
  %wide.vec628 = load <4 x double>, ptr %106, align 8, !tbaa !9
  %strided.vec629 = shufflevector <4 x double> %wide.vec628, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec630 = shufflevector <4 x double> %wide.vec628, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %107 = fadd <2 x double> %strided.vec626, %strided.vec629
  %108 = fadd <2 x double> %strided.vec627, %strided.vec630
  %109 = fsub <2 x double> %strided.vec626, %strided.vec629
  %110 = fsub <2 x double> %strided.vec627, %strided.vec630
  %111 = fadd <2 x double> %100, %107
  %112 = fadd <2 x double> %102, %108
  %gep736 = getelementptr double, ptr %invariant.gep735, i64 %101
  %interleaved.vec631 = shufflevector <2 x double> %111, <2 x double> %112, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec631, ptr %gep736, align 8, !tbaa !9
  %113 = fsub <2 x double> %102, %108
  %114 = fsub <2 x double> %107, %100
  %gep738 = getelementptr double, ptr %invariant.gep737, i64 %101
  %interleaved.vec632 = shufflevector <2 x double> %113, <2 x double> %114, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec632, ptr %gep738, align 8, !tbaa !9
  %115 = fadd <2 x double> %103, %110
  %116 = fsub <2 x double> %104, %109
  %117 = fadd <2 x double> %116, %115
  %118 = fmul <2 x double> %broadcast.splat634, %117
  %119 = fsub <2 x double> %116, %115
  %120 = fmul <2 x double> %broadcast.splat634, %119
  %gep740 = getelementptr double, ptr %invariant.gep739, i64 %101
  %interleaved.vec635 = shufflevector <2 x double> %118, <2 x double> %120, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec635, ptr %gep740, align 8, !tbaa !9
  %121 = fsub <2 x double> %110, %103
  %122 = fadd <2 x double> %104, %109
  %123 = fadd <2 x double> %122, %121
  %124 = fmul <2 x double> %broadcast.splat634, %123
  %125 = fsub <2 x double> %121, %122
  %126 = fmul <2 x double> %broadcast.splat634, %125
  %gep742 = getelementptr double, ptr %invariant.gep741, i64 %101
  %interleaved.vec636 = shufflevector <2 x double> %124, <2 x double> %126, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec636, ptr %gep742, align 8, !tbaa !9
  %index.next637 = add nuw i64 %index617, 2
  %127 = icmp eq i64 %index.next637, %n.vec613
  br i1 %127, label %middle.block608, label %vector.body616, !llvm.loop !17

middle.block608:                                  ; preds = %vector.body616
  br i1 %cmp.n638, label %._crit_edge442, label %scalar.ph609.preheader

scalar.ph609.preheader:                           ; preds = %middle.block608, %vector.memcheck578, %.lr.ph441
  %indvars.iv487.ph = phi i64 [ 0, %vector.memcheck578 ], [ 0, %.lr.ph441 ], [ %ind.end614, %middle.block608 ]
  br label %scalar.ph609

scalar.ph609:                                     ; preds = %scalar.ph609.preheader, %scalar.ph609
  %indvars.iv487 = phi i64 [ %indvars.iv.next488, %scalar.ph609 ], [ %indvars.iv487.ph, %scalar.ph609.preheader ]
  %128 = getelementptr inbounds double, ptr %92, i64 %indvars.iv487
  %129 = getelementptr inbounds double, ptr %94, i64 %indvars.iv487
  %130 = or disjoint i64 %indvars.iv487, 1
  %131 = getelementptr inbounds double, ptr %94, i64 %130
  %132 = getelementptr inbounds double, ptr %96, i64 %indvars.iv487
  %133 = getelementptr inbounds double, ptr %97, i64 %indvars.iv487
  %134 = getelementptr inbounds double, ptr %97, i64 %130
  %135 = load <2 x double>, ptr %128, align 8, !tbaa !9
  %136 = load <2 x double>, ptr %129, align 8, !tbaa !9
  %137 = fadd <2 x double> %135, %136
  %138 = fsub <2 x double> %135, %136
  %139 = extractelement <2 x double> %138, i64 0
  %140 = fsub <2 x double> %135, %136
  %141 = extractelement <2 x double> %140, i64 1
  %142 = load <2 x double>, ptr %132, align 8, !tbaa !9
  %143 = load <2 x double>, ptr %133, align 8, !tbaa !9
  %144 = fadd <2 x double> %142, %143
  %145 = fsub <2 x double> %142, %143
  %146 = extractelement <2 x double> %145, i64 0
  %147 = fsub <2 x double> %142, %143
  %148 = extractelement <2 x double> %147, i64 1
  %149 = fadd <2 x double> %137, %144
  store <2 x double> %149, ptr %128, align 8, !tbaa !9
  %150 = shufflevector <2 x double> %137, <2 x double> %144, <2 x i32> <i32 1, i32 2>
  %151 = shufflevector <2 x double> %144, <2 x double> %137, <2 x i32> <i32 1, i32 2>
  %152 = fsub <2 x double> %150, %151
  store <2 x double> %152, ptr %132, align 8, !tbaa !9
  %153 = fadd double %139, %148
  %154 = fsub double %141, %146
  %155 = fadd double %154, %153
  %156 = fmul double %85, %155
  store double %156, ptr %129, align 8, !tbaa !9
  %157 = fsub double %154, %153
  %158 = fmul double %85, %157
  store double %158, ptr %131, align 8, !tbaa !9
  %159 = fsub double %148, %139
  %160 = fadd double %141, %146
  %161 = fadd double %160, %159
  %162 = fmul double %85, %161
  store double %162, ptr %133, align 8, !tbaa !9
  %163 = fsub double %159, %160
  %164 = fmul double %85, %163
  store double %164, ptr %134, align 8, !tbaa !9
  %indvars.iv.next488 = add nuw nsw i64 %indvars.iv487, 2
  %.not428 = icmp sgt i64 %indvars.iv.next488, %8
  br i1 %.not428, label %._crit_edge442, label %scalar.ph609, !llvm.loop !18

._crit_edge442:                                   ; preds = %scalar.ph609, %middle.block608
  %indvars.iv.next491 = add nsw i64 %indvars.iv490, 1
  %exitcond494.not = icmp eq i64 %indvars.iv.next491, %wide.trip.count493
  br i1 %exitcond494.not, label %._crit_edge447, label %.lr.ph441, !llvm.loop !19

._crit_edge447:                                   ; preds = %._crit_edge442, %84
  %165 = shl i32 %.0417466, 3
  %166 = sub nsw i32 %0, %31
  %.not425458 = icmp sgt i32 %165, %166
  br i1 %.not425458, label %.loopexit430, label %.lr.ph465.preheader

.lr.ph465.preheader:                              ; preds = %._crit_edge447
  %167 = sext i32 %165 to i64
  %168 = sext i32 %31 to i64
  %169 = sext i32 %.0417466 to i64
  %170 = sext i32 %166 to i64
  %invariant.gep518 = getelementptr ptr, ptr %2, i64 %169
  br label %.lr.ph465

.lr.ph465:                                        ; preds = %.lr.ph465.preheader, %._crit_edge457
  %indvars.iv503 = phi i64 [ 1, %.lr.ph465.preheader ], [ %indvars.iv.next504, %._crit_edge457 ]
  %indvars.iv498 = phi i64 [ %167, %.lr.ph465.preheader ], [ %indvars.iv.next499, %._crit_edge457 ]
  %.0418461 = phi i32 [ -1, %.lr.ph465.preheader ], [ %.0418.neg460, %._crit_edge457 ]
  %.0418.neg460 = phi i32 [ 1, %.lr.ph465.preheader ], [ %.0418461, %._crit_edge457 ]
  %indvars.iv.next504 = add nuw nsw i64 %indvars.iv503, 1
  %sext = shl i64 %indvars.iv.next504, 33
  %171 = ashr exact i64 %sext, 29
  %172 = getelementptr inbounds i8, ptr %3, i64 %171
  %173 = load double, ptr %172, align 8, !tbaa !9
  %indvars.iv.next504.tr = trunc i64 %indvars.iv.next504 to i32
  %174 = shl i32 %indvars.iv.next504.tr, 1
  %175 = or disjoint i32 %174, 1
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds double, ptr %3, i64 %176
  %178 = load double, ptr %177, align 8, !tbaa !9
  %179 = sitofp i32 %.0418.neg460 to double
  %180 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next504
  %181 = load double, ptr %180, align 8, !tbaa !9
  %182 = fmul double %181, %179
  %183 = sext i32 %.0418.neg460 to i64
  %184 = getelementptr double, ptr %3, i64 %indvars.iv.next504
  %185 = getelementptr double, ptr %184, i64 %183
  %186 = load double, ptr %185, align 8, !tbaa !9
  %187 = fmul double %186, 2.000000e+00
  %188 = fneg double %187
  %189 = tail call double @llvm.fmuladd.f64(double %188, double %178, double %173)
  %190 = fneg double %178
  %191 = tail call double @llvm.fmuladd.f64(double %187, double %173, double %190)
  %192 = add nsw i64 %indvars.iv498, %169
  br i1 %.not423.not433, label %._crit_edge457, label %.lr.ph456

.lr.ph456:                                        ; preds = %.lr.ph465
  %193 = fneg double %186
  %194 = fneg double %191
  br i1 %.not429431, label %._crit_edge457, label %.lr.ph451.preheader

.lr.ph451.preheader:                              ; preds = %.lr.ph456
  %broadcast.splatinsert = insertelement <2 x double> poison, double %186, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert559 = insertelement <2 x double> poison, double %182, i64 0
  %broadcast.splat560 = shufflevector <2 x double> %broadcast.splatinsert559, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert561 = insertelement <2 x double> poison, double %193, i64 0
  %broadcast.splat562 = shufflevector <2 x double> %broadcast.splatinsert561, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert564 = insertelement <2 x double> poison, double %178, i64 0
  %broadcast.splat565 = shufflevector <2 x double> %broadcast.splatinsert564, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert566 = insertelement <2 x double> poison, double %173, i64 0
  %broadcast.splat567 = shufflevector <2 x double> %broadcast.splatinsert566, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert568 = insertelement <2 x double> poison, double %190, i64 0
  %broadcast.splat569 = shufflevector <2 x double> %broadcast.splatinsert568, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert571 = insertelement <2 x double> poison, double %191, i64 0
  %broadcast.splat572 = shufflevector <2 x double> %broadcast.splatinsert571, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert573 = insertelement <2 x double> poison, double %189, i64 0
  %broadcast.splat574 = shufflevector <2 x double> %broadcast.splatinsert573, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert575 = insertelement <2 x double> poison, double %194, i64 0
  %broadcast.splat576 = shufflevector <2 x double> %broadcast.splatinsert575, <2 x double> poison, <2 x i32> zeroinitializer
  %195 = insertelement <2 x double> poison, double %193, i64 0
  %196 = insertelement <2 x double> %195, double %186, i64 1
  %197 = insertelement <2 x double> poison, double %182, i64 0
  %198 = shufflevector <2 x double> %197, <2 x double> poison, <2 x i32> zeroinitializer
  %199 = insertelement <2 x double> poison, double %178, i64 0
  %200 = insertelement <2 x double> %199, double %190, i64 1
  %201 = insertelement <2 x double> poison, double %173, i64 0
  %202 = shufflevector <2 x double> %201, <2 x double> poison, <2 x i32> zeroinitializer
  %203 = insertelement <2 x double> poison, double %191, i64 0
  %204 = insertelement <2 x double> %203, double %194, i64 1
  %205 = insertelement <2 x double> poison, double %189, i64 0
  %206 = shufflevector <2 x double> %205, <2 x double> poison, <2 x i32> zeroinitializer
  br label %.lr.ph451

.lr.ph451:                                        ; preds = %.lr.ph451.preheader, %._crit_edge452
  %indvars.iv500 = phi i64 [ %indvars.iv.next501, %._crit_edge452 ], [ %indvars.iv498, %.lr.ph451.preheader ]
  %207 = add nsw i64 %indvars.iv500, %169
  %208 = add nsw i64 %207, %169
  %209 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv500
  %210 = load ptr, ptr %209, align 8, !tbaa !5
  %211 = getelementptr inbounds ptr, ptr %2, i64 %207
  %212 = load ptr, ptr %211, align 8, !tbaa !5
  %213 = getelementptr inbounds ptr, ptr %2, i64 %208
  %214 = load ptr, ptr %213, align 8, !tbaa !5
  %gep519 = getelementptr ptr, ptr %invariant.gep518, i64 %208
  %215 = load ptr, ptr %gep519, align 8, !tbaa !5
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph451
  %scevgep = getelementptr i8, ptr %210, i64 %12
  %scevgep526 = getelementptr i8, ptr %214, i64 %12
  %scevgep527 = getelementptr i8, ptr %212, i64 %12
  %scevgep528 = getelementptr i8, ptr %215, i64 %12
  %bound0 = icmp ult ptr %210, %scevgep526
  %bound1 = icmp ult ptr %214, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  %bound0529 = icmp ult ptr %210, %scevgep527
  %bound1530 = icmp ult ptr %212, %scevgep
  %found.conflict531 = and i1 %bound0529, %bound1530
  %conflict.rdx = or i1 %found.conflict, %found.conflict531
  %bound0532 = icmp ult ptr %210, %scevgep528
  %bound1533 = icmp ult ptr %215, %scevgep
  %found.conflict534 = and i1 %bound0532, %bound1533
  %conflict.rdx535 = or i1 %conflict.rdx, %found.conflict534
  %bound0536 = icmp ult ptr %214, %scevgep527
  %bound1537 = icmp ult ptr %212, %scevgep526
  %found.conflict538 = and i1 %bound0536, %bound1537
  %conflict.rdx539 = or i1 %conflict.rdx535, %found.conflict538
  %bound0540 = icmp ult ptr %214, %scevgep528
  %bound1541 = icmp ult ptr %215, %scevgep526
  %found.conflict542 = and i1 %bound0540, %bound1541
  %conflict.rdx543 = or i1 %conflict.rdx539, %found.conflict542
  %bound0544 = icmp ult ptr %212, %scevgep528
  %bound1545 = icmp ult ptr %215, %scevgep527
  %found.conflict546 = and i1 %bound0544, %bound1545
  %conflict.rdx547 = or i1 %conflict.rdx543, %found.conflict546
  br i1 %conflict.rdx547, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %invariant.gep743 = getelementptr i8, ptr %210, i64 -8
  %invariant.gep745 = getelementptr i8, ptr %214, i64 -8
  %invariant.gep747 = getelementptr i8, ptr %212, i64 -8
  %invariant.gep749 = getelementptr i8, ptr %215, i64 -8
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = shl i64 %index, 1
  %216 = getelementptr inbounds double, ptr %210, i64 %offset.idx
  %wide.vec = load <4 x double>, ptr %216, align 8, !tbaa !9
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec549 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %217 = getelementptr inbounds double, ptr %212, i64 %offset.idx
  %wide.vec550 = load <4 x double>, ptr %217, align 8, !tbaa !9
  %strided.vec551 = shufflevector <4 x double> %wide.vec550, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec552 = shufflevector <4 x double> %wide.vec550, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %218 = fadd <2 x double> %strided.vec, %strided.vec551
  %219 = or disjoint i64 %offset.idx, 1
  %220 = fadd <2 x double> %strided.vec549, %strided.vec552
  %221 = fsub <2 x double> %strided.vec, %strided.vec551
  %222 = fsub <2 x double> %strided.vec549, %strided.vec552
  %223 = getelementptr inbounds double, ptr %214, i64 %offset.idx
  %wide.vec553 = load <4 x double>, ptr %223, align 8, !tbaa !9
  %strided.vec554 = shufflevector <4 x double> %wide.vec553, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec555 = shufflevector <4 x double> %wide.vec553, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %224 = getelementptr inbounds double, ptr %215, i64 %offset.idx
  %wide.vec556 = load <4 x double>, ptr %224, align 8, !tbaa !9
  %strided.vec557 = shufflevector <4 x double> %wide.vec556, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec558 = shufflevector <4 x double> %wide.vec556, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %225 = fadd <2 x double> %strided.vec554, %strided.vec557
  %226 = fadd <2 x double> %strided.vec555, %strided.vec558
  %227 = fsub <2 x double> %strided.vec554, %strided.vec557
  %228 = fsub <2 x double> %strided.vec555, %strided.vec558
  %229 = fadd <2 x double> %218, %225
  %230 = fadd <2 x double> %220, %226
  %gep744 = getelementptr double, ptr %invariant.gep743, i64 %219
  %interleaved.vec = shufflevector <2 x double> %229, <2 x double> %230, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %gep744, align 8, !tbaa !9
  %231 = fsub <2 x double> %218, %225
  %232 = fsub <2 x double> %220, %226
  %233 = fmul <2 x double> %broadcast.splat, %232
  %234 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat560, <2 x double> %231, <2 x double> %233)
  %235 = fmul <2 x double> %231, %broadcast.splat562
  %236 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat560, <2 x double> %232, <2 x double> %235)
  %gep746 = getelementptr double, ptr %invariant.gep745, i64 %219
  %interleaved.vec563 = shufflevector <2 x double> %234, <2 x double> %236, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec563, ptr %gep746, align 8, !tbaa !9
  %237 = fadd <2 x double> %221, %228
  %238 = fsub <2 x double> %222, %227
  %239 = fmul <2 x double> %broadcast.splat565, %238
  %240 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat567, <2 x double> %237, <2 x double> %239)
  %241 = fmul <2 x double> %237, %broadcast.splat569
  %242 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat567, <2 x double> %238, <2 x double> %241)
  %gep748 = getelementptr double, ptr %invariant.gep747, i64 %219
  %interleaved.vec570 = shufflevector <2 x double> %240, <2 x double> %242, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec570, ptr %gep748, align 8, !tbaa !9
  %243 = fsub <2 x double> %221, %228
  %244 = fadd <2 x double> %222, %227
  %245 = fmul <2 x double> %broadcast.splat572, %244
  %246 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat574, <2 x double> %243, <2 x double> %245)
  %247 = fmul <2 x double> %243, %broadcast.splat576
  %248 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat574, <2 x double> %244, <2 x double> %247)
  %gep750 = getelementptr double, ptr %invariant.gep749, i64 %219
  %interleaved.vec577 = shufflevector <2 x double> %246, <2 x double> %248, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec577, ptr %gep750, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 2
  %249 = icmp eq i64 %index.next, %n.vec
  br i1 %249, label %middle.block, label %vector.body, !llvm.loop !20

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

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph451
  %indvars.iv495.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph451 ], [ %ind.end, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv495 = phi i64 [ %indvars.iv.next496, %scalar.ph ], [ %indvars.iv495.ph, %scalar.ph.preheader ]
  %250 = getelementptr inbounds double, ptr %210, i64 %indvars.iv495
  %251 = getelementptr inbounds double, ptr %212, i64 %indvars.iv495
  %252 = getelementptr inbounds double, ptr %214, i64 %indvars.iv495
  %253 = getelementptr inbounds double, ptr %215, i64 %indvars.iv495
  %254 = load <2 x double>, ptr %250, align 8, !tbaa !9
  %255 = load <2 x double>, ptr %251, align 8, !tbaa !9
  %256 = fadd <2 x double> %254, %255
  %257 = load <2 x double>, ptr %252, align 8, !tbaa !9
  %258 = load <2 x double>, ptr %253, align 8, !tbaa !9
  %259 = fadd <2 x double> %257, %258
  %260 = fadd <2 x double> %256, %259
  store <2 x double> %260, ptr %250, align 8, !tbaa !9
  %261 = fsub <2 x double> %256, %259
  %262 = fmul <2 x double> %196, %261
  %263 = shufflevector <2 x double> %262, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %264 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %198, <2 x double> %261, <2 x double> %263)
  store <2 x double> %264, ptr %252, align 8, !tbaa !9
  %265 = fsub <2 x double> %254, %255
  %266 = fsub <2 x double> %257, %258
  %267 = shufflevector <2 x double> %266, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %268 = fadd <2 x double> %265, %267
  %269 = fsub <2 x double> %265, %267
  %270 = shufflevector <2 x double> %268, <2 x double> %269, <2 x i32> <i32 0, i32 3>
  %271 = shufflevector <2 x double> %270, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %272 = fmul <2 x double> %200, %271
  %273 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %202, <2 x double> %270, <2 x double> %272)
  store <2 x double> %273, ptr %251, align 8, !tbaa !9
  %274 = shufflevector <2 x double> %269, <2 x double> %268, <2 x i32> <i32 0, i32 3>
  %275 = shufflevector <2 x double> %274, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %276 = fmul <2 x double> %204, %275
  %277 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %206, <2 x double> %274, <2 x double> %276)
  store <2 x double> %277, ptr %253, align 8, !tbaa !9
  %indvars.iv.next496 = add nuw nsw i64 %indvars.iv495, 2
  %.not427 = icmp sgt i64 %indvars.iv.next496, %8
  br i1 %.not427, label %._crit_edge452, label %scalar.ph, !llvm.loop !21

._crit_edge452:                                   ; preds = %scalar.ph, %middle.block
  %indvars.iv.next501 = add nsw i64 %indvars.iv500, 1
  %.not426.not = icmp slt i64 %indvars.iv.next501, %192
  br i1 %.not426.not, label %.lr.ph451, label %._crit_edge457, !llvm.loop !22

._crit_edge457:                                   ; preds = %._crit_edge452, %.lr.ph456, %.lr.ph465
  %indvars.iv.next499 = add nsw i64 %indvars.iv498, %168
  %.not425 = icmp sgt i64 %indvars.iv.next499, %170
  br i1 %.not425, label %.loopexit430, label %.lr.ph465, !llvm.loop !23

.loopexit430:                                     ; preds = %._crit_edge457, %._crit_edge437..loopexit430_crit_edge, %._crit_edge447
  %.pre-phi = phi i32 [ %.pre, %._crit_edge437..loopexit430_crit_edge ], [ %165, %._crit_edge447 ], [ %165, %._crit_edge457 ]
  %278 = icmp slt i32 %.pre-phi, %0
  br i1 %278, label %30, label %._crit_edge470, !llvm.loop !24

._crit_edge470:                                   ; preds = %.loopexit430, %4
  %.0417.lcssa = phi i32 [ 1, %4 ], [ %31, %.loopexit430 ]
  %279 = icmp sge i32 %.0417.lcssa, %0
  %.not.not476 = icmp slt i32 %.0417.lcssa, 1
  %or.cond.not525 = or i1 %279, %.not.not476
  %.not471 = icmp slt i32 %1, 2
  %or.cond523 = or i1 %or.cond.not525, %.not471
  br i1 %or.cond523, label %.loopexit, label %.lr.ph474.preheader

.lr.ph474.preheader:                              ; preds = %._crit_edge470
  %280 = add nsw i32 %1, -2
  %281 = zext i32 %280 to i64
  %282 = zext nneg i32 %.0417.lcssa to i64
  %invariant.gep520 = getelementptr inbounds ptr, ptr %2, i64 %282
  %283 = lshr i64 %281, 1
  %284 = shl nuw nsw i64 %283, 4
  %285 = add nuw nsw i64 %284, 16
  %286 = add nuw nsw i64 %283, 1
  %min.iters.check706 = icmp ult i32 %280, 4
  %287 = and i64 %281, 2
  %.not726 = icmp eq i64 %287, 0
  %.neg = select i1 %.not726, i64 -1, i64 -2
  %n.vec709 = add nsw i64 %.neg, %286
  %ind.end710 = shl nsw i64 %n.vec709, 1
  br label %.lr.ph474

.lr.ph474:                                        ; preds = %.lr.ph474.preheader, %._crit_edge475
  %indvars.iv511 = phi i64 [ 0, %.lr.ph474.preheader ], [ %indvars.iv.next512, %._crit_edge475 ]
  %288 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv511
  %289 = load ptr, ptr %288, align 8, !tbaa !5
  %gep521 = getelementptr inbounds ptr, ptr %invariant.gep520, i64 %indvars.iv511
  %290 = load ptr, ptr %gep521, align 8, !tbaa !5
  br i1 %min.iters.check706, label %scalar.ph705.preheader, label %vector.memcheck698

vector.memcheck698:                               ; preds = %.lr.ph474
  %scevgep699 = getelementptr i8, ptr %289, i64 %285
  %scevgep700 = getelementptr i8, ptr %290, i64 %285
  %bound0701 = icmp ult ptr %289, %scevgep700
  %bound1702 = icmp ult ptr %290, %scevgep699
  %found.conflict703 = and i1 %bound0701, %bound1702
  br i1 %found.conflict703, label %scalar.ph705.preheader, label %vector.ph707

vector.ph707:                                     ; preds = %vector.memcheck698
  %invariant.gep751 = getelementptr i8, ptr %289, i64 -8
  br label %vector.body712

vector.body712:                                   ; preds = %vector.body712, %vector.ph707
  %index713 = phi i64 [ 0, %vector.ph707 ], [ %index.next725, %vector.body712 ]
  %offset.idx714 = shl i64 %index713, 1
  %291 = getelementptr inbounds double, ptr %289, i64 %offset.idx714
  %wide.vec715 = load <4 x double>, ptr %291, align 8, !tbaa !9
  %strided.vec717 = shufflevector <4 x double> %wide.vec715, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %292 = getelementptr inbounds double, ptr %290, i64 %offset.idx714
  %wide.vec718 = load <4 x double>, ptr %292, align 8, !tbaa !9
  %293 = fsub <4 x double> %wide.vec715, %wide.vec718
  %294 = shufflevector <4 x double> %293, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %295 = or disjoint i64 %offset.idx714, 1
  %296 = getelementptr inbounds double, ptr %290, i64 %295
  %wide.vec721 = load <4 x double>, ptr %296, align 8, !tbaa !9
  %strided.vec722 = shufflevector <4 x double> %wide.vec721, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %297 = fsub <2 x double> %strided.vec717, %strided.vec722
  %gep752 = getelementptr double, ptr %invariant.gep751, i64 %295
  %interleaved.vec723 = fadd <4 x double> %wide.vec715, %wide.vec718
  store <4 x double> %interleaved.vec723, ptr %gep752, align 8, !tbaa !9
  %298 = getelementptr inbounds i8, ptr %296, i64 -8
  %interleaved.vec724 = shufflevector <2 x double> %294, <2 x double> %297, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec724, ptr %298, align 8, !tbaa !9
  %index.next725 = add nuw i64 %index713, 2
  %299 = icmp eq i64 %index.next725, %n.vec709
  br i1 %299, label %scalar.ph705.preheader, label %vector.body712, !llvm.loop !25

scalar.ph705.preheader:                           ; preds = %vector.body712, %vector.memcheck698, %.lr.ph474
  %indvars.iv508.ph = phi i64 [ 0, %vector.memcheck698 ], [ 0, %.lr.ph474 ], [ %ind.end710, %vector.body712 ]
  br label %scalar.ph705

scalar.ph705:                                     ; preds = %scalar.ph705.preheader, %scalar.ph705
  %indvars.iv508 = phi i64 [ %indvars.iv.next509, %scalar.ph705 ], [ %indvars.iv508.ph, %scalar.ph705.preheader ]
  %300 = getelementptr inbounds double, ptr %289, i64 %indvars.iv508
  %301 = getelementptr inbounds double, ptr %290, i64 %indvars.iv508
  %302 = or disjoint i64 %indvars.iv508, 1
  %303 = getelementptr inbounds double, ptr %289, i64 %302
  %304 = getelementptr inbounds double, ptr %290, i64 %302
  %305 = load <2 x double>, ptr %300, align 8, !tbaa !9
  %306 = load <2 x double>, ptr %301, align 8, !tbaa !9
  %307 = fsub <2 x double> %305, %306
  %308 = fadd <2 x double> %305, %306
  %309 = extractelement <2 x double> %308, i64 0
  store double %309, ptr %300, align 8, !tbaa !9
  %310 = load double, ptr %304, align 8, !tbaa !9
  %311 = extractelement <2 x double> %305, i64 1
  %312 = fadd double %311, %310
  store double %312, ptr %303, align 8, !tbaa !9
  store <2 x double> %307, ptr %301, align 8, !tbaa !9
  %indvars.iv.next509 = add nuw nsw i64 %indvars.iv508, 2
  %.not = icmp ugt i64 %indvars.iv.next509, %281
  br i1 %.not, label %._crit_edge475, label %scalar.ph705, !llvm.loop !26

._crit_edge475:                                   ; preds = %scalar.ph705
  %indvars.iv.next512 = add nuw nsw i64 %indvars.iv511, 1
  %exitcond515.not = icmp eq i64 %indvars.iv.next512, %282
  br i1 %exitcond515.not, label %.loopexit, label %.lr.ph474, !llvm.loop !27

.loopexit:                                        ; preds = %._crit_edge475, %._crit_edge470
  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 i64 @llvm.smax.i64(i64, i64) #2

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

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

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


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