; 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 @cftbcol(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 0, ptr %9, align 4, !tbaa !5
  br label %33

33:                                               ; preds = %1110, %4
  %34 = load i32, ptr %9, align 4, !tbaa !5
  %35 = load i32, ptr %5, align 4, !tbaa !5
  %36 = sub nsw i32 %35, 1
  %37 = icmp sle i32 %34, %36
  br i1 %37, label %38, label %1113

38:                                               ; preds = %33
  store i32 2, ptr %17, align 4, !tbaa !5
  br label %39

39:                                               ; preds = %990, %38
  %40 = load i32, ptr %17, align 4, !tbaa !5
  %41 = shl i32 %40, 1
  %42 = load i32, ptr %6, align 4, !tbaa !5
  %43 = icmp slt i32 %41, %42
  br i1 %43, label %44, label %992

44:                                               ; preds = %39
  %45 = load i32, ptr %17, align 4, !tbaa !5
  %46 = shl i32 %45, 2
  store i32 %46, ptr %18, align 4, !tbaa !5
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %47

47:                                               ; preds = %314, %44
  %48 = load i32, ptr %10, align 4, !tbaa !5
  %49 = load i32, ptr %17, align 4, !tbaa !5
  %50 = sub nsw i32 %49, 2
  %51 = icmp sle i32 %48, %50
  br i1 %51, label %52, label %317

52:                                               ; preds = %47
  %53 = load i32, ptr %10, align 4, !tbaa !5
  %54 = load i32, ptr %17, align 4, !tbaa !5
  %55 = add nsw i32 %53, %54
  store i32 %55, ptr %11, align 4, !tbaa !5
  %56 = load i32, ptr %11, align 4, !tbaa !5
  %57 = load i32, ptr %17, align 4, !tbaa !5
  %58 = add nsw i32 %56, %57
  store i32 %58, ptr %12, align 4, !tbaa !5
  %59 = load i32, ptr %12, align 4, !tbaa !5
  %60 = load i32, ptr %17, align 4, !tbaa !5
  %61 = add nsw i32 %59, %60
  store i32 %61, ptr %13, align 4, !tbaa !5
  %62 = load ptr, ptr %7, align 8, !tbaa !9
  %63 = load i32, ptr %9, 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 %10, 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 %9, 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 %11, 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 %9, 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 %10, 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 %9, 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 %11, 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 %9, 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 %10, align 4, !tbaa !5
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds double, ptr %106, i64 %108
  %110 = load double, ptr %109, align 8, !tbaa !11
  %111 = load ptr, ptr %7, align 8, !tbaa !9
  %112 = load i32, ptr %9, 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 %11, 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 %9, 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 %10, 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 %9, 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 %11, 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 %9, 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 %12, 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 %9, 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 %13, 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 %9, 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 %12, 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 %9, 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 %13, 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 %9, 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 %12, 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 %9, 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 %13, 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 %9, 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 %12, 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 %9, 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 %13, 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 %9, 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 %10, 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 %9, 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 %10, 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 %9, 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 %12, 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 %9, 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 %12, 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 = fsub double %268, %269
  %271 = load ptr, ptr %7, align 8, !tbaa !9
  %272 = load i32, ptr %9, 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 %11, 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 = fadd double %279, %280
  %282 = load ptr, ptr %7, align 8, !tbaa !9
  %283 = load i32, ptr %9, 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 %11, 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 = fadd double %291, %292
  %294 = load ptr, ptr %7, align 8, !tbaa !9
  %295 = load i32, ptr %9, 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 %13, 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 = fsub double %302, %303
  %305 = load ptr, ptr %7, align 8, !tbaa !9
  %306 = load i32, ptr %9, 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 %13, 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 = %52
  %315 = load i32, ptr %10, align 4, !tbaa !5
  %316 = add nsw i32 %315, 2
  store i32 %316, ptr %10, align 4, !tbaa !5
  br label %47, !llvm.loop !13

317:                                              ; preds = %47
  %318 = load i32, ptr %18, align 4, !tbaa !5
  %319 = load i32, ptr %6, align 4, !tbaa !5
  %320 = icmp slt i32 %318, %319
  br i1 %320, label %321, label %990

321:                                              ; preds = %317
  %322 = load ptr, ptr %8, align 8, !tbaa !9
  %323 = getelementptr inbounds double, ptr %322, i64 2
  %324 = load double, ptr %323, align 8, !tbaa !11
  store double %324, ptr %19, align 8, !tbaa !11
  %325 = load i32, ptr %18, align 4, !tbaa !5
  store i32 %325, ptr %10, align 4, !tbaa !5
  br label %326

326:                                              ; preds = %615, %321
  %327 = load i32, ptr %10, align 4, !tbaa !5
  %328 = load i32, ptr %17, align 4, !tbaa !5
  %329 = load i32, ptr %18, align 4, !tbaa !5
  %330 = add nsw i32 %328, %329
  %331 = sub nsw i32 %330, 2
  %332 = icmp sle i32 %327, %331
  br i1 %332, label %333, label %618

333:                                              ; preds = %326
  %334 = load i32, ptr %10, align 4, !tbaa !5
  %335 = load i32, ptr %17, align 4, !tbaa !5
  %336 = add nsw i32 %334, %335
  store i32 %336, ptr %11, align 4, !tbaa !5
  %337 = load i32, ptr %11, align 4, !tbaa !5
  %338 = load i32, ptr %17, align 4, !tbaa !5
  %339 = add nsw i32 %337, %338
  store i32 %339, ptr %12, align 4, !tbaa !5
  %340 = load i32, ptr %12, align 4, !tbaa !5
  %341 = load i32, ptr %17, align 4, !tbaa !5
  %342 = add nsw i32 %340, %341
  store i32 %342, ptr %13, align 4, !tbaa !5
  %343 = load ptr, ptr %7, align 8, !tbaa !9
  %344 = load i32, ptr %9, align 4, !tbaa !5
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds ptr, ptr %343, i64 %345
  %347 = load ptr, ptr %346, align 8, !tbaa !9
  %348 = load i32, ptr %10, align 4, !tbaa !5
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds double, ptr %347, i64 %349
  %351 = load double, ptr %350, align 8, !tbaa !11
  %352 = load ptr, ptr %7, align 8, !tbaa !9
  %353 = load i32, ptr %9, align 4, !tbaa !5
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds ptr, ptr %352, i64 %354
  %356 = load ptr, ptr %355, align 8, !tbaa !9
  %357 = load i32, ptr %11, align 4, !tbaa !5
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds double, ptr %356, i64 %358
  %360 = load double, ptr %359, align 8, !tbaa !11
  %361 = fadd double %351, %360
  store double %361, ptr %25, align 8, !tbaa !11
  %362 = load ptr, ptr %7, align 8, !tbaa !9
  %363 = load i32, ptr %9, 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 %10, align 4, !tbaa !5
  %368 = add nsw i32 %367, 1
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds double, ptr %366, i64 %369
  %371 = load double, ptr %370, align 8, !tbaa !11
  %372 = load ptr, ptr %7, align 8, !tbaa !9
  %373 = load i32, ptr %9, 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 %11, 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 = fadd double %371, %381
  store double %382, ptr %26, align 8, !tbaa !11
  %383 = load ptr, ptr %7, align 8, !tbaa !9
  %384 = load i32, ptr %9, align 4, !tbaa !5
  %385 = sext i32 %384 to i64
  %386 = getelementptr inbounds ptr, ptr %383, i64 %385
  %387 = load ptr, ptr %386, align 8, !tbaa !9
  %388 = load i32, ptr %10, align 4, !tbaa !5
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds double, ptr %387, i64 %389
  %391 = load double, ptr %390, align 8, !tbaa !11
  %392 = load ptr, ptr %7, align 8, !tbaa !9
  %393 = load i32, ptr %9, align 4, !tbaa !5
  %394 = sext i32 %393 to i64
  %395 = getelementptr inbounds ptr, ptr %392, i64 %394
  %396 = load ptr, ptr %395, align 8, !tbaa !9
  %397 = load i32, ptr %11, align 4, !tbaa !5
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds double, ptr %396, i64 %398
  %400 = load double, ptr %399, align 8, !tbaa !11
  %401 = fsub double %391, %400
  store double %401, ptr %27, align 8, !tbaa !11
  %402 = load ptr, ptr %7, align 8, !tbaa !9
  %403 = load i32, ptr %9, 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 %10, align 4, !tbaa !5
  %408 = add nsw i32 %407, 1
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds double, ptr %406, i64 %409
  %411 = load double, ptr %410, align 8, !tbaa !11
  %412 = load ptr, ptr %7, align 8, !tbaa !9
  %413 = load i32, ptr %9, 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 %11, 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 = fsub double %411, %421
  store double %422, ptr %28, align 8, !tbaa !11
  %423 = load ptr, ptr %7, align 8, !tbaa !9
  %424 = load i32, ptr %9, align 4, !tbaa !5
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds ptr, ptr %423, i64 %425
  %427 = load ptr, ptr %426, align 8, !tbaa !9
  %428 = load i32, ptr %12, align 4, !tbaa !5
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds double, ptr %427, i64 %429
  %431 = load double, ptr %430, align 8, !tbaa !11
  %432 = load ptr, ptr %7, align 8, !tbaa !9
  %433 = load i32, ptr %9, align 4, !tbaa !5
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds ptr, ptr %432, i64 %434
  %436 = load ptr, ptr %435, align 8, !tbaa !9
  %437 = load i32, ptr %13, align 4, !tbaa !5
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds double, ptr %436, i64 %438
  %440 = load double, ptr %439, align 8, !tbaa !11
  %441 = fadd double %431, %440
  store double %441, ptr %29, align 8, !tbaa !11
  %442 = load ptr, ptr %7, align 8, !tbaa !9
  %443 = load i32, ptr %9, 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 %12, align 4, !tbaa !5
  %448 = add nsw i32 %447, 1
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds double, ptr %446, i64 %449
  %451 = load double, ptr %450, align 8, !tbaa !11
  %452 = load ptr, ptr %7, align 8, !tbaa !9
  %453 = load i32, ptr %9, 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 %13, 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 = fadd double %451, %461
  store double %462, ptr %30, align 8, !tbaa !11
  %463 = load ptr, ptr %7, align 8, !tbaa !9
  %464 = load i32, ptr %9, align 4, !tbaa !5
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds ptr, ptr %463, i64 %465
  %467 = load ptr, ptr %466, align 8, !tbaa !9
  %468 = load i32, ptr %12, align 4, !tbaa !5
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds double, ptr %467, i64 %469
  %471 = load double, ptr %470, align 8, !tbaa !11
  %472 = load ptr, ptr %7, align 8, !tbaa !9
  %473 = load i32, ptr %9, align 4, !tbaa !5
  %474 = sext i32 %473 to i64
  %475 = getelementptr inbounds ptr, ptr %472, i64 %474
  %476 = load ptr, ptr %475, align 8, !tbaa !9
  %477 = load i32, ptr %13, align 4, !tbaa !5
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds double, ptr %476, i64 %478
  %480 = load double, ptr %479, align 8, !tbaa !11
  %481 = fsub double %471, %480
  store double %481, ptr %31, align 8, !tbaa !11
  %482 = load ptr, ptr %7, align 8, !tbaa !9
  %483 = load i32, ptr %9, 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 %12, align 4, !tbaa !5
  %488 = add nsw i32 %487, 1
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds double, ptr %486, i64 %489
  %491 = load double, ptr %490, align 8, !tbaa !11
  %492 = load ptr, ptr %7, align 8, !tbaa !9
  %493 = load i32, ptr %9, 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 %13, 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 = fsub double %491, %501
  store double %502, ptr %32, align 8, !tbaa !11
  %503 = load double, ptr %25, align 8, !tbaa !11
  %504 = load double, ptr %29, align 8, !tbaa !11
  %505 = fadd double %503, %504
  %506 = load ptr, ptr %7, align 8, !tbaa !9
  %507 = load i32, ptr %9, align 4, !tbaa !5
  %508 = sext i32 %507 to i64
  %509 = getelementptr inbounds ptr, ptr %506, i64 %508
  %510 = load ptr, ptr %509, align 8, !tbaa !9
  %511 = load i32, ptr %10, align 4, !tbaa !5
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds double, ptr %510, i64 %512
  store double %505, ptr %513, align 8, !tbaa !11
  %514 = load double, ptr %26, align 8, !tbaa !11
  %515 = load double, ptr %30, align 8, !tbaa !11
  %516 = fadd double %514, %515
  %517 = load ptr, ptr %7, align 8, !tbaa !9
  %518 = load i32, ptr %9, align 4, !tbaa !5
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds ptr, ptr %517, i64 %519
  %521 = load ptr, ptr %520, align 8, !tbaa !9
  %522 = load i32, ptr %10, align 4, !tbaa !5
  %523 = add nsw i32 %522, 1
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds double, ptr %521, i64 %524
  store double %516, ptr %525, align 8, !tbaa !11
  %526 = load double, ptr %30, align 8, !tbaa !11
  %527 = load double, ptr %26, align 8, !tbaa !11
  %528 = fsub double %526, %527
  %529 = load ptr, ptr %7, align 8, !tbaa !9
  %530 = load i32, ptr %9, align 4, !tbaa !5
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds ptr, ptr %529, i64 %531
  %533 = load ptr, ptr %532, align 8, !tbaa !9
  %534 = load i32, ptr %12, align 4, !tbaa !5
  %535 = sext i32 %534 to i64
  %536 = getelementptr inbounds double, ptr %533, i64 %535
  store double %528, ptr %536, align 8, !tbaa !11
  %537 = load double, ptr %25, align 8, !tbaa !11
  %538 = load double, ptr %29, align 8, !tbaa !11
  %539 = fsub double %537, %538
  %540 = load ptr, ptr %7, align 8, !tbaa !9
  %541 = load i32, ptr %9, align 4, !tbaa !5
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds ptr, ptr %540, i64 %542
  %544 = load ptr, ptr %543, align 8, !tbaa !9
  %545 = load i32, ptr %12, align 4, !tbaa !5
  %546 = add nsw i32 %545, 1
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds double, ptr %544, i64 %547
  store double %539, ptr %548, align 8, !tbaa !11
  %549 = load double, ptr %27, align 8, !tbaa !11
  %550 = load double, ptr %32, align 8, !tbaa !11
  %551 = fsub double %549, %550
  store double %551, ptr %25, align 8, !tbaa !11
  %552 = load double, ptr %28, align 8, !tbaa !11
  %553 = load double, ptr %31, align 8, !tbaa !11
  %554 = fadd double %552, %553
  store double %554, ptr %26, align 8, !tbaa !11
  %555 = load double, ptr %19, align 8, !tbaa !11
  %556 = load double, ptr %25, align 8, !tbaa !11
  %557 = load double, ptr %26, align 8, !tbaa !11
  %558 = fsub double %556, %557
  %559 = fmul double %555, %558
  %560 = load ptr, ptr %7, align 8, !tbaa !9
  %561 = load i32, ptr %9, align 4, !tbaa !5
  %562 = sext i32 %561 to i64
  %563 = getelementptr inbounds ptr, ptr %560, i64 %562
  %564 = load ptr, ptr %563, align 8, !tbaa !9
  %565 = load i32, ptr %11, align 4, !tbaa !5
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds double, ptr %564, i64 %566
  store double %559, ptr %567, align 8, !tbaa !11
  %568 = load double, ptr %19, align 8, !tbaa !11
  %569 = load double, ptr %25, align 8, !tbaa !11
  %570 = load double, ptr %26, align 8, !tbaa !11
  %571 = fadd double %569, %570
  %572 = fmul double %568, %571
  %573 = load ptr, ptr %7, align 8, !tbaa !9
  %574 = load i32, ptr %9, align 4, !tbaa !5
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds ptr, ptr %573, i64 %575
  %577 = load ptr, ptr %576, align 8, !tbaa !9
  %578 = load i32, ptr %11, align 4, !tbaa !5
  %579 = add nsw i32 %578, 1
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds double, ptr %577, i64 %580
  store double %572, ptr %581, align 8, !tbaa !11
  %582 = load double, ptr %32, align 8, !tbaa !11
  %583 = load double, ptr %27, align 8, !tbaa !11
  %584 = fadd double %582, %583
  store double %584, ptr %25, align 8, !tbaa !11
  %585 = load double, ptr %31, align 8, !tbaa !11
  %586 = load double, ptr %28, align 8, !tbaa !11
  %587 = fsub double %585, %586
  store double %587, ptr %26, align 8, !tbaa !11
  %588 = load double, ptr %19, align 8, !tbaa !11
  %589 = load double, ptr %26, align 8, !tbaa !11
  %590 = load double, ptr %25, align 8, !tbaa !11
  %591 = fsub double %589, %590
  %592 = fmul double %588, %591
  %593 = load ptr, ptr %7, align 8, !tbaa !9
  %594 = load i32, ptr %9, align 4, !tbaa !5
  %595 = sext i32 %594 to i64
  %596 = getelementptr inbounds ptr, ptr %593, i64 %595
  %597 = load ptr, ptr %596, align 8, !tbaa !9
  %598 = load i32, ptr %13, align 4, !tbaa !5
  %599 = sext i32 %598 to i64
  %600 = getelementptr inbounds double, ptr %597, i64 %599
  store double %592, ptr %600, align 8, !tbaa !11
  %601 = load double, ptr %19, align 8, !tbaa !11
  %602 = load double, ptr %26, align 8, !tbaa !11
  %603 = load double, ptr %25, align 8, !tbaa !11
  %604 = fadd double %602, %603
  %605 = fmul double %601, %604
  %606 = load ptr, ptr %7, align 8, !tbaa !9
  %607 = load i32, ptr %9, align 4, !tbaa !5
  %608 = sext i32 %607 to i64
  %609 = getelementptr inbounds ptr, ptr %606, i64 %608
  %610 = load ptr, ptr %609, align 8, !tbaa !9
  %611 = load i32, ptr %13, align 4, !tbaa !5
  %612 = add nsw i32 %611, 1
  %613 = sext i32 %612 to i64
  %614 = getelementptr inbounds double, ptr %610, i64 %613
  store double %605, ptr %614, align 8, !tbaa !11
  br label %615

615:                                              ; preds = %333
  %616 = load i32, ptr %10, align 4, !tbaa !5
  %617 = add nsw i32 %616, 2
  store i32 %617, ptr %10, align 4, !tbaa !5
  br label %326, !llvm.loop !15

618:                                              ; preds = %326
  store i32 1, ptr %15, align 4, !tbaa !5
  store i32 -1, ptr %16, align 4, !tbaa !5
  %619 = load i32, ptr %18, align 4, !tbaa !5
  %620 = shl i32 %619, 1
  store i32 %620, ptr %14, align 4, !tbaa !5
  br label %621

621:                                              ; preds = %985, %618
  %622 = load i32, ptr %14, align 4, !tbaa !5
  %623 = load i32, ptr %6, align 4, !tbaa !5
  %624 = load i32, ptr %18, align 4, !tbaa !5
  %625 = sub nsw i32 %623, %624
  %626 = icmp sle i32 %622, %625
  br i1 %626, label %627, label %989

627:                                              ; preds = %621
  %628 = load i32, ptr %15, align 4, !tbaa !5
  %629 = add nsw i32 %628, 1
  store i32 %629, ptr %15, align 4, !tbaa !5
  %630 = load i32, ptr %16, align 4, !tbaa !5
  %631 = sub nsw i32 0, %630
  store i32 %631, ptr %16, align 4, !tbaa !5
  %632 = load ptr, ptr %8, align 8, !tbaa !9
  %633 = load i32, ptr %15, align 4, !tbaa !5
  %634 = shl i32 %633, 1
  %635 = sext i32 %634 to i64
  %636 = getelementptr inbounds double, ptr %632, i64 %635
  %637 = load double, ptr %636, align 8, !tbaa !11
  store double %637, ptr %19, align 8, !tbaa !11
  %638 = load ptr, ptr %8, align 8, !tbaa !9
  %639 = load i32, ptr %15, align 4, !tbaa !5
  %640 = shl i32 %639, 1
  %641 = add nsw i32 %640, 1
  %642 = sext i32 %641 to i64
  %643 = getelementptr inbounds double, ptr %638, i64 %642
  %644 = load double, ptr %643, align 8, !tbaa !11
  store double %644, ptr %20, align 8, !tbaa !11
  %645 = load i32, ptr %16, align 4, !tbaa !5
  %646 = sitofp i32 %645 to double
  %647 = load ptr, ptr %8, align 8, !tbaa !9
  %648 = load i32, ptr %15, align 4, !tbaa !5
  %649 = sext i32 %648 to i64
  %650 = getelementptr inbounds double, ptr %647, i64 %649
  %651 = load double, ptr %650, align 8, !tbaa !11
  %652 = fmul double %646, %651
  store double %652, ptr %21, align 8, !tbaa !11
  %653 = load ptr, ptr %8, align 8, !tbaa !9
  %654 = load i32, ptr %15, align 4, !tbaa !5
  %655 = load i32, ptr %16, align 4, !tbaa !5
  %656 = add nsw i32 %654, %655
  %657 = sext i32 %656 to i64
  %658 = getelementptr inbounds double, ptr %653, i64 %657
  %659 = load double, ptr %658, align 8, !tbaa !11
  store double %659, ptr %22, align 8, !tbaa !11
  %660 = load double, ptr %19, align 8, !tbaa !11
  %661 = load double, ptr %22, align 8, !tbaa !11
  %662 = fmul double 2.000000e+00, %661
  %663 = load double, ptr %20, align 8, !tbaa !11
  %664 = fneg double %662
  %665 = call double @llvm.fmuladd.f64(double %664, double %663, double %660)
  store double %665, ptr %23, align 8, !tbaa !11
  %666 = load double, ptr %22, align 8, !tbaa !11
  %667 = fmul double 2.000000e+00, %666
  %668 = load double, ptr %19, align 8, !tbaa !11
  %669 = load double, ptr %20, align 8, !tbaa !11
  %670 = fneg double %669
  %671 = call double @llvm.fmuladd.f64(double %667, double %668, double %670)
  store double %671, ptr %24, align 8, !tbaa !11
  %672 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %672, ptr %10, align 4, !tbaa !5
  br label %673

673:                                              ; preds = %981, %627
  %674 = load i32, ptr %10, align 4, !tbaa !5
  %675 = load i32, ptr %17, align 4, !tbaa !5
  %676 = load i32, ptr %14, align 4, !tbaa !5
  %677 = add nsw i32 %675, %676
  %678 = sub nsw i32 %677, 2
  %679 = icmp sle i32 %674, %678
  br i1 %679, label %680, label %984

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

981:                                              ; preds = %680
  %982 = load i32, ptr %10, align 4, !tbaa !5
  %983 = add nsw i32 %982, 2
  store i32 %983, ptr %10, align 4, !tbaa !5
  br label %673, !llvm.loop !16

984:                                              ; preds = %673
  br label %985

985:                                              ; preds = %984
  %986 = load i32, ptr %18, align 4, !tbaa !5
  %987 = load i32, ptr %14, align 4, !tbaa !5
  %988 = add nsw i32 %987, %986
  store i32 %988, ptr %14, align 4, !tbaa !5
  br label %621, !llvm.loop !17

989:                                              ; preds = %621
  br label %990

990:                                              ; preds = %989, %317
  %991 = load i32, ptr %18, align 4, !tbaa !5
  store i32 %991, ptr %17, align 4, !tbaa !5
  br label %39, !llvm.loop !18

992:                                              ; preds = %39
  %993 = load i32, ptr %17, align 4, !tbaa !5
  %994 = load i32, ptr %6, align 4, !tbaa !5
  %995 = icmp slt i32 %993, %994
  br i1 %995, label %996, label %1109

996:                                              ; preds = %992
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %997

997:                                              ; preds = %1105, %996
  %998 = load i32, ptr %10, align 4, !tbaa !5
  %999 = load i32, ptr %17, align 4, !tbaa !5
  %1000 = sub nsw i32 %999, 2
  %1001 = icmp sle i32 %998, %1000
  br i1 %1001, label %1002, label %1108

1002:                                             ; preds = %997
  %1003 = load i32, ptr %10, align 4, !tbaa !5
  %1004 = load i32, ptr %17, align 4, !tbaa !5
  %1005 = add nsw i32 %1003, %1004
  store i32 %1005, ptr %11, align 4, !tbaa !5
  %1006 = load ptr, ptr %7, align 8, !tbaa !9
  %1007 = load i32, ptr %9, align 4, !tbaa !5
  %1008 = sext i32 %1007 to i64
  %1009 = getelementptr inbounds ptr, ptr %1006, i64 %1008
  %1010 = load ptr, ptr %1009, align 8, !tbaa !9
  %1011 = load i32, ptr %10, align 4, !tbaa !5
  %1012 = sext i32 %1011 to i64
  %1013 = getelementptr inbounds double, ptr %1010, i64 %1012
  %1014 = load double, ptr %1013, align 8, !tbaa !11
  %1015 = load ptr, ptr %7, align 8, !tbaa !9
  %1016 = load i32, ptr %9, align 4, !tbaa !5
  %1017 = sext i32 %1016 to i64
  %1018 = getelementptr inbounds ptr, ptr %1015, i64 %1017
  %1019 = load ptr, ptr %1018, align 8, !tbaa !9
  %1020 = load i32, ptr %11, align 4, !tbaa !5
  %1021 = sext i32 %1020 to i64
  %1022 = getelementptr inbounds double, ptr %1019, i64 %1021
  %1023 = load double, ptr %1022, align 8, !tbaa !11
  %1024 = fsub double %1014, %1023
  store double %1024, ptr %25, align 8, !tbaa !11
  %1025 = load ptr, ptr %7, align 8, !tbaa !9
  %1026 = load i32, ptr %9, align 4, !tbaa !5
  %1027 = sext i32 %1026 to i64
  %1028 = getelementptr inbounds ptr, ptr %1025, i64 %1027
  %1029 = load ptr, ptr %1028, align 8, !tbaa !9
  %1030 = load i32, ptr %10, align 4, !tbaa !5
  %1031 = add nsw i32 %1030, 1
  %1032 = sext i32 %1031 to i64
  %1033 = getelementptr inbounds double, ptr %1029, i64 %1032
  %1034 = load double, ptr %1033, align 8, !tbaa !11
  %1035 = load ptr, ptr %7, align 8, !tbaa !9
  %1036 = load i32, ptr %9, align 4, !tbaa !5
  %1037 = sext i32 %1036 to i64
  %1038 = getelementptr inbounds ptr, ptr %1035, i64 %1037
  %1039 = load ptr, ptr %1038, align 8, !tbaa !9
  %1040 = load i32, ptr %11, align 4, !tbaa !5
  %1041 = add nsw i32 %1040, 1
  %1042 = sext i32 %1041 to i64
  %1043 = getelementptr inbounds double, ptr %1039, i64 %1042
  %1044 = load double, ptr %1043, align 8, !tbaa !11
  %1045 = fsub double %1034, %1044
  store double %1045, ptr %26, align 8, !tbaa !11
  %1046 = load ptr, ptr %7, align 8, !tbaa !9
  %1047 = load i32, ptr %9, align 4, !tbaa !5
  %1048 = sext i32 %1047 to i64
  %1049 = getelementptr inbounds ptr, ptr %1046, i64 %1048
  %1050 = load ptr, ptr %1049, align 8, !tbaa !9
  %1051 = load i32, ptr %11, align 4, !tbaa !5
  %1052 = sext i32 %1051 to i64
  %1053 = getelementptr inbounds double, ptr %1050, i64 %1052
  %1054 = load double, ptr %1053, align 8, !tbaa !11
  %1055 = load ptr, ptr %7, align 8, !tbaa !9
  %1056 = load i32, ptr %9, 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 %10, align 4, !tbaa !5
  %1061 = sext i32 %1060 to i64
  %1062 = getelementptr inbounds double, ptr %1059, i64 %1061
  %1063 = load double, ptr %1062, align 8, !tbaa !11
  %1064 = fadd double %1063, %1054
  store double %1064, ptr %1062, align 8, !tbaa !11
  %1065 = load ptr, ptr %7, align 8, !tbaa !9
  %1066 = load i32, ptr %9, 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 %11, 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 = load ptr, ptr %7, align 8, !tbaa !9
  %1076 = load i32, ptr %9, align 4, !tbaa !5
  %1077 = sext i32 %1076 to i64
  %1078 = getelementptr inbounds ptr, ptr %1075, i64 %1077
  %1079 = load ptr, ptr %1078, align 8, !tbaa !9
  %1080 = load i32, ptr %10, align 4, !tbaa !5
  %1081 = add nsw i32 %1080, 1
  %1082 = sext i32 %1081 to i64
  %1083 = getelementptr inbounds double, ptr %1079, i64 %1082
  %1084 = load double, ptr %1083, align 8, !tbaa !11
  %1085 = fadd double %1084, %1074
  store double %1085, ptr %1083, align 8, !tbaa !11
  %1086 = load double, ptr %25, align 8, !tbaa !11
  %1087 = load ptr, ptr %7, align 8, !tbaa !9
  %1088 = load i32, ptr %9, align 4, !tbaa !5
  %1089 = sext i32 %1088 to i64
  %1090 = getelementptr inbounds ptr, ptr %1087, i64 %1089
  %1091 = load ptr, ptr %1090, align 8, !tbaa !9
  %1092 = load i32, ptr %11, align 4, !tbaa !5
  %1093 = sext i32 %1092 to i64
  %1094 = getelementptr inbounds double, ptr %1091, i64 %1093
  store double %1086, ptr %1094, align 8, !tbaa !11
  %1095 = load double, ptr %26, align 8, !tbaa !11
  %1096 = load ptr, ptr %7, align 8, !tbaa !9
  %1097 = load i32, ptr %9, align 4, !tbaa !5
  %1098 = sext i32 %1097 to i64
  %1099 = getelementptr inbounds ptr, ptr %1096, i64 %1098
  %1100 = load ptr, ptr %1099, align 8, !tbaa !9
  %1101 = load i32, ptr %11, align 4, !tbaa !5
  %1102 = add nsw i32 %1101, 1
  %1103 = sext i32 %1102 to i64
  %1104 = getelementptr inbounds double, ptr %1100, i64 %1103
  store double %1095, ptr %1104, align 8, !tbaa !11
  br label %1105

1105:                                             ; preds = %1002
  %1106 = load i32, ptr %10, align 4, !tbaa !5
  %1107 = add nsw i32 %1106, 2
  store i32 %1107, ptr %10, align 4, !tbaa !5
  br label %997, !llvm.loop !19

1108:                                             ; preds = %997
  br label %1109

1109:                                             ; preds = %1108, %992
  br label %1110

1110:                                             ; preds = %1109
  %1111 = load i32, ptr %9, align 4, !tbaa !5
  %1112 = add nsw i32 %1111, 1
  store i32 %1112, ptr %9, align 4, !tbaa !5
  br label %33, !llvm.loop !20

1113:                                             ; preds = %33
  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}


