; LLVM IR from niuyishuai/PDCABB :: LAPACK_BLAS/LAPACK (dtfttp)

; 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"

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @dtfttp_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) #0 {
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i32, align 4
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store ptr %3, ptr %11, align 8, !tbaa !5
  store ptr %4, ptr %12, align 8, !tbaa !5
  store ptr %5, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 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
  %32 = load ptr, ptr %13, align 8, !tbaa !5
  store i64 0, ptr %32, align 8, !tbaa !9
  %33 = load ptr, ptr %8, align 8, !tbaa !5
  %34 = call i64 @lsame_(ptr noundef %33, ptr noundef @.str)
  store i64 %34, ptr %28, align 8, !tbaa !9
  %35 = load ptr, ptr %9, align 8, !tbaa !5
  %36 = call i64 @lsame_(ptr noundef %35, ptr noundef @.str.1)
  store i64 %36, ptr %29, align 8, !tbaa !9
  %37 = load i64, ptr %28, align 8, !tbaa !9
  %38 = icmp ne i64 %37, 0
  br i1 %38, label %45, label %39

39:                                               ; preds = %6
  %40 = load ptr, ptr %8, align 8, !tbaa !5
  %41 = call i64 @lsame_(ptr noundef %40, ptr noundef @.str.2)
  %42 = icmp ne i64 %41, 0
  br i1 %42, label %45, label %43

43:                                               ; preds = %39
  %44 = load ptr, ptr %13, align 8, !tbaa !5
  store i64 -1, ptr %44, align 8, !tbaa !9
  br label %62

45:                                               ; preds = %39, %6
  %46 = load i64, ptr %29, align 8, !tbaa !9
  %47 = icmp ne i64 %46, 0
  br i1 %47, label %54, label %48

48:                                               ; preds = %45
  %49 = load ptr, ptr %9, align 8, !tbaa !5
  %50 = call i64 @lsame_(ptr noundef %49, ptr noundef @.str.3)
  %51 = icmp ne i64 %50, 0
  br i1 %51, label %54, label %52

52:                                               ; preds = %48
  %53 = load ptr, ptr %13, align 8, !tbaa !5
  store i64 -2, ptr %53, align 8, !tbaa !9
  br label %61

54:                                               ; preds = %48, %45
  %55 = load ptr, ptr %10, align 8, !tbaa !5
  %56 = load i64, ptr %55, align 8, !tbaa !9
  %57 = icmp slt i64 %56, 0
  br i1 %57, label %58, label %60

58:                                               ; preds = %54
  %59 = load ptr, ptr %13, align 8, !tbaa !5
  store i64 -3, ptr %59, align 8, !tbaa !9
  br label %60

60:                                               ; preds = %58, %54
  br label %61

61:                                               ; preds = %60, %52
  br label %62

62:                                               ; preds = %61, %43
  %63 = load ptr, ptr %13, align 8, !tbaa !5
  %64 = load i64, ptr %63, align 8, !tbaa !9
  %65 = icmp ne i64 %64, 0
  br i1 %65, label %66, label %71

66:                                               ; preds = %62
  %67 = load ptr, ptr %13, align 8, !tbaa !5
  %68 = load i64, ptr %67, align 8, !tbaa !9
  %69 = sub nsw i64 0, %68
  store i64 %69, ptr %14, align 8, !tbaa !9
  %70 = call i32 @xerbla_(ptr noundef @.str.4, ptr noundef %14)
  store i32 0, ptr %7, align 4
  store i32 1, ptr %31, align 4
  br label %850

71:                                               ; preds = %62
  %72 = load ptr, ptr %10, align 8, !tbaa !5
  %73 = load i64, ptr %72, align 8, !tbaa !9
  %74 = icmp eq i64 %73, 0
  br i1 %74, label %75, label %76

75:                                               ; preds = %71
  store i32 0, ptr %7, align 4
  store i32 1, ptr %31, align 4
  br label %850

76:                                               ; preds = %71
  %77 = load ptr, ptr %10, align 8, !tbaa !5
  %78 = load i64, ptr %77, align 8, !tbaa !9
  %79 = icmp eq i64 %78, 1
  br i1 %79, label %80, label %96

80:                                               ; preds = %76
  %81 = load i64, ptr %28, align 8, !tbaa !9
  %82 = icmp ne i64 %81, 0
  br i1 %82, label %83, label %89

83:                                               ; preds = %80
  %84 = load ptr, ptr %11, align 8, !tbaa !5
  %85 = getelementptr inbounds double, ptr %84, i64 0
  %86 = load double, ptr %85, align 8, !tbaa !11
  %87 = load ptr, ptr %12, align 8, !tbaa !5
  %88 = getelementptr inbounds double, ptr %87, i64 0
  store double %86, ptr %88, align 8, !tbaa !11
  br label %95

89:                                               ; preds = %80
  %90 = load ptr, ptr %11, align 8, !tbaa !5
  %91 = getelementptr inbounds double, ptr %90, i64 0
  %92 = load double, ptr %91, align 8, !tbaa !11
  %93 = load ptr, ptr %12, align 8, !tbaa !5
  %94 = getelementptr inbounds double, ptr %93, i64 0
  store double %92, ptr %94, align 8, !tbaa !11
  br label %95

95:                                               ; preds = %89, %83
  store i32 0, ptr %7, align 4
  store i32 1, ptr %31, align 4
  br label %850

96:                                               ; preds = %76
  %97 = load ptr, ptr %10, align 8, !tbaa !5
  %98 = load i64, ptr %97, align 8, !tbaa !9
  %99 = load ptr, ptr %10, align 8, !tbaa !5
  %100 = load i64, ptr %99, align 8, !tbaa !9
  %101 = add nsw i64 %100, 1
  %102 = mul nsw i64 %98, %101
  %103 = sdiv i64 %102, 2
  store i64 %103, ptr %25, align 8, !tbaa !9
  %104 = load i64, ptr %29, align 8, !tbaa !9
  %105 = icmp ne i64 %104, 0
  br i1 %105, label %106, label %114

106:                                              ; preds = %96
  %107 = load ptr, ptr %10, align 8, !tbaa !5
  %108 = load i64, ptr %107, align 8, !tbaa !9
  %109 = sdiv i64 %108, 2
  store i64 %109, ptr %21, align 8, !tbaa !9
  %110 = load ptr, ptr %10, align 8, !tbaa !5
  %111 = load i64, ptr %110, align 8, !tbaa !9
  %112 = load i64, ptr %21, align 8, !tbaa !9
  %113 = sub nsw i64 %111, %112
  store i64 %113, ptr %20, align 8, !tbaa !9
  br label %122

114:                                              ; preds = %96
  %115 = load ptr, ptr %10, align 8, !tbaa !5
  %116 = load i64, ptr %115, align 8, !tbaa !9
  %117 = sdiv i64 %116, 2
  store i64 %117, ptr %20, align 8, !tbaa !9
  %118 = load ptr, ptr %10, align 8, !tbaa !5
  %119 = load i64, ptr %118, align 8, !tbaa !9
  %120 = load i64, ptr %20, align 8, !tbaa !9
  %121 = sub nsw i64 %119, %120
  store i64 %121, ptr %21, align 8, !tbaa !9
  br label %122

122:                                              ; preds = %114, %106
  %123 = load ptr, ptr %10, align 8, !tbaa !5
  %124 = load i64, ptr %123, align 8, !tbaa !9
  %125 = srem i64 %124, 2
  %126 = icmp eq i64 %125, 0
  br i1 %126, label %127, label %134

127:                                              ; preds = %122
  %128 = load ptr, ptr %10, align 8, !tbaa !5
  %129 = load i64, ptr %128, align 8, !tbaa !9
  %130 = sdiv i64 %129, 2
  store i64 %130, ptr %19, align 8, !tbaa !9
  store i64 0, ptr %30, align 8, !tbaa !9
  %131 = load ptr, ptr %10, align 8, !tbaa !5
  %132 = load i64, ptr %131, align 8, !tbaa !9
  %133 = add nsw i64 %132, 1
  store i64 %133, ptr %26, align 8, !tbaa !9
  br label %137

134:                                              ; preds = %122
  store i64 1, ptr %30, align 8, !tbaa !9
  %135 = load ptr, ptr %10, align 8, !tbaa !5
  %136 = load i64, ptr %135, align 8, !tbaa !9
  store i64 %136, ptr %26, align 8, !tbaa !9
  br label %137

137:                                              ; preds = %134, %127
  %138 = load i64, ptr %28, align 8, !tbaa !9
  %139 = icmp ne i64 %138, 0
  br i1 %139, label %145, label %140

140:                                              ; preds = %137
  %141 = load ptr, ptr %10, align 8, !tbaa !5
  %142 = load i64, ptr %141, align 8, !tbaa !9
  %143 = add nsw i64 %142, 1
  %144 = sdiv i64 %143, 2
  store i64 %144, ptr %26, align 8, !tbaa !9
  br label %145

145:                                              ; preds = %140, %137
  %146 = load i64, ptr %30, align 8, !tbaa !9
  %147 = icmp ne i64 %146, 0
  br i1 %147, label %148, label %494

148:                                              ; preds = %145
  %149 = load i64, ptr %28, align 8, !tbaa !9
  %150 = icmp ne i64 %149, 0
  br i1 %150, label %151, label %307

151:                                              ; preds = %148
  %152 = load i64, ptr %29, align 8, !tbaa !9
  %153 = icmp ne i64 %152, 0
  br i1 %153, label %154, label %230

154:                                              ; preds = %151
  store i64 0, ptr %27, align 8, !tbaa !9
  store i64 0, ptr %23, align 8, !tbaa !9
  %155 = load i64, ptr %21, align 8, !tbaa !9
  store i64 %155, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %156

156:                                              ; preds = %189, %154
  %157 = load i64, ptr %18, align 8, !tbaa !9
  %158 = load i64, ptr %14, align 8, !tbaa !9
  %159 = icmp sle i64 %157, %158
  br i1 %159, label %160, label %192

160:                                              ; preds = %156
  %161 = load ptr, ptr %10, align 8, !tbaa !5
  %162 = load i64, ptr %161, align 8, !tbaa !9
  %163 = sub nsw i64 %162, 1
  store i64 %163, ptr %15, align 8, !tbaa !9
  %164 = load i64, ptr %18, align 8, !tbaa !9
  store i64 %164, ptr %17, align 8, !tbaa !9
  br label %165

165:                                              ; preds = %182, %160
  %166 = load i64, ptr %17, align 8, !tbaa !9
  %167 = load i64, ptr %15, align 8, !tbaa !9
  %168 = icmp sle i64 %166, %167
  br i1 %168, label %169, label %185

169:                                              ; preds = %165
  %170 = load i64, ptr %17, align 8, !tbaa !9
  %171 = load i64, ptr %23, align 8, !tbaa !9
  %172 = add nsw i64 %170, %171
  store i64 %172, ptr %22, align 8, !tbaa !9
  %173 = load ptr, ptr %11, align 8, !tbaa !5
  %174 = load i64, ptr %22, align 8, !tbaa !9
  %175 = getelementptr inbounds double, ptr %173, i64 %174
  %176 = load double, ptr %175, align 8, !tbaa !11
  %177 = load ptr, ptr %12, align 8, !tbaa !5
  %178 = load i64, ptr %27, align 8, !tbaa !9
  %179 = getelementptr inbounds double, ptr %177, i64 %178
  store double %176, ptr %179, align 8, !tbaa !11
  %180 = load i64, ptr %27, align 8, !tbaa !9
  %181 = add nsw i64 %180, 1
  store i64 %181, ptr %27, align 8, !tbaa !9
  br label %182

182:                                              ; preds = %169
  %183 = load i64, ptr %17, align 8, !tbaa !9
  %184 = add nsw i64 %183, 1
  store i64 %184, ptr %17, align 8, !tbaa !9
  br label %165, !llvm.loop !13

185:                                              ; preds = %165
  %186 = load i64, ptr %26, align 8, !tbaa !9
  %187 = load i64, ptr %23, align 8, !tbaa !9
  %188 = add nsw i64 %187, %186
  store i64 %188, ptr %23, align 8, !tbaa !9
  br label %189

189:                                              ; preds = %185
  %190 = load i64, ptr %18, align 8, !tbaa !9
  %191 = add nsw i64 %190, 1
  store i64 %191, ptr %18, align 8, !tbaa !9
  br label %156, !llvm.loop !15

192:                                              ; preds = %156
  %193 = load i64, ptr %21, align 8, !tbaa !9
  %194 = sub nsw i64 %193, 1
  store i64 %194, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %17, align 8, !tbaa !9
  br label %195

195:                                              ; preds = %226, %192
  %196 = load i64, ptr %17, align 8, !tbaa !9
  %197 = load i64, ptr %14, align 8, !tbaa !9
  %198 = icmp sle i64 %196, %197
  br i1 %198, label %199, label %229

199:                                              ; preds = %195
  %200 = load i64, ptr %21, align 8, !tbaa !9
  store i64 %200, ptr %15, align 8, !tbaa !9
  %201 = load i64, ptr %17, align 8, !tbaa !9
  %202 = add nsw i64 %201, 1
  store i64 %202, ptr %18, align 8, !tbaa !9
  br label %203

203:                                              ; preds = %222, %199
  %204 = load i64, ptr %18, align 8, !tbaa !9
  %205 = load i64, ptr %15, align 8, !tbaa !9
  %206 = icmp sle i64 %204, %205
  br i1 %206, label %207, label %225

207:                                              ; preds = %203
  %208 = load i64, ptr %17, align 8, !tbaa !9
  %209 = load i64, ptr %18, align 8, !tbaa !9
  %210 = load i64, ptr %26, align 8, !tbaa !9
  %211 = mul nsw i64 %209, %210
  %212 = add nsw i64 %208, %211
  store i64 %212, ptr %22, align 8, !tbaa !9
  %213 = load ptr, ptr %11, align 8, !tbaa !5
  %214 = load i64, ptr %22, align 8, !tbaa !9
  %215 = getelementptr inbounds double, ptr %213, i64 %214
  %216 = load double, ptr %215, align 8, !tbaa !11
  %217 = load ptr, ptr %12, align 8, !tbaa !5
  %218 = load i64, ptr %27, align 8, !tbaa !9
  %219 = getelementptr inbounds double, ptr %217, i64 %218
  store double %216, ptr %219, align 8, !tbaa !11
  %220 = load i64, ptr %27, align 8, !tbaa !9
  %221 = add nsw i64 %220, 1
  store i64 %221, ptr %27, align 8, !tbaa !9
  br label %222

222:                                              ; preds = %207
  %223 = load i64, ptr %18, align 8, !tbaa !9
  %224 = add nsw i64 %223, 1
  store i64 %224, ptr %18, align 8, !tbaa !9
  br label %203, !llvm.loop !16

225:                                              ; preds = %203
  br label %226

226:                                              ; preds = %225
  %227 = load i64, ptr %17, align 8, !tbaa !9
  %228 = add nsw i64 %227, 1
  store i64 %228, ptr %17, align 8, !tbaa !9
  br label %195, !llvm.loop !17

229:                                              ; preds = %195
  br label %306

230:                                              ; preds = %151
  store i64 0, ptr %27, align 8, !tbaa !9
  %231 = load i64, ptr %20, align 8, !tbaa !9
  %232 = sub nsw i64 %231, 1
  store i64 %232, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %233

233:                                              ; preds = %263, %230
  %234 = load i64, ptr %18, align 8, !tbaa !9
  %235 = load i64, ptr %14, align 8, !tbaa !9
  %236 = icmp sle i64 %234, %235
  br i1 %236, label %237, label %266

237:                                              ; preds = %233
  %238 = load i64, ptr %21, align 8, !tbaa !9
  %239 = load i64, ptr %18, align 8, !tbaa !9
  %240 = add nsw i64 %238, %239
  store i64 %240, ptr %22, align 8, !tbaa !9
  %241 = load i64, ptr %18, align 8, !tbaa !9
  store i64 %241, ptr %15, align 8, !tbaa !9
  store i64 0, ptr %17, align 8, !tbaa !9
  br label %242

242:                                              ; preds = %259, %237
  %243 = load i64, ptr %17, align 8, !tbaa !9
  %244 = load i64, ptr %15, align 8, !tbaa !9
  %245 = icmp sle i64 %243, %244
  br i1 %245, label %246, label %262

246:                                              ; preds = %242
  %247 = load ptr, ptr %11, align 8, !tbaa !5
  %248 = load i64, ptr %22, align 8, !tbaa !9
  %249 = getelementptr inbounds double, ptr %247, i64 %248
  %250 = load double, ptr %249, align 8, !tbaa !11
  %251 = load ptr, ptr %12, align 8, !tbaa !5
  %252 = load i64, ptr %27, align 8, !tbaa !9
  %253 = getelementptr inbounds double, ptr %251, i64 %252
  store double %250, ptr %253, align 8, !tbaa !11
  %254 = load i64, ptr %27, align 8, !tbaa !9
  %255 = add nsw i64 %254, 1
  store i64 %255, ptr %27, align 8, !tbaa !9
  %256 = load i64, ptr %26, align 8, !tbaa !9
  %257 = load i64, ptr %22, align 8, !tbaa !9
  %258 = add nsw i64 %257, %256
  store i64 %258, ptr %22, align 8, !tbaa !9
  br label %259

259:                                              ; preds = %246
  %260 = load i64, ptr %17, align 8, !tbaa !9
  %261 = add nsw i64 %260, 1
  store i64 %261, ptr %17, align 8, !tbaa !9
  br label %242, !llvm.loop !18

262:                                              ; preds = %242
  br label %263

263:                                              ; preds = %262
  %264 = load i64, ptr %18, align 8, !tbaa !9
  %265 = add nsw i64 %264, 1
  store i64 %265, ptr %18, align 8, !tbaa !9
  br label %233, !llvm.loop !19

266:                                              ; preds = %233
  store i64 0, ptr %24, align 8, !tbaa !9
  %267 = load ptr, ptr %10, align 8, !tbaa !5
  %268 = load i64, ptr %267, align 8, !tbaa !9
  %269 = sub nsw i64 %268, 1
  store i64 %269, ptr %14, align 8, !tbaa !9
  %270 = load i64, ptr %20, align 8, !tbaa !9
  store i64 %270, ptr %18, align 8, !tbaa !9
  br label %271

271:                                              ; preds = %302, %266
  %272 = load i64, ptr %18, align 8, !tbaa !9
  %273 = load i64, ptr %14, align 8, !tbaa !9
  %274 = icmp sle i64 %272, %273
  br i1 %274, label %275, label %305

275:                                              ; preds = %271
  %276 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %276, ptr %22, align 8, !tbaa !9
  %277 = load i64, ptr %24, align 8, !tbaa !9
  %278 = load i64, ptr %18, align 8, !tbaa !9
  %279 = add nsw i64 %277, %278
  store i64 %279, ptr %15, align 8, !tbaa !9
  %280 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %280, ptr %22, align 8, !tbaa !9
  br label %281

281:                                              ; preds = %295, %275
  %282 = load i64, ptr %22, align 8, !tbaa !9
  %283 = load i64, ptr %15, align 8, !tbaa !9
  %284 = icmp sle i64 %282, %283
  br i1 %284, label %285, label %298

285:                                              ; preds = %281
  %286 = load ptr, ptr %11, align 8, !tbaa !5
  %287 = load i64, ptr %22, align 8, !tbaa !9
  %288 = getelementptr inbounds double, ptr %286, i64 %287
  %289 = load double, ptr %288, align 8, !tbaa !11
  %290 = load ptr, ptr %12, align 8, !tbaa !5
  %291 = load i64, ptr %27, align 8, !tbaa !9
  %292 = getelementptr inbounds double, ptr %290, i64 %291
  store double %289, ptr %292, align 8, !tbaa !11
  %293 = load i64, ptr %27, align 8, !tbaa !9
  %294 = add nsw i64 %293, 1
  store i64 %294, ptr %27, align 8, !tbaa !9
  br label %295

295:                                              ; preds = %285
  %296 = load i64, ptr %22, align 8, !tbaa !9
  %297 = add nsw i64 %296, 1
  store i64 %297, ptr %22, align 8, !tbaa !9
  br label %281, !llvm.loop !20

298:                                              ; preds = %281
  %299 = load i64, ptr %26, align 8, !tbaa !9
  %300 = load i64, ptr %24, align 8, !tbaa !9
  %301 = add nsw i64 %300, %299
  store i64 %301, ptr %24, align 8, !tbaa !9
  br label %302

302:                                              ; preds = %298
  %303 = load i64, ptr %18, align 8, !tbaa !9
  %304 = add nsw i64 %303, 1
  store i64 %304, ptr %18, align 8, !tbaa !9
  br label %271, !llvm.loop !21

305:                                              ; preds = %271
  br label %306

306:                                              ; preds = %305, %229
  br label %493

307:                                              ; preds = %148
  %308 = load i64, ptr %29, align 8, !tbaa !9
  %309 = icmp ne i64 %308, 0
  br i1 %309, label %310, label %402

310:                                              ; preds = %307
  store i64 0, ptr %27, align 8, !tbaa !9
  %311 = load i64, ptr %21, align 8, !tbaa !9
  store i64 %311, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %17, align 8, !tbaa !9
  br label %312

312:                                              ; preds = %358, %310
  %313 = load i64, ptr %17, align 8, !tbaa !9
  %314 = load i64, ptr %14, align 8, !tbaa !9
  %315 = icmp sle i64 %313, %314
  br i1 %315, label %316, label %361