; 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 @cftbcol(i32 noundef %0, i32 noundef %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3) local_unnamed_addr #0 {
  %.not.not442 = icmp sgt i32 %0, 0
  br i1 %.not.not442, label %.preheader416.lr.ph, label %._crit_edge445

.preheader416.lr.ph:                              ; preds = %4
  %5 = icmp sgt i32 %1, 4
  %6 = getelementptr inbounds i8, ptr %3, i64 16
  br i1 %5, label %.preheader416.us.preheader, label %.preheader416.lr.ph.split

.preheader416.us.preheader:                       ; preds = %.preheader416.lr.ph
  %wide.trip.count477 = zext nneg i32 %0 to i64
  br label %.preheader416.us

.preheader416.us:                                 ; preds = %.preheader416.us.preheader, %.loopexit415.us
  %indvars.iv474 = phi i64 [ 0, %.preheader416.us.preheader ], [ %indvars.iv.next475, %.loopexit415.us ]
  %7 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv474
  br label %.backedge

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv471 = phi i64 [ %indvars.iv.next472, %scalar.ph ], [ %indvars.iv471.ph, %scalar.ph.preheader ]
  %8 = add nuw nsw i64 %indvars.iv471, %516
  %9 = getelementptr inbounds double, ptr %515, i64 %indvars.iv471
  %10 = getelementptr inbounds double, ptr %515, i64 %8
  %11 = or disjoint i64 %indvars.iv471, 1
  %12 = getelementptr inbounds double, ptr %515, i64 %11
  %13 = or disjoint i64 %8, 1
  %14 = getelementptr inbounds double, ptr %515, i64 %13
  %15 = load <2 x double>, ptr %9, align 8, !tbaa !5
  %16 = load <2 x double>, ptr %10, align 8, !tbaa !5
  %17 = fsub <2 x double> %15, %16
  %18 = fadd <2 x double> %15, %16
  %19 = extractelement <2 x double> %18, i64 0
  store double %19, ptr %9, align 8, !tbaa !5
  %20 = load double, ptr %14, align 8, !tbaa !5
  %21 = extractelement <2 x double> %15, i64 1
  %22 = fadd double %21, %20
  store double %22, ptr %12, align 8, !tbaa !5
  store <2 x double> %17, ptr %10, align 8, !tbaa !5
  %indvars.iv.next472 = add nuw nsw i64 %indvars.iv471, 2
  %.not.us = icmp ugt i64 %indvars.iv.next472, %517
  br i1 %.not.us, label %.loopexit415.us, label %scalar.ph, !llvm.loop !9

.loopexit415.us:                                  ; preds = %.loopexit.us.thread, %scalar.ph, %._crit_edge438.us
  %indvars.iv.next475 = add nuw nsw i64 %indvars.iv474, 1
  %exitcond478.not = icmp eq i64 %indvars.iv.next475, %wide.trip.count477
  br i1 %exitcond478.not, label %._crit_edge445, label %.preheader416.us, !llvm.loop !12

.backedge:                                        ; preds = %.backedge.backedge, %.preheader416.us
  %.0405436.us = phi i32 [ 2, %.preheader416.us ], [ %23, %.backedge.backedge ]
  %23 = shl i32 %.0405436.us, 2
  %24 = add i32 %.0405436.us, -2
  %.not411417.us = icmp slt i32 %.0405436.us, 2
  br i1 %.not411417.us, label %._crit_edge.us, label %.lr.ph.us

scalar.ph1065:                                    ; preds = %scalar.ph1065.preheader, %scalar.ph1065
  %indvars.iv455 = phi i64 [ %indvars.iv.next456, %scalar.ph1065 ], [ %indvars.iv455.ph, %scalar.ph1065.preheader ]
  %25 = add nuw nsw i64 %indvars.iv455, %188
  %26 = add nuw nsw i64 %25, %188
  %27 = getelementptr inbounds double, ptr %187, i64 %indvars.iv455
  %28 = getelementptr inbounds double, ptr %187, i64 %25
  %29 = getelementptr inbounds double, ptr %187, i64 %26
  %gep1133 = getelementptr double, ptr %invariant.gep1132, i64 %26
  %30 = load <2 x double>, ptr %27, align 8, !tbaa !5
  %31 = load <2 x double>, ptr %28, align 8, !tbaa !5
  %32 = fsub <2 x double> %30, %31
  %33 = load <2 x double>, ptr %29, align 8, !tbaa !5
  %34 = load <2 x double>, ptr %gep1133, align 8, !tbaa !5
  %35 = fsub <2 x double> %33, %34
  %36 = shufflevector <2 x double> %35, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %37 = fadd <2 x double> %30, %31
  %38 = fadd <2 x double> %33, %34
  %39 = fadd <2 x double> %37, %38
  store <2 x double> %39, ptr %27, align 8, !tbaa !5
  %40 = fsub <2 x double> %37, %38
  store <2 x double> %40, ptr %29, align 8, !tbaa !5
  %41 = fsub <2 x double> %32, %36
  %42 = fadd <2 x double> %32, %36
  %43 = shufflevector <2 x double> %41, <2 x double> %42, <2 x i32> <i32 0, i32 3>
  store <2 x double> %43, ptr %28, align 8, !tbaa !5
  %44 = shufflevector <2 x double> %42, <2 x double> %41, <2 x i32> <i32 0, i32 3>
  store <2 x double> %44, ptr %gep1133, align 8, !tbaa !5
  %indvars.iv.next456 = add nuw nsw i64 %indvars.iv455, 2
  %.not411.us = icmp ugt i64 %indvars.iv.next456, %189
  br i1 %.not411.us, label %._crit_edge.us, label %scalar.ph1065, !llvm.loop !13

._crit_edge.us:                                   ; preds = %scalar.ph1065, %middle.block1064, %.backedge
  %45 = icmp sge i32 %23, %1
  br i1 %45, label %.loopexit.us.thread, label %46

46:                                               ; preds = %._crit_edge.us
  %47 = load double, ptr %6, align 8, !tbaa !5
  %48 = mul i32 %.0405436.us, 5
  %49 = add nsw i32 %48, -2
  %.not412419.us = icmp sgt i32 %23, %49
  br i1 %.not412419.us, label %._crit_edge423.us, label %.lr.ph422.us

scalar.ph900:                                     ; preds = %scalar.ph900.preheader, %scalar.ph900
  %indvars.iv458 = phi i64 [ %indvars.iv.next459, %scalar.ph900 ], [ %indvars.iv458.ph, %scalar.ph900.preheader ]
  %50 = add nsw i64 %indvars.iv458, %246
  %51 = add nsw i64 %50, %246
  %52 = add nsw i64 %51, %246
  %53 = getelementptr inbounds double, ptr %244, i64 %indvars.iv458
  %54 = load double, ptr %53, align 8, !tbaa !5
  %55 = getelementptr inbounds double, ptr %244, i64 %50
  %56 = load double, ptr %55, align 8, !tbaa !5
  %57 = or disjoint i64 %indvars.iv458, 1
  %58 = getelementptr inbounds double, ptr %244, i64 %57
  %59 = load double, ptr %58, align 8, !tbaa !5
  %60 = or disjoint i64 %50, 1
  %61 = getelementptr inbounds double, ptr %244, i64 %60
  %62 = load double, ptr %61, align 8, !tbaa !5
  %63 = fsub double %54, %56
  %64 = fsub double %59, %62
  %65 = getelementptr inbounds double, ptr %244, i64 %51
  %66 = load double, ptr %65, align 8, !tbaa !5
  %67 = getelementptr inbounds double, ptr %244, i64 %52
  %68 = load double, ptr %67, align 8, !tbaa !5
  %69 = or disjoint i64 %51, 1
  %70 = getelementptr inbounds double, ptr %244, i64 %69
  %71 = load double, ptr %70, align 8, !tbaa !5
  %72 = or disjoint i64 %52, 1
  %73 = getelementptr inbounds double, ptr %244, i64 %72
  %74 = load double, ptr %73, align 8, !tbaa !5
  %75 = fsub double %66, %68
  %76 = fsub double %71, %74
  %77 = insertelement <2 x double> poison, double %59, i64 0
  %78 = insertelement <2 x double> %77, double %66, i64 1
  %79 = insertelement <2 x double> poison, double %62, i64 0
  %80 = insertelement <2 x double> %79, double %68, i64 1
  %81 = fadd <2 x double> %78, %80
  %82 = insertelement <2 x double> poison, double %71, i64 0
  %83 = insertelement <2 x double> %82, double %54, i64 1
  %84 = insertelement <2 x double> poison, double %74, i64 0
  %85 = insertelement <2 x double> %84, double %56, i64 1
  %86 = fadd <2 x double> %83, %85
  %87 = fadd <2 x double> %81, %86
  %88 = shufflevector <2 x double> %87, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  store <2 x double> %88, ptr %53, align 8, !tbaa !5
  %89 = fsub <2 x double> %86, %81
  store <2 x double> %89, ptr %65, align 8, !tbaa !5
  %90 = fsub double %63, %76
  %91 = fadd double %64, %75
  %92 = fsub double %90, %91
  %93 = fmul double %47, %92
  store double %93, ptr %55, align 8, !tbaa !5
  %94 = fadd double %91, %90
  %95 = fmul double %47, %94
  store double %95, ptr %61, align 8, !tbaa !5
  %96 = fadd double %63, %76
  %97 = fsub double %75, %64
  %98 = fsub double %97, %96
  %99 = fmul double %47, %98
  store double %99, ptr %67, align 8, !tbaa !5
  %100 = fadd double %97, %96
  %101 = fmul double %47, %100
  store double %101, ptr %73, align 8, !tbaa !5
  %indvars.iv.next459 = add nsw i64 %indvars.iv458, 2
  %.not412.us = icmp sgt i64 %indvars.iv.next459, %247
  br i1 %.not412.us, label %._crit_edge423.us, label %scalar.ph900, !llvm.loop !14

._crit_edge423.us:                                ; preds = %scalar.ph900, %middle.block899, %46
  %102 = shl i32 %.0405436.us, 3
  %103 = sub nsw i32 %1, %23
  %.not413429.us = icmp sgt i32 %102, %103
  br i1 %.not413429.us, label %.loopexit.us, label %.lr.ph435.us

104:                                              ; preds = %.lr.ph435.us, %._crit_edge428.us
  %indvar = phi i64 [ 0, %.lr.ph435.us ], [ %indvar.next, %._crit_edge428.us ]
  %indvars.iv466 = phi i64 [ 1, %.lr.ph435.us ], [ %indvars.iv.next467, %._crit_edge428.us ]
  %indvars.iv461 = phi i64 [ %463, %.lr.ph435.us ], [ %indvars.iv.next462, %._crit_edge428.us ]
  %.0406432.us = phi i32 [ -1, %.lr.ph435.us ], [ %.0406.neg431.us, %._crit_edge428.us ]
  %.0406.neg431.us = phi i32 [ 1, %.lr.ph435.us ], [ %.0406432.us, %._crit_edge428.us ]
  %105 = mul i64 %indvar, %464
  %106 = add i64 %105, %463
  %107 = trunc i64 %indvar to i32
  %108 = mul i32 %23, %107
  %109 = add i32 %108, %513
  %110 = sext i32 %109 to i64
  %111 = sub i64 %110, %106
  %112 = lshr exact i64 %111, 1
  %113 = add nuw i64 %112, 1
  %114 = mul i64 %488, %indvar
  %115 = add i64 %489, %114
  %116 = mul i64 %indvar, %464
  %117 = add i64 %116, %463
  %118 = trunc i64 %indvar to i32
  %119 = mul i32 %23, %118
  %120 = add i32 %119, %491
  %121 = sext i32 %120 to i64
  %122 = sub i64 %121, %117
  %123 = shl i64 %122, 3
  %124 = mul i64 %indvar, %464
  %125 = add i64 %124, %463
  %126 = trunc i64 %indvar to i32
  %127 = mul i32 %23, %126
  %128 = add i32 %127, %468
  %129 = sext i32 %128 to i64
  %130 = sub i64 %129, %125
  %131 = mul i64 %473, %indvar
  %indvars.iv.next467 = add nuw nsw i64 %indvars.iv466, 1
  %sext = shl i64 %indvars.iv.next467, 33
  %132 = ashr exact i64 %sext, 29
  %133 = getelementptr inbounds i8, ptr %3, i64 %132
  %134 = load double, ptr %133, align 8, !tbaa !5
  %indvars.iv.next467.tr = trunc i64 %indvars.iv.next467 to i32
  %135 = shl i32 %indvars.iv.next467.tr, 1
  %136 = or disjoint i32 %135, 1
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds double, ptr %3, i64 %137
  %139 = load double, ptr %138, align 8, !tbaa !5
  %140 = sitofp i32 %.0406.neg431.us to double
  %141 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next467
  %142 = load double, ptr %141, align 8, !tbaa !5
  %143 = fmul double %142, %140
  %144 = sext i32 %.0406.neg431.us to i64
  %145 = getelementptr double, ptr %3, i64 %indvars.iv.next467
  %146 = getelementptr double, ptr %145, i64 %144
  %147 = load double, ptr %146, align 8, !tbaa !5
  %148 = fmul double %147, 2.000000e+00
  %149 = fneg double %148
  %150 = tail call double @llvm.fmuladd.f64(double %149, double %139, double %134)
  %151 = fneg double %139
  %152 = tail call double @llvm.fmuladd.f64(double %148, double %134, double %151)
  %153 = trunc nsw i64 %indvars.iv461 to i32
  %154 = add i32 %24, %153
  %155 = sext i32 %154 to i64
  %.not414424.us = icmp sgt i64 %indvars.iv461, %155
  br i1 %.not414424.us, label %._crit_edge428.us, label %.lr.ph427.us