316:                                              ; preds = %312
  %317 = load ptr, ptr %10, align 8, !tbaa !5
  %318 = load i64, ptr %317, align 8, !tbaa !9
  %319 = load i64, ptr %26, align 8, !tbaa !9
  %320 = mul nsw i64 %318, %319
  %321 = sub nsw i64 %320, 1
  store i64 %321, ptr %15, align 8, !tbaa !9
  %322 = load i64, ptr %26, align 8, !tbaa !9
  store i64 %322, ptr %16, align 8, !tbaa !9
  %323 = load i64, ptr %17, align 8, !tbaa !9
  %324 = load i64, ptr %26, align 8, !tbaa !9
  %325 = add nsw i64 %324, 1
  %326 = mul nsw i64 %323, %325
  store i64 %326, ptr %22, align 8, !tbaa !9
  br label %327

327:                                              ; preds = %353, %316
  %328 = load i64, ptr %16, align 8, !tbaa !9
  %329 = icmp slt i64 %328, 0
  br i1 %329, label %330, label %335

330:                                              ; preds = %327
  %331 = load i64, ptr %22, align 8, !tbaa !9
  %332 = load i64, ptr %15, align 8, !tbaa !9
  %333 = icmp sge i64 %331, %332
  %334 = zext i1 %333 to i32
  br label %340

335:                                              ; preds = %327
  %336 = load i64, ptr %22, align 8, !tbaa !9
  %337 = load i64, ptr %15, align 8, !tbaa !9
  %338 = icmp sle i64 %336, %337
  %339 = zext i1 %338 to i32
  br label %340

340:                                              ; preds = %335, %330
  %341 = phi i32 [ %334, %330 ], [ %339, %335 ]
  %342 = icmp ne i32 %341, 0
  br i1 %342, label %343, label %357

343:                                              ; preds = %340
  %344 = load ptr, ptr %11, align 8, !tbaa !5
  %345 = load i64, ptr %22, align 8, !tbaa !9
  %346 = getelementptr inbounds double, ptr %344, i64 %345
  %347 = load double, ptr %346, align 8, !tbaa !11
  %348 = load ptr, ptr %12, align 8, !tbaa !5
  %349 = load i64, ptr %27, align 8, !tbaa !9
  %350 = getelementptr inbounds double, ptr %348, i64 %349
  store double %347, ptr %350, align 8, !tbaa !11
  %351 = load i64, ptr %27, align 8, !tbaa !9
  %352 = add nsw i64 %351, 1
  store i64 %352, ptr %27, align 8, !tbaa !9
  br label %353

353:                                              ; preds = %343
  %354 = load i64, ptr %16, align 8, !tbaa !9
  %355 = load i64, ptr %22, align 8, !tbaa !9
  %356 = add nsw i64 %355, %354
  store i64 %356, ptr %22, align 8, !tbaa !9
  br label %327, !llvm.loop !22

357:                                              ; preds = %340
  br label %358

358:                                              ; preds = %357
  %359 = load i64, ptr %17, align 8, !tbaa !9
  %360 = add nsw i64 %359, 1
  store i64 %360, ptr %17, align 8, !tbaa !9
  br label %312, !llvm.loop !23

361:                                              ; preds = %312
  store i64 1, ptr %24, align 8, !tbaa !9
  %362 = load i64, ptr %21, align 8, !tbaa !9
  %363 = sub nsw i64 %362, 1
  store i64 %363, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %364

364:                                              ; preds = %398, %361
  %365 = load i64, ptr %18, align 8, !tbaa !9
  %366 = load i64, ptr %14, align 8, !tbaa !9
  %367 = icmp sle i64 %365, %366
  br i1 %367, label %368, label %401

368:                                              ; preds = %364
  %369 = load i64, ptr %24, align 8, !tbaa !9
  %370 = load i64, ptr %21, align 8, !tbaa !9
  %371 = add nsw i64 %369, %370
  %372 = load i64, ptr %18, align 8, !tbaa !9
  %373 = sub nsw i64 %371, %372
  %374 = sub nsw i64 %373, 1
  store i64 %374, ptr %16, align 8, !tbaa !9
  %375 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %375, ptr %22, align 8, !tbaa !9
  br label %376

376:                                              ; preds = %390, %368
  %377 = load i64, ptr %22, align 8, !tbaa !9
  %378 = load i64, ptr %16, align 8, !tbaa !9
  %379 = icmp sle i64 %377, %378
  br i1 %379, label %380, label %393

380:                                              ; preds = %376
  %381 = load ptr, ptr %11, align 8, !tbaa !5
  %382 = load i64, ptr %22, align 8, !tbaa !9
  %383 = getelementptr inbounds double, ptr %381, i64 %382
  %384 = load double, ptr %383, align 8, !tbaa !11
  %385 = load ptr, ptr %12, align 8, !tbaa !5
  %386 = load i64, ptr %27, align 8, !tbaa !9
  %387 = getelementptr inbounds double, ptr %385, i64 %386
  store double %384, ptr %387, align 8, !tbaa !11
  %388 = load i64, ptr %27, align 8, !tbaa !9
  %389 = add nsw i64 %388, 1
  store i64 %389, ptr %27, align 8, !tbaa !9
  br label %390

390:                                              ; preds = %380
  %391 = load i64, ptr %22, align 8, !tbaa !9
  %392 = add nsw i64 %391, 1
  store i64 %392, ptr %22, align 8, !tbaa !9
  br label %376, !llvm.loop !24

393:                                              ; preds = %376
  %394 = load i64, ptr %24, align 8, !tbaa !9
  %395 = load i64, ptr %26, align 8, !tbaa !9
  %396 = add nsw i64 %394, %395
  %397 = add nsw i64 %396, 1
  store i64 %397, ptr %24, align 8, !tbaa !9
  br label %398

398:                                              ; preds = %393
  %399 = load i64, ptr %18, align 8, !tbaa !9
  %400 = add nsw i64 %399, 1
  store i64 %400, ptr %18, align 8, !tbaa !9
  br label %364, !llvm.loop !25

401:                                              ; preds = %364
  br label %492

402:                                              ; preds = %307
  store i64 0, ptr %27, align 8, !tbaa !9
  %403 = load i64, ptr %21, align 8, !tbaa !9
  %404 = load i64, ptr %26, align 8, !tbaa !9
  %405 = mul nsw i64 %403, %404
  store i64 %405, ptr %24, align 8, !tbaa !9
  %406 = load i64, ptr %20, align 8, !tbaa !9
  %407 = sub nsw i64 %406, 1
  store i64 %407, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %408

408:                                              ; preds = %438, %402
  %409 = load i64, ptr %18, align 8, !tbaa !9
  %410 = load i64, ptr %14, align 8, !tbaa !9
  %411 = icmp sle i64 %409, %410
  br i1 %411, label %412, label %441

412:                                              ; preds = %408
  %413 = load i64, ptr %24, align 8, !tbaa !9
  %414 = load i64, ptr %18, align 8, !tbaa !9
  %415 = add nsw i64 %413, %414
  store i64 %415, ptr %16, align 8, !tbaa !9
  %416 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %416, ptr %22, align 8, !tbaa !9
  br label %417

417:                                              ; preds = %431, %412
  %418 = load i64, ptr %22, align 8, !tbaa !9
  %419 = load i64, ptr %16, align 8, !tbaa !9
  %420 = icmp sle i64 %418, %419
  br i1 %420, label %421, label %434

421:                                              ; preds = %417
  %422 = load ptr, ptr %11, align 8, !tbaa !5
  %423 = load i64, ptr %22, align 8, !tbaa !9
  %424 = getelementptr inbounds double, ptr %422, i64 %423
  %425 = load double, ptr %424, align 8, !tbaa !11
  %426 = load ptr, ptr %12, align 8, !tbaa !5
  %427 = load i64, ptr %27, align 8, !tbaa !9
  %428 = getelementptr inbounds double, ptr %426, i64 %427
  store double %425, ptr %428, align 8, !tbaa !11
  %429 = load i64, ptr %27, align 8, !tbaa !9
  %430 = add nsw i64 %429, 1
  store i64 %430, ptr %27, align 8, !tbaa !9
  br label %431

431:                                              ; preds = %421
  %432 = load i64, ptr %22, align 8, !tbaa !9
  %433 = add nsw i64 %432, 1
  store i64 %433, ptr %22, align 8, !tbaa !9
  br label %417, !llvm.loop !26

434:                                              ; preds = %417
  %435 = load i64, ptr %26, align 8, !tbaa !9
  %436 = load i64, ptr %24, align 8, !tbaa !9
  %437 = add nsw i64 %436, %435
  store i64 %437, ptr %24, align 8, !tbaa !9
  br label %438

438:                                              ; preds = %434
  %439 = load i64, ptr %18, align 8, !tbaa !9
  %440 = add nsw i64 %439, 1
  store i64 %440, ptr %18, align 8, !tbaa !9
  br label %408, !llvm.loop !27

441:                                              ; preds = %408
  %442 = load i64, ptr %20, align 8, !tbaa !9
  store i64 %442, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %17, align 8, !tbaa !9
  br label %443

443:                                              ; preds = %488, %441
  %444 = load i64, ptr %17, align 8, !tbaa !9
  %445 = load i64, ptr %14, align 8, !tbaa !9
  %446 = icmp sle i64 %444, %445
  br i1 %446, label %447, label %491

447:                                              ; preds = %443
  %448 = load i64, ptr %17, align 8, !tbaa !9
  %449 = load i64, ptr %20, align 8, !tbaa !9
  %450 = load i64, ptr %17, align 8, !tbaa !9
  %451 = add nsw i64 %449, %450
  %452 = load i64, ptr %26, align 8, !tbaa !9
  %453 = mul nsw i64 %451, %452
  %454 = add nsw i64 %448, %453
  store i64 %454, ptr %16, align 8, !tbaa !9
  %455 = load i64, ptr %26, align 8, !tbaa !9
  store i64 %455, ptr %15, align 8, !tbaa !9
  %456 = load i64, ptr %17, align 8, !tbaa !9
  store i64 %456, ptr %22, align 8, !tbaa !9
  br label %457

457:                                              ; preds = %483, %447
  %458 = load i64, ptr %15, align 8, !tbaa !9
  %459 = icmp slt i64 %458, 0
  br i1 %459, label %460, label %465

460:                                              ; preds = %457
  %461 = load i64, ptr %22, align 8, !tbaa !9
  %462 = load i64, ptr %16, align 8, !tbaa !9
  %463 = icmp sge i64 %461, %462
  %464 = zext i1 %463 to i32
  br label %470

465:                                              ; preds = %457
  %466 = load i64, ptr %22, align 8, !tbaa !9
  %467 = load i64, ptr %16, align 8, !tbaa !9
  %468 = icmp sle i64 %466, %467
  %469 = zext i1 %468 to i32
  br label %470

470:                                              ; preds = %465, %460
  %471 = phi i32 [ %464, %460 ], [ %469, %465 ]
  %472 = icmp ne i32 %471, 0
  br i1 %472, label %473, label %487

473:                                              ; preds = %470
  %474 = load ptr, ptr %11, align 8, !tbaa !5
  %475 = load i64, ptr %22, align 8, !tbaa !9
  %476 = getelementptr inbounds double, ptr %474, i64 %475
  %477 = load double, ptr %476, align 8, !tbaa !11
  %478 = load ptr, ptr %12, align 8, !tbaa !5
  %479 = load i64, ptr %27, align 8, !tbaa !9
  %480 = getelementptr inbounds double, ptr %478, i64 %479
  store double %477, ptr %480, align 8, !tbaa !11
  %481 = load i64, ptr %27, align 8, !tbaa !9
  %482 = add nsw i64 %481, 1
  store i64 %482, ptr %27, align 8, !tbaa !9
  br label %483

483:                                              ; preds = %473
  %484 = load i64, ptr %15, align 8, !tbaa !9
  %485 = load i64, ptr %22, align 8, !tbaa !9
  %486 = add nsw i64 %485, %484
  store i64 %486, ptr %22, align 8, !tbaa !9
  br label %457, !llvm.loop !28

487:                                              ; preds = %470
  br label %488

488:                                              ; preds = %487
  %489 = load i64, ptr %17, align 8, !tbaa !9
  %490 = add nsw i64 %489, 1
  store i64 %490, ptr %17, align 8, !tbaa !9
  br label %443, !llvm.loop !29

491:                                              ; preds = %443
  br label %492

492:                                              ; preds = %491, %401
  br label %493

493:                                              ; preds = %492, %306
  br label %849

494:                                              ; preds = %145
  %495 = load i64, ptr %28, align 8, !tbaa !9
  %496 = icmp ne i64 %495, 0
  br i1 %496, label %497, label %656

497:                                              ; preds = %494
  %498 = load i64, ptr %29, align 8, !tbaa !9
  %499 = icmp ne i64 %498, 0
  br i1 %499, label %500, label %578

500:                                              ; preds = %497
  store i64 0, ptr %27, align 8, !tbaa !9
  store i64 0, ptr %23, align 8, !tbaa !9
  %501 = load i64, ptr %19, align 8, !tbaa !9
  %502 = sub nsw i64 %501, 1
  store i64 %502, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %503

503:                                              ; preds = %537, %500
  %504 = load i64, ptr %18, align 8, !tbaa !9
  %505 = load i64, ptr %14, align 8, !tbaa !9
  %506 = icmp sle i64 %504, %505
  br i1 %506, label %507, label %540

507:                                              ; preds = %503
  %508 = load ptr, ptr %10, align 8, !tbaa !5
  %509 = load i64, ptr %508, align 8, !tbaa !9
  %510 = sub nsw i64 %509, 1
  store i64 %510, ptr %15, align 8, !tbaa !9
  %511 = load i64, ptr %18, align 8, !tbaa !9
  store i64 %511, ptr %17, align 8, !tbaa !9
  br label %512

512:                                              ; preds = %530, %507
  %513 = load i64, ptr %17, align 8, !tbaa !9
  %514 = load i64, ptr %15, align 8, !tbaa !9
  %515 = icmp sle i64 %513, %514
  br i1 %515, label %516, label %533

516:                                              ; preds = %512
  %517 = load i64, ptr %17, align 8, !tbaa !9
  %518 = add nsw i64 %517, 1
  %519 = load i64, ptr %23, align 8, !tbaa !9
  %520 = add nsw i64 %518, %519
  store i64 %520, ptr %22, align 8, !tbaa !9
  %521 = load ptr, ptr %11, align 8, !tbaa !5
  %522 = load i64, ptr %22, align 8, !tbaa !9
  %523 = getelementptr inbounds double, ptr %521, i64 %522
  %524 = load double, ptr %523, align 8, !tbaa !11
  %525 = load ptr, ptr %12, align 8, !tbaa !5
  %526 = load i64, ptr %27, align 8, !tbaa !9
  %527 = getelementptr inbounds double, ptr %525, i64 %526
  store double %524, ptr %527, align 8, !tbaa !11
  %528 = load i64, ptr %27, align 8, !tbaa !9
  %529 = add nsw i64 %528, 1
  store i64 %529, ptr %27, align 8, !tbaa !9
  br label %530

530:                                              ; preds = %516
  %531 = load i64, ptr %17, align 8, !tbaa !9
  %532 = add nsw i64 %531, 1
  store i64 %532, ptr %17, align 8, !tbaa !9
  br label %512, !llvm.loop !30

533:                                              ; preds = %512
  %534 = load i64, ptr %26, align 8, !tbaa !9
  %535 = load i64, ptr %23, align 8, !tbaa !9
  %536 = add nsw i64 %535, %534
  store i64 %536, ptr %23, align 8, !tbaa !9
  br label %537

537:                                              ; preds = %533
  %538 = load i64, ptr %18, align 8, !tbaa !9
  %539 = add nsw i64 %538, 1
  store i64 %539, ptr %18, align 8, !tbaa !9
  br label %503, !llvm.loop !31

540:                                              ; preds = %503
  %541 = load i64, ptr %19, align 8, !tbaa !9
  %542 = sub nsw i64 %541, 1
  store i64 %542, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %17, align 8, !tbaa !9
  br label %543

543:                                              ; preds = %574, %540
  %544 = load i64, ptr %17, align 8, !tbaa !9
  %545 = load i64, ptr %14, align 8, !tbaa !9
  %546 = icmp sle i64 %544, %545
  br i1 %546, label %547, label %577

547:                                              ; preds = %543
  %548 = load i64, ptr %19, align 8, !tbaa !9
  %549 = sub nsw i64 %548, 1
  store i64 %549, ptr %15, align 8, !tbaa !9
  %550 = load i64, ptr %17, align 8, !tbaa !9
  store i64 %550, ptr %18, align 8, !tbaa !9
  br label %551

551:                                              ; preds = %570, %547
  %552 = load i64, ptr %18, align 8, !tbaa !9
  %553 = load i64, ptr %15, align 8, !tbaa !9
  %554 = icmp sle i64 %552, %553
  br i1 %554, label %555, label %573

555:                                              ; preds = %551
  %556 = load i64, ptr %17, align 8, !tbaa !9
  %557 = load i64, ptr %18, align 8, !tbaa !9
  %558 = load i64, ptr %26, align 8, !tbaa !9
  %559 = mul nsw i64 %557, %558
  %560 = add nsw i64 %556, %559
  store i64 %560, ptr %22, align 8, !tbaa !9
  %561 = load ptr, ptr %11, align 8, !tbaa !5
  %562 = load i64, ptr %22, align 8, !tbaa !9
  %563 = getelementptr inbounds double, ptr %561, i64 %562
  %564 = load double, ptr %563, align 8, !tbaa !11
  %565 = load ptr, ptr %12, align 8, !tbaa !5
  %566 = load i64, ptr %27, align 8, !tbaa !9
  %567 = getelementptr inbounds double, ptr %565, i64 %566
  store double %564, ptr %567, align 8, !tbaa !11
  %568 = load i64, ptr %27, align 8, !tbaa !9
  %569 = add nsw i64 %568, 1
  store i64 %569, ptr %27, align 8, !tbaa !9
  br label %570

570:                                              ; preds = %555
  %571 = load i64, ptr %18, align 8, !tbaa !9
  %572 = add nsw i64 %571, 1
  store i64 %572, ptr %18, align 8, !tbaa !9
  br label %551, !llvm.loop !32

573:                                              ; preds = %551
  br label %574

574:                                              ; preds = %573
  %575 = load i64, ptr %17, align 8, !tbaa !9
  %576 = add nsw i64 %575, 1
  store i64 %576, ptr %17, align 8, !tbaa !9
  br label %543, !llvm.loop !33

577:                                              ; preds = %543
  br label %655

578:                                              ; preds = %497
  store i64 0, ptr %27, align 8, !tbaa !9
  %579 = load i64, ptr %19, align 8, !tbaa !9
  %580 = sub nsw i64 %579, 1
  store i64 %580, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %581

581:                                              ; preds = %612, %578
  %582 = load i64, ptr %18, align 8, !tbaa !9
  %583 = load i64, ptr %14, align 8, !tbaa !9
  %584 = icmp sle i64 %582, %583
  br i1 %584, label %585, label %615

585:                                              ; preds = %581
  %586 = load i64, ptr %19, align 8, !tbaa !9
  %587 = add nsw i64 %586, 1
  %588 = load i64, ptr %18, align 8, !tbaa !9
  %589 = add nsw i64 %587, %588
  store i64 %589, ptr %22, align 8, !tbaa !9
  %590 = load i64, ptr %18, align 8, !tbaa !9
  store i64 %590, ptr %15, align 8, !tbaa !9
  store i64 0, ptr %17, align 8, !tbaa !9
  br label %591

591:                                              ; preds = %608, %585
  %592 = load i64, ptr %17, align 8, !tbaa !9
  %593 = load i64, ptr %15, align 8, !tbaa !9
  %594 = icmp sle i64 %592, %593
  br i1 %594, label %595, label %611

595:                                              ; preds = %591
  %596 = load ptr, ptr %11, align 8, !tbaa !5
  %597 = load i64, ptr %22, align 8, !tbaa !9
  %598 = getelementptr inbounds double, ptr %596, i64 %597
  %599 = load double, ptr %598, align 8, !tbaa !11
  %600 = load ptr, ptr %12, align 8, !tbaa !5
  %601 = load i64, ptr %27, align 8, !tbaa !9
  %602 = getelementptr inbounds double, ptr %600, i64 %601
  store double %599, ptr %602, align 8, !tbaa !11
  %603 = load i64, ptr %27, align 8, !tbaa !9
  %604 = add nsw i64 %603, 1
  store i64 %604, ptr %27, align 8, !tbaa !9
  %605 = load i64, ptr %26, align 8, !tbaa !9
  %606 = load i64, ptr %22, align 8, !tbaa !9
  %607 = add nsw i64 %606, %605
  store i64 %607, ptr %22, align 8, !tbaa !9
  br label %608

608:                                              ; preds = %595
  %609 = load i64, ptr %17, align 8, !tbaa !9
  %610 = add nsw i64 %609, 1
  store i64 %610, ptr %17, align 8, !tbaa !9
  br label %591, !llvm.loop !34

611:                                              ; preds = %591
  br label %612

612:                                              ; preds = %611
  %613 = load i64, ptr %18, align 8, !tbaa !9
  %614 = add nsw i64 %613, 1
  store i64 %614, ptr %18, align 8, !tbaa !9
  br label %581, !llvm.loop !35

615:                                              ; preds = %581
  store i64 0, ptr %24, align 8, !tbaa !9
  %616 = load ptr, ptr %10, align 8, !tbaa !5
  %617 = load i64, ptr %616, align 8, !tbaa !9
  %618 = sub nsw i64 %617, 1
  store i64 %618, ptr %14, align 8, !tbaa !9
  %619 = load i64, ptr %19, align 8, !tbaa !9
  store i64 %619, ptr %18, align 8, !tbaa !9
  br label %620