scalar.ph683:                                     ; preds = %scalar.ph683.preheader, %scalar.ph683
  %indvars.iv463 = phi i64 [ %indvars.iv.next464, %scalar.ph683 ], [ %indvars.iv463.ph, %scalar.ph683.preheader ]
  %156 = add nsw i64 %indvars.iv463, %465
  %157 = add nsw i64 %156, %465
  %158 = getelementptr inbounds double, ptr %339, i64 %indvars.iv463
  %159 = getelementptr inbounds double, ptr %339, i64 %156
  %160 = getelementptr inbounds double, ptr %339, i64 %157
  %gep1151 = getelementptr double, ptr %invariant.gep1150, i64 %157
  %161 = load <2 x double>, ptr %158, align 8, !tbaa !5
  %162 = load <2 x double>, ptr %159, align 8, !tbaa !5
  %163 = fadd <2 x double> %161, %162
  %164 = load <2 x double>, ptr %160, align 8, !tbaa !5
  %165 = load <2 x double>, ptr %gep1151, align 8, !tbaa !5
  %166 = fadd <2 x double> %164, %165
  %167 = fadd <2 x double> %163, %166
  store <2 x double> %167, ptr %158, align 8, !tbaa !5
  %168 = fsub <2 x double> %163, %166
  %169 = fmul <2 x double> %168, %343
  %170 = shufflevector <2 x double> %169, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %171 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %345, <2 x double> %168, <2 x double> %170)
  store <2 x double> %171, ptr %160, align 8, !tbaa !5
  %172 = fsub <2 x double> %161, %162
  %173 = fsub <2 x double> %164, %165
  %174 = shufflevector <2 x double> %173, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %175 = fsub <2 x double> %172, %174
  %176 = fadd <2 x double> %172, %174
  %177 = shufflevector <2 x double> %175, <2 x double> %176, <2 x i32> <i32 0, i32 3>
  %178 = shufflevector <2 x double> %177, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %179 = fmul <2 x double> %178, %347
  %180 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %349, <2 x double> %177, <2 x double> %179)
  store <2 x double> %180, ptr %159, align 8, !tbaa !5
  %181 = shufflevector <2 x double> %176, <2 x double> %175, <2 x i32> <i32 0, i32 3>
  %182 = shufflevector <2 x double> %181, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %183 = fmul <2 x double> %182, %351
  %184 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %353, <2 x double> %181, <2 x double> %183)
  store <2 x double> %184, ptr %gep1151, align 8, !tbaa !5
  %indvars.iv.next464 = add nsw i64 %indvars.iv463, 2
  %.not414.us = icmp sgt i64 %indvars.iv.next464, %155
  br i1 %.not414.us, label %._crit_edge428.us, label %scalar.ph683, !llvm.loop !15

._crit_edge428.us:                                ; preds = %scalar.ph683, %middle.block682, %104
  %indvars.iv.next462 = add nsw i64 %indvars.iv461, %464
  %.not413.us = icmp sgt i64 %indvars.iv.next462, %466
  %indvar.next = add i64 %indvar, 1
  br i1 %.not413.us, label %.loopexit.us, label %104, !llvm.loop !16

.loopexit.us:                                     ; preds = %._crit_edge428.us, %._crit_edge423.us
  %185 = icmp slt i32 %102, %1
  br i1 %185, label %.backedge.backedge, label %._crit_edge438.us

.backedge.backedge:                               ; preds = %.loopexit.us, %.loopexit.us.thread
  br label %.backedge, !llvm.loop !17

.loopexit.us.thread:                              ; preds = %._crit_edge.us
  %.pre = shl i32 %.0405436.us, 3
  %186 = icmp slt i32 %.pre, %1
  br i1 %186, label %.backedge.backedge, label %.loopexit415.us

.lr.ph.us:                                        ; preds = %.backedge
  %187 = load ptr, ptr %7, align 8, !tbaa !18
  %188 = zext nneg i32 %.0405436.us to i64
  %189 = zext i32 %24 to i64
  %190 = lshr exact i64 %189, 1
  %191 = add nuw nsw i64 %190, 1
  %min.iters.check1066 = icmp ult i32 %24, 22
  br i1 %min.iters.check1066, label %scalar.ph1065.preheader, label %vector.memcheck930

scalar.ph1065.preheader:                          ; preds = %middle.block1064, %vector.memcheck930, %.lr.ph.us
  %indvars.iv455.ph = phi i64 [ 0, %vector.memcheck930 ], [ 0, %.lr.ph.us ], [ %ind.end1070, %middle.block1064 ]
  %invariant.gep1132 = getelementptr double, ptr %187, i64 %188
  br label %scalar.ph1065

vector.memcheck930:                               ; preds = %.lr.ph.us
  %scevgep931 = getelementptr i8, ptr %187, i64 8
  %192 = shl nuw nsw i64 %189, 3
  %scevgep932 = getelementptr i8, ptr %scevgep931, i64 %192
  %scevgep933 = getelementptr i8, ptr %187, i64 16
  %scevgep934 = getelementptr i8, ptr %scevgep933, i64 %192
  %193 = shl nuw nsw i64 %188, 4
  %scevgep935 = getelementptr i8, ptr %187, i64 %193
  %scevgep936 = getelementptr i8, ptr %187, i64 8
  %194 = add nuw nsw i64 %192, %193
  %scevgep937 = getelementptr i8, ptr %scevgep936, i64 %194
  %scevgep938 = getelementptr i8, ptr %scevgep936, i64 %193
  %scevgep939 = getelementptr i8, ptr %187, i64 16
  %scevgep940 = getelementptr i8, ptr %scevgep939, i64 %194
  %195 = shl nuw nsw i64 %188, 3
  %scevgep941 = getelementptr i8, ptr %187, i64 %195
  %scevgep942 = getelementptr i8, ptr %187, i64 8
  %196 = add nuw nsw i64 %192, %195
  %scevgep943 = getelementptr i8, ptr %scevgep942, i64 %196
  %scevgep944 = getelementptr i8, ptr %scevgep942, i64 %195
  %scevgep945 = getelementptr i8, ptr %187, i64 16
  %scevgep946 = getelementptr i8, ptr %scevgep945, i64 %196
  %197 = mul nuw nsw i64 %188, 24
  %scevgep947 = getelementptr i8, ptr %187, i64 %197
  %scevgep948 = getelementptr i8, ptr %187, i64 8
  %198 = add nuw nsw i64 %197, %192
  %scevgep949 = getelementptr i8, ptr %scevgep948, i64 %198
  %scevgep950 = getelementptr i8, ptr %scevgep948, i64 %197
  %scevgep951 = getelementptr i8, ptr %187, i64 16
  %scevgep952 = getelementptr i8, ptr %scevgep951, i64 %198
  %199 = insertelement <4 x ptr> poison, ptr %187, i64 0
  %200 = shufflevector <4 x ptr> %199, <4 x ptr> poison, <4 x i32> zeroinitializer
  %201 = insertelement <4 x ptr> poison, ptr %scevgep934, i64 0
  %202 = insertelement <4 x ptr> %201, ptr %scevgep937, i64 1
  %203 = insertelement <4 x ptr> %202, ptr %scevgep940, i64 2
  %204 = insertelement <4 x ptr> %203, ptr %scevgep943, i64 3
  %205 = icmp ult <4 x ptr> %200, %204
  %206 = insertelement <4 x ptr> poison, ptr %scevgep931, i64 0
  %207 = insertelement <4 x ptr> %206, ptr %scevgep935, i64 1
  %208 = insertelement <4 x ptr> %207, ptr %scevgep938, i64 2
  %209 = insertelement <4 x ptr> %208, ptr %scevgep941, i64 3
  %210 = insertelement <4 x ptr> poison, ptr %scevgep932, i64 0
  %211 = shufflevector <4 x ptr> %210, <4 x ptr> poison, <4 x i32> zeroinitializer
  %212 = icmp ult <4 x ptr> %209, %211
  %213 = and <4 x i1> %205, %212
  %bound0968 = icmp ult ptr %187, %scevgep946
  %bound1969 = icmp ult ptr %scevgep944, %scevgep932
  %found.conflict970 = and i1 %bound0968, %bound1969
  %bound0972 = icmp ult ptr %187, %scevgep949
  %bound1973 = icmp ult ptr %scevgep947, %scevgep932
  %found.conflict974 = and i1 %bound0972, %bound1973
  %bound0976 = icmp ult ptr %187, %scevgep952
  %bound1977 = icmp ult ptr %scevgep950, %scevgep932
  %found.conflict978 = and i1 %bound0976, %bound1977
  %bound0980 = icmp ult ptr %scevgep931, %scevgep937
  %bound1981 = icmp ult ptr %scevgep935, %scevgep934
  %found.conflict982 = and i1 %bound0980, %bound1981
  %bound0984 = icmp ult ptr %scevgep931, %scevgep940
  %bound1985 = icmp ult ptr %scevgep938, %scevgep934
  %found.conflict986 = and i1 %bound0984, %bound1985
  %bound0988 = icmp ult ptr %scevgep931, %scevgep943
  %bound1989 = icmp ult ptr %scevgep941, %scevgep934
  %found.conflict990 = and i1 %bound0988, %bound1989
  %bound0992 = icmp ult ptr %scevgep931, %scevgep946
  %bound1993 = icmp ult ptr %scevgep944, %scevgep934
  %found.conflict994 = and i1 %bound0992, %bound1993
  %bound0996 = icmp ult ptr %scevgep931, %scevgep949
  %bound1997 = icmp ult ptr %scevgep947, %scevgep934
  %found.conflict998 = and i1 %bound0996, %bound1997
  %bound01000 = icmp ult ptr %scevgep931, %scevgep952
  %bound11001 = icmp ult ptr %scevgep950, %scevgep934
  %found.conflict1002 = and i1 %bound01000, %bound11001
  %bound01004 = icmp ult ptr %scevgep935, %scevgep940
  %bound11005 = icmp ult ptr %scevgep938, %scevgep937
  %found.conflict1006 = and i1 %bound01004, %bound11005
  %bound01008 = icmp ult ptr %scevgep935, %scevgep943
  %bound11009 = icmp ult ptr %scevgep941, %scevgep937
  %found.conflict1010 = and i1 %bound01008, %bound11009
  %bound01012 = icmp ult ptr %scevgep935, %scevgep946
  %bound11013 = icmp ult ptr %scevgep944, %scevgep937
  %found.conflict1014 = and i1 %bound01012, %bound11013
  %bound01016 = icmp ult ptr %scevgep935, %scevgep949
  %bound11017 = icmp ult ptr %scevgep947, %scevgep937
  %found.conflict1018 = and i1 %bound01016, %bound11017
  %bound01020 = icmp ult ptr %scevgep935, %scevgep952
  %bound11021 = icmp ult ptr %scevgep950, %scevgep937
  %found.conflict1022 = and i1 %bound01020, %bound11021
  %bound01024 = icmp ult ptr %scevgep938, %scevgep943
  %bound11025 = icmp ult ptr %scevgep941, %scevgep940
  %found.conflict1026 = and i1 %bound01024, %bound11025
  %bound01028 = icmp ult ptr %scevgep938, %scevgep946
  %bound11029 = icmp ult ptr %scevgep944, %scevgep940
  %found.conflict1030 = and i1 %bound01028, %bound11029
  %bound01032 = icmp ult ptr %scevgep938, %scevgep949
  %bound11033 = icmp ult ptr %scevgep947, %scevgep940
  %found.conflict1034 = and i1 %bound01032, %bound11033
  %bound01036 = icmp ult ptr %scevgep938, %scevgep952
  %bound11037 = icmp ult ptr %scevgep950, %scevgep940
  %found.conflict1038 = and i1 %bound01036, %bound11037
  %bound01040 = icmp ult ptr %scevgep941, %scevgep946
  %bound11041 = icmp ult ptr %scevgep944, %scevgep943
  %found.conflict1042 = and i1 %bound01040, %bound11041
  %bound01044 = icmp ult ptr %scevgep941, %scevgep949
  %bound11045 = icmp ult ptr %scevgep947, %scevgep943
  %found.conflict1046 = and i1 %bound01044, %bound11045
  %bound01048 = icmp ult ptr %scevgep941, %scevgep952
  %bound11049 = icmp ult ptr %scevgep950, %scevgep943
  %found.conflict1050 = and i1 %bound01048, %bound11049
  %bound01052 = icmp ult ptr %scevgep944, %scevgep949
  %bound11053 = icmp ult ptr %scevgep947, %scevgep946
  %found.conflict1054 = and i1 %bound01052, %bound11053
  %bound01056 = icmp ult ptr %scevgep944, %scevgep952
  %bound11057 = icmp ult ptr %scevgep950, %scevgep946
  %found.conflict1058 = and i1 %bound01056, %bound11057
  %bound01060 = icmp ult ptr %scevgep947, %scevgep952
  %bound11061 = icmp ult ptr %scevgep950, %scevgep949
  %found.conflict1062 = and i1 %bound01060, %bound11061
  %214 = bitcast <4 x i1> %213 to i4
  %215 = icmp ne i4 %214, 0
  %op.rdx1094 = or i1 %215, %found.conflict970
  %op.rdx1095 = or i1 %found.conflict974, %found.conflict978
  %op.rdx1096 = or i1 %found.conflict982, %found.conflict986
  %op.rdx1097 = or i1 %found.conflict990, %found.conflict994
  %op.rdx1098 = or i1 %found.conflict998, %found.conflict1002
  %op.rdx1099 = or i1 %found.conflict1006, %found.conflict1010
  %op.rdx1100 = or i1 %found.conflict1014, %found.conflict1018
  %op.rdx1101 = or i1 %found.conflict1022, %found.conflict1026
  %op.rdx1102 = or i1 %found.conflict1030, %found.conflict1034
  %op.rdx1103 = or i1 %found.conflict1038, %found.conflict1042
  %op.rdx1104 = or i1 %found.conflict1046, %found.conflict1050
  %op.rdx1105 = or i1 %found.conflict1054, %found.conflict1058
  %op.rdx1106 = or i1 %op.rdx1094, %op.rdx1095
  %op.rdx1107 = or i1 %op.rdx1096, %op.rdx1097
  %op.rdx1108 = or i1 %op.rdx1098, %op.rdx1099
  %op.rdx1109 = or i1 %op.rdx1100, %op.rdx1101
  %op.rdx1110 = or i1 %op.rdx1102, %op.rdx1103
  %op.rdx1111 = or i1 %op.rdx1104, %op.rdx1105
  %op.rdx1112 = or i1 %op.rdx1106, %op.rdx1107
  %op.rdx1113 = or i1 %op.rdx1108, %op.rdx1109
  %op.rdx1114 = or i1 %op.rdx1110, %op.rdx1111
  %op.rdx1115 = or i1 %op.rdx1112, %op.rdx1113
  %op.rdx1116 = or i1 %op.rdx1114, %found.conflict1062
  %op.rdx1117 = or i1 %op.rdx1115, %op.rdx1116
  br i1 %op.rdx1117, label %scalar.ph1065.preheader, label %vector.ph1067

vector.ph1067:                                    ; preds = %vector.memcheck930
  %n.vec1069 = and i64 %191, 4294967294
  %ind.end1070 = shl nuw nsw i64 %n.vec1069, 1
  %invariant.gep = getelementptr i8, ptr %187, i64 -8
  %invariant.gep1126 = getelementptr i8, ptr %187, i64 -8
  %invariant.gep1128 = getelementptr i8, ptr %187, i64 -8
  %invariant.gep1130 = getelementptr i8, ptr %187, i64 -8
  br label %vector.body1072

vector.body1072:                                  ; preds = %vector.body1072, %vector.ph1067
  %index1073 = phi i64 [ 0, %vector.ph1067 ], [ %index.next1091, %vector.body1072 ]
  %offset.idx1074 = shl i64 %index1073, 1
  %216 = add nuw nsw i64 %offset.idx1074, %188
  %217 = add nuw nsw i64 %216, %188
  %218 = add nuw nsw i64 %217, %188
  %219 = getelementptr inbounds double, ptr %187, i64 %offset.idx1074
  %wide.vec1075 = load <4 x double>, ptr %219, align 8, !tbaa !5
  %strided.vec1076 = shufflevector <4 x double> %wide.vec1075, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec1077 = shufflevector <4 x double> %wide.vec1075, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %220 = getelementptr inbounds double, ptr %187, i64 %216
  %wide.vec1078 = load <4 x double>, ptr %220, align 8, !tbaa !5
  %strided.vec1079 = shufflevector <4 x double> %wide.vec1078, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec1080 = shufflevector <4 x double> %wide.vec1078, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %221 = fadd <2 x double> %strided.vec1076, %strided.vec1079
  %222 = or disjoint i64 %offset.idx1074, 1
  %223 = or disjoint i64 %216, 1
  %224 = fadd <2 x double> %strided.vec1077, %strided.vec1080
  %225 = fsub <2 x double> %strided.vec1076, %strided.vec1079
  %226 = fsub <2 x double> %strided.vec1077, %strided.vec1080
  %227 = getelementptr inbounds double, ptr %187, i64 %217
  %wide.vec1081 = load <4 x double>, ptr %227, align 8, !tbaa !5
  %strided.vec1082 = shufflevector <4 x double> %wide.vec1081, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec1083 = shufflevector <4 x double> %wide.vec1081, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %228 = getelementptr inbounds double, ptr %187, i64 %218
  %wide.vec1084 = load <4 x double>, ptr %228, align 8, !tbaa !5
  %strided.vec1085 = shufflevector <4 x double> %wide.vec1084, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec1086 = shufflevector <4 x double> %wide.vec1084, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %229 = fadd <2 x double> %strided.vec1082, %strided.vec1085
  %230 = or disjoint i64 %217, 1
  %231 = or disjoint i64 %218, 1
  %232 = fadd <2 x double> %strided.vec1083, %strided.vec1086
  %233 = fsub <2 x double> %strided.vec1082, %strided.vec1085
  %234 = fsub <2 x double> %strided.vec1083, %strided.vec1086
  %235 = fadd <2 x double> %221, %229
  %236 = fadd <2 x double> %224, %232
  %gep = getelementptr double, ptr %invariant.gep, i64 %222
  %interleaved.vec1087 = shufflevector <2 x double> %235, <2 x double> %236, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec1087, ptr %gep, align 8, !tbaa !5
  %237 = fsub <2 x double> %221, %229
  %238 = fsub <2 x double> %224, %232
  %gep1127 = getelementptr double, ptr %invariant.gep1126, i64 %230
  %interleaved.vec1088 = shufflevector <2 x double> %237, <2 x double> %238, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec1088, ptr %gep1127, align 8, !tbaa !5
  %239 = fsub <2 x double> %225, %234
  %240 = fadd <2 x double> %226, %233
  %gep1129 = getelementptr double, ptr %invariant.gep1128, i64 %223
  %interleaved.vec1089 = shufflevector <2 x double> %239, <2 x double> %240, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec1089, ptr %gep1129, align 8, !tbaa !5
  %241 = fadd <2 x double> %225, %234
  %242 = fsub <2 x double> %226, %233
  %gep1131 = getelementptr double, ptr %invariant.gep1130, i64 %231
  %interleaved.vec1090 = shufflevector <2 x double> %241, <2 x double> %242, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec1090, ptr %gep1131, align 8, !tbaa !5
  %index.next1091 = add nuw i64 %index1073, 2
  %243 = icmp eq i64 %index.next1091, %n.vec1069
  br i1 %243, label %middle.block1064, label %vector.body1072, !llvm.loop !20

middle.block1064:                                 ; preds = %vector.body1072
  %cmp.n1092 = icmp eq i64 %191, %n.vec1069
  br i1 %cmp.n1092, label %._crit_edge.us, label %scalar.ph1065.preheader

.lr.ph422.us:                                     ; preds = %46
  %244 = load ptr, ptr %7, align 8, !tbaa !18
  %245 = sext i32 %23 to i64
  %246 = sext i32 %.0405436.us to i64
  %247 = sext i32 %49 to i64
  %248 = sub nsw i64 %247, %245
  %249 = lshr exact i64 %248, 1
  %250 = add nuw i64 %249, 1
  %min.iters.check901 = icmp ult i64 %248, 34
  br i1 %min.iters.check901, label %scalar.ph900.preheader, label %vector.scevcheck726

scalar.ph900.preheader:                           ; preds = %middle.block899, %vector.memcheck763, %vector.scevcheck726, %.lr.ph422.us
  %indvars.iv458.ph = phi i64 [ %245, %vector.memcheck763 ], [ %245, %vector.scevcheck726 ], [ %245, %.lr.ph422.us ], [ %ind.end905, %middle.block899 ]
  br label %scalar.ph900

vector.scevcheck726:                              ; preds = %.lr.ph422.us
  %251 = sub nsw i64 %247, %245
  %252 = shl nsw i64 %245, 3
  %scevgep727 = getelementptr i8, ptr %244, i64 %252
  %mul.result729 = shl nsw i64 %251, 3
  %253 = getelementptr i8, ptr %scevgep727, i64 %mul.result729
  %scevgep731 = getelementptr i8, ptr %244, i64 8
  %scevgep732 = getelementptr i8, ptr %scevgep731, i64 %252
  %mul.result734 = shl nsw i64 %251, 3
  %mul.overflow735 = icmp ugt i64 %251, 2305843009213693950
  %254 = getelementptr i8, ptr %scevgep732, i64 %mul.result734
  %255 = shl nsw i64 %246, 4
  %256 = add nsw i64 %255, %252
  %scevgep736 = getelementptr i8, ptr %244, i64 %256
  %mul.result738 = shl nsw i64 %251, 3
  %257 = getelementptr i8, ptr %scevgep736, i64 %mul.result738
  %scevgep740 = getelementptr i8, ptr %244, i64 8
  %scevgep741 = getelementptr i8, ptr %scevgep740, i64 %256
  %mul.result743 = shl nsw i64 %251, 3
  %258 = getelementptr i8, ptr %scevgep741, i64 %mul.result743
  %259 = add nsw i64 %246, %245
  %260 = shl nsw i64 %259, 3
  %scevgep745 = getelementptr i8, ptr %244, i64 %260
  %mul.result747 = shl nsw i64 %251, 3
  %261 = getelementptr i8, ptr %scevgep745, i64 %mul.result747
  %scevgep749 = getelementptr i8, ptr %244, i64 8
  %scevgep750 = getelementptr i8, ptr %scevgep749, i64 %260
  %mul.result752 = shl nsw i64 %251, 3
  %262 = getelementptr i8, ptr %scevgep750, i64 %mul.result752
  %263 = mul nsw i64 %246, 24
  %264 = add nsw i64 %263, %252
  %scevgep754 = getelementptr i8, ptr %244, i64 %264
  %mul.result756 = shl nsw i64 %251, 3
  %265 = getelementptr i8, ptr %scevgep754, i64 %mul.result756
  %scevgep758 = getelementptr i8, ptr %244, i64 8
  %scevgep759 = getelementptr i8, ptr %scevgep758, i64 %264
  %mul.result761 = shl nsw i64 %251, 3
  %266 = getelementptr i8, ptr %scevgep759, i64 %mul.result761
  %267 = insertelement <8 x ptr> poison, ptr %254, i64 0
  %268 = insertelement <8 x ptr> %267, ptr %253, i64 1
  %269 = insertelement <8 x ptr> %268, ptr %257, i64 2
  %270 = insertelement <8 x ptr> %269, ptr %258, i64 3
  %271 = insertelement <8 x ptr> %270, ptr %261, i64 4
  %272 = insertelement <8 x ptr> %271, ptr %262, i64 5
  %273 = insertelement <8 x ptr> %272, ptr %265, i64 6
  %274 = insertelement <8 x ptr> %273, ptr %266, i64 7
  %275 = insertelement <8 x ptr> poison, ptr %scevgep732, i64 0
  %276 = insertelement <8 x ptr> %275, ptr %scevgep727, i64 1
  %277 = insertelement <8 x ptr> %276, ptr %scevgep736, i64 2
  %278 = insertelement <8 x ptr> %277, ptr %scevgep741, i64 3
  %279 = insertelement <8 x ptr> %278, ptr %scevgep745, i64 4
  %280 = insertelement <8 x ptr> %279, ptr %scevgep750, i64 5
  %281 = insertelement <8 x ptr> %280, ptr %scevgep754, i64 6
  %282 = insertelement <8 x ptr> %281, ptr %scevgep759, i64 7
  %283 = icmp ult <8 x ptr> %274, %282
  %284 = bitcast <8 x i1> %283 to i8
  %285 = icmp ne i8 %284, 0
  %op.rdx1093 = or i1 %285, %mul.overflow735
  br i1 %op.rdx1093, label %scalar.ph900.preheader, label %vector.memcheck763

vector.memcheck763:                               ; preds = %vector.scevcheck726
  %286 = shl nsw i64 %245, 3
  %scevgep764 = getelementptr i8, ptr %244, i64 %286
  %scevgep765 = getelementptr i8, ptr %244, i64 8
  %287 = sub nsw i64 %247, %245
  %288 = shl nsw i64 %287, 3
  %289 = shl nsw i64 %247, 3
  %scevgep766 = getelementptr i8, ptr %scevgep765, i64 %289
  %scevgep767 = getelementptr i8, ptr %scevgep765, i64 %286
  %scevgep768 = getelementptr i8, ptr %244, i64 16
  %scevgep769 = getelementptr i8, ptr %scevgep768, i64 %289
  %290 = shl nsw i64 %246, 4
  %291 = add nsw i64 %290, %286
  %scevgep770 = getelementptr i8, ptr %244, i64 %291
  %scevgep771 = getelementptr i8, ptr %244, i64 8
  %292 = add nsw i64 %288, %290
  %293 = add nsw i64 %292, %286
  %scevgep772 = getelementptr i8, ptr %scevgep771, i64 %293
  %scevgep773 = getelementptr i8, ptr %scevgep771, i64 %291
  %scevgep774 = getelementptr i8, ptr %244, i64 16
  %scevgep775 = getelementptr i8, ptr %scevgep774, i64 %293
  %294 = add nsw i64 %246, %245
  %295 = shl nsw i64 %294, 3
  %scevgep776 = getelementptr i8, ptr %244, i64 %295
  %scevgep777 = getelementptr i8, ptr %244, i64 8
  %296 = add nsw i64 %288, %295
  %scevgep778 = getelementptr i8, ptr %scevgep777, i64 %296
  %scevgep779 = getelementptr i8, ptr %scevgep777, i64 %295
  %scevgep780 = getelementptr i8, ptr %244, i64 16
  %scevgep781 = getelementptr i8, ptr %scevgep780, i64 %296
  %297 = mul nsw i64 %246, 24
  %298 = add nsw i64 %297, %286
  %scevgep782 = getelementptr i8, ptr %244, i64 %298
  %scevgep783 = getelementptr i8, ptr %244, i64 8
  %299 = add nsw i64 %297, %288
  %300 = add nsw i64 %299, %286
  %scevgep784 = getelementptr i8, ptr %scevgep783, i64 %300
  %scevgep785 = getelementptr i8, ptr %scevgep783, i64 %298
  %scevgep786 = getelementptr i8, ptr %244, i64 16
  %scevgep787 = getelementptr i8, ptr %scevgep786, i64 %300
  %bound0788 = icmp ult ptr %scevgep764, %scevgep769
  %bound1789 = icmp ult ptr %scevgep767, %scevgep766
  %found.conflict790 = and i1 %bound0788, %bound1789
  %bound0791 = icmp ult ptr %scevgep764, %scevgep772
  %bound1792 = icmp ult ptr %scevgep770, %scevgep766
  %found.conflict793 = and i1 %bound0791, %bound1792
  %conflict.rdx794 = or i1 %found.conflict790, %found.conflict793
  %bound0795 = icmp ult ptr %scevgep764, %scevgep775
  %bound1796 = icmp ult ptr %scevgep773, %scevgep766
  %found.conflict797 = and i1 %bound0795, %bound1796
  %conflict.rdx798 = or i1 %conflict.rdx794, %found.conflict797
  %bound0799 = icmp ult ptr %scevgep764, %scevgep778
  %bound1800 = icmp ult ptr %scevgep776, %scevgep766
  %found.conflict801 = and i1 %bound0799, %bound1800
  %conflict.rdx802 = or i1 %conflict.rdx798, %found.conflict801
  %bound0803 = icmp ult ptr %scevgep764, %scevgep781
  %bound1804 = icmp ult ptr %scevgep779, %scevgep766
  %found.conflict805 = and i1 %bound0803, %bound1804
  %conflict.rdx806 = or i1 %conflict.rdx802, %found.conflict805
  %bound0807 = icmp ult ptr %scevgep764, %scevgep784
  %bound1808 = icmp ult ptr %scevgep782, %scevgep766
  %found.conflict809 = and i1 %bound0807, %bound1808
  %conflict.rdx810 = or i1 %conflict.rdx806, %found.conflict809
  %bound0811 = icmp ult ptr %scevgep764, %scevgep787
  %bound1812 = icmp ult ptr %scevgep785, %scevgep766
  %found.conflict813 = and i1 %bound0811, %bound1812
  %conflict.rdx814 = or i1 %conflict.rdx810, %found.conflict813
  %bound0815 = icmp ult ptr %scevgep767, %scevgep772
  %bound1816 = icmp ult ptr %scevgep770, %scevgep769
  %found.conflict817 = and i1 %bound0815, %bound1816
  %conflict.rdx818 = or i1 %conflict.rdx814, %found.conflict817
  %bound0819 = icmp ult ptr %scevgep767, %scevgep775
  %bound1820 = icmp ult ptr %scevgep773, %scevgep769
  %found.conflict821 = and i1 %bound0819, %bound1820
  %conflict.rdx822 = or i1 %conflict.rdx818, %found.conflict821
  %bound0823 = icmp ult ptr %scevgep767, %scevgep778
  %bound1824 = icmp ult ptr %scevgep776, %scevgep769
  %found.conflict825 = and i1 %bound0823, %bound1824
  %conflict.rdx826 = or i1 %conflict.rdx822, %found.conflict825
  %bound0827 = icmp ult ptr %scevgep767, %scevgep781
  %bound1828 = icmp ult ptr %scevgep779, %scevgep769
  %found.conflict829 = and i1 %bound0827, %bound1828
  %conflict.rdx830 = or i1 %conflict.rdx826, %found.conflict829
  %bound0831 = icmp ult ptr %scevgep767, %scevgep784
  %bound1832 = icmp ult ptr %scevgep782, %scevgep769
  %found.conflict833 = and i1 %bound0831, %bound1832
  %conflict.rdx834 = or i1 %conflict.rdx830, %found.conflict833
  %bound0835 = icmp ult ptr %scevgep767, %scevgep787
  %bound1836 = icmp ult ptr %scevgep785, %scevgep769
  %found.conflict837 = and i1 %bound0835, %bound1836
  %conflict.rdx838 = or i1 %conflict.rdx834, %found.conflict837
  %bound0839 = icmp ult ptr %scevgep770, %scevgep775
  %bound1840 = icmp ult ptr %scevgep773, %scevgep772
  %found.conflict841 = and i1 %bound0839, %bound1840
  %conflict.rdx842 = or i1 %conflict.rdx838, %found.conflict841
  %bound0843 = icmp ult ptr %scevgep770, %scevgep778
  %bound1844 = icmp ult ptr %scevgep776, %scevgep772
  %found.conflict845 = and i1 %bound0843, %bound1844
  %conflict.rdx846 = or i1 %conflict.rdx842, %found.conflict845
  %bound0847 = icmp ult ptr %scevgep770, %scevgep781
  %bound1848 = icmp ult ptr %scevgep779, %scevgep772
  %found.conflict849 = and i1 %bound0847, %bound1848
  %conflict.rdx850 = or i1 %conflict.rdx846, %found.conflict849
  %bound0851 = icmp ult ptr %scevgep770, %scevgep784
  %bound1852 = icmp ult ptr %scevgep782, %scevgep772
  %found.conflict853 = and i1 %bound0851, %bound1852
  %conflict.rdx854 = or i1 %conflict.rdx850, %found.conflict853
  %bound0855 = icmp ult ptr %scevgep770, %scevgep787
  %bound1856 = icmp ult ptr %scevgep785, %scevgep772
  %found.conflict857 = and i1 %bound0855, %bound1856
  %conflict.rdx858 = or i1 %conflict.rdx854, %found.conflict857
  %bound0859 = icmp ult ptr %scevgep773, %scevgep778
  %bound1860 = icmp ult ptr %scevgep776, %scevgep775
  %found.conflict861 = and i1 %bound0859, %bound1860
  %conflict.rdx862 = or i1 %conflict.rdx858, %found.conflict861
  %bound0863 = icmp ult ptr %scevgep773, %scevgep781
  %bound1864 = icmp ult ptr %scevgep779, %scevgep775
  %found.conflict865 = and i1 %bound0863, %bound1864
  %conflict.rdx866 = or i1 %conflict.rdx862, %found.conflict865
  %bound0867 = icmp ult ptr %scevgep773, %scevgep784
  %bound1868 = icmp ult ptr %scevgep782, %scevgep775
  %found.conflict869 = and i1 %bound0867, %bound1868
  %conflict.rdx870 = or i1 %conflict.rdx866, %found.conflict869
  %bound0871 = icmp ult ptr %scevgep773, %scevgep787
  %bound1872 = icmp ult ptr %scevgep785, %scevgep775
  %found.conflict873 = and i1 %bound0871, %bound1872
  %conflict.rdx874 = or i1 %conflict.rdx870, %found.conflict873
  %bound0875 = icmp ult ptr %scevgep776, %scevgep781
  %bound1876 = icmp ult ptr %scevgep779, %scevgep778
  %found.conflict877 = and i1 %bound0875, %bound1876
  %conflict.rdx878 = or i1 %conflict.rdx874, %found.conflict877
  %bound0879 = icmp ult ptr %scevgep776, %scevgep784
  %bound1880 = icmp ult ptr %scevgep782, %scevgep778
  %found.conflict881 = and i1 %bound0879, %bound1880
  %conflict.rdx882 = or i1 %conflict.rdx878, %found.conflict881
  %bound0883 = icmp ult ptr %scevgep776, %scevgep787
  %bound1884 = icmp ult ptr %scevgep785, %scevgep778
  %found.conflict885 = and i1 %bound0883, %bound1884
  %conflict.rdx886 = or i1 %conflict.rdx882, %found.conflict885
  %bound0887 = icmp ult ptr %scevgep779, %scevgep784
  %bound1888 = icmp ult ptr %scevgep782, %scevgep781
  %found.conflict889 = and i1 %bound0887, %bound1888
  %conflict.rdx890 = or i1 %conflict.rdx886, %found.conflict889
  %bound0891 = icmp ult ptr %scevgep779, %scevgep787
  %bound1892 = icmp ult ptr %scevgep785, %scevgep781
  %found.conflict893 = and i1 %bound0891, %bound1892
  %conflict.rdx894 = or i1 %conflict.rdx890, %found.conflict893
  %bound0895 = icmp ult ptr %scevgep782, %scevgep787
  %bound1896 = icmp ult ptr %scevgep785, %scevgep784
  %found.conflict897 = and i1 %bound0895, %bound1896
  %conflict.rdx898 = or i1 %conflict.rdx894, %found.conflict897
  br i1 %conflict.rdx898, label %scalar.ph900.preheader, label %vector.ph902