620:                                              ; preds = %651, %615
  %621 = load i64, ptr %18, align 8, !tbaa !9
  %622 = load i64, ptr %14, align 8, !tbaa !9
  %623 = icmp sle i64 %621, %622
  br i1 %623, label %624, label %654

624:                                              ; preds = %620
  %625 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %625, ptr %22, align 8, !tbaa !9
  %626 = load i64, ptr %24, align 8, !tbaa !9
  %627 = load i64, ptr %18, align 8, !tbaa !9
  %628 = add nsw i64 %626, %627
  store i64 %628, ptr %15, align 8, !tbaa !9
  %629 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %629, ptr %22, align 8, !tbaa !9
  br label %630

630:                                              ; preds = %644, %624
  %631 = load i64, ptr %22, align 8, !tbaa !9
  %632 = load i64, ptr %15, align 8, !tbaa !9
  %633 = icmp sle i64 %631, %632
  br i1 %633, label %634, label %647

634:                                              ; preds = %630
  %635 = load ptr, ptr %11, align 8, !tbaa !5
  %636 = load i64, ptr %22, align 8, !tbaa !9
  %637 = getelementptr inbounds double, ptr %635, i64 %636
  %638 = load double, ptr %637, align 8, !tbaa !11
  %639 = load ptr, ptr %12, align 8, !tbaa !5
  %640 = load i64, ptr %27, align 8, !tbaa !9
  %641 = getelementptr inbounds double, ptr %639, i64 %640
  store double %638, ptr %641, align 8, !tbaa !11
  %642 = load i64, ptr %27, align 8, !tbaa !9
  %643 = add nsw i64 %642, 1
  store i64 %643, ptr %27, align 8, !tbaa !9
  br label %644

644:                                              ; preds = %634
  %645 = load i64, ptr %22, align 8, !tbaa !9
  %646 = add nsw i64 %645, 1
  store i64 %646, ptr %22, align 8, !tbaa !9
  br label %630, !llvm.loop !36

647:                                              ; preds = %630
  %648 = load i64, ptr %26, align 8, !tbaa !9
  %649 = load i64, ptr %24, align 8, !tbaa !9
  %650 = add nsw i64 %649, %648
  store i64 %650, ptr %24, align 8, !tbaa !9
  br label %651

651:                                              ; preds = %647
  %652 = load i64, ptr %18, align 8, !tbaa !9
  %653 = add nsw i64 %652, 1
  store i64 %653, ptr %18, align 8, !tbaa !9
  br label %620, !llvm.loop !37

654:                                              ; preds = %620
  br label %655

655:                                              ; preds = %654, %577
  br label %848

656:                                              ; preds = %494
  %657 = load i64, ptr %29, align 8, !tbaa !9
  %658 = icmp ne i64 %657, 0
  br i1 %658, label %659, label %755

659:                                              ; preds = %656
  store i64 0, ptr %27, align 8, !tbaa !9
  %660 = load i64, ptr %19, align 8, !tbaa !9
  %661 = sub nsw i64 %660, 1
  store i64 %661, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %17, align 8, !tbaa !9
  br label %662

662:                                              ; preds = %711, %659
  %663 = load i64, ptr %17, align 8, !tbaa !9
  %664 = load i64, ptr %14, align 8, !tbaa !9
  %665 = icmp sle i64 %663, %664
  br i1 %665, label %666, label %714

666:                                              ; preds = %662
  %667 = load ptr, ptr %10, align 8, !tbaa !5
  %668 = load i64, ptr %667, align 8, !tbaa !9
  %669 = add nsw i64 %668, 1
  %670 = load i64, ptr %26, align 8, !tbaa !9
  %671 = mul nsw i64 %669, %670
  %672 = sub nsw i64 %671, 1
  store i64 %672, ptr %15, align 8, !tbaa !9
  %673 = load i64, ptr %26, align 8, !tbaa !9
  store i64 %673, ptr %16, align 8, !tbaa !9
  %674 = load i64, ptr %17, align 8, !tbaa !9
  %675 = load i64, ptr %17, align 8, !tbaa !9
  %676 = add nsw i64 %675, 1
  %677 = load i64, ptr %26, align 8, !tbaa !9
  %678 = mul nsw i64 %676, %677
  %679 = add nsw i64 %674, %678
  store i64 %679, ptr %22, align 8, !tbaa !9
  br label %680

680:                                              ; preds = %706, %666
  %681 = load i64, ptr %16, align 8, !tbaa !9
  %682 = icmp slt i64 %681, 0
  br i1 %682, label %683, label %688

683:                                              ; preds = %680
  %684 = load i64, ptr %22, align 8, !tbaa !9
  %685 = load i64, ptr %15, align 8, !tbaa !9
  %686 = icmp sge i64 %684, %685
  %687 = zext i1 %686 to i32
  br label %693

688:                                              ; preds = %680
  %689 = load i64, ptr %22, align 8, !tbaa !9
  %690 = load i64, ptr %15, align 8, !tbaa !9
  %691 = icmp sle i64 %689, %690
  %692 = zext i1 %691 to i32
  br label %693

693:                                              ; preds = %688, %683
  %694 = phi i32 [ %687, %683 ], [ %692, %688 ]
  %695 = icmp ne i32 %694, 0
  br i1 %695, label %696, label %710

696:                                              ; preds = %693
  %697 = load ptr, ptr %11, align 8, !tbaa !5
  %698 = load i64, ptr %22, align 8, !tbaa !9
  %699 = getelementptr inbounds double, ptr %697, i64 %698
  %700 = load double, ptr %699, align 8, !tbaa !11
  %701 = load ptr, ptr %12, align 8, !tbaa !5
  %702 = load i64, ptr %27, align 8, !tbaa !9
  %703 = getelementptr inbounds double, ptr %701, i64 %702
  store double %700, ptr %703, align 8, !tbaa !11
  %704 = load i64, ptr %27, align 8, !tbaa !9
  %705 = add nsw i64 %704, 1
  store i64 %705, ptr %27, align 8, !tbaa !9
  br label %706

706:                                              ; preds = %696
  %707 = load i64, ptr %16, align 8, !tbaa !9
  %708 = load i64, ptr %22, align 8, !tbaa !9
  %709 = add nsw i64 %708, %707
  store i64 %709, ptr %22, align 8, !tbaa !9
  br label %680, !llvm.loop !38

710:                                              ; preds = %693
  br label %711

711:                                              ; preds = %710
  %712 = load i64, ptr %17, align 8, !tbaa !9
  %713 = add nsw i64 %712, 1
  store i64 %713, ptr %17, align 8, !tbaa !9
  br label %662, !llvm.loop !39

714:                                              ; preds = %662
  store i64 0, ptr %24, align 8, !tbaa !9
  %715 = load i64, ptr %19, align 8, !tbaa !9
  %716 = sub nsw i64 %715, 1
  store i64 %716, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %717

717:                                              ; preds = %751, %714
  %718 = load i64, ptr %18, align 8, !tbaa !9
  %719 = load i64, ptr %14, align 8, !tbaa !9
  %720 = icmp sle i64 %718, %719
  br i1 %720, label %721, label %754

721:                                              ; preds = %717
  %722 = load i64, ptr %24, align 8, !tbaa !9
  %723 = load i64, ptr %19, align 8, !tbaa !9
  %724 = add nsw i64 %722, %723
  %725 = load i64, ptr %18, align 8, !tbaa !9
  %726 = sub nsw i64 %724, %725
  %727 = sub nsw i64 %726, 1
  store i64 %727, ptr %16, align 8, !tbaa !9
  %728 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %728, ptr %22, align 8, !tbaa !9
  br label %729

729:                                              ; preds = %743, %721
  %730 = load i64, ptr %22, align 8, !tbaa !9
  %731 = load i64, ptr %16, align 8, !tbaa !9
  %732 = icmp sle i64 %730, %731
  br i1 %732, label %733, label %746

733:                                              ; preds = %729
  %734 = load ptr, ptr %11, align 8, !tbaa !5
  %735 = load i64, ptr %22, align 8, !tbaa !9
  %736 = getelementptr inbounds double, ptr %734, i64 %735
  %737 = load double, ptr %736, align 8, !tbaa !11
  %738 = load ptr, ptr %12, align 8, !tbaa !5
  %739 = load i64, ptr %27, align 8, !tbaa !9
  %740 = getelementptr inbounds double, ptr %738, i64 %739
  store double %737, ptr %740, align 8, !tbaa !11
  %741 = load i64, ptr %27, align 8, !tbaa !9
  %742 = add nsw i64 %741, 1
  store i64 %742, ptr %27, align 8, !tbaa !9
  br label %743

743:                                              ; preds = %733
  %744 = load i64, ptr %22, align 8, !tbaa !9
  %745 = add nsw i64 %744, 1
  store i64 %745, ptr %22, align 8, !tbaa !9
  br label %729, !llvm.loop !40

746:                                              ; preds = %729
  %747 = load i64, ptr %24, align 8, !tbaa !9
  %748 = load i64, ptr %26, align 8, !tbaa !9
  %749 = add nsw i64 %747, %748
  %750 = add nsw i64 %749, 1
  store i64 %750, ptr %24, align 8, !tbaa !9
  br label %751

751:                                              ; preds = %746
  %752 = load i64, ptr %18, align 8, !tbaa !9
  %753 = add nsw i64 %752, 1
  store i64 %753, ptr %18, align 8, !tbaa !9
  br label %717, !llvm.loop !41

754:                                              ; preds = %717
  br label %847

755:                                              ; preds = %656
  store i64 0, ptr %27, align 8, !tbaa !9
  %756 = load i64, ptr %19, align 8, !tbaa !9
  %757 = add nsw i64 %756, 1
  %758 = load i64, ptr %26, align 8, !tbaa !9
  %759 = mul nsw i64 %757, %758
  store i64 %759, ptr %24, align 8, !tbaa !9
  %760 = load i64, ptr %19, align 8, !tbaa !9
  %761 = sub nsw i64 %760, 1
  store i64 %761, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %762

762:                                              ; preds = %792, %755
  %763 = load i64, ptr %18, align 8, !tbaa !9
  %764 = load i64, ptr %14, align 8, !tbaa !9
  %765 = icmp sle i64 %763, %764
  br i1 %765, label %766, label %795

766:                                              ; preds = %762
  %767 = load i64, ptr %24, align 8, !tbaa !9
  %768 = load i64, ptr %18, align 8, !tbaa !9
  %769 = add nsw i64 %767, %768
  store i64 %769, ptr %16, align 8, !tbaa !9
  %770 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %770, ptr %22, align 8, !tbaa !9
  br label %771

771:                                              ; preds = %785, %766
  %772 = load i64, ptr %22, align 8, !tbaa !9
  %773 = load i64, ptr %16, align 8, !tbaa !9
  %774 = icmp sle i64 %772, %773
  br i1 %774, label %775, label %788

775:                                              ; preds = %771
  %776 = load ptr, ptr %11, align 8, !tbaa !5
  %777 = load i64, ptr %22, align 8, !tbaa !9
  %778 = getelementptr inbounds double, ptr %776, i64 %777
  %779 = load double, ptr %778, align 8, !tbaa !11
  %780 = load ptr, ptr %12, align 8, !tbaa !5
  %781 = load i64, ptr %27, align 8, !tbaa !9
  %782 = getelementptr inbounds double, ptr %780, i64 %781
  store double %779, ptr %782, align 8, !tbaa !11
  %783 = load i64, ptr %27, align 8, !tbaa !9
  %784 = add nsw i64 %783, 1
  store i64 %784, ptr %27, align 8, !tbaa !9
  br label %785

785:                                              ; preds = %775
  %786 = load i64, ptr %22, align 8, !tbaa !9
  %787 = add nsw i64 %786, 1
  store i64 %787, ptr %22, align 8, !tbaa !9
  br label %771, !llvm.loop !42

788:                                              ; preds = %771
  %789 = load i64, ptr %26, align 8, !tbaa !9
  %790 = load i64, ptr %24, align 8, !tbaa !9
  %791 = add nsw i64 %790, %789
  store i64 %791, ptr %24, align 8, !tbaa !9
  br label %792

792:                                              ; preds = %788
  %793 = load i64, ptr %18, align 8, !tbaa !9
  %794 = add nsw i64 %793, 1
  store i64 %794, ptr %18, align 8, !tbaa !9
  br label %762, !llvm.loop !43

795:                                              ; preds = %762
  %796 = load i64, ptr %19, align 8, !tbaa !9
  %797 = sub nsw i64 %796, 1
  store i64 %797, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %17, align 8, !tbaa !9
  br label %798

798:                                              ; preds = %843, %795
  %799 = load i64, ptr %17, align 8, !tbaa !9
  %800 = load i64, ptr %14, align 8, !tbaa !9
  %801 = icmp sle i64 %799, %800
  br i1 %801, label %802, label %846

802:                                              ; preds = %798
  %803 = load i64, ptr %17, align 8, !tbaa !9
  %804 = load i64, ptr %19, align 8, !tbaa !9
  %805 = load i64, ptr %17, align 8, !tbaa !9
  %806 = add nsw i64 %804, %805
  %807 = load i64, ptr %26, align 8, !tbaa !9
  %808 = mul nsw i64 %806, %807
  %809 = add nsw i64 %803, %808
  store i64 %809, ptr %16, align 8, !tbaa !9
  %810 = load i64, ptr %26, align 8, !tbaa !9
  store i64 %810, ptr %15, align 8, !tbaa !9
  %811 = load i64, ptr %17, align 8, !tbaa !9
  store i64 %811, ptr %22, align 8, !tbaa !9
  br label %812

812:                                              ; preds = %838, %802
  %813 = load i64, ptr %15, align 8, !tbaa !9
  %814 = icmp slt i64 %813, 0
  br i1 %814, label %815, label %820

815:                                              ; preds = %812
  %816 = load i64, ptr %22, align 8, !tbaa !9
  %817 = load i64, ptr %16, align 8, !tbaa !9
  %818 = icmp sge i64 %816, %817
  %819 = zext i1 %818 to i32
  br label %825

820:                                              ; preds = %812
  %821 = load i64, ptr %22, align 8, !tbaa !9
  %822 = load i64, ptr %16, align 8, !tbaa !9
  %823 = icmp sle i64 %821, %822
  %824 = zext i1 %823 to i32
  br label %825

825:                                              ; preds = %820, %815
  %826 = phi i32 [ %819, %815 ], [ %824, %820 ]
  %827 = icmp ne i32 %826, 0
  br i1 %827, label %828, label %842

828:                                              ; preds = %825
  %829 = load ptr, ptr %11, align 8, !tbaa !5
  %830 = load i64, ptr %22, align 8, !tbaa !9
  %831 = getelementptr inbounds double, ptr %829, i64 %830
  %832 = load double, ptr %831, align 8, !tbaa !11
  %833 = load ptr, ptr %12, align 8, !tbaa !5
  %834 = load i64, ptr %27, align 8, !tbaa !9
  %835 = getelementptr inbounds double, ptr %833, i64 %834
  store double %832, ptr %835, align 8, !tbaa !11
  %836 = load i64, ptr %27, align 8, !tbaa !9
  %837 = add nsw i64 %836, 1
  store i64 %837, ptr %27, align 8, !tbaa !9
  br label %838

838:                                              ; preds = %828
  %839 = load i64, ptr %15, align 8, !tbaa !9
  %840 = load i64, ptr %22, align 8, !tbaa !9
  %841 = add nsw i64 %840, %839
  store i64 %841, ptr %22, align 8, !tbaa !9
  br label %812, !llvm.loop !44

842:                                              ; preds = %825
  br label %843

843:                                              ; preds = %842
  %844 = load i64, ptr %17, align 8, !tbaa !9
  %845 = add nsw i64 %844, 1
  store i64 %845, ptr %17, align 8, !tbaa !9
  br label %798, !llvm.loop !45

846:                                              ; preds = %798
  br label %847

847:                                              ; preds = %846, %754
  br label %848

848:                                              ; preds = %847, %655
  br label %849

849:                                              ; preds = %848, %493
  store i32 0, ptr %7, align 4
  store i32 1, ptr %31, align 4
  br label %850

850:                                              ; preds = %849, %95, %75, %66
  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 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  %851 = load i32, ptr %7, align 4
  ret i32 %851
}

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

declare i64 @lsame_(ptr noundef, ptr noundef) #2