vector.ph902:                                     ; preds = %vector.memcheck763
  %n.vec904 = and i64 %250, -2
  %301 = shl i64 %n.vec904, 1
  %ind.end905 = add i64 %301, %245
  %broadcast.splatinsert924 = insertelement <2 x double> poison, double %47, i64 0
  %broadcast.splat925 = shufflevector <2 x double> %broadcast.splatinsert924, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1134 = getelementptr i8, ptr %244, i64 -8
  %invariant.gep1136 = getelementptr i8, ptr %244, i64 -8
  %invariant.gep1138 = getelementptr i8, ptr %244, i64 -8
  %invariant.gep1140 = getelementptr i8, ptr %244, i64 -8
  br label %vector.body907

vector.body907:                                   ; preds = %vector.body907, %vector.ph902
  %index908 = phi i64 [ 0, %vector.ph902 ], [ %index.next928, %vector.body907 ]
  %302 = shl i64 %index908, 1
  %offset.idx909 = add i64 %302, %245
  %303 = add nsw i64 %offset.idx909, %246
  %304 = add nsw i64 %303, %246
  %305 = add nsw i64 %304, %246
  %306 = getelementptr inbounds double, ptr %244, i64 %offset.idx909
  %wide.vec910 = load <4 x double>, ptr %306, align 8, !tbaa !5
  %strided.vec911 = shufflevector <4 x double> %wide.vec910, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec912 = shufflevector <4 x double> %wide.vec910, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %307 = getelementptr inbounds double, ptr %244, i64 %303
  %wide.vec913 = load <4 x double>, ptr %307, align 8, !tbaa !5
  %strided.vec914 = shufflevector <4 x double> %wide.vec913, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec915 = shufflevector <4 x double> %wide.vec913, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %308 = fadd <2 x double> %strided.vec911, %strided.vec914
  %309 = or disjoint i64 %offset.idx909, 1
  %310 = or disjoint i64 %303, 1
  %311 = fadd <2 x double> %strided.vec912, %strided.vec915
  %312 = fsub <2 x double> %strided.vec911, %strided.vec914
  %313 = fsub <2 x double> %strided.vec912, %strided.vec915
  %314 = getelementptr inbounds double, ptr %244, i64 %304
  %wide.vec916 = load <4 x double>, ptr %314, align 8, !tbaa !5
  %strided.vec917 = shufflevector <4 x double> %wide.vec916, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec918 = shufflevector <4 x double> %wide.vec916, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %315 = getelementptr inbounds double, ptr %244, i64 %305
  %wide.vec919 = load <4 x double>, ptr %315, align 8, !tbaa !5
  %strided.vec920 = shufflevector <4 x double> %wide.vec919, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec921 = shufflevector <4 x double> %wide.vec919, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %316 = fadd <2 x double> %strided.vec917, %strided.vec920
  %317 = or disjoint i64 %304, 1
  %318 = or disjoint i64 %305, 1
  %319 = fadd <2 x double> %strided.vec918, %strided.vec921
  %320 = fsub <2 x double> %strided.vec917, %strided.vec920
  %321 = fsub <2 x double> %strided.vec918, %strided.vec921
  %322 = fadd <2 x double> %308, %316
  %323 = fadd <2 x double> %311, %319
  %gep1135 = getelementptr double, ptr %invariant.gep1134, i64 %309
  %interleaved.vec922 = shufflevector <2 x double> %322, <2 x double> %323, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec922, ptr %gep1135, align 8, !tbaa !5
  %324 = fsub <2 x double> %319, %311
  %325 = fsub <2 x double> %308, %316
  %gep1137 = getelementptr double, ptr %invariant.gep1136, i64 %317
  %interleaved.vec923 = shufflevector <2 x double> %324, <2 x double> %325, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec923, ptr %gep1137, align 8, !tbaa !5
  %326 = fsub <2 x double> %312, %321
  %327 = fadd <2 x double> %313, %320
  %328 = fsub <2 x double> %326, %327
  %329 = fmul <2 x double> %broadcast.splat925, %328
  %330 = fadd <2 x double> %327, %326
  %331 = fmul <2 x double> %broadcast.splat925, %330
  %gep1139 = getelementptr double, ptr %invariant.gep1138, i64 %310
  %interleaved.vec926 = shufflevector <2 x double> %329, <2 x double> %331, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec926, ptr %gep1139, align 8, !tbaa !5
  %332 = fadd <2 x double> %312, %321
  %333 = fsub <2 x double> %320, %313
  %334 = fsub <2 x double> %333, %332
  %335 = fmul <2 x double> %broadcast.splat925, %334
  %336 = fadd <2 x double> %333, %332
  %337 = fmul <2 x double> %broadcast.splat925, %336
  %gep1141 = getelementptr double, ptr %invariant.gep1140, i64 %318
  %interleaved.vec927 = shufflevector <2 x double> %335, <2 x double> %337, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec927, ptr %gep1141, align 8, !tbaa !5
  %index.next928 = add nuw i64 %index908, 2
  %338 = icmp eq i64 %index.next928, %n.vec904
  br i1 %338, label %middle.block899, label %vector.body907, !llvm.loop !22

middle.block899:                                  ; preds = %vector.body907
  %cmp.n929 = icmp eq i64 %250, %n.vec904
  br i1 %cmp.n929, label %._crit_edge423.us, label %scalar.ph900.preheader

.lr.ph427.us:                                     ; preds = %104
  %339 = load ptr, ptr %7, align 8, !tbaa !18
  %340 = fneg double %147
  %341 = fneg double %152
  %min.iters.check684 = icmp ult i64 %111, 22
  br i1 %min.iters.check684, label %scalar.ph683.preheader, label %vector.scevcheck

scalar.ph683.preheader:                           ; preds = %middle.block682, %vector.memcheck554, %vector.scevcheck, %.lr.ph427.us
  %indvars.iv463.ph = phi i64 [ %indvars.iv461, %vector.memcheck554 ], [ %indvars.iv461, %vector.scevcheck ], [ %indvars.iv461, %.lr.ph427.us ], [ %ind.end688, %middle.block682 ]
  %invariant.gep1150 = getelementptr double, ptr %339, i64 %465
  %342 = insertelement <2 x double> poison, double %147, i64 0
  %343 = insertelement <2 x double> %342, double %340, i64 1
  %344 = insertelement <2 x double> poison, double %143, i64 0
  %345 = shufflevector <2 x double> %344, <2 x double> poison, <2 x i32> zeroinitializer
  %346 = insertelement <2 x double> poison, double %151, i64 0
  %347 = insertelement <2 x double> %346, double %139, i64 1
  %348 = insertelement <2 x double> poison, double %134, i64 0
  %349 = shufflevector <2 x double> %348, <2 x double> poison, <2 x i32> zeroinitializer
  %350 = insertelement <2 x double> poison, double %341, i64 0
  %351 = insertelement <2 x double> %350, double %152, i64 1
  %352 = insertelement <2 x double> poison, double %150, i64 0
  %353 = shufflevector <2 x double> %352, <2 x double> poison, <2 x i32> zeroinitializer
  br label %scalar.ph683

vector.scevcheck:                                 ; preds = %.lr.ph427.us
  %354 = getelementptr i8, ptr %339, i64 %472
  %scevgep525 = getelementptr i8, ptr %354, i64 %131
  %mul.result = shl i64 %130, 3
  %355 = getelementptr i8, ptr %scevgep525, i64 %mul.result
  %356 = getelementptr i8, ptr %339, i64 %474
  %357 = getelementptr i8, ptr %356, i64 %475
  %scevgep526 = getelementptr i8, ptr %357, i64 %131
  %mul.result528 = shl i64 %130, 3
  %mul.overflow529 = icmp ugt i64 %130, 2305843009213693950
  %358 = getelementptr i8, ptr %scevgep526, i64 %mul.result528
  %359 = getelementptr i8, ptr %339, i64 %478
  %scevgep530 = getelementptr i8, ptr %359, i64 %131
  %mul.result532 = shl i64 %130, 3
  %360 = getelementptr i8, ptr %scevgep530, i64 %mul.result532
  %361 = getelementptr i8, ptr %339, i64 %480
  %scevgep534 = getelementptr i8, ptr %361, i64 %131
  %mul.result536 = shl i64 %130, 3
  %362 = getelementptr i8, ptr %scevgep534, i64 %mul.result536
  %363 = getelementptr i8, ptr %339, i64 %484
  %scevgep538 = getelementptr i8, ptr %363, i64 %131
  %mul.result540 = shl i64 %130, 3
  %364 = getelementptr i8, ptr %scevgep538, i64 %mul.result540
  %365 = getelementptr i8, ptr %339, i64 %485
  %366 = getelementptr i8, ptr %365, i64 %475
  %scevgep542 = getelementptr i8, ptr %366, i64 %131
  %mul.result544 = shl i64 %130, 3
  %367 = getelementptr i8, ptr %scevgep542, i64 %mul.result544
  %368 = getelementptr i8, ptr %339, i64 %486
  %scevgep546 = getelementptr i8, ptr %368, i64 %131
  %mul.result548 = shl i64 %130, 3
  %369 = getelementptr i8, ptr %scevgep546, i64 %mul.result548
  %370 = getelementptr i8, ptr %339, i64 %475
  %scevgep550 = getelementptr i8, ptr %370, i64 %131
  %mul.result552 = shl i64 %130, 3
  %371 = getelementptr i8, ptr %scevgep550, i64 %mul.result552
  %372 = insertelement <8 x ptr> poison, ptr %358, i64 0
  %373 = insertelement <8 x ptr> %372, ptr %355, i64 1
  %374 = insertelement <8 x ptr> %373, ptr %360, i64 2
  %375 = insertelement <8 x ptr> %374, ptr %362, i64 3
  %376 = insertelement <8 x ptr> %375, ptr %364, i64 4
  %377 = insertelement <8 x ptr> %376, ptr %367, i64 5
  %378 = insertelement <8 x ptr> %377, ptr %369, i64 6
  %379 = insertelement <8 x ptr> %378, ptr %371, i64 7
  %380 = insertelement <8 x ptr> poison, ptr %scevgep526, i64 0
  %381 = insertelement <8 x ptr> %380, ptr %scevgep525, i64 1
  %382 = insertelement <8 x ptr> %381, ptr %scevgep530, i64 2
  %383 = insertelement <8 x ptr> %382, ptr %scevgep534, i64 3
  %384 = insertelement <8 x ptr> %383, ptr %scevgep538, i64 4
  %385 = insertelement <8 x ptr> %384, ptr %scevgep542, i64 5
  %386 = insertelement <8 x ptr> %385, ptr %scevgep546, i64 6
  %387 = insertelement <8 x ptr> %386, ptr %scevgep550, i64 7
  %388 = icmp ult <8 x ptr> %379, %387
  %389 = bitcast <8 x i1> %388 to i8
  %390 = icmp ne i8 %389, 0
  %op.rdx = or i1 %390, %mul.overflow529
  br i1 %op.rdx, label %scalar.ph683.preheader, label %vector.memcheck554

vector.memcheck554:                               ; preds = %vector.scevcheck
  %391 = getelementptr i8, ptr %339, i64 %487
  %scevgep555 = getelementptr i8, ptr %391, i64 %114
  %392 = getelementptr i8, ptr %339, i64 %115
  %scevgep556 = getelementptr i8, ptr %392, i64 %123
  %scevgep557 = getelementptr i8, ptr %339, i64 %115
  %393 = getelementptr i8, ptr %339, i64 %492
  %394 = getelementptr i8, ptr %393, i64 %114
  %scevgep558 = getelementptr i8, ptr %394, i64 %123
  %395 = getelementptr i8, ptr %339, i64 %493
  %396 = getelementptr i8, ptr %395, i64 %487
  %scevgep559 = getelementptr i8, ptr %396, i64 %114
  %397 = getelementptr i8, ptr %339, i64 %494
  %398 = getelementptr i8, ptr %397, i64 %487
  %399 = getelementptr i8, ptr %398, i64 %114
  %scevgep560 = getelementptr i8, ptr %399, i64 %123
  %400 = getelementptr i8, ptr %339, i64 %498
  %scevgep561 = getelementptr i8, ptr %400, i64 %114
  %401 = getelementptr i8, ptr %339, i64 %499
  %402 = getelementptr i8, ptr %401, i64 %487
  %403 = getelementptr i8, ptr %402, i64 %114
  %scevgep562 = getelementptr i8, ptr %403, i64 %123
  %404 = getelementptr i8, ptr %339, i64 %501
  %scevgep563 = getelementptr i8, ptr %404, i64 %114
  %405 = getelementptr i8, ptr %339, i64 %502
  %406 = getelementptr i8, ptr %405, i64 %114
  %scevgep564 = getelementptr i8, ptr %406, i64 %123
  %407 = getelementptr i8, ptr %339, i64 %505
  %scevgep565 = getelementptr i8, ptr %407, i64 %114
  %408 = getelementptr i8, ptr %339, i64 %501
  %409 = getelementptr i8, ptr %408, i64 16
  %410 = getelementptr i8, ptr %409, i64 %114
  %scevgep566 = getelementptr i8, ptr %410, i64 %123
  %411 = getelementptr i8, ptr %339, i64 %506
  %412 = getelementptr i8, ptr %411, i64 %487
  %scevgep567 = getelementptr i8, ptr %412, i64 %114
  %413 = getelementptr i8, ptr %339, i64 %507
  %414 = getelementptr i8, ptr %413, i64 %487
  %415 = getelementptr i8, ptr %414, i64 %114
  %scevgep568 = getelementptr i8, ptr %415, i64 %123
  %416 = getelementptr i8, ptr %339, i64 %511
  %scevgep569 = getelementptr i8, ptr %416, i64 %114
  %417 = getelementptr i8, ptr %339, i64 %506
  %418 = getelementptr i8, ptr %417, i64 16
  %419 = getelementptr i8, ptr %418, i64 %487
  %420 = getelementptr i8, ptr %419, i64 %114
  %scevgep570 = getelementptr i8, ptr %420, i64 %123
  %bound0571 = icmp ult ptr %scevgep555, %scevgep558
  %bound1572 = icmp ult ptr %scevgep557, %scevgep556
  %found.conflict573 = and i1 %bound0571, %bound1572
  %bound0574 = icmp ult ptr %scevgep555, %scevgep560
  %bound1575 = icmp ult ptr %scevgep559, %scevgep556
  %found.conflict576 = and i1 %bound0574, %bound1575
  %conflict.rdx577 = or i1 %found.conflict573, %found.conflict576
  %bound0578 = icmp ult ptr %scevgep555, %scevgep562
  %bound1579 = icmp ult ptr %scevgep561, %scevgep556
  %found.conflict580 = and i1 %bound0578, %bound1579
  %conflict.rdx581 = or i1 %conflict.rdx577, %found.conflict580
  %bound0582 = icmp ult ptr %scevgep555, %scevgep564
  %bound1583 = icmp ult ptr %scevgep563, %scevgep556
  %found.conflict584 = and i1 %bound0582, %bound1583
  %conflict.rdx585 = or i1 %conflict.rdx581, %found.conflict584
  %bound0586 = icmp ult ptr %scevgep555, %scevgep566
  %bound1587 = icmp ult ptr %scevgep565, %scevgep556
  %found.conflict588 = and i1 %bound0586, %bound1587
  %conflict.rdx589 = or i1 %conflict.rdx585, %found.conflict588
  %bound0590 = icmp ult ptr %scevgep555, %scevgep568
  %bound1591 = icmp ult ptr %scevgep567, %scevgep556
  %found.conflict592 = and i1 %bound0590, %bound1591
  %conflict.rdx593 = or i1 %conflict.rdx589, %found.conflict592
  %bound0594 = icmp ult ptr %scevgep555, %scevgep570
  %bound1595 = icmp ult ptr %scevgep569, %scevgep556
  %found.conflict596 = and i1 %bound0594, %bound1595
  %conflict.rdx597 = or i1 %conflict.rdx593, %found.conflict596
  %bound0598 = icmp ult ptr %scevgep557, %scevgep560
  %bound1599 = icmp ult ptr %scevgep559, %scevgep558
  %found.conflict600 = and i1 %bound0598, %bound1599
  %conflict.rdx601 = or i1 %conflict.rdx597, %found.conflict600
  %bound0602 = icmp ult ptr %scevgep557, %scevgep562
  %bound1603 = icmp ult ptr %scevgep561, %scevgep558
  %found.conflict604 = and i1 %bound0602, %bound1603
  %conflict.rdx605 = or i1 %conflict.rdx601, %found.conflict604
  %bound0606 = icmp ult ptr %scevgep557, %scevgep564
  %bound1607 = icmp ult ptr %scevgep563, %scevgep558
  %found.conflict608 = and i1 %bound0606, %bound1607
  %conflict.rdx609 = or i1 %conflict.rdx605, %found.conflict608
  %bound0610 = icmp ult ptr %scevgep557, %scevgep566
  %bound1611 = icmp ult ptr %scevgep565, %scevgep558
  %found.conflict612 = and i1 %bound0610, %bound1611
  %conflict.rdx613 = or i1 %conflict.rdx609, %found.conflict612
  %bound0614 = icmp ult ptr %scevgep557, %scevgep568
  %bound1615 = icmp ult ptr %scevgep567, %scevgep558
  %found.conflict616 = and i1 %bound0614, %bound1615
  %conflict.rdx617 = or i1 %conflict.rdx613, %found.conflict616
  %bound0618 = icmp ult ptr %scevgep557, %scevgep570
  %bound1619 = icmp ult ptr %scevgep569, %scevgep558
  %found.conflict620 = and i1 %bound0618, %bound1619
  %conflict.rdx621 = or i1 %conflict.rdx617, %found.conflict620
  %bound0622 = icmp ult ptr %scevgep559, %scevgep562
  %bound1623 = icmp ult ptr %scevgep561, %scevgep560
  %found.conflict624 = and i1 %bound0622, %bound1623
  %conflict.rdx625 = or i1 %conflict.rdx621, %found.conflict624
  %bound0626 = icmp ult ptr %scevgep559, %scevgep564
  %bound1627 = icmp ult ptr %scevgep563, %scevgep560
  %found.conflict628 = and i1 %bound0626, %bound1627
  %conflict.rdx629 = or i1 %conflict.rdx625, %found.conflict628
  %bound0630 = icmp ult ptr %scevgep559, %scevgep566
  %bound1631 = icmp ult ptr %scevgep565, %scevgep560
  %found.conflict632 = and i1 %bound0630, %bound1631
  %conflict.rdx633 = or i1 %conflict.rdx629, %found.conflict632
  %bound0634 = icmp ult ptr %scevgep559, %scevgep568
  %bound1635 = icmp ult ptr %scevgep567, %scevgep560
  %found.conflict636 = and i1 %bound0634, %bound1635
  %conflict.rdx637 = or i1 %conflict.rdx633, %found.conflict636
  %bound0638 = icmp ult ptr %scevgep559, %scevgep570
  %bound1639 = icmp ult ptr %scevgep569, %scevgep560
  %found.conflict640 = and i1 %bound0638, %bound1639
  %conflict.rdx641 = or i1 %conflict.rdx637, %found.conflict640
  %bound0642 = icmp ult ptr %scevgep561, %scevgep564
  %bound1643 = icmp ult ptr %scevgep563, %scevgep562
  %found.conflict644 = and i1 %bound0642, %bound1643
  %conflict.rdx645 = or i1 %conflict.rdx641, %found.conflict644
  %bound0646 = icmp ult ptr %scevgep561, %scevgep566
  %bound1647 = icmp ult ptr %scevgep565, %scevgep562
  %found.conflict648 = and i1 %bound0646, %bound1647
  %conflict.rdx649 = or i1 %conflict.rdx645, %found.conflict648
  %bound0650 = icmp ult ptr %scevgep561, %scevgep568
  %bound1651 = icmp ult ptr %scevgep567, %scevgep562
  %found.conflict652 = and i1 %bound0650, %bound1651
  %conflict.rdx653 = or i1 %conflict.rdx649, %found.conflict652
  %bound0654 = icmp ult ptr %scevgep561, %scevgep570
  %bound1655 = icmp ult ptr %scevgep569, %scevgep562
  %found.conflict656 = and i1 %bound0654, %bound1655
  %conflict.rdx657 = or i1 %conflict.rdx653, %found.conflict656
  %bound0658 = icmp ult ptr %scevgep563, %scevgep566
  %bound1659 = icmp ult ptr %scevgep565, %scevgep564
  %found.conflict660 = and i1 %bound0658, %bound1659
  %conflict.rdx661 = or i1 %conflict.rdx657, %found.conflict660
  %bound0662 = icmp ult ptr %scevgep563, %scevgep568
  %bound1663 = icmp ult ptr %scevgep567, %scevgep564
  %found.conflict664 = and i1 %bound0662, %bound1663
  %conflict.rdx665 = or i1 %conflict.rdx661, %found.conflict664
  %bound0666 = icmp ult ptr %scevgep563, %scevgep570
  %bound1667 = icmp ult ptr %scevgep569, %scevgep564
  %found.conflict668 = and i1 %bound0666, %bound1667
  %conflict.rdx669 = or i1 %conflict.rdx665, %found.conflict668
  %bound0670 = icmp ult ptr %scevgep565, %scevgep568
  %bound1671 = icmp ult ptr %scevgep567, %scevgep566
  %found.conflict672 = and i1 %bound0670, %bound1671
  %conflict.rdx673 = or i1 %conflict.rdx669, %found.conflict672
  %bound0674 = icmp ult ptr %scevgep565, %scevgep570
  %bound1675 = icmp ult ptr %scevgep569, %scevgep566
  %found.conflict676 = and i1 %bound0674, %bound1675
  %conflict.rdx677 = or i1 %conflict.rdx673, %found.conflict676
  %bound0678 = icmp ult ptr %scevgep567, %scevgep570
  %bound1679 = icmp ult ptr %scevgep569, %scevgep568
  %found.conflict680 = and i1 %bound0678, %bound1679
  %conflict.rdx681 = or i1 %conflict.rdx677, %found.conflict680
  br i1 %conflict.rdx681, label %scalar.ph683.preheader, label %vector.ph685

vector.ph685:                                     ; preds = %vector.memcheck554
  %n.vec687 = and i64 %113, -2
  %421 = shl i64 %n.vec687, 1
  %ind.end688 = add i64 %indvars.iv461, %421
  %broadcast.splatinsert = insertelement <2 x double> poison, double %340, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert706 = insertelement <2 x double> poison, double %143, i64 0
  %broadcast.splat707 = shufflevector <2 x double> %broadcast.splatinsert706, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert708 = insertelement <2 x double> poison, double %147, i64 0
  %broadcast.splat709 = shufflevector <2 x double> %broadcast.splatinsert708, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert711 = insertelement <2 x double> poison, double %151, i64 0
  %broadcast.splat712 = shufflevector <2 x double> %broadcast.splatinsert711, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert713 = insertelement <2 x double> poison, double %134, i64 0
  %broadcast.splat714 = shufflevector <2 x double> %broadcast.splatinsert713, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert715 = insertelement <2 x double> poison, double %139, i64 0
  %broadcast.splat716 = shufflevector <2 x double> %broadcast.splatinsert715, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert718 = insertelement <2 x double> poison, double %341, i64 0
  %broadcast.splat719 = shufflevector <2 x double> %broadcast.splatinsert718, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert720 = insertelement <2 x double> poison, double %150, i64 0
  %broadcast.splat721 = shufflevector <2 x double> %broadcast.splatinsert720, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert722 = insertelement <2 x double> poison, double %152, i64 0
  %broadcast.splat723 = shufflevector <2 x double> %broadcast.splatinsert722, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1142 = getelementptr i8, ptr %339, i64 -8
  %invariant.gep1144 = getelementptr i8, ptr %339, i64 -8
  %invariant.gep1146 = getelementptr i8, ptr %339, i64 -8
  %invariant.gep1148 = getelementptr i8, ptr %339, i64 -8
  br label %vector.body690