declare i32 @xerbla_(ptr noundef, ptr noundef) #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !14}
!31 = distinct !{!31, !14}
!32 = distinct !{!32, !14}
!33 = distinct !{!33, !14}
!34 = distinct !{!34, !14}
!35 = distinct !{!35, !14}
!36 = distinct !{!36, !14}
!37 = distinct !{!37, !14}
!38 = distinct !{!38, !14}
!39 = distinct !{!39, !14}
!40 = distinct !{!40, !14}
!41 = distinct !{!41, !14}
!42 = distinct !{!42, !14}
!43 = distinct !{!43, !14}
!44 = distinct !{!44, !14}
!45 = distinct !{!45, !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"

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @dtfttp_(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef writeonly %4, ptr nocapture noundef %5) local_unnamed_addr #0 {
  %7 = ptrtoint ptr %3 to i64
  %8 = ptrtoint ptr %4 to i64
  %9 = ptrtoint ptr %3 to i64
  %10 = ptrtoint ptr %4 to i64
  %11 = ptrtoint ptr %3 to i64
  %12 = ptrtoint ptr %4 to i64
  %13 = ptrtoint ptr %3 to i64
  %14 = ptrtoint ptr %4 to i64
  %15 = ptrtoint ptr %3 to i64
  %16 = ptrtoint ptr %4 to i64
  %17 = ptrtoint ptr %3 to i64
  %18 = ptrtoint ptr %4 to i64
  %19 = ptrtoint ptr %3 to i64
  %20 = ptrtoint ptr %4 to i64
  %21 = ptrtoint ptr %3 to i64
  %22 = ptrtoint ptr %4 to i64
  %23 = ptrtoint ptr %3 to i64
  %24 = ptrtoint ptr %4 to i64
  %25 = ptrtoint ptr %3 to i64
  %26 = ptrtoint ptr %4 to i64
  %27 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #4
  store i64 0, ptr %5, align 8, !tbaa !5
  %28 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #4
  %29 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #4
  %.not = icmp eq i64 %28, 0
  br i1 %.not, label %30, label %32

30:                                               ; preds = %6
  %31 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #4
  %.not380 = icmp eq i64 %31, 0
  br i1 %.not380, label %.thread.sink.split, label %32

32:                                               ; preds = %30, %6
  %.not381 = icmp eq i64 %29, 0
  br i1 %.not381, label %33, label %35

33:                                               ; preds = %32
  %34 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #4
  %.not382 = icmp eq i64 %34, 0
  br i1 %.not382, label %.thread.sink.split, label %35

35:                                               ; preds = %33, %32
  %36 = load i64, ptr %2, align 8, !tbaa !5
  %37 = icmp slt i64 %36, 0
  br i1 %37, label %.thread.sink.split, label %38

38:                                               ; preds = %35
  %.pr = load i64, ptr %5, align 8, !tbaa !5
  %.not383 = icmp eq i64 %.pr, 0
  br i1 %.not383, label %42, label %.thread

.thread.sink.split:                               ; preds = %35, %33, %30
  %.sink = phi i64 [ -1, %30 ], [ -2, %33 ], [ -3, %35 ]
  store i64 %.sink, ptr %5, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %38
  %39 = phi i64 [ %.pr, %38 ], [ %.sink, %.thread.sink.split ]
  %40 = sub nsw i64 0, %39
  store i64 %40, ptr %27, align 8, !tbaa !5
  %41 = call i32 @xerbla_(ptr noundef nonnull @.str.4, ptr noundef nonnull %27) #4
  br label %.loopexit

42:                                               ; preds = %38
  switch i64 %36, label %44 [
    i64 0, label %.loopexit
    i64 1, label %43
  ]

43:                                               ; preds = %42
  %storemerge = load double, ptr %3, align 8, !tbaa !9
  store double %storemerge, ptr %4, align 8, !tbaa !9
  br label %.loopexit

44:                                               ; preds = %42
  %45 = lshr i64 %36, 1
  %46 = sub nsw i64 %36, %45
  %. = select i1 %.not381, i64 %45, i64 %46
  %.702 = select i1 %.not381, i64 %46, i64 %45
  %47 = and i64 %36, 1
  %48 = icmp eq i64 %47, 0
  %49 = lshr i64 %36, 1
  %.0331 = or i64 %36, 1
  br i1 %.not, label %50, label %.thread418

50:                                               ; preds = %44
  %51 = add nuw i64 %36, 1
  %52 = lshr i64 %51, 1
  br i1 %48, label %462, label %169

.thread418:                                       ; preds = %44
  br i1 %48, label %.thread425, label %.thread422

.thread422:                                       ; preds = %.thread418
  br i1 %.not381, label %98, label %53

53:                                               ; preds = %.thread422
  %.not413442 = icmp slt i64 %.702, 0
  br i1 %.not413442, label %.loopexit, label %.preheader438.preheader

.preheader438.preheader:                          ; preds = %53
  %54 = sub i64 %26, %25
  %55 = shl i64 %36, 3
  %56 = sub nuw nsw i64 -8, %55
  br label %.preheader438

.preheader438:                                    ; preds = %.preheader438.preheader, %._crit_edge
  %.0330445 = phi i64 [ %.1.lcssa, %._crit_edge ], [ 0, %.preheader438.preheader ]
  %.0339444 = phi i64 [ %73, %._crit_edge ], [ 0, %.preheader438.preheader ]
  %.0356443 = phi i64 [ %74, %._crit_edge ], [ 0, %.preheader438.preheader ]
  %57 = sub i64 %36, %.0356443
  %58 = mul i64 %56, %.0356443
  %59 = add i64 %54, %58
  %invariant.gep = getelementptr double, ptr %3, i64 %.0339444
  %.not416.not439 = icmp slt i64 %.0356443, %36
  br i1 %.not416.not439, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %.preheader438
  %min.iters.check = icmp ult i64 %57, 4
  br i1 %min.iters.check, label %.lr.ph.preheader1147, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph.preheader
  %60 = shl i64 %.0330445, 3
  %61 = add i64 %59, %60
  %diff.check = icmp ult i64 %61, 32
  br i1 %diff.check, label %.lr.ph.preheader1147, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %57, -4
  %ind.end = add i64 %.0330445, %n.vec
  %ind.end725 = add i64 %.0356443, %n.vec
  %62 = getelementptr double, ptr %invariant.gep, i64 %.0356443
  %63 = getelementptr double, ptr %4, i64 %.0330445
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %64 = getelementptr double, ptr %62, i64 %index
  %65 = getelementptr i8, ptr %64, i64 16
  %wide.load = load <2 x double>, ptr %64, align 8, !tbaa !9
  %wide.load728 = load <2 x double>, ptr %65, align 8, !tbaa !9
  %66 = getelementptr double, ptr %63, i64 %index
  %67 = getelementptr inbounds i8, ptr %66, i64 16
  store <2 x double> %wide.load, ptr %66, align 8, !tbaa !9
  store <2 x double> %wide.load728, ptr %67, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 4
  %68 = icmp eq i64 %index.next, %n.vec
  br i1 %68, label %middle.block, label %vector.body, !llvm.loop !11

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

.lr.ph.preheader1147:                             ; preds = %middle.block, %vector.memcheck, %.lr.ph.preheader
  %.1441.ph = phi i64 [ %.0330445, %vector.memcheck ], [ %.0330445, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  %.0368440.ph = phi i64 [ %.0356443, %vector.memcheck ], [ %.0356443, %.lr.ph.preheader ], [ %ind.end725, %middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader1147, %.lr.ph
  %.1441 = phi i64 [ %71, %.lr.ph ], [ %.1441.ph, %.lr.ph.preheader1147 ]
  %.0368440 = phi i64 [ %72, %.lr.ph ], [ %.0368440.ph, %.lr.ph.preheader1147 ]
  %gep = getelementptr double, ptr %invariant.gep, i64 %.0368440
  %69 = load double, ptr %gep, align 8, !tbaa !9
  %70 = getelementptr inbounds double, ptr %4, i64 %.1441
  store double %69, ptr %70, align 8, !tbaa !9
  %71 = add nsw i64 %.1441, 1
  %72 = add nuw nsw i64 %.0368440, 1
  %.not416.not = icmp slt i64 %72, %36
  br i1 %.not416.not, label %.lr.ph, label %._crit_edge, !llvm.loop !15

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %.preheader438
  %.1.lcssa = phi i64 [ %.0330445, %.preheader438 ], [ %ind.end, %middle.block ], [ %71, %.lr.ph ]
  %73 = add nuw nsw i64 %.0339444, %.0331
  %74 = add nuw i64 %.0356443, 1
  %exitcond.not = icmp eq i64 %.0356443, %.702
  br i1 %exitcond.not, label %._crit_edge446, label %.preheader438, !llvm.loop !16

._crit_edge446:                                   ; preds = %._crit_edge
  %.not414.not454.not = icmp eq i64 %.702, 0
  br i1 %.not414.not454.not, label %.loopexit, label %.lr.ph452.preheader

.lr.ph452.preheader:                              ; preds = %._crit_edge446
  %75 = add i64 %24, -8
  %ident.check.not = icmp ult i64 %36, 2
  br label %.lr.ph452

.loopexit436:                                     ; preds = %scalar.ph732, %middle.block731
  %.lcssa723 = phi i64 [ %ind.end737, %middle.block731 ], [ %96, %scalar.ph732 ]
  %exitcond648.not = icmp eq i64 %78, %.702
  br i1 %exitcond648.not, label %.loopexit, label %.lr.ph452, !llvm.loop !17

.lr.ph452:                                        ; preds = %.lr.ph452.preheader, %.loopexit436
  %.2456 = phi i64 [ %.lcssa723, %.loopexit436 ], [ %.1.lcssa, %.lr.ph452.preheader ]
  %.1369455 = phi i64 [ %78, %.loopexit436 ], [ 0, %.lr.ph452.preheader ]
  %76 = add nuw i64 %.1369455, 1
  %smax = tail call i64 @llvm.smax.i64(i64 %.702, i64 %76)
  %77 = sub nsw i64 %smax, %.1369455
  %78 = add nuw nsw i64 %.1369455, 1
  %79 = getelementptr double, ptr %3, i64 %.1369455
  %min.iters.check733 = icmp ugt i64 %77, 3
  %or.cond = and i1 %min.iters.check733, %ident.check.not
  br i1 %or.cond, label %vector.memcheck729, label %scalar.ph732.preheader

vector.memcheck729:                               ; preds = %.lr.ph452
  %80 = shl i64 %.1369455, 4
  %81 = add i64 %80, %23
  %82 = sub i64 %75, %81
  %83 = shl i64 %.2456, 3
  %84 = add i64 %82, %83
  %diff.check730 = icmp ult i64 %84, 32
  br i1 %diff.check730, label %scalar.ph732.preheader, label %vector.ph734

vector.ph734:                                     ; preds = %vector.memcheck729
  %n.vec736 = and i64 %77, -4
  %ind.end737 = add i64 %.2456, %n.vec736
  %ind.end739 = add i64 %78, %n.vec736
  %85 = getelementptr double, ptr %79, i64 %78
  %86 = getelementptr double, ptr %4, i64 %.2456
  br label %vector.body741

vector.body741:                                   ; preds = %vector.body741, %vector.ph734
  %index742 = phi i64 [ 0, %vector.ph734 ], [ %index.next747, %vector.body741 ]
  %87 = getelementptr double, ptr %85, i64 %index742
  %88 = getelementptr i8, ptr %87, i64 16
  %wide.load745 = load <2 x double>, ptr %87, align 8, !tbaa !9
  %wide.load746 = load <2 x double>, ptr %88, align 8, !tbaa !9
  %89 = getelementptr double, ptr %86, i64 %index742
  %90 = getelementptr inbounds i8, ptr %89, i64 16
  store <2 x double> %wide.load745, ptr %89, align 8, !tbaa !9
  store <2 x double> %wide.load746, ptr %90, align 8, !tbaa !9
  %index.next747 = add nuw i64 %index742, 4
  %91 = icmp eq i64 %index.next747, %n.vec736
  br i1 %91, label %middle.block731, label %vector.body741, !llvm.loop !18

middle.block731:                                  ; preds = %vector.body741
  %cmp.n748 = icmp eq i64 %77, %n.vec736
  br i1 %cmp.n748, label %.loopexit436, label %scalar.ph732.preheader

scalar.ph732.preheader:                           ; preds = %middle.block731, %vector.memcheck729, %.lr.ph452
  %.3450.ph = phi i64 [ %.2456, %vector.memcheck729 ], [ %.2456, %.lr.ph452 ], [ %ind.end737, %middle.block731 ]
  %.1357449.ph = phi i64 [ %78, %vector.memcheck729 ], [ %78, %.lr.ph452 ], [ %ind.end739, %middle.block731 ]
  br label %scalar.ph732

scalar.ph732:                                     ; preds = %scalar.ph732.preheader, %scalar.ph732
  %.3450 = phi i64 [ %96, %scalar.ph732 ], [ %.3450.ph, %scalar.ph732.preheader ]
  %.1357449 = phi i64 [ %97, %scalar.ph732 ], [ %.1357449.ph, %scalar.ph732.preheader ]
  %92 = mul nuw nsw i64 %.1357449, %.0331
  %93 = getelementptr double, ptr %79, i64 %92
  %94 = load double, ptr %93, align 8, !tbaa !9
  %95 = getelementptr inbounds double, ptr %4, i64 %.3450
  store double %94, ptr %95, align 8, !tbaa !9
  %96 = add nsw i64 %.3450, 1
  %97 = add nuw nsw i64 %.1357449, 1
  %.not415.not = icmp slt i64 %.1357449, %.702
  br i1 %.not415.not, label %scalar.ph732, label %.loopexit436, !llvm.loop !19

98:                                               ; preds = %.thread422
  %.not409.not462 = icmp sgt i64 %., 0
  br i1 %.not409.not462, label %.lr.ph466.preheader, label %._crit_edge467

.lr.ph466.preheader:                              ; preds = %98
  %scevgep752 = getelementptr i8, ptr %4, i64 8
  %99 = shl i64 %.702, 3
  %ident.check750.not = icmp ult i64 %36, 2
  %100 = getelementptr i8, ptr %3, i64 %99
  %101 = getelementptr i8, ptr %100, i64 8
  %102 = getelementptr i8, ptr %3, i64 %99
  %invariant.gep1178 = getelementptr i8, ptr %4, i64 8
  %invariant.gep1180 = getelementptr i8, ptr %4, i64 16
  %invariant.gep1182 = getelementptr i8, ptr %4, i64 24
  br label %.lr.ph466

.lr.ph466:                                        ; preds = %.lr.ph466.preheader, %.loopexit1108
  %loop-unroll.iv1149 = phi i64 [ 0, %.lr.ph466.preheader ], [ %loop-unroll.iv.next1150, %.loopexit1108 ]
  %loop-unroll.iv = phi i64 [ 1, %.lr.ph466.preheader ], [ %loop-unroll.iv.next, %.loopexit1108 ]
  %scev.check.iv753 = phi ptr [ %scevgep752, %.lr.ph466.preheader ], [ %scevgep754, %.loopexit1108 ]
  %scev.check.iv = phi ptr [ %4, %.lr.ph466.preheader ], [ %scevgep, %.loopexit1108 ]
  %indvars.iv = phi i64 [ 1, %.lr.ph466.preheader ], [ %indvars.iv.next, %.loopexit1108 ]
  %.4464 = phi i64 [ 0, %.lr.ph466.preheader ], [ %110, %.loopexit1108 ]
  %.2358463 = phi i64 [ 0, %.lr.ph466.preheader ], [ %142, %.loopexit1108 ]
  %103 = add nuw i64 %.2358463, 2
  %104 = add nuw i64 %.2358463, 2
  %105 = shl i64 %.2358463, 3
  %106 = add i64 %105, 16
  %107 = shl i64 %.2358463, 3
  %108 = add i64 %107, 8
  %109 = add nsw i64 %.2358463, %.702
  %110 = add i64 %.4464, %indvars.iv
  %min.iters.check759 = icmp ugt i64 %indvars.iv, 3
  %or.cond1115 = and i1 %min.iters.check759, %ident.check750.not
  br i1 %or.cond1115, label %vector.memcheck751, label %scalar.ph758.preheader

vector.memcheck751:                               ; preds = %.lr.ph466
  %111 = shl i64 %.2358463, 4
  %scevgep756 = getelementptr i8, ptr %101, i64 %111
  %scevgep755 = getelementptr i8, ptr %102, i64 %107
  %bound0 = icmp ult ptr %scev.check.iv, %scevgep756
  %bound1 = icmp ult ptr %scevgep755, %scev.check.iv753
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph758.preheader, label %vector.ph760

vector.ph760:                                     ; preds = %vector.memcheck751
  %n.vec762 = and i64 %indvars.iv, -4
  %ind.end763 = add i64 %.4464, %n.vec762
  %112 = mul nuw i64 %n.vec762, %.0331
  %ind.end765 = add i64 %109, %112
  %113 = getelementptr double, ptr %3, i64 %109
  %114 = getelementptr double, ptr %4, i64 %.4464
  br label %vector.body767

vector.body767:                                   ; preds = %vector.body767, %vector.ph760
  %index768 = phi i64 [ 0, %vector.ph760 ], [ %index.next773, %vector.body767 ]
  %115 = getelementptr double, ptr %113, i64 %index768
  %116 = getelementptr inbounds i8, ptr %115, i64 16
  %wide.load771 = load <2 x double>, ptr %115, align 8, !tbaa !9, !alias.scope !20
  %wide.load772 = load <2 x double>, ptr %116, align 8, !tbaa !9, !alias.scope !20
  %117 = getelementptr double, ptr %114, i64 %index768
  %118 = getelementptr inbounds i8, ptr %117, i64 16
  store <2 x double> %wide.load771, ptr %117, align 8, !tbaa !9, !alias.scope !23, !noalias !20
  store <2 x double> %wide.load772, ptr %118, align 8, !tbaa !9, !alias.scope !23, !noalias !20
  %index.next773 = add nuw i64 %index768, 4
  %119 = icmp eq i64 %index.next773, %n.vec762
  br i1 %119, label %middle.block757, label %vector.body767, !llvm.loop !25

middle.block757:                                  ; preds = %vector.body767
  %cmp.n774 = icmp eq i64 %indvars.iv, %n.vec762
  br i1 %cmp.n774, label %.loopexit1108, label %scalar.ph758.preheader

scalar.ph758.preheader:                           ; preds = %middle.block757, %vector.memcheck751, %.lr.ph466
  %.5461.ph = phi i64 [ %.4464, %vector.memcheck751 ], [ %.4464, %.lr.ph466 ], [ %ind.end763, %middle.block757 ]
  %.0341460.ph = phi i64 [ %109, %vector.memcheck751 ], [ %109, %.lr.ph466 ], [ %ind.end765, %middle.block757 ]
  %120 = sub i64 %loop-unroll.iv, %.5461.ph
  %121 = sub i64 %loop-unroll.iv1149, %.5461.ph
  %xtraiter = and i64 %120, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph758.prol.loopexit, label %scalar.ph758.prol

scalar.ph758.prol:                                ; preds = %scalar.ph758.preheader, %scalar.ph758.prol
  %.5461.prol = phi i64 [ %125, %scalar.ph758.prol ], [ %.5461.ph, %scalar.ph758.preheader ]
  %.0341460.prol = phi i64 [ %126, %scalar.ph758.prol ], [ %.0341460.ph, %scalar.ph758.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph758.prol ], [ 0, %scalar.ph758.preheader ]
  %122 = getelementptr inbounds double, ptr %3, i64 %.0341460.prol
  %123 = load double, ptr %122, align 8, !tbaa !9
  %124 = getelementptr inbounds double, ptr %4, i64 %.5461.prol
  store double %123, ptr %124, align 8, !tbaa !9
  %125 = add i64 %.5461.prol, 1
  %126 = add nsw i64 %.0341460.prol, %.0331
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %scalar.ph758.prol.loopexit, label %scalar.ph758.prol, !llvm.loop !26

scalar.ph758.prol.loopexit:                       ; preds = %scalar.ph758.prol, %scalar.ph758.preheader
  %.5461.unr = phi i64 [ %.5461.ph, %scalar.ph758.preheader ], [ %125, %scalar.ph758.prol ]
  %.0341460.unr = phi i64 [ %.0341460.ph, %scalar.ph758.preheader ], [ %126, %scalar.ph758.prol ]
  %127 = icmp ult i64 %121, 3
  br i1 %127, label %.loopexit1108, label %scalar.ph758

scalar.ph758:                                     ; preds = %scalar.ph758.prol.loopexit, %scalar.ph758
  %.5461 = phi i64 [ %140, %scalar.ph758 ], [ %.5461.unr, %scalar.ph758.prol.loopexit ]
  %.0341460 = phi i64 [ %141, %scalar.ph758 ], [ %.0341460.unr, %scalar.ph758.prol.loopexit ]
  %128 = getelementptr inbounds double, ptr %3, i64 %.0341460
  %129 = load double, ptr %128, align 8, !tbaa !9
  %130 = getelementptr inbounds double, ptr %4, i64 %.5461
  store double %129, ptr %130, align 8, !tbaa !9
  %131 = add nsw i64 %.0341460, %.0331
  %132 = getelementptr inbounds double, ptr %3, i64 %131
  %133 = load double, ptr %132, align 8, !tbaa !9
  %gep1179 = getelementptr double, ptr %invariant.gep1178, i64 %.5461
  store double %133, ptr %gep1179, align 8, !tbaa !9
  %134 = add nsw i64 %131, %.0331
  %135 = getelementptr inbounds double, ptr %3, i64 %134
  %136 = load double, ptr %135, align 8, !tbaa !9
  %gep1181 = getelementptr double, ptr %invariant.gep1180, i64 %.5461
  store double %136, ptr %gep1181, align 8, !tbaa !9
  %137 = add nsw i64 %134, %.0331
  %138 = getelementptr inbounds double, ptr %3, i64 %137
  %139 = load double, ptr %138, align 8, !tbaa !9
  %gep1183 = getelementptr double, ptr %invariant.gep1182, i64 %.5461
  store double %139, ptr %gep1183, align 8, !tbaa !9
  %140 = add i64 %.5461, 4
  %141 = add nsw i64 %137, %.0331
  %exitcond649.not.3 = icmp eq i64 %140, %110
  br i1 %exitcond649.not.3, label %.loopexit1108, label %scalar.ph758, !llvm.loop !28

.loopexit1108:                                    ; preds = %scalar.ph758.prol.loopexit, %scalar.ph758, %middle.block757
  %142 = add nuw nsw i64 %.2358463, 1
  %indvars.iv.next = add nuw i64 %indvars.iv, 1
  %exitcond650.not = icmp eq i64 %142, %.
  %scevgep = getelementptr i8, ptr %scev.check.iv, i64 %108
  %scevgep754 = getelementptr i8, ptr %scev.check.iv753, i64 %106
  %loop-unroll.iv.next = add i64 %loop-unroll.iv, %104
  %loop-unroll.iv.next1150 = add i64 %loop-unroll.iv1149, %103
  br i1 %exitcond650.not, label %._crit_edge467, label %.lr.ph466, !llvm.loop !29

._crit_edge467:                                   ; preds = %.loopexit1108, %98
  %.4.lcssa = phi i64 [ 0, %98 ], [ %110, %.loopexit1108 ]
  %.not410.not476 = icmp slt i64 %., %36
  br i1 %.not410.not476, label %.lr.ph481.preheader, label %.loopexit

.lr.ph481.preheader:                              ; preds = %._crit_edge467
  %143 = sub i64 %22, %21
  %144 = mul i64 %.0331, -8
  %145 = add nuw i64 %.0331, 1
  br label %.lr.ph481

.lr.ph481:                                        ; preds = %.lr.ph481.preheader, %._crit_edge474
  %indvar = phi i64 [ 0, %.lr.ph481.preheader ], [ %indvar.next, %._crit_edge474 ]
  %.6479 = phi i64 [ %.4.lcssa, %.lr.ph481.preheader ], [ %.7.lcssa, %._crit_edge474 ]
  %.0333478 = phi i64 [ 0, %.lr.ph481.preheader ], [ %167, %._crit_edge474 ]
  %.3359477 = phi i64 [ %., %.lr.ph481.preheader ], [ %168, %._crit_edge474 ]
  %146 = mul i64 %145, %indvar
  %147 = add i64 %., %146
  %smax777 = tail call i64 @llvm.smax.i64(i64 %147, i64 %.0333478)
  %148 = mul i64 %.0331, %indvar
  %reass.sub = sub i64 %smax777, %148
  %149 = add i64 %reass.sub, 1
  %150 = mul i64 %144, %indvar
  %151 = add i64 %143, %150
  %152 = add nsw i64 %.0333478, %.3359477
  %.not411469 = icmp slt i64 %.3359477, 0
  br i1 %.not411469, label %._crit_edge474, label %.lr.ph473.preheader

.lr.ph473.preheader:                              ; preds = %.lr.ph481
  %min.iters.check780 = icmp ult i64 %149, 4
  br i1 %min.iters.check780, label %.lr.ph473.preheader1141, label %vector.memcheck775

vector.memcheck775:                               ; preds = %.lr.ph473.preheader
  %153 = shl i64 %.6479, 3
  %154 = add i64 %151, %153
  %diff.check776 = icmp ult i64 %154, 32
  br i1 %diff.check776, label %.lr.ph473.preheader1141, label %vector.ph781

vector.ph781:                                     ; preds = %vector.memcheck775
  %n.vec783 = and i64 %149, -4
  %ind.end784 = add i64 %.6479, %n.vec783
  %ind.end786 = add i64 %.0333478, %n.vec783
  %155 = getelementptr double, ptr %3, i64 %.0333478
  %156 = getelementptr double, ptr %4, i64 %.6479
  br label %vector.body788

vector.body788:                                   ; preds = %vector.body788, %vector.ph781
  %index789 = phi i64 [ 0, %vector.ph781 ], [ %index.next794, %vector.body788 ]
  %157 = getelementptr double, ptr %155, i64 %index789
  %158 = getelementptr inbounds i8, ptr %157, i64 16
  %wide.load792 = load <2 x double>, ptr %157, align 8, !tbaa !9
  %wide.load793 = load <2 x double>, ptr %158, align 8, !tbaa !9
  %159 = getelementptr double, ptr %156, i64 %index789
  %160 = getelementptr inbounds i8, ptr %159, i64 16
  store <2 x double> %wide.load792, ptr %159, align 8, !tbaa !9
  store <2 x double> %wide.load793, ptr %160, align 8, !tbaa !9
  %index.next794 = add nuw i64 %index789, 4
  %161 = icmp eq i64 %index.next794, %n.vec783
  br i1 %161, label %middle.block778, label %vector.body788, !llvm.loop !30

middle.block778:                                  ; preds = %vector.body788
  %cmp.n795 = icmp eq i64 %149, %n.vec783
  br i1 %cmp.n795, label %._crit_edge474, label %.lr.ph473.preheader1141

.lr.ph473.preheader1141:                          ; preds = %middle.block778, %vector.memcheck775, %.lr.ph473.preheader
  %.7471.ph = phi i64 [ %.6479, %vector.memcheck775 ], [ %.6479, %.lr.ph473.preheader ], [ %ind.end784, %middle.block778 ]
  %.1342470.ph = phi i64 [ %.0333478, %vector.memcheck775 ], [ %.0333478, %.lr.ph473.preheader ], [ %ind.end786, %middle.block778 ]
  br label %.lr.ph473

.lr.ph473:                                        ; preds = %.lr.ph473.preheader1141, %.lr.ph473
  %.7471 = phi i64 [ %165, %.lr.ph473 ], [ %.7471.ph, %.lr.ph473.preheader1141 ]
  %.1342470 = phi i64 [ %166, %.lr.ph473 ], [ %.1342470.ph, %.lr.ph473.preheader1141 ]
  %162 = getelementptr inbounds double, ptr %3, i64 %.1342470
  %163 = load double, ptr %162, align 8, !tbaa !9
  %164 = getelementptr inbounds double, ptr %4, i64 %.7471
  store double %163, ptr %164, align 8, !tbaa !9
  %165 = add nsw i64 %.7471, 1
  %166 = add nuw nsw i64 %.1342470, 1
  %.not411.not = icmp slt i64 %.1342470, %152
  br i1 %.not411.not, label %.lr.ph473, label %._crit_edge474, !llvm.loop !31

._crit_edge474:                                   ; preds = %.lr.ph473, %middle.block778, %.lr.ph481
  %.7.lcssa = phi i64 [ %.6479, %.lr.ph481 ], [ %ind.end784, %middle.block778 ], [ %165, %.lr.ph473 ]
  %167 = add i64 %.0333478, %.0331
  %168 = add nsw i64 %.3359477, 1
  %exitcond652.not = icmp eq i64 %168, %36
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond652.not, label %.loopexit, label %.lr.ph481, !llvm.loop !32

169:                                              ; preds = %50
  br i1 %.not381, label %256, label %170

170:                                              ; preds = %169
  %.not405534 = icmp slt i64 %.702, 0
  br i1 %.not405534, label %.loopexit, label %.lr.ph538

.lr.ph538:                                        ; preds = %170
  %171 = mul nuw nsw i64 %52, %36
  %172 = add nuw nsw i64 %52, 1
  %scevgep895 = getelementptr i8, ptr %4, i64 8
  %173 = xor i64 %52, -1
  %174 = shl i64 %52, 3
  %175 = add i64 %174, 8
  %176 = shl i64 %52, 3
  %invariant.gep1190 = getelementptr double, ptr %3, i64 %52
  %invariant.gep1192 = getelementptr double, ptr %3, i64 %51
  %.idx = mul i64 %52, 24
  %invariant.gep1194 = getelementptr i8, ptr %3, i64 %.idx
  br label %177

177:                                              ; preds = %.lr.ph538, %._crit_edge532
  %.8536 = phi i64 [ 0, %.lr.ph538 ], [ %.9.lcssa, %._crit_edge532 ]
  %.3371535 = phi i64 [ 0, %.lr.ph538 ], [ %227, %._crit_edge532 ]
  %178 = mul i64 %172, %.3371535
  %179 = add i64 %52, %178
  %smax896 = tail call i64 @llvm.smax.i64(i64 %179, i64 %171)
  %180 = mul i64 %.3371535, %173
  %181 = sub i64 %180, %52
  %182 = add i64 %smax896, %181
  %183 = icmp ne i64 %182, 0
  %umin = zext i1 %183 to i64
  %184 = sub i64 %182, %umin
  %185 = mul i64 %175, %.3371535
  %scevgep898 = getelementptr i8, ptr %3, i64 %185
  %186 = mul nsw i64 %.3371535, %172
  %187 = icmp slt i64 %186, %171
  br i1 %187, label %.lr.ph531.preheader, label %._crit_edge532

.lr.ph531.preheader:                              ; preds = %177
  %188 = mul i64 %172, %.3371535
  %189 = add i64 %52, %188
  %smax905 = tail call i64 @llvm.smax.i64(i64 %189, i64 %171)
  %190 = mul i64 %.3371535, %173
  %191 = sub i64 %190, %52
  %192 = add i64 %smax905, %191
  %193 = icmp ne i64 %192, 0
  %umin906.neg = sext i1 %193 to i64
  %194 = add i64 %192, %umin906.neg
  %195 = select i1 %193, i64 2, i64 1
  %196 = udiv i64 %194, %52
  %197 = add i64 %195, %196
  %min.iters.check909 = icmp ult i64 %197, 14
  br i1 %min.iters.check909, label %.lr.ph531.preheader1132, label %vector.memcheck893

vector.memcheck893:                               ; preds = %.lr.ph531.preheader
  %198 = shl i64 %.8536, 3
  %scevgep894 = getelementptr i8, ptr %4, i64 %198
  %199 = udiv i64 %184, %52
  %200 = add i64 %199, %umin
  %201 = add i64 %.8536, %200
  %202 = shl i64 %201, 3
  %scevgep897 = getelementptr i8, ptr %scevgep895, i64 %202
  %203 = mul i64 %176, %200
  %scevgep899 = getelementptr i8, ptr %scevgep898, i64 %203
  %204 = icmp ult ptr %scevgep898, %scevgep899
  %umin900 = select i1 %204, ptr %scevgep898, ptr %scevgep899
  %205 = icmp ugt ptr %scevgep898, %scevgep899
  %umax = select i1 %205, ptr %scevgep898, ptr %scevgep899
  %scevgep901 = getelementptr i8, ptr %umax, i64 8
  %bound0902 = icmp ult ptr %scevgep894, %scevgep901
  %bound1903 = icmp ult ptr %umin900, %scevgep897
  %found.conflict904 = and i1 %bound0902, %bound1903
  br i1 %found.conflict904, label %.lr.ph531.preheader1132, label %vector.ph910

vector.ph910:                                     ; preds = %vector.memcheck893
  %n.vec912 = and i64 %197, -4
  %ind.end913 = add i64 %.8536, %n.vec912
  %206 = mul i64 %n.vec912, %52
  %ind.end915 = add i64 %186, %206
  %207 = getelementptr double, ptr %4, i64 %.8536
  br label %vector.body917

vector.body917:                                   ; preds = %vector.body917, %vector.ph910
  %index918 = phi i64 [ 0, %vector.ph910 ], [ %index.next921, %vector.body917 ]
  %208 = mul i64 %index918, %52
  %offset.idx920 = add i64 %186, %208
  %209 = getelementptr inbounds double, ptr %3, i64 %offset.idx920
  %gep1191 = getelementptr double, ptr %invariant.gep1190, i64 %offset.idx920
  %gep1193 = getelementptr double, ptr %invariant.gep1192, i64 %offset.idx920
  %gep1195 = getelementptr double, ptr %invariant.gep1194, i64 %offset.idx920
  %210 = load double, ptr %209, align 8, !tbaa !9, !alias.scope !33
  %211 = load double, ptr %gep1191, align 8, !tbaa !9, !alias.scope !33
  %212 = insertelement <2 x double> poison, double %210, i64 0
  %213 = insertelement <2 x double> %212, double %211, i64 1
  %214 = load double, ptr %gep1193, align 8, !tbaa !9, !alias.scope !33
  %215 = load double, ptr %gep1195, align 8, !tbaa !9, !alias.scope !33
  %216 = insertelement <2 x double> poison, double %214, i64 0
  %217 = insertelement <2 x double> %216, double %215, i64 1
  %218 = getelementptr double, ptr %207, i64 %index918
  %219 = getelementptr inbounds i8, ptr %218, i64 16
  store <2 x double> %213, ptr %218, align 8, !tbaa !9, !alias.scope !36, !noalias !33
  store <2 x double> %217, ptr %219, align 8, !tbaa !9, !alias.scope !36, !noalias !33
  %index.next921 = add nuw i64 %index918, 4
  %220 = icmp eq i64 %index.next921, %n.vec912
  br i1 %220, label %middle.block907, label %vector.body917, !llvm.loop !38

middle.block907:                                  ; preds = %vector.body917
  %cmp.n922 = icmp eq i64 %197, %n.vec912
  br i1 %cmp.n922, label %._crit_edge532, label %.lr.ph531.preheader1132

.lr.ph531.preheader1132:                          ; preds = %middle.block907, %vector.memcheck893, %.lr.ph531.preheader
  %.9529.ph = phi i64 [ %.8536, %vector.memcheck893 ], [ %.8536, %.lr.ph531.preheader ], [ %ind.end913, %middle.block907 ]
  %.2343528.ph = phi i64 [ %186, %vector.memcheck893 ], [ %186, %.lr.ph531.preheader ], [ %ind.end915, %middle.block907 ]
  br label %.lr.ph531

.lr.ph531:                                        ; preds = %.lr.ph531.preheader1132, %.lr.ph531
  %.9529 = phi i64 [ %224, %.lr.ph531 ], [ %.9529.ph, %.lr.ph531.preheader1132 ]
  %.2343528 = phi i64 [ %225, %.lr.ph531 ], [ %.2343528.ph, %.lr.ph531.preheader1132 ]
  %221 = getelementptr inbounds double, ptr %3, i64 %.2343528
  %222 = load double, ptr %221, align 8, !tbaa !9
  %223 = getelementptr inbounds double, ptr %4, i64 %.9529
  store double %222, ptr %223, align 8, !tbaa !9
  %224 = add nsw i64 %.9529, 1
  %225 = add nsw i64 %.2343528, %52
  %226 = icmp slt i64 %225, %171
  br i1 %226, label %.lr.ph531, label %._crit_edge532, !llvm.loop !39

._crit_edge532:                                   ; preds = %.lr.ph531, %middle.block907, %177
  %.9.lcssa = phi i64 [ %.8536, %177 ], [ %ind.end913, %middle.block907 ], [ %224, %.lr.ph531 ]
  %227 = add nuw i64 %.3371535, 1
  %exitcond662.not = icmp eq i64 %.3371535, %.702
  br i1 %exitcond662.not, label %._crit_edge539, label %177, !llvm.loop !40

._crit_edge539:                                   ; preds = %._crit_edge532
  %.not406.not548.not = icmp eq i64 %.702, 0
  br i1 %.not406.not548.not, label %.loopexit, label %.lr.ph553

.lr.ph553:                                        ; preds = %._crit_edge539
  %228 = add nuw nsw i64 %52, 1
  %229 = add i64 %14, -8
  %230 = sub i64 %229, %13
  %231 = shl i64 %52, 3
  %232 = sub nuw nsw i64 -8, %231
  br label %233

233:                                              ; preds = %.lr.ph553, %._crit_edge546
  %.10551 = phi i64 [ %.9.lcssa, %.lr.ph553 ], [ %.11.lcssa, %._crit_edge546 ]
  %.1334550 = phi i64 [ 1, %.lr.ph553 ], [ %254, %._crit_edge546 ]
  %.4360549 = phi i64 [ 0, %.lr.ph553 ], [ %255, %._crit_edge546 ]
  %234 = sub nsw i64 %.702, %.4360549
  %235 = mul i64 %232, %.4360549
  %236 = add i64 %230, %235
  %237 = xor i64 %.4360549, -1
  %238 = add nsw i64 %.702, %237
  %239 = add i64 %238, %.1334550
  %.not407541 = icmp sgt i64 %.1334550, %239
  br i1 %.not407541, label %._crit_edge546, label %.lr.ph545.preheader

.lr.ph545.preheader:                              ; preds = %233
  %min.iters.check927 = icmp ult i64 %234, 4
  br i1 %min.iters.check927, label %.lr.ph545.preheader1129, label %vector.memcheck923

vector.memcheck923:                               ; preds = %.lr.ph545.preheader
  %240 = shl i64 %.10551, 3
  %241 = add i64 %236, %240
  %diff.check924 = icmp ult i64 %241, 32
  br i1 %diff.check924, label %.lr.ph545.preheader1129, label %vector.ph928

vector.ph928:                                     ; preds = %vector.memcheck923
  %n.vec930 = and i64 %234, -4
  %ind.end931 = add i64 %.10551, %n.vec930
  %ind.end933 = add i64 %.1334550, %n.vec930
  %242 = getelementptr double, ptr %3, i64 %.1334550
  %243 = getelementptr double, ptr %4, i64 %.10551
  br label %vector.body935

vector.body935:                                   ; preds = %vector.body935, %vector.ph928
  %index936 = phi i64 [ 0, %vector.ph928 ], [ %index.next941, %vector.body935 ]
  %244 = getelementptr double, ptr %242, i64 %index936
  %245 = getelementptr inbounds i8, ptr %244, i64 16
  %wide.load939 = load <2 x double>, ptr %244, align 8, !tbaa !9
  %wide.load940 = load <2 x double>, ptr %245, align 8, !tbaa !9
  %246 = getelementptr double, ptr %243, i64 %index936
  %247 = getelementptr inbounds i8, ptr %246, i64 16
  store <2 x double> %wide.load939, ptr %246, align 8, !tbaa !9
  store <2 x double> %wide.load940, ptr %247, align 8, !tbaa !9
  %index.next941 = add nuw i64 %index936, 4
  %248 = icmp eq i64 %index.next941, %n.vec930
  br i1 %248, label %middle.block925, label %vector.body935, !llvm.loop !41

middle.block925:                                  ; preds = %vector.body935
  %cmp.n942 = icmp eq i64 %234, %n.vec930
  br i1 %cmp.n942, label %._crit_edge546, label %.lr.ph545.preheader1129

.lr.ph545.preheader1129:                          ; preds = %middle.block925, %vector.memcheck923, %.lr.ph545.preheader
  %.11543.ph = phi i64 [ %.10551, %vector.memcheck923 ], [ %.10551, %.lr.ph545.preheader ], [ %ind.end931, %middle.block925 ]
  %.3344542.ph = phi i64 [ %.1334550, %vector.memcheck923 ], [ %.1334550, %.lr.ph545.preheader ], [ %ind.end933, %middle.block925 ]
  br label %.lr.ph545

.lr.ph545:                                        ; preds = %.lr.ph545.preheader1129, %.lr.ph545
  %.11543 = phi i64 [ %252, %.lr.ph545 ], [ %.11543.ph, %.lr.ph545.preheader1129 ]
  %.3344542 = phi i64 [ %253, %.lr.ph545 ], [ %.3344542.ph, %.lr.ph545.preheader1129 ]
  %249 = getelementptr inbounds double, ptr %3, i64 %.3344542
  %250 = load double, ptr %249, align 8, !tbaa !9
  %251 = getelementptr inbounds double, ptr %4, i64 %.11543
  store double %250, ptr %251, align 8, !tbaa !9
  %252 = add nsw i64 %.11543, 1
  %253 = add nsw i64 %.3344542, 1
  %.not407.not = icmp slt i64 %.3344542, %239
  br i1 %.not407.not, label %.lr.ph545, label %._crit_edge546, !llvm.loop !42

._crit_edge546:                                   ; preds = %.lr.ph545, %middle.block925, %233
  %.11.lcssa = phi i64 [ %.10551, %233 ], [ %ind.end931, %middle.block925 ], [ %252, %.lr.ph545 ]
  %254 = add i64 %228, %.1334550
  %255 = add nuw nsw i64 %.4360549, 1
  %exitcond664.not = icmp eq i64 %255, %.702
  br i1 %exitcond664.not, label %.loopexit, label %233, !llvm.loop !43

256:                                              ; preds = %169
  %.not401.not556 = icmp sgt i64 %., 0
  br i1 %.not401.not556, label %.lr.ph561.preheader, label %._crit_edge562

.lr.ph561.preheader:                              ; preds = %256
  %257 = mul i64 %.702, %52
  %258 = mul i64 %.702, %52
  %259 = shl i64 %258, 3
  %260 = add i64 %259, %11
  %261 = sub i64 %12, %260
  %262 = mul i64 %52, -8
  %263 = add nuw i64 %52, 1
  br label %.lr.ph561

.lr.ph561:                                        ; preds = %.lr.ph561.preheader, %.loopexit1106
  %.12559 = phi i64 [ %.lcssa714, %.loopexit1106 ], [ 0, %.lr.ph561.preheader ]
  %.2335558 = phi i64 [ %286, %.loopexit1106 ], [ %257, %.lr.ph561.preheader ]
  %.5361557 = phi i64 [ %287, %.loopexit1106 ], [ 0, %.lr.ph561.preheader ]
  %264 = mul i64 %263, %.5361557
  %265 = add i64 %257, %264
  %smax945 = tail call i64 @llvm.smax.i64(i64 %.2335558, i64 %265)
  %266 = add i64 %.702, %.5361557
  %267 = mul i64 %266, %52
  %reass.sub1110 = sub i64 %smax945, %267
  %268 = add i64 %reass.sub1110, 1
  %269 = add nsw i64 %.2335558, %.5361557
  %min.iters.check948 = icmp ult i64 %268, 4
  br i1 %min.iters.check948, label %scalar.ph947.preheader, label %vector.memcheck943

vector.memcheck943:                               ; preds = %.lr.ph561
  %270 = mul i64 %262, %.5361557
  %271 = add i64 %261, %270
  %272 = shl i64 %.12559, 3
  %273 = add i64 %271, %272
  %diff.check944 = icmp ult i64 %273, 32
  br i1 %diff.check944, label %scalar.ph947.preheader, label %vector.ph949

vector.ph949:                                     ; preds = %vector.memcheck943
  %n.vec951 = and i64 %268, -4
  %ind.end952 = add i64 %.12559, %n.vec951
  %ind.end954 = add i64 %.2335558, %n.vec951
  %274 = getelementptr double, ptr %3, i64 %.2335558
  %275 = getelementptr double, ptr %4, i64 %.12559
  br label %vector.body956

vector.body956:                                   ; preds = %vector.body956, %vector.ph949
  %index957 = phi i64 [ 0, %vector.ph949 ], [ %index.next962, %vector.body956 ]
  %276 = getelementptr double, ptr %274, i64 %index957
  %277 = getelementptr inbounds i8, ptr %276, i64 16
  %wide.load960 = load <2 x double>, ptr %276, align 8, !tbaa !9
  %wide.load961 = load <2 x double>, ptr %277, align 8, !tbaa !9
  %278 = getelementptr double, ptr %275, i64 %index957
  %279 = getelementptr inbounds i8, ptr %278, i64 16
  store <2 x double> %wide.load960, ptr %278, align 8, !tbaa !9
  store <2 x double> %wide.load961, ptr %279, align 8, !tbaa !9
  %index.next962 = add nuw i64 %index957, 4
  %280 = icmp eq i64 %index.next962, %n.vec951
  br i1 %280, label %middle.block946, label %vector.body956, !llvm.loop !44

middle.block946:                                  ; preds = %vector.body956
  %cmp.n963 = icmp eq i64 %268, %n.vec951
  br i1 %cmp.n963, label %.loopexit1106, label %scalar.ph947.preheader

scalar.ph947.preheader:                           ; preds = %middle.block946, %vector.memcheck943, %.lr.ph561
  %.13555.ph = phi i64 [ %.12559, %vector.memcheck943 ], [ %.12559, %.lr.ph561 ], [ %ind.end952, %middle.block946 ]
  %.4345554.ph = phi i64 [ %.2335558, %vector.memcheck943 ], [ %.2335558, %.lr.ph561 ], [ %ind.end954, %middle.block946 ]
  br label %scalar.ph947

scalar.ph947:                                     ; preds = %scalar.ph947.preheader, %scalar.ph947
  %.13555 = phi i64 [ %284, %scalar.ph947 ], [ %.13555.ph, %scalar.ph947.preheader ]
  %.4345554 = phi i64 [ %285, %scalar.ph947 ], [ %.4345554.ph, %scalar.ph947.preheader ]
  %281 = getelementptr inbounds double, ptr %3, i64 %.4345554
  %282 = load double, ptr %281, align 8, !tbaa !9
  %283 = getelementptr inbounds double, ptr %4, i64 %.13555
  store double %282, ptr %283, align 8, !tbaa !9
  %284 = add nsw i64 %.13555, 1
  %285 = add nsw i64 %.4345554, 1
  %.not404.not = icmp slt i64 %.4345554, %269
  br i1 %.not404.not, label %scalar.ph947, label %.loopexit1106, !llvm.loop !45

.loopexit1106:                                    ; preds = %scalar.ph947, %middle.block946
  %.lcssa714 = phi i64 [ %ind.end952, %middle.block946 ], [ %284, %scalar.ph947 ]
  %286 = add nsw i64 %.2335558, %52
  %287 = add nuw nsw i64 %.5361557, 1
  %exitcond666.not = icmp eq i64 %287, %.
  br i1 %exitcond666.not, label %._crit_edge562, label %.lr.ph561, !llvm.loop !46

._crit_edge562:                                   ; preds = %.loopexit1106, %256
  %.12.lcssa = phi i64 [ 0, %256 ], [ %.lcssa714, %.loopexit1106 ]
  %.not402571 = icmp slt i64 %., 0
  br i1 %.not402571, label %.loopexit, label %.lr.ph575.preheader

.lr.ph575.preheader:                              ; preds = %._crit_edge562
  %scevgep966 = getelementptr i8, ptr %4, i64 8
  %288 = mul i64 %., %52
  %289 = add i64 %288, 1
  %290 = add nuw i64 %52, 1
  %umax969 = tail call i64 @llvm.umax.i64(i64 %52, i64 1)
  %291 = shl i64 %52, 3
  %292 = add nuw i64 %52, 1
  %umax981 = tail call i64 @llvm.umax.i64(i64 %52, i64 1)
  %invariant.gep1196 = getelementptr double, ptr %3, i64 %52
  %invariant.gep1198 = getelementptr double, ptr %3, i64 %51
  %.idx1111 = mul i64 %52, 24
  %invariant.gep1200 = getelementptr i8, ptr %3, i64 %.idx1111
  br label %.lr.ph575

.lr.ph575:                                        ; preds = %.lr.ph575.preheader, %._crit_edge569
  %.14573 = phi i64 [ %.15.lcssa, %._crit_edge569 ], [ %.12.lcssa, %.lr.ph575.preheader ]
  %.4372572 = phi i64 [ %343, %._crit_edge569 ], [ 0, %.lr.ph575.preheader ]
  %293 = add i64 %52, %.4372572
  %294 = mul i64 %290, %.4372572
  %295 = add i64 %289, %294
  %smax967 = tail call i64 @llvm.smax.i64(i64 %293, i64 %295)
  %296 = add i64 %52, %.4372572
  %297 = icmp slt i64 %293, %295
  %umin968 = zext i1 %297 to i64
  %298 = add i64 %296, %umin968
  %299 = sub i64 %smax967, %298
  %300 = shl i64 %.4372572, 3
  %scevgep971 = getelementptr i8, ptr %3, i64 %300
  %301 = add nuw nsw i64 %.4372572, %.
  %302 = mul nsw i64 %301, %52
  %303 = add nsw i64 %302, %.4372572
  %304 = icmp sgt i64 %302, -1
  br i1 %304, label %.lr.ph568.preheader, label %._crit_edge569

.lr.ph568.preheader:                              ; preds = %.lr.ph575
  %305 = add i64 %52, %.4372572
  %306 = mul i64 %292, %.4372572
  %307 = add i64 %289, %306
  %308 = icmp slt i64 %305, %307
  %umin980 = zext i1 %308 to i64
  %309 = add i64 %52, %.4372572
  %smax979 = tail call i64 @llvm.smax.i64(i64 %305, i64 %307)
  %310 = add i64 %309, %umin980
  %311 = sub i64 %smax979, %310
  %312 = select i1 %308, i64 2, i64 1
  %313 = udiv i64 %311, %umax981
  %314 = add i64 %312, %313
  %min.iters.check984 = icmp ult i64 %314, 14
  br i1 %min.iters.check984, label %.lr.ph568.preheader1125, label %vector.memcheck964

vector.memcheck964:                               ; preds = %.lr.ph568.preheader
  %315 = shl i64 %.14573, 3
  %scevgep965 = getelementptr i8, ptr %4, i64 %315
  %316 = udiv i64 %299, %umax969
  %317 = add i64 %316, %umin968
  %318 = add i64 %.14573, %317
  %319 = shl i64 %318, 3
  %scevgep970 = getelementptr i8, ptr %scevgep966, i64 %319
  %320 = mul i64 %291, %317
  %scevgep972 = getelementptr i8, ptr %scevgep971, i64 %320
  %321 = icmp ult ptr %scevgep971, %scevgep972
  %umin973 = select i1 %321, ptr %scevgep971, ptr %scevgep972
  %322 = icmp ugt ptr %scevgep971, %scevgep972
  %umax974 = select i1 %322, ptr %scevgep971, ptr %scevgep972
  %scevgep975 = getelementptr i8, ptr %umax974, i64 8
  %bound0976 = icmp ult ptr %scevgep965, %scevgep975
  %bound1977 = icmp ult ptr %umin973, %scevgep970
  %found.conflict978 = and i1 %bound0976, %bound1977
  br i1 %found.conflict978, label %.lr.ph568.preheader1125, label %vector.ph985

vector.ph985:                                     ; preds = %vector.memcheck964
  %n.vec987 = and i64 %314, -4
  %ind.end988 = add i64 %.14573, %n.vec987
  %323 = mul i64 %n.vec987, %52
  %ind.end990 = add i64 %.4372572, %323
  %324 = getelementptr double, ptr %4, i64 %.14573
  br label %vector.body992

vector.body992:                                   ; preds = %vector.body992, %vector.ph985
  %index993 = phi i64 [ 0, %vector.ph985 ], [ %index.next996, %vector.body992 ]
  %325 = mul i64 %index993, %52
  %offset.idx995 = add i64 %.4372572, %325
  %326 = getelementptr inbounds double, ptr %3, i64 %offset.idx995
  %gep1197 = getelementptr double, ptr %invariant.gep1196, i64 %offset.idx995
  %gep1199 = getelementptr double, ptr %invariant.gep1198, i64 %offset.idx995
  %gep1201 = getelementptr double, ptr %invariant.gep1200, i64 %offset.idx995
  %327 = load double, ptr %326, align 8, !tbaa !9, !alias.scope !47
  %328 = load double, ptr %gep1197, align 8, !tbaa !9, !alias.scope !47
  %329 = insertelement <2 x double> poison, double %327, i64 0
  %330 = insertelement <2 x double> %329, double %328, i64 1
  %331 = load double, ptr %gep1199, align 8, !tbaa !9, !alias.scope !47
  %332 = load double, ptr %gep1201, align 8, !tbaa !9, !alias.scope !47
  %333 = insertelement <2 x double> poison, double %331, i64 0
  %334 = insertelement <2 x double> %333, double %332, i64 1
  %335 = getelementptr double, ptr %324, i64 %index993
  %336 = getelementptr inbounds i8, ptr %335, i64 16
  store <2 x double> %330, ptr %335, align 8, !tbaa !9, !alias.scope !50, !noalias !47
  store <2 x double> %334, ptr %336, align 8, !tbaa !9, !alias.scope !50, !noalias !47
  %index.next996 = add nuw i64 %index993, 4
  %337 = icmp eq i64 %index.next996, %n.vec987
  br i1 %337, label %middle.block982, label %vector.body992, !llvm.loop !52

middle.block982:                                  ; preds = %vector.body992
  %cmp.n997 = icmp eq i64 %314, %n.vec987
  br i1 %cmp.n997, label %._crit_edge569, label %.lr.ph568.preheader1125

.lr.ph568.preheader1125:                          ; preds = %middle.block982, %vector.memcheck964, %.lr.ph568.preheader
  %.15566.ph = phi i64 [ %.14573, %vector.memcheck964 ], [ %.14573, %.lr.ph568.preheader ], [ %ind.end988, %middle.block982 ]
  %.5346565.ph = phi i64 [ %.4372572, %vector.memcheck964 ], [ %.4372572, %.lr.ph568.preheader ], [ %ind.end990, %middle.block982 ]
  br label %.lr.ph568

.lr.ph568:                                        ; preds = %.lr.ph568.preheader1125, %.lr.ph568
  %.15566 = phi i64 [ %341, %.lr.ph568 ], [ %.15566.ph, %.lr.ph568.preheader1125 ]
  %.5346565 = phi i64 [ %342, %.lr.ph568 ], [ %.5346565.ph, %.lr.ph568.preheader1125 ]
  %338 = getelementptr inbounds double, ptr %3, i64 %.5346565
  %339 = load double, ptr %338, align 8, !tbaa !9
  %340 = getelementptr inbounds double, ptr %4, i64 %.15566
  store double %339, ptr %340, align 8, !tbaa !9
  %341 = add nsw i64 %.15566, 1
  %342 = add nsw i64 %.5346565, %52
  %.not674 = icmp sgt i64 %342, %303
  br i1 %.not674, label %._crit_edge569, label %.lr.ph568, !llvm.loop !53

._crit_edge569:                                   ; preds = %.lr.ph568, %middle.block982, %.lr.ph575
  %.15.lcssa = phi i64 [ %.14573, %.lr.ph575 ], [ %ind.end988, %middle.block982 ], [ %341, %.lr.ph568 ]
  %343 = add nuw i64 %.4372572, 1
  %exitcond667.not = icmp eq i64 %.4372572, %.
  br i1 %exitcond667.not, label %.loopexit, label %.lr.ph575, !llvm.loop !54

.thread425:                                       ; preds = %.thread418
  br i1 %.not381, label %.lr.ph511, label %.preheader434.preheader

.preheader434.preheader:                          ; preds = %.thread425
  %344 = add i64 %20, -8
  %345 = sub i64 %344, %19
  %346 = shl i64 %.0331, 3
  %347 = sub nuw nsw i64 -8, %346
  br label %.preheader434

.preheader434:                                    ; preds = %.preheader434.preheader, %._crit_edge488
  %.16493 = phi i64 [ %.17.lcssa, %._crit_edge488 ], [ 0, %.preheader434.preheader ]
  %.1340492 = phi i64 [ %365, %._crit_edge488 ], [ 0, %.preheader434.preheader ]
  %.6362491 = phi i64 [ %366, %._crit_edge488 ], [ 0, %.preheader434.preheader ]
  %348 = sub nsw i64 %36, %.6362491
  %349 = mul i64 %347, %.6362491
  %350 = add i64 %345, %349
  %invariant.gep482 = getelementptr double, ptr %3, i64 %.1340492
  %.not400.not484 = icmp slt i64 %.6362491, %36
  br i1 %.not400.not484, label %.lr.ph487.preheader, label %._crit_edge488

.lr.ph487.preheader:                              ; preds = %.preheader434
  %min.iters.check800 = icmp ult i64 %348, 4
  br i1 %min.iters.check800, label %.lr.ph487.preheader1139, label %vector.memcheck796

vector.memcheck796:                               ; preds = %.lr.ph487.preheader
  %351 = shl i64 %.16493, 3
  %352 = add i64 %350, %351
  %diff.check797 = icmp ult i64 %352, 32
  br i1 %diff.check797, label %.lr.ph487.preheader1139, label %vector.ph801

vector.ph801:                                     ; preds = %vector.memcheck796
  %n.vec803 = and i64 %348, -4
  %ind.end804 = add i64 %.16493, %n.vec803
  %ind.end806 = add i64 %.6362491, %n.vec803
  %353 = getelementptr double, ptr %invariant.gep482, i64 %.6362491
  %354 = getelementptr double, ptr %4, i64 %.16493
  br label %vector.body808

vector.body808:                                   ; preds = %vector.body808, %vector.ph801
  %index809 = phi i64 [ 0, %vector.ph801 ], [ %index.next814, %vector.body808 ]
  %355 = getelementptr double, ptr %353, i64 %index809
  %356 = getelementptr i8, ptr %355, i64 8
  %357 = getelementptr i8, ptr %355, i64 24
  %wide.load812 = load <2 x double>, ptr %356, align 8, !tbaa !9
  %wide.load813 = load <2 x double>, ptr %357, align 8, !tbaa !9
  %358 = getelementptr double, ptr %354, i64 %index809
  %359 = getelementptr inbounds i8, ptr %358, i64 16
  store <2 x double> %wide.load812, ptr %358, align 8, !tbaa !9
  store <2 x double> %wide.load813, ptr %359, align 8, !tbaa !9
  %index.next814 = add nuw i64 %index809, 4
  %360 = icmp eq i64 %index.next814, %n.vec803
  br i1 %360, label %middle.block798, label %vector.body808, !llvm.loop !55

middle.block798:                                  ; preds = %vector.body808
  %cmp.n815 = icmp eq i64 %348, %n.vec803
  br i1 %cmp.n815, label %._crit_edge488, label %.lr.ph487.preheader1139

.lr.ph487.preheader1139:                          ; preds = %middle.block798, %vector.memcheck796, %.lr.ph487.preheader
  %.17486.ph = phi i64 [ %.16493, %vector.memcheck796 ], [ %.16493, %.lr.ph487.preheader ], [ %ind.end804, %middle.block798 ]
  %.5373485.ph = phi i64 [ %.6362491, %vector.memcheck796 ], [ %.6362491, %.lr.ph487.preheader ], [ %ind.end806, %middle.block798 ]
  br label %.lr.ph487

.lr.ph487:                                        ; preds = %.lr.ph487.preheader1139, %.lr.ph487
  %.17486 = phi i64 [ %364, %.lr.ph487 ], [ %.17486.ph, %.lr.ph487.preheader1139 ]
  %.5373485 = phi i64 [ %361, %.lr.ph487 ], [ %.5373485.ph, %.lr.ph487.preheader1139 ]
  %361 = add nuw nsw i64 %.5373485, 1
  %gep483 = getelementptr double, ptr %invariant.gep482, i64 %361
  %362 = load double, ptr %gep483, align 8, !tbaa !9
  %363 = getelementptr inbounds double, ptr %4, i64 %.17486
  store double %362, ptr %363, align 8, !tbaa !9
  %364 = add nsw i64 %.17486, 1
  %.not400.not = icmp slt i64 %361, %36
  br i1 %.not400.not, label %.lr.ph487, label %._crit_edge488, !llvm.loop !56

._crit_edge488:                                   ; preds = %.lr.ph487, %middle.block798, %.preheader434
  %.17.lcssa = phi i64 [ %.16493, %.preheader434 ], [ %ind.end804, %middle.block798 ], [ %364, %.lr.ph487 ]
  %365 = add nuw nsw i64 %.1340492, %.0331
  %366 = add nuw nsw i64 %.6362491, 1
  %exitcond654.not = icmp eq i64 %366, %49
  br i1 %exitcond654.not, label %.preheader.us.preheader, label %.preheader434, !llvm.loop !57

.preheader.us.preheader:                          ; preds = %._crit_edge488
  %ident.check817.not = icmp ult i64 %36, 2
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge499.us
  %.18503.us = phi i64 [ %.lcssa719, %._crit_edge499.us ], [ %.17.lcssa, %.preheader.us.preheader ]
  %.6374502.us = phi i64 [ %388, %._crit_edge499.us ], [ 0, %.preheader.us.preheader ]
  %367 = add nuw i64 %.6374502.us, 1
  %smax820 = tail call i64 @llvm.smax.i64(i64 %49, i64 %367)
  %368 = sub nsw i64 %smax820, %.6374502.us
  %369 = getelementptr double, ptr %3, i64 %.6374502.us
  %min.iters.check823 = icmp ugt i64 %368, 3
  %or.cond1116 = and i1 %min.iters.check823, %ident.check817.not
  br i1 %or.cond1116, label %vector.memcheck818, label %scalar.ph822.preheader

vector.memcheck818:                               ; preds = %.preheader.us
  %370 = shl i64 %.6374502.us, 4
  %371 = add i64 %370, %17
  %372 = sub i64 %18, %371
  %373 = shl i64 %.18503.us, 3
  %374 = add i64 %372, %373
  %diff.check819 = icmp ult i64 %374, 32
  br i1 %diff.check819, label %scalar.ph822.preheader, label %vector.ph824

vector.ph824:                                     ; preds = %vector.memcheck818
  %n.vec826 = and i64 %368, -4
  %ind.end827 = add i64 %.18503.us, %n.vec826
  %ind.end829 = add i64 %.6374502.us, %n.vec826
  %375 = getelementptr double, ptr %369, i64 %.6374502.us
  %376 = getelementptr double, ptr %4, i64 %.18503.us
  br label %vector.body831

vector.body831:                                   ; preds = %vector.body831, %vector.ph824
  %index832 = phi i64 [ 0, %vector.ph824 ], [ %index.next837, %vector.body831 ]
  %377 = getelementptr double, ptr %375, i64 %index832
  %378 = getelementptr i8, ptr %377, i64 16
  %wide.load835 = load <2 x double>, ptr %377, align 8, !tbaa !9
  %wide.load836 = load <2 x double>, ptr %378, align 8, !tbaa !9
  %379 = getelementptr double, ptr %376, i64 %index832
  %380 = getelementptr inbounds i8, ptr %379, i64 16
  store <2 x double> %wide.load835, ptr %379, align 8, !tbaa !9
  store <2 x double> %wide.load836, ptr %380, align 8, !tbaa !9
  %index.next837 = add nuw i64 %index832, 4
  %381 = icmp eq i64 %index.next837, %n.vec826
  br i1 %381, label %middle.block821, label %vector.body831, !llvm.loop !58

middle.block821:                                  ; preds = %vector.body831
  %cmp.n838 = icmp eq i64 %368, %n.vec826
  br i1 %cmp.n838, label %._crit_edge499.us, label %scalar.ph822.preheader

scalar.ph822.preheader:                           ; preds = %middle.block821, %vector.memcheck818, %.preheader.us
  %.19497.us.ph = phi i64 [ %.18503.us, %vector.memcheck818 ], [ %.18503.us, %.preheader.us ], [ %ind.end827, %middle.block821 ]
  %.7363496.us.ph = phi i64 [ %.6374502.us, %vector.memcheck818 ], [ %.6374502.us, %.preheader.us ], [ %ind.end829, %middle.block821 ]
  br label %scalar.ph822

scalar.ph822:                                     ; preds = %scalar.ph822.preheader, %scalar.ph822
  %.19497.us = phi i64 [ %386, %scalar.ph822 ], [ %.19497.us.ph, %scalar.ph822.preheader ]
  %.7363496.us = phi i64 [ %387, %scalar.ph822 ], [ %.7363496.us.ph, %scalar.ph822.preheader ]
  %382 = mul nuw nsw i64 %.7363496.us, %.0331
  %383 = getelementptr double, ptr %369, i64 %382
  %384 = load double, ptr %383, align 8, !tbaa !9
  %385 = getelementptr inbounds double, ptr %4, i64 %.19497.us
  store double %384, ptr %385, align 8, !tbaa !9
  %386 = add nsw i64 %.19497.us, 1
  %387 = add nuw nsw i64 %.7363496.us, 1
  %.not399.not.us = icmp slt i64 %387, %49
  br i1 %.not399.not.us, label %scalar.ph822, label %._crit_edge499.us, !llvm.loop !59

._crit_edge499.us:                                ; preds = %scalar.ph822, %middle.block821
  %.lcssa719 = phi i64 [ %ind.end827, %middle.block821 ], [ %386, %scalar.ph822 ]
  %388 = add nuw nsw i64 %.6374502.us, 1
  %exitcond655.not = icmp eq i64 %388, %49
  br i1 %exitcond655.not, label %.loopexit, label %.preheader.us, !llvm.loop !60

.lr.ph511:                                        ; preds = %.thread425
  %389 = add nuw nsw i64 %49, 1
  %scevgep844 = getelementptr i8, ptr %4, i64 8
  %390 = shl i64 %45, 3
  %ident.check840.not = icmp ult i64 %36, 2
  %391 = getelementptr i8, ptr %3, i64 %390
  %392 = getelementptr i8, ptr %391, i64 16
  %393 = getelementptr i8, ptr %3, i64 %390
  %394 = getelementptr i8, ptr %393, i64 8
  %invariant.gep1184 = getelementptr i8, ptr %4, i64 8
  %invariant.gep1186 = getelementptr i8, ptr %4, i64 16
  %invariant.gep1188 = getelementptr i8, ptr %4, i64 24
  br label %395

395:                                              ; preds = %.lr.ph511, %.loopexit1107
  %loop-unroll.iv1153 = phi i64 [ 0, %.lr.ph511 ], [ %loop-unroll.iv.next1154, %.loopexit1107 ]
  %loop-unroll.iv1151 = phi i64 [ 1, %.lr.ph511 ], [ %loop-unroll.iv.next1152, %.loopexit1107 ]
  %scev.check.iv845 = phi ptr [ %scevgep844, %.lr.ph511 ], [ %scevgep846, %.loopexit1107 ]
  %scev.check.iv842 = phi ptr [ %4, %.lr.ph511 ], [ %scevgep843, %.loopexit1107 ]
  %indvars.iv656 = phi i64 [ 1, %.lr.ph511 ], [ %indvars.iv.next657, %.loopexit1107 ]
  %.20509 = phi i64 [ 0, %.lr.ph511 ], [ %403, %.loopexit1107 ]
  %.8364508 = phi i64 [ 0, %.lr.ph511 ], [ %435, %.loopexit1107 ]
  %396 = add nuw i64 %.8364508, 2
  %397 = add nuw i64 %.8364508, 2
  %398 = shl i64 %.8364508, 3
  %399 = add i64 %398, 16
  %400 = shl i64 %.8364508, 3
  %401 = add i64 %400, 8
  %402 = add nuw nsw i64 %389, %.8364508
  %403 = add i64 %.20509, %indvars.iv656
  %min.iters.check854 = icmp ugt i64 %indvars.iv656, 3
  %or.cond1117 = and i1 %min.iters.check854, %ident.check840.not
  br i1 %or.cond1117, label %vector.memcheck841, label %scalar.ph853.preheader

vector.memcheck841:                               ; preds = %395
  %404 = shl i64 %.8364508, 4
  %scevgep848 = getelementptr i8, ptr %392, i64 %404
  %scevgep847 = getelementptr i8, ptr %394, i64 %400
  %bound0849 = icmp ult ptr %scev.check.iv842, %scevgep848
  %bound1850 = icmp ult ptr %scevgep847, %scev.check.iv845
  %found.conflict851 = and i1 %bound0849, %bound1850
  br i1 %found.conflict851, label %scalar.ph853.preheader, label %vector.ph855

vector.ph855:                                     ; preds = %vector.memcheck841
  %n.vec857 = and i64 %indvars.iv656, 9223372036854775804
  %ind.end858 = add i64 %.20509, %n.vec857
  %405 = mul nuw i64 %n.vec857, %.0331
  %ind.end860 = add nuw i64 %402, %405
  %406 = getelementptr double, ptr %3, i64 %402
  %407 = getelementptr double, ptr %4, i64 %.20509
  br label %vector.body862

vector.body862:                                   ; preds = %vector.body862, %vector.ph855
  %index863 = phi i64 [ 0, %vector.ph855 ], [ %index.next868, %vector.body862 ]
  %408 = getelementptr double, ptr %406, i64 %index863
  %409 = getelementptr inbounds i8, ptr %408, i64 16
  %wide.load866 = load <2 x double>, ptr %408, align 8, !tbaa !9, !alias.scope !61
  %wide.load867 = load <2 x double>, ptr %409, align 8, !tbaa !9, !alias.scope !61
  %410 = getelementptr double, ptr %407, i64 %index863
  %411 = getelementptr inbounds i8, ptr %410, i64 16
  store <2 x double> %wide.load866, ptr %410, align 8, !tbaa !9, !alias.scope !64, !noalias !61
  store <2 x double> %wide.load867, ptr %411, align 8, !tbaa !9, !alias.scope !64, !noalias !61
  %index.next868 = add nuw i64 %index863, 4
  %412 = icmp eq i64 %index.next868, %n.vec857
  br i1 %412, label %middle.block852, label %vector.body862, !llvm.loop !66

middle.block852:                                  ; preds = %vector.body862
  %cmp.n869 = icmp eq i64 %indvars.iv656, %n.vec857
  br i1 %cmp.n869, label %.loopexit1107, label %scalar.ph853.preheader

scalar.ph853.preheader:                           ; preds = %middle.block852, %vector.memcheck841, %395
  %.21506.ph = phi i64 [ %.20509, %vector.memcheck841 ], [ %.20509, %395 ], [ %ind.end858, %middle.block852 ]
  %.6347505.ph = phi i64 [ %402, %vector.memcheck841 ], [ %402, %395 ], [ %ind.end860, %middle.block852 ]
  %413 = sub i64 %loop-unroll.iv1151, %.21506.ph
  %414 = sub i64 %loop-unroll.iv1153, %.21506.ph
  %xtraiter1155 = and i64 %413, 3
  %lcmp.mod1156.not = icmp eq i64 %xtraiter1155, 0
  br i1 %lcmp.mod1156.not, label %scalar.ph853.prol.loopexit, label %scalar.ph853.prol

scalar.ph853.prol:                                ; preds = %scalar.ph853.preheader, %scalar.ph853.prol
  %.21506.prol = phi i64 [ %418, %scalar.ph853.prol ], [ %.21506.ph, %scalar.ph853.preheader ]
  %.6347505.prol = phi i64 [ %419, %scalar.ph853.prol ], [ %.6347505.ph, %scalar.ph853.preheader ]
  %prol.iter1157 = phi i64 [ %prol.iter1157.next, %scalar.ph853.prol ], [ 0, %scalar.ph853.preheader ]
  %415 = getelementptr inbounds double, ptr %3, i64 %.6347505.prol
  %416 = load double, ptr %415, align 8, !tbaa !9
  %417 = getelementptr inbounds double, ptr %4, i64 %.21506.prol
  store double %416, ptr %417, align 8, !tbaa !9
  %418 = add i64 %.21506.prol, 1
  %419 = add nuw nsw i64 %.6347505.prol, %.0331
  %prol.iter1157.next = add i64 %prol.iter1157, 1
  %prol.iter1157.cmp.not = icmp eq i64 %prol.iter1157.next, %xtraiter1155
  br i1 %prol.iter1157.cmp.not, label %scalar.ph853.prol.loopexit, label %scalar.ph853.prol, !llvm.loop !67

scalar.ph853.prol.loopexit:                       ; preds = %scalar.ph853.prol, %scalar.ph853.preheader
  %.21506.unr = phi i64 [ %.21506.ph, %scalar.ph853.preheader ], [ %418, %scalar.ph853.prol ]
  %.6347505.unr = phi i64 [ %.6347505.ph, %scalar.ph853.preheader ], [ %419, %scalar.ph853.prol ]
  %420 = icmp ult i64 %414, 3
  br i1 %420, label %.loopexit1107, label %scalar.ph853

scalar.ph853:                                     ; preds = %scalar.ph853.prol.loopexit, %scalar.ph853
  %.21506 = phi i64 [ %433, %scalar.ph853 ], [ %.21506.unr, %scalar.ph853.prol.loopexit ]
  %.6347505 = phi i64 [ %434, %scalar.ph853 ], [ %.6347505.unr, %scalar.ph853.prol.loopexit ]
  %421 = getelementptr inbounds double, ptr %3, i64 %.6347505
  %422 = load double, ptr %421, align 8, !tbaa !9
  %423 = getelementptr inbounds double, ptr %4, i64 %.21506
  store double %422, ptr %423, align 8, !tbaa !9
  %424 = add nuw nsw i64 %.6347505, %.0331
  %425 = getelementptr inbounds double, ptr %3, i64 %424
  %426 = load double, ptr %425, align 8, !tbaa !9
  %gep1185 = getelementptr double, ptr %invariant.gep1184, i64 %.21506
  store double %426, ptr %gep1185, align 8, !tbaa !9
  %427 = add nuw nsw i64 %424, %.0331
  %428 = getelementptr inbounds double, ptr %3, i64 %427
  %429 = load double, ptr %428, align 8, !tbaa !9
  %gep1187 = getelementptr double, ptr %invariant.gep1186, i64 %.21506
  store double %429, ptr %gep1187, align 8, !tbaa !9
  %430 = add nuw nsw i64 %427, %.0331
  %431 = getelementptr inbounds double, ptr %3, i64 %430
  %432 = load double, ptr %431, align 8, !tbaa !9
  %gep1189 = getelementptr double, ptr %invariant.gep1188, i64 %.21506
  store double %432, ptr %gep1189, align 8, !tbaa !9
  %433 = add i64 %.21506, 4
  %434 = add nuw nsw i64 %430, %.0331
  %exitcond658.not.3 = icmp eq i64 %433, %403
  br i1 %exitcond658.not.3, label %.loopexit1107, label %scalar.ph853, !llvm.loop !68

.loopexit1107:                                    ; preds = %scalar.ph853.prol.loopexit, %scalar.ph853, %middle.block852
  %435 = add nuw nsw i64 %.8364508, 1
  %indvars.iv.next657 = add nuw nsw i64 %indvars.iv656, 1
  %exitcond659.not = icmp eq i64 %435, %49
  %scevgep843 = getelementptr i8, ptr %scev.check.iv842, i64 %401
  %scevgep846 = getelementptr i8, ptr %scev.check.iv845, i64 %399
  %loop-unroll.iv.next1152 = add i64 %loop-unroll.iv1151, %397
  %loop-unroll.iv.next1154 = add i64 %loop-unroll.iv1153, %396
  br i1 %exitcond659.not, label %._crit_edge512, label %395, !llvm.loop !69

._crit_edge512:                                   ; preds = %.loopexit1107
  %.not394.not521.not = icmp eq i64 %36, 0
  br i1 %.not394.not521.not, label %.loopexit, label %.lr.ph526.preheader

.lr.ph526.preheader:                              ; preds = %._crit_edge512
  %436 = sub i64 %16, %15
  %437 = mul i64 %.0331, -8
  %438 = add nuw i64 %.0331, 1
  br label %.lr.ph526

.lr.ph526:                                        ; preds = %.lr.ph526.preheader, %._crit_edge519
  %indvar871 = phi i64 [ 0, %.lr.ph526.preheader ], [ %indvar.next872, %._crit_edge519 ]
  %.22524 = phi i64 [ %403, %.lr.ph526.preheader ], [ %.lcssa717, %._crit_edge519 ]
  %.3336523 = phi i64 [ 0, %.lr.ph526.preheader ], [ %460, %._crit_edge519 ]
  %.9365522 = phi i64 [ %49, %.lr.ph526.preheader ], [ %461, %._crit_edge519 ]
  %439 = mul i64 %438, %indvar871
  %440 = add i64 %49, %439
  %smax874 = tail call i64 @llvm.smax.i64(i64 %440, i64 %.3336523)
  %441 = mul i64 %.0331, %indvar871
  %reass.sub1109 = sub i64 %smax874, %441
  %442 = add i64 %reass.sub1109, 1
  %443 = add nsw i64 %.3336523, %.9365522
  %min.iters.check877 = icmp ult i64 %442, 4
  br i1 %min.iters.check877, label %.lr.ph518.preheader, label %vector.memcheck870

vector.memcheck870:                               ; preds = %.lr.ph526
  %444 = mul i64 %437, %indvar871
  %445 = add i64 %436, %444
  %446 = shl i64 %.22524, 3
  %447 = add i64 %445, %446
  %diff.check873 = icmp ult i64 %447, 32
  br i1 %diff.check873, label %.lr.ph518.preheader, label %vector.ph878

vector.ph878:                                     ; preds = %vector.memcheck870
  %n.vec880 = and i64 %442, -4
  %ind.end881 = add i64 %.22524, %n.vec880
  %ind.end883 = add i64 %.3336523, %n.vec880
  %448 = getelementptr double, ptr %3, i64 %.3336523
  %449 = getelementptr double, ptr %4, i64 %.22524
  br label %vector.body885

vector.body885:                                   ; preds = %vector.body885, %vector.ph878
  %index886 = phi i64 [ 0, %vector.ph878 ], [ %index.next891, %vector.body885 ]
  %450 = getelementptr double, ptr %448, i64 %index886
  %451 = getelementptr inbounds i8, ptr %450, i64 16
  %wide.load889 = load <2 x double>, ptr %450, align 8, !tbaa !9
  %wide.load890 = load <2 x double>, ptr %451, align 8, !tbaa !9
  %452 = getelementptr double, ptr %449, i64 %index886
  %453 = getelementptr inbounds i8, ptr %452, i64 16
  store <2 x double> %wide.load889, ptr %452, align 8, !tbaa !9
  store <2 x double> %wide.load890, ptr %453, align 8, !tbaa !9
  %index.next891 = add nuw i64 %index886, 4
  %454 = icmp eq i64 %index.next891, %n.vec880
  br i1 %454, label %middle.block875, label %vector.body885, !llvm.loop !70

middle.block875:                                  ; preds = %vector.body885
  %cmp.n892 = icmp eq i64 %442, %n.vec880
  br i1 %cmp.n892, label %._crit_edge519, label %.lr.ph518.preheader

.lr.ph518.preheader:                              ; preds = %middle.block875, %vector.memcheck870, %.lr.ph526
  %.23516.ph = phi i64 [ %.22524, %vector.memcheck870 ], [ %.22524, %.lr.ph526 ], [ %ind.end881, %middle.block875 ]
  %.7348515.ph = phi i64 [ %.3336523, %vector.memcheck870 ], [ %.3336523, %.lr.ph526 ], [ %ind.end883, %middle.block875 ]
  br label %.lr.ph518

.lr.ph518:                                        ; preds = %.lr.ph518.preheader, %.lr.ph518
  %.23516 = phi i64 [ %458, %.lr.ph518 ], [ %.23516.ph, %.lr.ph518.preheader ]
  %.7348515 = phi i64 [ %459, %.lr.ph518 ], [ %.7348515.ph, %.lr.ph518.preheader ]
  %455 = getelementptr inbounds double, ptr %3, i64 %.7348515
  %456 = load double, ptr %455, align 8, !tbaa !9
  %457 = getelementptr inbounds double, ptr %4, i64 %.23516
  store double %456, ptr %457, align 8, !tbaa !9
  %458 = add nsw i64 %.23516, 1
  %459 = add nuw nsw i64 %.7348515, 1
  %.not395.not = icmp slt i64 %.7348515, %443
  br i1 %.not395.not, label %.lr.ph518, label %._crit_edge519, !llvm.loop !71

._crit_edge519:                                   ; preds = %.lr.ph518, %middle.block875
  %.lcssa717 = phi i64 [ %ind.end881, %middle.block875 ], [ %458, %.lr.ph518 ]
  %460 = add i64 %.3336523, %.0331
  %461 = add nuw nsw i64 %.9365522, 1
  %exitcond661.not = icmp eq i64 %461, %36
  %indvar.next872 = add i64 %indvar871, 1
  br i1 %exitcond661.not, label %.loopexit, label %.lr.ph526, !llvm.loop !72

462:                                              ; preds = %50
  br i1 %.not381, label %.lr.ph609.preheader, label %.lr.ph586

.lr.ph586:                                        ; preds = %462
  %463 = mul nuw nsw i64 %52, %.0331
  %scevgep1000 = getelementptr i8, ptr %4, i64 8
  %464 = and i64 %51, 9223372036854775806
  %465 = add nuw nsw i64 %52, 1
  %466 = xor i64 %52, -1
  %467 = shl i64 %52, 3
  %468 = add i64 %467, 8
  %469 = shl i64 %52, 3
  %470 = and i64 %51, 9223372036854775806
  %471 = add nuw nsw i64 %52, 1
  %472 = xor i64 %52, -1
  %473 = and i64 %51, 9223372036854775806
  %474 = getelementptr i8, ptr %3, i64 %467
  %475 = and i64 %51, 9223372036854775806
  %476 = and i64 %51, 9223372036854775806
  %invariant.gep1202 = getelementptr double, ptr %3, i64 %52
  %invariant.gep1204 = getelementptr double, ptr %3, i64 %476
  %.idx1112 = mul i64 %52, 24
  %invariant.gep1206 = getelementptr i8, ptr %3, i64 %.idx1112
  br label %477

.loopexit429:                                     ; preds = %.lr.ph580, %middle.block1014, %477
  %.25.lcssa = phi i64 [ %.24584, %477 ], [ %ind.end1020, %middle.block1014 ], [ %526, %.lr.ph580 ]
  %exitcond668.not = icmp eq i64 %486, %49
  br i1 %exitcond668.not, label %.lr.ph601, label %477, !llvm.loop !73

477:                                              ; preds = %.lr.ph586, %.loopexit429
  %.24584 = phi i64 [ 0, %.lr.ph586 ], [ %.25.lcssa, %.loopexit429 ]
  %.8376583 = phi i64 [ 0, %.lr.ph586 ], [ %486, %.loopexit429 ]
  %478 = mul i64 %465, %.8376583
  %479 = add i64 %464, %478
  %smax1001 = tail call i64 @llvm.smax.i64(i64 %479, i64 %463)
  %480 = mul i64 %.8376583, %466
  %481 = sub i64 %480, %473
  %482 = add i64 %smax1001, %481
  %483 = icmp ne i64 %482, 0
  %umin1002 = zext i1 %483 to i64
  %484 = sub i64 %482, %umin1002
  %485 = mul i64 %468, %.8376583
  %scevgep1004 = getelementptr i8, ptr %474, i64 %485
  %486 = add nuw nsw i64 %.8376583, 1
  %487 = mul nuw nsw i64 %486, %52
  %488 = add nuw nsw i64 %487, %.8376583
  %489 = icmp slt i64 %488, %463
  br i1 %489, label %.lr.ph580.preheader, label %.loopexit429

.lr.ph580.preheader:                              ; preds = %477
  %490 = mul i64 %471, %.8376583
  %491 = add i64 %470, %490
  %smax1012 = tail call i64 @llvm.smax.i64(i64 %491, i64 %463)
  %492 = mul i64 %.8376583, %472
  %493 = sub i64 %492, %475
  %494 = add i64 %smax1012, %493
  %495 = icmp ne i64 %494, 0
  %umin1013.neg = sext i1 %495 to i64
  %496 = add i64 %494, %umin1013.neg
  %497 = select i1 %495, i64 2, i64 1
  %498 = udiv i64 %496, %52
  %499 = add i64 %497, %498
  %min.iters.check1016 = icmp ult i64 %499, 14
  br i1 %min.iters.check1016, label %.lr.ph580.preheader1123, label %vector.memcheck998

vector.memcheck998:                               ; preds = %.lr.ph580.preheader
  %500 = shl i64 %.24584, 3
  %scevgep999 = getelementptr i8, ptr %4, i64 %500
  %501 = udiv i64 %484, %52
  %502 = add i64 %501, %umin1002
  %503 = add i64 %.24584, %502
  %504 = shl i64 %503, 3
  %scevgep1003 = getelementptr i8, ptr %scevgep1000, i64 %504
  %505 = mul i64 %469, %502
  %scevgep1005 = getelementptr i8, ptr %scevgep1004, i64 %505
  %506 = icmp ult ptr %scevgep1004, %scevgep1005
  %umin1006 = select i1 %506, ptr %scevgep1004, ptr %scevgep1005
  %507 = icmp ugt ptr %scevgep1004, %scevgep1005
  %umax1007 = select i1 %507, ptr %scevgep1004, ptr %scevgep1005
  %scevgep1008 = getelementptr i8, ptr %umax1007, i64 8
  %bound01009 = icmp ult ptr %scevgep999, %scevgep1008
  %bound11010 = icmp ult ptr %umin1006, %scevgep1003
  %found.conflict1011 = and i1 %bound01009, %bound11010
  br i1 %found.conflict1011, label %.lr.ph580.preheader1123, label %vector.ph1017

vector.ph1017:                                    ; preds = %vector.memcheck998
  %n.vec1019 = and i64 %499, -4
  %ind.end1020 = add i64 %.24584, %n.vec1019
  %508 = mul i64 %n.vec1019, %52
  %ind.end1022 = add i64 %488, %508
  %509 = getelementptr double, ptr %4, i64 %.24584
  br label %vector.body1024

vector.body1024:                                  ; preds = %vector.body1024, %vector.ph1017
  %index1025 = phi i64 [ 0, %vector.ph1017 ], [ %index.next1028, %vector.body1024 ]
  %510 = mul i64 %index1025, %52
  %offset.idx1027 = add i64 %488, %510
  %511 = getelementptr inbounds double, ptr %3, i64 %offset.idx1027
  %gep1203 = getelementptr double, ptr %invariant.gep1202, i64 %offset.idx1027
  %gep1205 = getelementptr double, ptr %invariant.gep1204, i64 %offset.idx1027
  %gep1207 = getelementptr double, ptr %invariant.gep1206, i64 %offset.idx1027
  %512 = load double, ptr %511, align 8, !tbaa !9, !alias.scope !74
  %513 = load double, ptr %gep1203, align 8, !tbaa !9, !alias.scope !74
  %514 = insertelement <2 x double> poison, double %512, i64 0
  %515 = insertelement <2 x double> %514, double %513, i64 1
  %516 = load double, ptr %gep1205, align 8, !tbaa !9, !alias.scope !74
  %517 = load double, ptr %gep1207, align 8, !tbaa !9, !alias.scope !74
  %518 = insertelement <2 x double> poison, double %516, i64 0
  %519 = insertelement <2 x double> %518, double %517, i64 1
  %520 = getelementptr double, ptr %509, i64 %index1025
  %521 = getelementptr inbounds i8, ptr %520, i64 16
  store <2 x double> %515, ptr %520, align 8, !tbaa !9, !alias.scope !77, !noalias !74
  store <2 x double> %519, ptr %521, align 8, !tbaa !9, !alias.scope !77, !noalias !74
  %index.next1028 = add nuw i64 %index1025, 4
  %522 = icmp eq i64 %index.next1028, %n.vec1019
  br i1 %522, label %middle.block1014, label %vector.body1024, !llvm.loop !79

middle.block1014:                                 ; preds = %vector.body1024
  %cmp.n1029 = icmp eq i64 %499, %n.vec1019
  br i1 %cmp.n1029, label %.loopexit429, label %.lr.ph580.preheader1123

.lr.ph580.preheader1123:                          ; preds = %middle.block1014, %vector.memcheck998, %.lr.ph580.preheader
  %.25578.ph = phi i64 [ %.24584, %vector.memcheck998 ], [ %.24584, %.lr.ph580.preheader ], [ %ind.end1020, %middle.block1014 ]
  %.8349577.ph = phi i64 [ %488, %vector.memcheck998 ], [ %488, %.lr.ph580.preheader ], [ %ind.end1022, %middle.block1014 ]
  br label %.lr.ph580

.lr.ph580:                                        ; preds = %.lr.ph580.preheader1123, %.lr.ph580
  %.25578 = phi i64 [ %526, %.lr.ph580 ], [ %.25578.ph, %.lr.ph580.preheader1123 ]
  %.8349577 = phi i64 [ %527, %.lr.ph580 ], [ %.8349577.ph, %.lr.ph580.preheader1123 ]
  %523 = getelementptr inbounds double, ptr %3, i64 %.8349577
  %524 = load double, ptr %523, align 8, !tbaa !9
  %525 = getelementptr inbounds double, ptr %4, i64 %.25578
  store double %524, ptr %525, align 8, !tbaa !9
  %526 = add nsw i64 %.25578, 1
  %527 = add nuw nsw i64 %.8349577, %52
  %528 = icmp slt i64 %527, %463
  br i1 %528, label %.lr.ph580, label %.loopexit429, !llvm.loop !80

.lr.ph601:                                        ; preds = %.loopexit429
  %529 = add nuw nsw i64 %52, 1
  %530 = sub i64 %10, %9
  %531 = shl i64 %52, 3
  %532 = sub nuw nsw i64 -8, %531
  br label %533

533:                                              ; preds = %.lr.ph601, %._crit_edge594
  %.26599 = phi i64 [ %.25.lcssa, %.lr.ph601 ], [ %.27.lcssa, %._crit_edge594 ]
  %.4337598 = phi i64 [ 0, %.lr.ph601 ], [ %554, %._crit_edge594 ]
  %.10366597 = phi i64 [ 0, %.lr.ph601 ], [ %555, %._crit_edge594 ]
  %534 = sub nsw i64 %49, %.10366597
  %535 = mul i64 %532, %.10366597
  %536 = add i64 %530, %535
  %537 = xor i64 %.10366597, -1
  %538 = add nsw i64 %49, %537
  %539 = add i64 %538, %.4337598
  %.not391589 = icmp sgt i64 %.4337598, %539
  br i1 %.not391589, label %._crit_edge594, label %.lr.ph593.preheader

.lr.ph593.preheader:                              ; preds = %533
  %min.iters.check1034 = icmp ult i64 %534, 4
  br i1 %min.iters.check1034, label %.lr.ph593.preheader1120, label %vector.memcheck1030

vector.memcheck1030:                              ; preds = %.lr.ph593.preheader
  %540 = shl i64 %.26599, 3
  %541 = add i64 %536, %540
  %diff.check1031 = icmp ult i64 %541, 32
  br i1 %diff.check1031, label %.lr.ph593.preheader1120, label %vector.ph1035

vector.ph1035:                                    ; preds = %vector.memcheck1030
  %n.vec1037 = and i64 %534, -4
  %ind.end1038 = add i64 %.26599, %n.vec1037
  %ind.end1040 = add i64 %.4337598, %n.vec1037
  %542 = getelementptr double, ptr %3, i64 %.4337598
  %543 = getelementptr double, ptr %4, i64 %.26599
  br label %vector.body1042

vector.body1042:                                  ; preds = %vector.body1042, %vector.ph1035
  %index1043 = phi i64 [ 0, %vector.ph1035 ], [ %index.next1048, %vector.body1042 ]
  %544 = getelementptr double, ptr %542, i64 %index1043
  %545 = getelementptr inbounds i8, ptr %544, i64 16
  %wide.load1046 = load <2 x double>, ptr %544, align 8, !tbaa !9
  %wide.load1047 = load <2 x double>, ptr %545, align 8, !tbaa !9
  %546 = getelementptr double, ptr %543, i64 %index1043
  %547 = getelementptr inbounds i8, ptr %546, i64 16
  store <2 x double> %wide.load1046, ptr %546, align 8, !tbaa !9
  store <2 x double> %wide.load1047, ptr %547, align 8, !tbaa !9
  %index.next1048 = add nuw i64 %index1043, 4
  %548 = icmp eq i64 %index.next1048, %n.vec1037
  br i1 %548, label %middle.block1032, label %vector.body1042, !llvm.loop !81

middle.block1032:                                 ; preds = %vector.body1042
  %cmp.n1049 = icmp eq i64 %534, %n.vec1037
  br i1 %cmp.n1049, label %._crit_edge594, label %.lr.ph593.preheader1120

.lr.ph593.preheader1120:                          ; preds = %middle.block1032, %vector.memcheck1030, %.lr.ph593.preheader
  %.27591.ph = phi i64 [ %.26599, %vector.memcheck1030 ], [ %.26599, %.lr.ph593.preheader ], [ %ind.end1038, %middle.block1032 ]
  %.9350590.ph = phi i64 [ %.4337598, %vector.memcheck1030 ], [ %.4337598, %.lr.ph593.preheader ], [ %ind.end1040, %middle.block1032 ]
  br label %.lr.ph593

.lr.ph593:                                        ; preds = %.lr.ph593.preheader1120, %.lr.ph593
  %.27591 = phi i64 [ %552, %.lr.ph593 ], [ %.27591.ph, %.lr.ph593.preheader1120 ]
  %.9350590 = phi i64 [ %553, %.lr.ph593 ], [ %.9350590.ph, %.lr.ph593.preheader1120 ]
  %549 = getelementptr inbounds double, ptr %3, i64 %.9350590
  %550 = load double, ptr %549, align 8, !tbaa !9
  %551 = getelementptr inbounds double, ptr %4, i64 %.27591
  store double %550, ptr %551, align 8, !tbaa !9
  %552 = add nsw i64 %.27591, 1
  %553 = add nsw i64 %.9350590, 1
  %.not391.not = icmp slt i64 %.9350590, %539
  br i1 %.not391.not, label %.lr.ph593, label %._crit_edge594, !llvm.loop !82

._crit_edge594:                                   ; preds = %.lr.ph593, %middle.block1032, %533
  %.27.lcssa = phi i64 [ %.26599, %533 ], [ %ind.end1038, %middle.block1032 ], [ %552, %.lr.ph593 ]
  %554 = add i64 %529, %.4337598
  %555 = add nuw nsw i64 %.10366597, 1
  %exitcond670.not = icmp eq i64 %555, %49
  br i1 %exitcond670.not, label %.loopexit, label %533, !llvm.loop !83

.lr.ph609.preheader:                              ; preds = %462
  %556 = add nuw nsw i64 %49, 1
  %557 = mul i64 %556, %52
  %558 = mul i64 %52, %556
  %559 = shl i64 %558, 3
  %560 = add i64 %559, %7
  %561 = sub i64 %8, %560
  %562 = mul i64 %52, -8
  %563 = add nuw nsw i64 %52, 1
  br label %.lr.ph609

.lr.ph609:                                        ; preds = %.lr.ph609.preheader, %.loopexit1105
  %.28607 = phi i64 [ %.lcssa710, %.loopexit1105 ], [ 0, %.lr.ph609.preheader ]
  %.5338606 = phi i64 [ %586, %.loopexit1105 ], [ %557, %.lr.ph609.preheader ]
  %.11367605 = phi i64 [ %587, %.loopexit1105 ], [ 0, %.lr.ph609.preheader ]
  %564 = mul i64 %563, %.11367605
  %565 = add i64 %557, %564
  %umax1052 = tail call i64 @llvm.umax.i64(i64 %.5338606, i64 %565)
  %566 = add nuw i64 %556, %.11367605
  %567 = mul i64 %566, %52
  %reass.sub1113 = sub i64 %umax1052, %567
  %568 = add i64 %reass.sub1113, 1
  %569 = add nuw nsw i64 %.5338606, %.11367605
  %min.iters.check1055 = icmp ult i64 %568, 4
  br i1 %min.iters.check1055, label %scalar.ph1054.preheader, label %vector.memcheck1050

vector.memcheck1050:                              ; preds = %.lr.ph609
  %570 = mul i64 %562, %.11367605
  %571 = add i64 %561, %570
  %572 = shl i64 %.28607, 3
  %573 = add i64 %571, %572
  %diff.check1051 = icmp ult i64 %573, 32
  br i1 %diff.check1051, label %scalar.ph1054.preheader, label %vector.ph1056

vector.ph1056:                                    ; preds = %vector.memcheck1050
  %n.vec1058 = and i64 %568, -4
  %ind.end1059 = add i64 %.28607, %n.vec1058
  %ind.end1061 = add i64 %.5338606, %n.vec1058
  %574 = getelementptr double, ptr %3, i64 %.5338606
  %575 = getelementptr double, ptr %4, i64 %.28607
  br label %vector.body1063

vector.body1063:                                  ; preds = %vector.body1063, %vector.ph1056
  %index1064 = phi i64 [ 0, %vector.ph1056 ], [ %index.next1069, %vector.body1063 ]
  %576 = getelementptr double, ptr %574, i64 %index1064
  %577 = getelementptr inbounds i8, ptr %576, i64 16
  %wide.load1067 = load <2 x double>, ptr %576, align 8, !tbaa !9
  %wide.load1068 = load <2 x double>, ptr %577, align 8, !tbaa !9
  %578 = getelementptr double, ptr %575, i64 %index1064
  %579 = getelementptr inbounds i8, ptr %578, i64 16
  store <2 x double> %wide.load1067, ptr %578, align 8, !tbaa !9
  store <2 x double> %wide.load1068, ptr %579, align 8, !tbaa !9
  %index.next1069 = add nuw i64 %index1064, 4
  %580 = icmp eq i64 %index.next1069, %n.vec1058
  br i1 %580, label %middle.block1053, label %vector.body1063, !llvm.loop !84

middle.block1053:                                 ; preds = %vector.body1063
  %cmp.n1070 = icmp eq i64 %568, %n.vec1058
  br i1 %cmp.n1070, label %.loopexit1105, label %scalar.ph1054.preheader

scalar.ph1054.preheader:                          ; preds = %middle.block1053, %vector.memcheck1050, %.lr.ph609
  %.29603.ph = phi i64 [ %.28607, %vector.memcheck1050 ], [ %.28607, %.lr.ph609 ], [ %ind.end1059, %middle.block1053 ]
  %.10351602.ph = phi i64 [ %.5338606, %vector.memcheck1050 ], [ %.5338606, %.lr.ph609 ], [ %ind.end1061, %middle.block1053 ]
  br label %scalar.ph1054

scalar.ph1054:                                    ; preds = %scalar.ph1054.preheader, %scalar.ph1054
  %.29603 = phi i64 [ %584, %scalar.ph1054 ], [ %.29603.ph, %scalar.ph1054.preheader ]
  %.10351602 = phi i64 [ %585, %scalar.ph1054 ], [ %.10351602.ph, %scalar.ph1054.preheader ]
  %581 = getelementptr inbounds double, ptr %3, i64 %.10351602
  %582 = load double, ptr %581, align 8, !tbaa !9
  %583 = getelementptr inbounds double, ptr %4, i64 %.29603
  store double %582, ptr %583, align 8, !tbaa !9
  %584 = add nsw i64 %.29603, 1
  %585 = add nuw nsw i64 %.10351602, 1
  %.not388.not = icmp ult i64 %.10351602, %569
  br i1 %.not388.not, label %scalar.ph1054, label %.loopexit1105, !llvm.loop !85

.loopexit1105:                                    ; preds = %scalar.ph1054, %middle.block1053
  %.lcssa710 = phi i64 [ %ind.end1059, %middle.block1053 ], [ %584, %scalar.ph1054 ]
  %586 = add nuw nsw i64 %.5338606, %52
  %587 = add nuw nsw i64 %.11367605, 1
  %exitcond672.not = icmp eq i64 %587, %49
  br i1 %exitcond672.not, label %.lr.ph623.preheader, label %.lr.ph609, !llvm.loop !86

.lr.ph623.preheader:                              ; preds = %.loopexit1105
  %scevgep1073 = getelementptr i8, ptr %4, i64 8
  %588 = mul i64 %49, %52
  %589 = add i64 %588, 1
  %590 = add nuw nsw i64 %52, 1
  %umax1076 = tail call i64 @llvm.umax.i64(i64 %52, i64 1)
  %591 = shl i64 %52, 3
  %592 = add nuw nsw i64 %52, 1
  %umax1088 = tail call i64 @llvm.umax.i64(i64 %52, i64 1)
  %593 = and i64 %51, 9223372036854775806
  %invariant.gep1208 = getelementptr double, ptr %3, i64 %52
  %invariant.gep1210 = getelementptr double, ptr %3, i64 %593
  %.idx1114 = mul i64 %52, 24
  %invariant.gep1212 = getelementptr i8, ptr %3, i64 %.idx1114
  br label %.lr.ph623

.lr.ph623:                                        ; preds = %.lr.ph623.preheader, %._crit_edge617
  %.30621 = phi i64 [ %.lcssa, %._crit_edge617 ], [ %.lcssa710, %.lr.ph623.preheader ]
  %.9377620 = phi i64 [ %643, %._crit_edge617 ], [ 0, %.lr.ph623.preheader ]
  %594 = add nuw nsw i64 %.9377620, %49
  %595 = mul nuw nsw i64 %594, %52
  %596 = add nuw nsw i64 %595, %.9377620
  %597 = add nuw i64 %52, %.9377620
  %598 = mul i64 %592, %.9377620
  %599 = add i64 %589, %598
  %600 = icmp slt i64 %597, %599
  %umin1087 = zext i1 %600 to i64
  %601 = add nuw i64 %52, %.9377620
  %smax1086 = tail call i64 @llvm.smax.i64(i64 %597, i64 %599)
  %602 = add i64 %601, %umin1087
  %603 = sub i64 %smax1086, %602
  %604 = select i1 %600, i64 2, i64 1
  %605 = udiv i64 %603, %umax1088
  %606 = add i64 %604, %605
  %min.iters.check1091 = icmp ult i64 %606, 14
  br i1 %min.iters.check1091, label %.lr.ph616.preheader, label %vector.memcheck1071

vector.memcheck1071:                              ; preds = %.lr.ph623
  %607 = shl i64 %.9377620, 3
  %scevgep1078 = getelementptr i8, ptr %3, i64 %607
  %608 = add nuw i64 %52, %.9377620
  %609 = mul i64 %590, %.9377620
  %610 = add i64 %589, %609
  %smax1074 = tail call i64 @llvm.smax.i64(i64 %608, i64 %610)
  %611 = add nuw i64 %52, %.9377620
  %612 = icmp slt i64 %608, %610
  %umin1075 = zext i1 %612 to i64
  %613 = add i64 %611, %umin1075
  %614 = sub i64 %smax1074, %613
  %615 = shl i64 %.30621, 3
  %scevgep1072 = getelementptr i8, ptr %4, i64 %615
  %616 = udiv i64 %614, %umax1076
  %617 = add i64 %616, %umin1075
  %618 = add i64 %.30621, %617
  %619 = shl i64 %618, 3
  %scevgep1077 = getelementptr i8, ptr %scevgep1073, i64 %619
  %620 = mul i64 %591, %617
  %scevgep1079 = getelementptr i8, ptr %scevgep1078, i64 %620
  %621 = icmp ult ptr %scevgep1078, %scevgep1079
  %umin1080 = select i1 %621, ptr %scevgep1078, ptr %scevgep1079
  %622 = icmp ugt ptr %scevgep1078, %scevgep1079
  %umax1081 = select i1 %622, ptr %scevgep1078, ptr %scevgep1079
  %scevgep1082 = getelementptr i8, ptr %umax1081, i64 8
  %bound01083 = icmp ult ptr %scevgep1072, %scevgep1082
  %bound11084 = icmp ult ptr %umin1080, %scevgep1077
  %found.conflict1085 = and i1 %bound01083, %bound11084
  br i1 %found.conflict1085, label %.lr.ph616.preheader, label %vector.ph1092

vector.ph1092:                                    ; preds = %vector.memcheck1071
  %n.vec1094 = and i64 %606, -4
  %ind.end1095 = add i64 %.30621, %n.vec1094
  %623 = mul i64 %n.vec1094, %52
  %ind.end1097 = add i64 %.9377620, %623
  %624 = getelementptr double, ptr %4, i64 %.30621
  br label %vector.body1099

vector.body1099:                                  ; preds = %vector.body1099, %vector.ph1092
  %index1100 = phi i64 [ 0, %vector.ph1092 ], [ %index.next1103, %vector.body1099 ]
  %625 = mul i64 %index1100, %52
  %offset.idx1102 = add i64 %.9377620, %625
  %626 = getelementptr inbounds double, ptr %3, i64 %offset.idx1102
  %gep1209 = getelementptr double, ptr %invariant.gep1208, i64 %offset.idx1102
  %gep1211 = getelementptr double, ptr %invariant.gep1210, i64 %offset.idx1102
  %gep1213 = getelementptr double, ptr %invariant.gep1212, i64 %offset.idx1102
  %627 = load double, ptr %626, align 8, !tbaa !9, !alias.scope !87
  %628 = load double, ptr %gep1209, align 8, !tbaa !9, !alias.scope !87
  %629 = insertelement <2 x double> poison, double %627, i64 0
  %630 = insertelement <2 x double> %629, double %628, i64 1
  %631 = load double, ptr %gep1211, align 8, !tbaa !9, !alias.scope !87
  %632 = load double, ptr %gep1213, align 8, !tbaa !9, !alias.scope !87
  %633 = insertelement <2 x double> poison, double %631, i64 0
  %634 = insertelement <2 x double> %633, double %632, i64 1
  %635 = getelementptr double, ptr %624, i64 %index1100
  %636 = getelementptr inbounds i8, ptr %635, i64 16
  store <2 x double> %630, ptr %635, align 8, !tbaa !9, !alias.scope !90, !noalias !87
  store <2 x double> %634, ptr %636, align 8, !tbaa !9, !alias.scope !90, !noalias !87
  %index.next1103 = add nuw i64 %index1100, 4
  %637 = icmp eq i64 %index.next1103, %n.vec1094
  br i1 %637, label %middle.block1089, label %vector.body1099, !llvm.loop !92

middle.block1089:                                 ; preds = %vector.body1099
  %cmp.n1104 = icmp eq i64 %606, %n.vec1094
  br i1 %cmp.n1104, label %._crit_edge617, label %.lr.ph616.preheader

.lr.ph616.preheader:                              ; preds = %middle.block1089, %vector.memcheck1071, %.lr.ph623
  %.31614.ph = phi i64 [ %.30621, %vector.memcheck1071 ], [ %.30621, %.lr.ph623 ], [ %ind.end1095, %middle.block1089 ]
  %.11352613.ph = phi i64 [ %.9377620, %vector.memcheck1071 ], [ %.9377620, %.lr.ph623 ], [ %ind.end1097, %middle.block1089 ]
  br label %.lr.ph616

.lr.ph616:                                        ; preds = %.lr.ph616.preheader, %.lr.ph616
  %.31614 = phi i64 [ %641, %.lr.ph616 ], [ %.31614.ph, %.lr.ph616.preheader ]
  %.11352613 = phi i64 [ %642, %.lr.ph616 ], [ %.11352613.ph, %.lr.ph616.preheader ]
  %638 = getelementptr inbounds double, ptr %3, i64 %.11352613
  %639 = load double, ptr %638, align 8, !tbaa !9
  %640 = getelementptr inbounds double, ptr %4, i64 %.31614
  store double %639, ptr %640, align 8, !tbaa !9
  %641 = add nsw i64 %.31614, 1
  %642 = add nuw nsw i64 %.11352613, %52
  %.not675 = icmp sgt i64 %642, %596
  br i1 %.not675, label %._crit_edge617, label %.lr.ph616, !llvm.loop !93

._crit_edge617:                                   ; preds = %.lr.ph616, %middle.block1089
  %.lcssa = phi i64 [ %ind.end1095, %middle.block1089 ], [ %641, %.lr.ph616 ]
  %643 = add nuw nsw i64 %.9377620, 1
  %exitcond673.not = icmp eq i64 %643, %49
  br i1 %exitcond673.not, label %.loopexit, label %.lr.ph623, !llvm.loop !94

.loopexit:                                        ; preds = %.loopexit436, %._crit_edge474, %._crit_edge499.us, %._crit_edge519, %._crit_edge546, %._crit_edge569, %._crit_edge594, %._crit_edge617, %170, %53, %._crit_edge446, %._crit_edge467, %._crit_edge512, %._crit_edge539, %._crit_edge562, %42, %43, %.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #4
  ret i32 0
}

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

declare i64 @lsame_(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @xerbla_(ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = distinct !{!11, !12, !13, !14}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = distinct !{!15, !12, !13}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12, !13, !14}
!19 = distinct !{!19, !12, !13}
!20 = !{!21}
!21 = distinct !{!21, !22}
!22 = distinct !{!22, !"LVerDomain"}
!23 = !{!24}
!24 = distinct !{!24, !22}
!25 = distinct !{!25, !12, !13, !14}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.unroll.disable"}
!28 = distinct !{!28, !12, !13}
!29 = distinct !{!29, !12}
!30 = distinct !{!30, !12, !13, !14}
!31 = distinct !{!31, !12, !13}
!32 = distinct !{!32, !12}
!33 = !{!34}
!34 = distinct !{!34, !35}
!35 = distinct !{!35, !"LVerDomain"}
!36 = !{!37}
!37 = distinct !{!37, !35}
!38 = distinct !{!38, !12, !13, !14}
!39 = distinct !{!39, !12, !13}
!40 = distinct !{!40, !12}
!41 = distinct !{!41, !12, !13, !14}
!42 = distinct !{!42, !12, !13}
!43 = distinct !{!43, !12}
!44 = distinct !{!44, !12, !13, !14}
!45 = distinct !{!45, !12, !13}
!46 = distinct !{!46, !12}
!47 = !{!48}
!48 = distinct !{!48, !49}
!49 = distinct !{!49, !"LVerDomain"}
!50 = !{!51}
!51 = distinct !{!51, !49}
!52 = distinct !{!52, !12, !13, !14}
!53 = distinct !{!53, !12, !13}
!54 = distinct !{!54, !12}
!55 = distinct !{!55, !12, !13, !14}
!56 = distinct !{!56, !12, !13}
!57 = distinct !{!57, !12}
!58 = distinct !{!58, !12, !13, !14}
!59 = distinct !{!59, !12, !13}
!60 = distinct !{!60, !12}
!61 = !{!62}
!62 = distinct !{!62, !63}
!63 = distinct !{!63, !"LVerDomain"}
!64 = !{!65}
!65 = distinct !{!65, !63}
!66 = distinct !{!66, !12, !13, !14}
!67 = distinct !{!67, !27}
!68 = distinct !{!68, !12, !13}
!69 = distinct !{!69, !12}
!70 = distinct !{!70, !12, !13, !14}
!71 = distinct !{!71, !12, !13}
!72 = distinct !{!72, !12}
!73 = distinct !{!73, !12}
!74 = !{!75}
!75 = distinct !{!75, !76}
!76 = distinct !{!76, !"LVerDomain"}
!77 = !{!78}
!78 = distinct !{!78, !76}
!79 = distinct !{!79, !12, !13, !14}
!80 = distinct !{!80, !12, !13}
!81 = distinct !{!81, !12, !13, !14}
!82 = distinct !{!82, !12, !13}
!83 = distinct !{!83, !12}
!84 = distinct !{!84, !12, !13, !14}
!85 = distinct !{!85, !12, !13}
!86 = distinct !{!86, !12}
!87 = !{!88}
!88 = distinct !{!88, !89}
!89 = distinct !{!89, !"LVerDomain"}
!90 = !{!91}
!91 = distinct !{!91, !89}
!92 = distinct !{!92, !12, !13, !14}
!93 = distinct !{!93, !12, !13}
!94 = distinct !{!94, !12}


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