vector.body690:                                   ; preds = %vector.body690, %vector.ph685
  %index691 = phi i64 [ 0, %vector.ph685 ], [ %index.next725, %vector.body690 ]
  %422 = shl i64 %index691, 1
  %offset.idx692 = add i64 %indvars.iv461, %422
  %423 = add nsw i64 %offset.idx692, %465
  %424 = add nsw i64 %423, %465
  %425 = add nsw i64 %424, %465
  %426 = getelementptr inbounds double, ptr %339, i64 %offset.idx692
  %wide.vec693 = load <4 x double>, ptr %426, align 8, !tbaa !5
  %strided.vec694 = shufflevector <4 x double> %wide.vec693, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec695 = shufflevector <4 x double> %wide.vec693, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %427 = getelementptr inbounds double, ptr %339, i64 %423
  %wide.vec696 = load <4 x double>, ptr %427, align 8, !tbaa !5
  %strided.vec697 = shufflevector <4 x double> %wide.vec696, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec698 = shufflevector <4 x double> %wide.vec696, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %428 = fadd <2 x double> %strided.vec694, %strided.vec697
  %429 = or disjoint i64 %offset.idx692, 1
  %430 = or disjoint i64 %423, 1
  %431 = fadd <2 x double> %strided.vec695, %strided.vec698
  %432 = fsub <2 x double> %strided.vec694, %strided.vec697
  %433 = fsub <2 x double> %strided.vec695, %strided.vec698
  %434 = getelementptr inbounds double, ptr %339, i64 %424
  %wide.vec699 = load <4 x double>, ptr %434, align 8, !tbaa !5
  %strided.vec700 = shufflevector <4 x double> %wide.vec699, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec701 = shufflevector <4 x double> %wide.vec699, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %435 = getelementptr inbounds double, ptr %339, i64 %425
  %wide.vec702 = load <4 x double>, ptr %435, align 8, !tbaa !5
  %strided.vec703 = shufflevector <4 x double> %wide.vec702, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec704 = shufflevector <4 x double> %wide.vec702, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %436 = fadd <2 x double> %strided.vec700, %strided.vec703
  %437 = or disjoint i64 %424, 1
  %438 = or disjoint i64 %425, 1
  %439 = fadd <2 x double> %strided.vec701, %strided.vec704
  %440 = fsub <2 x double> %strided.vec700, %strided.vec703
  %441 = fsub <2 x double> %strided.vec701, %strided.vec704
  %442 = fadd <2 x double> %428, %436
  %443 = fadd <2 x double> %431, %439
  %gep1143 = getelementptr double, ptr %invariant.gep1142, i64 %429
  %interleaved.vec705 = shufflevector <2 x double> %442, <2 x double> %443, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec705, ptr %gep1143, align 8, !tbaa !5
  %444 = fsub <2 x double> %428, %436
  %445 = fsub <2 x double> %431, %439
  %446 = fmul <2 x double> %445, %broadcast.splat
  %447 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat707, <2 x double> %444, <2 x double> %446)
  %448 = fmul <2 x double> %broadcast.splat709, %444
  %449 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat707, <2 x double> %445, <2 x double> %448)
  %gep1145 = getelementptr double, ptr %invariant.gep1144, i64 %437
  %interleaved.vec710 = shufflevector <2 x double> %447, <2 x double> %449, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec710, ptr %gep1145, align 8, !tbaa !5
  %450 = fsub <2 x double> %432, %441
  %451 = fadd <2 x double> %433, %440
  %452 = fmul <2 x double> %451, %broadcast.splat712
  %453 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat714, <2 x double> %450, <2 x double> %452)
  %454 = fmul <2 x double> %broadcast.splat716, %450
  %455 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat714, <2 x double> %451, <2 x double> %454)
  %gep1147 = getelementptr double, ptr %invariant.gep1146, i64 %430
  %interleaved.vec717 = shufflevector <2 x double> %453, <2 x double> %455, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec717, ptr %gep1147, align 8, !tbaa !5
  %456 = fadd <2 x double> %432, %441
  %457 = fsub <2 x double> %433, %440
  %458 = fmul <2 x double> %457, %broadcast.splat719
  %459 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat721, <2 x double> %456, <2 x double> %458)
  %460 = fmul <2 x double> %broadcast.splat723, %456
  %461 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat721, <2 x double> %457, <2 x double> %460)
  %gep1149 = getelementptr double, ptr %invariant.gep1148, i64 %438
  %interleaved.vec724 = shufflevector <2 x double> %459, <2 x double> %461, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec724, ptr %gep1149, align 8, !tbaa !5
  %index.next725 = add nuw i64 %index691, 2
  %462 = icmp eq i64 %index.next725, %n.vec687
  br i1 %462, label %middle.block682, label %vector.body690, !llvm.loop !23

middle.block682:                                  ; preds = %vector.body690
  %cmp.n = icmp eq i64 %113, %n.vec687
  br i1 %cmp.n, label %._crit_edge428.us, label %scalar.ph683.preheader

.lr.ph435.us:                                     ; preds = %._crit_edge423.us
  %463 = sext i32 %102 to i64
  %464 = sext i32 %23 to i64
  %465 = sext i32 %.0405436.us to i64
  %466 = sext i32 %103 to i64
  %467 = mul i32 %.0405436.us, 9
  %468 = add i32 %467, -2
  %469 = mul nsw i64 %465, 3
  %470 = or disjoint i64 %469, 1
  %471 = add nsw i64 %470, %463
  %472 = shl nsw i64 %471, 3
  %473 = shl nsw i64 %464, 3
  %474 = mul nsw i64 %465, 24
  %475 = shl nsw i64 %463, 3
  %476 = or disjoint i64 %465, 1
  %477 = add nsw i64 %476, %463
  %478 = shl nsw i64 %477, 3
  %479 = add nsw i64 %465, %463
  %480 = shl nsw i64 %479, 3
  %481 = shl nsw i64 %465, 1
  %482 = or disjoint i64 %481, 1
  %483 = add nsw i64 %482, %463
  %484 = shl nsw i64 %483, 3
  %485 = shl nsw i64 %465, 4
  %486 = or disjoint i64 %475, 8
  %487 = shl nsw i64 %463, 3
  %488 = shl nsw i64 %464, 3
  %489 = or disjoint i64 %487, 8
  %490 = mul i32 %.0405436.us, 9
  %491 = add i32 %490, -2
  %492 = or disjoint i64 %487, 16
  %493 = shl nsw i64 %465, 4
  %494 = or disjoint i64 %493, 8
  %495 = shl nsw i64 %465, 1
  %496 = or disjoint i64 %495, 1
  %497 = add nsw i64 %496, %463
  %498 = shl nsw i64 %497, 3
  %499 = or disjoint i64 %493, 16
  %500 = add nsw i64 %465, %463
  %501 = shl nsw i64 %500, 3
  %502 = or disjoint i64 %501, 8
  %503 = or disjoint i64 %465, 1
  %504 = add nsw i64 %503, %463
  %505 = shl nsw i64 %504, 3
  %506 = mul nsw i64 %465, 24
  %507 = or disjoint i64 %506, 8
  %508 = mul nsw i64 %465, 3
  %509 = or disjoint i64 %508, 1
  %510 = add nsw i64 %509, %463
  %511 = shl nsw i64 %510, 3
  %512 = mul i32 %.0405436.us, 9
  %513 = add i32 %512, -2
  br label %104

._crit_edge438.us:                                ; preds = %.loopexit.us
  %.not439.us = icmp slt i32 %23, 2
  %or.cond = or i1 %45, %.not439.us
  br i1 %or.cond, label %.loopexit415.us, label %.lr.ph441.us

.lr.ph441.us:                                     ; preds = %._crit_edge438.us
  %514 = add nsw i32 %23, -2
  %515 = load ptr, ptr %7, align 8, !tbaa !18
  %516 = zext nneg i32 %23 to i64
  %517 = zext nneg i32 %514 to i64
  %518 = lshr exact i64 %517, 1
  %min.iters.check = icmp ult i32 %514, 12
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

scalar.ph.preheader:                              ; preds = %vector.body, %vector.memcheck, %.lr.ph441.us
  %indvars.iv471.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph441.us ], [ %ind.end, %vector.body ]
  br label %scalar.ph

vector.memcheck:                                  ; preds = %.lr.ph441.us
  %scevgep = getelementptr i8, ptr %515, i64 8
  %519 = shl nuw nsw i64 %517, 3
  %scevgep490 = getelementptr i8, ptr %scevgep, i64 %519
  %scevgep491 = getelementptr i8, ptr %515, i64 16
  %scevgep492 = getelementptr i8, ptr %scevgep491, i64 %519
  %520 = shl nuw nsw i64 %516, 3
  %scevgep493 = getelementptr i8, ptr %515, i64 %520
  %scevgep494 = getelementptr i8, ptr %515, i64 8
  %521 = add nuw nsw i64 %519, %520
  %scevgep495 = getelementptr i8, ptr %scevgep494, i64 %521
  %scevgep496 = getelementptr i8, ptr %scevgep494, i64 %520
  %scevgep497 = getelementptr i8, ptr %515, i64 16
  %scevgep498 = getelementptr i8, ptr %scevgep497, i64 %521
  %bound0 = icmp ult ptr %515, %scevgep492
  %bound1 = icmp ult ptr %scevgep, %scevgep490
  %found.conflict = and i1 %bound0, %bound1
  %bound0499 = icmp ult ptr %515, %scevgep495
  %bound1500 = icmp ult ptr %scevgep493, %scevgep490
  %found.conflict501 = and i1 %bound0499, %bound1500
  %conflict.rdx = or i1 %found.conflict, %found.conflict501
  %bound0502 = icmp ult ptr %515, %scevgep498
  %bound1503 = icmp ult ptr %scevgep496, %scevgep490
  %found.conflict504 = and i1 %bound0502, %bound1503
  %conflict.rdx505 = or i1 %conflict.rdx, %found.conflict504
  %bound0506 = icmp ult ptr %scevgep, %scevgep495
  %bound1507 = icmp ult ptr %scevgep493, %scevgep492
  %found.conflict508 = and i1 %bound0506, %bound1507
  %conflict.rdx509 = or i1 %conflict.rdx505, %found.conflict508
  %bound0510 = icmp ult ptr %scevgep, %scevgep498
  %bound1511 = icmp ult ptr %scevgep496, %scevgep492
  %found.conflict512 = and i1 %bound0510, %bound1511
  %conflict.rdx513 = or i1 %conflict.rdx509, %found.conflict512
  %bound0514 = icmp ult ptr %scevgep493, %scevgep498
  %bound1515 = icmp ult ptr %scevgep496, %scevgep495
  %found.conflict516 = and i1 %bound0514, %bound1515
  %conflict.rdx517 = or i1 %conflict.rdx513, %found.conflict516
  br i1 %conflict.rdx517, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = add nsw i64 %518, -1
  %ind.end = shl nuw nsw i64 %n.vec, 1
  %invariant.gep1152 = getelementptr i8, ptr %515, 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
  %522 = add nuw nsw i64 %offset.idx, %516
  %523 = getelementptr inbounds double, ptr %515, i64 %offset.idx
  %wide.vec = load <4 x double>, ptr %523, align 8, !tbaa !5
  %strided.vec518 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %524 = getelementptr inbounds double, ptr %515, i64 %522
  %wide.vec519 = load <4 x double>, ptr %524, align 8, !tbaa !5
  %525 = fsub <4 x double> %wide.vec, %wide.vec519
  %526 = shufflevector <4 x double> %525, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %527 = or disjoint i64 %offset.idx, 1
  %528 = or disjoint i64 %522, 1
  %529 = getelementptr inbounds double, ptr %515, i64 %528
  %wide.vec522 = load <4 x double>, ptr %529, align 8, !tbaa !5
  %strided.vec523 = shufflevector <4 x double> %wide.vec522, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %530 = fsub <2 x double> %strided.vec518, %strided.vec523
  %gep1153 = getelementptr double, ptr %invariant.gep1152, i64 %527
  %interleaved.vec = fadd <4 x double> %wide.vec, %wide.vec519
  store <4 x double> %interleaved.vec, ptr %gep1153, align 8, !tbaa !5
  %531 = getelementptr inbounds i8, ptr %529, i64 -8
  %interleaved.vec524 = shufflevector <2 x double> %526, <2 x double> %530, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec524, ptr %531, align 8, !tbaa !5
  %index.next = add nuw i64 %index, 2
  %532 = icmp eq i64 %index.next, %n.vec
  br i1 %532, label %scalar.ph.preheader, label %vector.body, !llvm.loop !24

.preheader416.lr.ph.split:                        ; preds = %.preheader416.lr.ph
  %533 = icmp sgt i32 %1, 2
  br i1 %533, label %.preheader416.us446.preheader, label %._crit_edge445

.preheader416.us446.preheader:                    ; preds = %.preheader416.lr.ph.split
  %wide.trip.count = zext nneg i32 %0 to i64
  %xtraiter = and i64 %wide.trip.count, 1
  %534 = icmp eq i32 %0, 1
  br i1 %534, label %._crit_edge445.loopexit1122.unr-lcssa, label %.preheader416.us446.preheader.new

.preheader416.us446.preheader.new:                ; preds = %.preheader416.us446.preheader
  %unroll_iter = and i64 %wide.trip.count, 2147483646
  br label %.preheader416.us446

.preheader416.us446:                              ; preds = %.preheader416.us446, %.preheader416.us446.preheader.new
  %indvars.iv = phi i64 [ 0, %.preheader416.us446.preheader.new ], [ %indvars.iv.next.1, %.preheader416.us446 ]
  %niter = phi i64 [ 0, %.preheader416.us446.preheader.new ], [ %niter.next.1, %.preheader416.us446 ]
  %535 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv
  %536 = load ptr, ptr %535, align 8, !tbaa !18
  %537 = getelementptr inbounds i8, ptr %536, i64 16
  %538 = load <2 x double>, ptr %536, align 8, !tbaa !5
  %539 = load <2 x double>, ptr %537, align 8, !tbaa !5
  %540 = fadd <2 x double> %538, %539
  store <2 x double> %540, ptr %536, align 8, !tbaa !5
  %541 = fsub <2 x double> %538, %539
  store <2 x double> %541, ptr %537, align 8, !tbaa !5
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %542 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv.next
  %543 = load ptr, ptr %542, align 8, !tbaa !18
  %544 = getelementptr inbounds i8, ptr %543, i64 16
  %545 = load <2 x double>, ptr %543, align 8, !tbaa !5
  %546 = load <2 x double>, ptr %544, align 8, !tbaa !5
  %547 = fadd <2 x double> %545, %546
  store <2 x double> %547, ptr %543, align 8, !tbaa !5
  %548 = fsub <2 x double> %545, %546
  store <2 x double> %548, ptr %544, align 8, !tbaa !5
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge445.loopexit1122.unr-lcssa, label %.preheader416.us446, !llvm.loop !12

._crit_edge445.loopexit1122.unr-lcssa:            ; preds = %.preheader416.us446, %.preheader416.us446.preheader
  %indvars.iv.unr = phi i64 [ 0, %.preheader416.us446.preheader ], [ %indvars.iv.next.1, %.preheader416.us446 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge445, label %.preheader416.us446.epil

.preheader416.us446.epil:                         ; preds = %._crit_edge445.loopexit1122.unr-lcssa
  %549 = getelementptr inbounds ptr, ptr %2, i64 %indvars.iv.unr
  %550 = load ptr, ptr %549, align 8, !tbaa !18
  %551 = getelementptr inbounds i8, ptr %550, i64 16
  %552 = load <2 x double>, ptr %550, align 8, !tbaa !5
  %553 = load <2 x double>, ptr %551, align 8, !tbaa !5
  %554 = fadd <2 x double> %552, %553
  store <2 x double> %554, ptr %550, align 8, !tbaa !5
  %555 = fsub <2 x double> %552, %553
  store <2 x double> %555, ptr %551, align 8, !tbaa !5
  br label %._crit_edge445

._crit_edge445:                                   ; preds = %.preheader416.us446.epil, %._crit_edge445.loopexit1122.unr-lcssa, %.loopexit415.us, %.preheader416.lr.ph.split, %4
  ret void
}

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

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

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

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

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


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