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

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

42:                                               ; preds = %38
  %43 = load ptr, ptr %12, align 8, !tbaa !5
  store i32 -1, ptr %43, align 4, !tbaa !9
  br label %61

44:                                               ; preds = %38, %6
  %45 = load i32, ptr %20, align 4, !tbaa !9
  %46 = icmp ne i32 %45, 0
  br i1 %46, label %53, label %47

47:                                               ; preds = %44
  %48 = load ptr, ptr %8, align 8, !tbaa !5
  %49 = call i32 @lsame_(ptr noundef %48, ptr noundef @.str.3)
  %50 = icmp ne i32 %49, 0
  br i1 %50, label %53, label %51

51:                                               ; preds = %47
  %52 = load ptr, ptr %12, align 8, !tbaa !5
  store i32 -2, ptr %52, align 4, !tbaa !9
  br label %60

53:                                               ; preds = %47, %44
  %54 = load ptr, ptr %9, align 8, !tbaa !5
  %55 = load i32, ptr %54, align 4, !tbaa !9
  %56 = icmp slt i32 %55, 0
  br i1 %56, label %57, label %59

57:                                               ; preds = %53
  %58 = load ptr, ptr %12, align 8, !tbaa !5
  store i32 -3, ptr %58, align 4, !tbaa !9
  br label %59

59:                                               ; preds = %57, %53
  br label %60

60:                                               ; preds = %59, %51
  br label %61

61:                                               ; preds = %60, %42
  %62 = load ptr, ptr %12, align 8, !tbaa !5
  %63 = load i32, ptr %62, align 4, !tbaa !9
  %64 = icmp ne i32 %63, 0
  br i1 %64, label %65, label %70

65:                                               ; preds = %61
  %66 = load ptr, ptr %12, align 8, !tbaa !5
  %67 = load i32, ptr %66, align 4, !tbaa !9
  %68 = sub nsw i32 0, %67
  store i32 %68, ptr %13, align 4, !tbaa !9
  %69 = call i32 @xerbla_(ptr noundef @.str.4, ptr noundef %13, i32 noundef 6)
  store i32 1, ptr %30, align 4
  br label %881

70:                                               ; preds = %61
  %71 = load ptr, ptr %9, align 8, !tbaa !5
  %72 = load i32, ptr %71, align 4, !tbaa !9
  %73 = icmp eq i32 %72, 0
  br i1 %73, label %74, label %75

74:                                               ; preds = %70
  store i32 1, ptr %30, align 4
  br label %881

75:                                               ; preds = %70
  %76 = load ptr, ptr %9, align 8, !tbaa !5
  %77 = load i32, ptr %76, align 4, !tbaa !9
  %78 = icmp eq i32 %77, 1
  br i1 %78, label %79, label %95

79:                                               ; preds = %75
  %80 = load i32, ptr %19, align 4, !tbaa !9
  %81 = icmp ne i32 %80, 0
  br i1 %81, label %82, label %88

82:                                               ; preds = %79
  %83 = load ptr, ptr %10, align 8, !tbaa !5
  %84 = getelementptr inbounds double, ptr %83, i64 0
  %85 = load double, ptr %84, align 8, !tbaa !11
  %86 = load ptr, ptr %11, align 8, !tbaa !5
  %87 = getelementptr inbounds double, ptr %86, i64 0
  store double %85, ptr %87, align 8, !tbaa !11
  br label %94

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

94:                                               ; preds = %88, %82
  store i32 1, ptr %30, align 4
  br label %881

95:                                               ; preds = %75
  %96 = load ptr, ptr %9, align 8, !tbaa !5
  %97 = load i32, ptr %96, align 4, !tbaa !9
  %98 = load ptr, ptr %9, align 8, !tbaa !5
  %99 = load i32, ptr %98, align 4, !tbaa !9
  %100 = add nsw i32 %99, 1
  %101 = mul nsw i32 %97, %100
  %102 = sdiv i32 %101, 2
  store i32 %102, ptr %26, align 4, !tbaa !9
  %103 = load i32, ptr %20, align 4, !tbaa !9
  %104 = icmp ne i32 %103, 0
  br i1 %104, label %105, label %113

105:                                              ; preds = %95
  %106 = load ptr, ptr %9, align 8, !tbaa !5
  %107 = load i32, ptr %106, align 4, !tbaa !9
  %108 = sdiv i32 %107, 2
  store i32 %108, ptr %22, align 4, !tbaa !9
  %109 = load ptr, ptr %9, align 8, !tbaa !5
  %110 = load i32, ptr %109, align 4, !tbaa !9
  %111 = load i32, ptr %22, align 4, !tbaa !9
  %112 = sub nsw i32 %110, %111
  store i32 %112, ptr %21, align 4, !tbaa !9
  br label %121

113:                                              ; preds = %95
  %114 = load ptr, ptr %9, align 8, !tbaa !5
  %115 = load i32, ptr %114, align 4, !tbaa !9
  %116 = sdiv i32 %115, 2
  store i32 %116, ptr %21, align 4, !tbaa !9
  %117 = load ptr, ptr %9, align 8, !tbaa !5
  %118 = load i32, ptr %117, align 4, !tbaa !9
  %119 = load i32, ptr %21, align 4, !tbaa !9
  %120 = sub nsw i32 %118, %119
  store i32 %120, ptr %22, align 4, !tbaa !9
  br label %121

121:                                              ; preds = %113, %105
  %122 = load ptr, ptr %9, align 8, !tbaa !5
  %123 = load i32, ptr %122, align 4, !tbaa !9
  %124 = srem i32 %123, 2
  %125 = icmp eq i32 %124, 0
  br i1 %125, label %126, label %133

126:                                              ; preds = %121
  %127 = load ptr, ptr %9, align 8, !tbaa !5
  %128 = load i32, ptr %127, align 4, !tbaa !9
  %129 = sdiv i32 %128, 2
  store i32 %129, ptr %18, align 4, !tbaa !9
  store i32 0, ptr %27, align 4, !tbaa !9
  %130 = load ptr, ptr %9, align 8, !tbaa !5
  %131 = load i32, ptr %130, align 4, !tbaa !9
  %132 = add nsw i32 %131, 1
  store i32 %132, ptr %28, align 4, !tbaa !9
  br label %136

133:                                              ; preds = %121
  store i32 1, ptr %27, align 4, !tbaa !9
  %134 = load ptr, ptr %9, align 8, !tbaa !5
  %135 = load i32, ptr %134, align 4, !tbaa !9
  store i32 %135, ptr %28, align 4, !tbaa !9
  br label %136

136:                                              ; preds = %133, %126
  %137 = load i32, ptr %19, align 4, !tbaa !9
  %138 = icmp ne i32 %137, 0
  br i1 %138, label %144, label %139

139:                                              ; preds = %136
  %140 = load ptr, ptr %9, align 8, !tbaa !5
  %141 = load i32, ptr %140, align 4, !tbaa !9
  %142 = add nsw i32 %141, 1
  %143 = sdiv i32 %142, 2
  store i32 %143, ptr %28, align 4, !tbaa !9
  br label %144

144:                                              ; preds = %139, %136
  %145 = load i32, ptr %27, align 4, !tbaa !9
  %146 = icmp ne i32 %145, 0
  br i1 %146, label %147, label %509

147:                                              ; preds = %144
  %148 = load i32, ptr %19, align 4, !tbaa !9
  %149 = icmp ne i32 %148, 0
  br i1 %149, label %150, label %314

150:                                              ; preds = %147
  %151 = load i32, ptr %20, align 4, !tbaa !9
  %152 = icmp ne i32 %151, 0
  br i1 %152, label %153, label %233

153:                                              ; preds = %150
  store i32 0, ptr %29, align 4, !tbaa !9
  store i32 0, ptr %24, align 4, !tbaa !9
  %154 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %154, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %155

155:                                              ; preds = %190, %153
  %156 = load i32, ptr %17, align 4, !tbaa !9
  %157 = load i32, ptr %13, align 4, !tbaa !9
  %158 = icmp sle i32 %156, %157
  br i1 %158, label %159, label %193

159:                                              ; preds = %155
  %160 = load ptr, ptr %9, align 8, !tbaa !5
  %161 = load i32, ptr %160, align 4, !tbaa !9
  %162 = sub nsw i32 %161, 1
  store i32 %162, ptr %14, align 4, !tbaa !9
  %163 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %163, ptr %16, align 4, !tbaa !9
  br label %164

164:                                              ; preds = %183, %159
  %165 = load i32, ptr %16, align 4, !tbaa !9
  %166 = load i32, ptr %14, align 4, !tbaa !9
  %167 = icmp sle i32 %165, %166
  br i1 %167, label %168, label %186

168:                                              ; preds = %164
  %169 = load i32, ptr %16, align 4, !tbaa !9
  %170 = load i32, ptr %24, align 4, !tbaa !9
  %171 = add nsw i32 %169, %170
  store i32 %171, ptr %23, align 4, !tbaa !9
  %172 = load ptr, ptr %10, align 8, !tbaa !5
  %173 = load i32, ptr %23, align 4, !tbaa !9
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds double, ptr %172, i64 %174
  %176 = load double, ptr %175, align 8, !tbaa !11
  %177 = load ptr, ptr %11, align 8, !tbaa !5
  %178 = load i32, ptr %29, align 4, !tbaa !9
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds double, ptr %177, i64 %179
  store double %176, ptr %180, align 8, !tbaa !11
  %181 = load i32, ptr %29, align 4, !tbaa !9
  %182 = add nsw i32 %181, 1
  store i32 %182, ptr %29, align 4, !tbaa !9
  br label %183

183:                                              ; preds = %168
  %184 = load i32, ptr %16, align 4, !tbaa !9
  %185 = add nsw i32 %184, 1
  store i32 %185, ptr %16, align 4, !tbaa !9
  br label %164, !llvm.loop !13

186:                                              ; preds = %164
  %187 = load i32, ptr %28, align 4, !tbaa !9
  %188 = load i32, ptr %24, align 4, !tbaa !9
  %189 = add nsw i32 %188, %187
  store i32 %189, ptr %24, align 4, !tbaa !9
  br label %190

190:                                              ; preds = %186
  %191 = load i32, ptr %17, align 4, !tbaa !9
  %192 = add nsw i32 %191, 1
  store i32 %192, ptr %17, align 4, !tbaa !9
  br label %155, !llvm.loop !15

193:                                              ; preds = %155
  %194 = load i32, ptr %22, align 4, !tbaa !9
  %195 = sub nsw i32 %194, 1
  store i32 %195, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %196

196:                                              ; preds = %229, %193
  %197 = load i32, ptr %16, align 4, !tbaa !9
  %198 = load i32, ptr %13, align 4, !tbaa !9
  %199 = icmp sle i32 %197, %198
  br i1 %199, label %200, label %232

200:                                              ; preds = %196
  %201 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %201, ptr %14, align 4, !tbaa !9
  %202 = load i32, ptr %16, align 4, !tbaa !9
  %203 = add nsw i32 %202, 1
  store i32 %203, ptr %17, align 4, !tbaa !9
  br label %204

204:                                              ; preds = %225, %200
  %205 = load i32, ptr %17, align 4, !tbaa !9
  %206 = load i32, ptr %14, align 4, !tbaa !9
  %207 = icmp sle i32 %205, %206
  br i1 %207, label %208, label %228

208:                                              ; preds = %204
  %209 = load i32, ptr %16, align 4, !tbaa !9
  %210 = load i32, ptr %17, align 4, !tbaa !9
  %211 = load i32, ptr %28, align 4, !tbaa !9
  %212 = mul nsw i32 %210, %211
  %213 = add nsw i32 %209, %212
  store i32 %213, ptr %23, align 4, !tbaa !9
  %214 = load ptr, ptr %10, align 8, !tbaa !5
  %215 = load i32, ptr %23, align 4, !tbaa !9
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds double, ptr %214, i64 %216
  %218 = load double, ptr %217, align 8, !tbaa !11
  %219 = load ptr, ptr %11, align 8, !tbaa !5
  %220 = load i32, ptr %29, align 4, !tbaa !9
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds double, ptr %219, i64 %221
  store double %218, ptr %222, align 8, !tbaa !11
  %223 = load i32, ptr %29, align 4, !tbaa !9
  %224 = add nsw i32 %223, 1
  store i32 %224, ptr %29, align 4, !tbaa !9
  br label %225

225:                                              ; preds = %208
  %226 = load i32, ptr %17, align 4, !tbaa !9
  %227 = add nsw i32 %226, 1
  store i32 %227, ptr %17, align 4, !tbaa !9
  br label %204, !llvm.loop !16

228:                                              ; preds = %204
  br label %229

229:                                              ; preds = %228
  %230 = load i32, ptr %16, align 4, !tbaa !9
  %231 = add nsw i32 %230, 1
  store i32 %231, ptr %16, align 4, !tbaa !9
  br label %196, !llvm.loop !17

232:                                              ; preds = %196
  br label %313

233:                                              ; preds = %150
  store i32 0, ptr %29, align 4, !tbaa !9
  %234 = load i32, ptr %21, align 4, !tbaa !9
  %235 = sub nsw i32 %234, 1
  store i32 %235, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %236

236:                                              ; preds = %268, %233
  %237 = load i32, ptr %17, align 4, !tbaa !9
  %238 = load i32, ptr %13, align 4, !tbaa !9
  %239 = icmp sle i32 %237, %238
  br i1 %239, label %240, label %271

240:                                              ; preds = %236
  %241 = load i32, ptr %22, align 4, !tbaa !9
  %242 = load i32, ptr %17, align 4, !tbaa !9
  %243 = add nsw i32 %241, %242
  store i32 %243, ptr %23, align 4, !tbaa !9
  %244 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %244, ptr %14, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %245

245:                                              ; preds = %264, %240
  %246 = load i32, ptr %16, align 4, !tbaa !9
  %247 = load i32, ptr %14, align 4, !tbaa !9
  %248 = icmp sle i32 %246, %247
  br i1 %248, label %249, label %267

249:                                              ; preds = %245
  %250 = load ptr, ptr %10, align 8, !tbaa !5
  %251 = load i32, ptr %23, align 4, !tbaa !9
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds double, ptr %250, i64 %252
  %254 = load double, ptr %253, align 8, !tbaa !11
  %255 = load ptr, ptr %11, align 8, !tbaa !5
  %256 = load i32, ptr %29, align 4, !tbaa !9
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds double, ptr %255, i64 %257
  store double %254, ptr %258, align 8, !tbaa !11
  %259 = load i32, ptr %29, align 4, !tbaa !9
  %260 = add nsw i32 %259, 1
  store i32 %260, ptr %29, align 4, !tbaa !9
  %261 = load i32, ptr %28, align 4, !tbaa !9
  %262 = load i32, ptr %23, align 4, !tbaa !9
  %263 = add nsw i32 %262, %261
  store i32 %263, ptr %23, align 4, !tbaa !9
  br label %264

264:                                              ; preds = %249
  %265 = load i32, ptr %16, align 4, !tbaa !9
  %266 = add nsw i32 %265, 1
  store i32 %266, ptr %16, align 4, !tbaa !9
  br label %245, !llvm.loop !18

267:                                              ; preds = %245
  br label %268

268:                                              ; preds = %267
  %269 = load i32, ptr %17, align 4, !tbaa !9
  %270 = add nsw i32 %269, 1
  store i32 %270, ptr %17, align 4, !tbaa !9
  br label %236, !llvm.loop !19

271:                                              ; preds = %236
  store i32 0, ptr %25, align 4, !tbaa !9
  %272 = load ptr, ptr %9, align 8, !tbaa !5
  %273 = load i32, ptr %272, align 4, !tbaa !9
  %274 = sub nsw i32 %273, 1
  store i32 %274, ptr %13, align 4, !tbaa !9
  %275 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %275, ptr %17, align 4, !tbaa !9
  br label %276

276:                                              ; preds = %309, %271
  %277 = load i32, ptr %17, align 4, !tbaa !9
  %278 = load i32, ptr %13, align 4, !tbaa !9
  %279 = icmp sle i32 %277, %278
  br i1 %279, label %280, label %312

280:                                              ; preds = %276
  %281 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %281, ptr %23, align 4, !tbaa !9
  %282 = load i32, ptr %25, align 4, !tbaa !9
  %283 = load i32, ptr %17, align 4, !tbaa !9
  %284 = add nsw i32 %282, %283
  store i32 %284, ptr %14, align 4, !tbaa !9
  %285 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %285, ptr %23, align 4, !tbaa !9
  br label %286

286:                                              ; preds = %302, %280
  %287 = load i32, ptr %23, align 4, !tbaa !9
  %288 = load i32, ptr %14, align 4, !tbaa !9
  %289 = icmp sle i32 %287, %288
  br i1 %289, label %290, label %305

290:                                              ; preds = %286
  %291 = load ptr, ptr %10, align 8, !tbaa !5
  %292 = load i32, ptr %23, align 4, !tbaa !9
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds double, ptr %291, i64 %293
  %295 = load double, ptr %294, align 8, !tbaa !11
  %296 = load ptr, ptr %11, align 8, !tbaa !5
  %297 = load i32, ptr %29, align 4, !tbaa !9
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds double, ptr %296, i64 %298
  store double %295, ptr %299, align 8, !tbaa !11
  %300 = load i32, ptr %29, align 4, !tbaa !9
  %301 = add nsw i32 %300, 1
  store i32 %301, ptr %29, align 4, !tbaa !9
  br label %302

302:                                              ; preds = %290
  %303 = load i32, ptr %23, align 4, !tbaa !9
  %304 = add nsw i32 %303, 1
  store i32 %304, ptr %23, align 4, !tbaa !9
  br label %286, !llvm.loop !20

305:                                              ; preds = %286
  %306 = load i32, ptr %28, align 4, !tbaa !9
  %307 = load i32, ptr %25, align 4, !tbaa !9
  %308 = add nsw i32 %307, %306
  store i32 %308, ptr %25, align 4, !tbaa !9
  br label %309

309:                                              ; preds = %305
  %310 = load i32, ptr %17, align 4, !tbaa !9
  %311 = add nsw i32 %310, 1
  store i32 %311, ptr %17, align 4, !tbaa !9
  br label %276, !llvm.loop !21

312:                                              ; preds = %276
  br label %313

313:                                              ; preds = %312, %232
  br label %508

314:                                              ; preds = %147
  %315 = load i32, ptr %20, align 4, !tbaa !9
  %316 = icmp ne i32 %315, 0
  br i1 %316, label %317, label %413

317:                                              ; preds = %314
  store i32 0, ptr %29, align 4, !tbaa !9
  %318 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %318, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %319

319:                                              ; preds = %367, %317
  %320 = load i32, ptr %16, align 4, !tbaa !9
  %321 = load i32, ptr %13, align 4, !tbaa !9
  %322 = icmp sle i32 %320, %321
  br i1 %322, label %323, label %370

323:                                              ; preds = %319
  %324 = load ptr, ptr %9, align 8, !tbaa !5
  %325 = load i32, ptr %324, align 4, !tbaa !9
  %326 = load i32, ptr %28, align 4, !tbaa !9
  %327 = mul nsw i32 %325, %326
  %328 = sub nsw i32 %327, 1
  store i32 %328, ptr %14, align 4, !tbaa !9
  %329 = load i32, ptr %28, align 4, !tbaa !9
  store i32 %329, ptr %15, align 4, !tbaa !9
  %330 = load i32, ptr %16, align 4, !tbaa !9
  %331 = load i32, ptr %28, align 4, !tbaa !9
  %332 = add nsw i32 %331, 1
  %333 = mul nsw i32 %330, %332
  store i32 %333, ptr %23, align 4, !tbaa !9
  br label %334

334:                                              ; preds = %362, %323
  %335 = load i32, ptr %15, align 4, !tbaa !9
  %336 = icmp slt i32 %335, 0
  br i1 %336, label %337, label %342

337:                                              ; preds = %334
  %338 = load i32, ptr %23, align 4, !tbaa !9
  %339 = load i32, ptr %14, align 4, !tbaa !9
  %340 = icmp sge i32 %338, %339
  %341 = zext i1 %340 to i32
  br label %347

342:                                              ; preds = %334
  %343 = load i32, ptr %23, align 4, !tbaa !9
  %344 = load i32, ptr %14, align 4, !tbaa !9
  %345 = icmp sle i32 %343, %344
  %346 = zext i1 %345 to i32
  br label %347

347:                                              ; preds = %342, %337
  %348 = phi i32 [ %341, %337 ], [ %346, %342 ]
  %349 = icmp ne i32 %348, 0
  br i1 %349, label %350, label %366

350:                                              ; preds = %347
  %351 = load ptr, ptr %10, align 8, !tbaa !5
  %352 = load i32, ptr %23, align 4, !tbaa !9
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds double, ptr %351, i64 %353
  %355 = load double, ptr %354, align 8, !tbaa !11
  %356 = load ptr, ptr %11, align 8, !tbaa !5
  %357 = load i32, ptr %29, align 4, !tbaa !9
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds double, ptr %356, i64 %358
  store double %355, ptr %359, align 8, !tbaa !11
  %360 = load i32, ptr %29, align 4, !tbaa !9
  %361 = add nsw i32 %360, 1
  store i32 %361, ptr %29, align 4, !tbaa !9
  br label %362

362:                                              ; preds = %350
  %363 = load i32, ptr %15, align 4, !tbaa !9
  %364 = load i32, ptr %23, align 4, !tbaa !9
  %365 = add nsw i32 %364, %363
  store i32 %365, ptr %23, align 4, !tbaa !9
  br label %334, !llvm.loop !22

366:                                              ; preds = %347
  br label %367

367:                                              ; preds = %366
  %368 = load i32, ptr %16, align 4, !tbaa !9
  %369 = add nsw i32 %368, 1
  store i32 %369, ptr %16, align 4, !tbaa !9
  br label %319, !llvm.loop !23

370:                                              ; preds = %319
  store i32 1, ptr %25, align 4, !tbaa !9
  %371 = load i32, ptr %22, align 4, !tbaa !9
  %372 = sub nsw i32 %371, 1
  store i32 %372, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %373

373:                                              ; preds = %409, %370
  %374 = load i32, ptr %17, align 4, !tbaa !9
  %375 = load i32, ptr %13, align 4, !tbaa !9
  %376 = icmp sle i32 %374, %375
  br i1 %376, label %377, label %412

377:                                              ; preds = %373
  %378 = load i32, ptr %25, align 4, !tbaa !9
  %379 = load i32, ptr %22, align 4, !tbaa !9
  %380 = add nsw i32 %378, %379
  %381 = load i32, ptr %17, align 4, !tbaa !9
  %382 = sub nsw i32 %380, %381
  %383 = sub nsw i32 %382, 1
  store i32 %383, ptr %15, align 4, !tbaa !9
  %384 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %384, ptr %23, align 4, !tbaa !9
  br label %385

385:                                              ; preds = %401, %377
  %386 = load i32, ptr %23, align 4, !tbaa !9
  %387 = load i32, ptr %15, align 4, !tbaa !9
  %388 = icmp sle i32 %386, %387
  br i1 %388, label %389, label %404

389:                                              ; preds = %385
  %390 = load ptr, ptr %10, align 8, !tbaa !5
  %391 = load i32, ptr %23, align 4, !tbaa !9
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds double, ptr %390, i64 %392
  %394 = load double, ptr %393, align 8, !tbaa !11
  %395 = load ptr, ptr %11, align 8, !tbaa !5
  %396 = load i32, ptr %29, align 4, !tbaa !9
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds double, ptr %395, i64 %397
  store double %394, ptr %398, align 8, !tbaa !11
  %399 = load i32, ptr %29, align 4, !tbaa !9
  %400 = add nsw i32 %399, 1
  store i32 %400, ptr %29, align 4, !tbaa !9
  br label %401

401:                                              ; preds = %389
  %402 = load i32, ptr %23, align 4, !tbaa !9
  %403 = add nsw i32 %402, 1
  store i32 %403, ptr %23, align 4, !tbaa !9
  br label %385, !llvm.loop !24

404:                                              ; preds = %385
  %405 = load i32, ptr %25, align 4, !tbaa !9
  %406 = load i32, ptr %28, align 4, !tbaa !9
  %407 = add nsw i32 %405, %406
  %408 = add nsw i32 %407, 1
  store i32 %408, ptr %25, align 4, !tbaa !9
  br label %409

409:                                              ; preds = %404
  %410 = load i32, ptr %17, align 4, !tbaa !9
  %411 = add nsw i32 %410, 1
  store i32 %411, ptr %17, align 4, !tbaa !9
  br label %373, !llvm.loop !25

412:                                              ; preds = %373
  br label %507

413:                                              ; preds = %314
  store i32 0, ptr %29, align 4, !tbaa !9
  %414 = load i32, ptr %22, align 4, !tbaa !9
  %415 = load i32, ptr %28, align 4, !tbaa !9
  %416 = mul nsw i32 %414, %415
  store i32 %416, ptr %25, align 4, !tbaa !9
  %417 = load i32, ptr %21, align 4, !tbaa !9
  %418 = sub nsw i32 %417, 1
  store i32 %418, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %419

419:                                              ; preds = %451, %413
  %420 = load i32, ptr %17, align 4, !tbaa !9
  %421 = load i32, ptr %13, align 4, !tbaa !9
  %422 = icmp sle i32 %420, %421
  br i1 %422, label %423, label %454

423:                                              ; preds = %419
  %424 = load i32, ptr %25, align 4, !tbaa !9
  %425 = load i32, ptr %17, align 4, !tbaa !9
  %426 = add nsw i32 %424, %425
  store i32 %426, ptr %15, align 4, !tbaa !9
  %427 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %427, ptr %23, align 4, !tbaa !9
  br label %428

428:                                              ; preds = %444, %423
  %429 = load i32, ptr %23, align 4, !tbaa !9
  %430 = load i32, ptr %15, align 4, !tbaa !9
  %431 = icmp sle i32 %429, %430
  br i1 %431, label %432, label %447

432:                                              ; preds = %428
  %433 = load ptr, ptr %10, align 8, !tbaa !5
  %434 = load i32, ptr %23, align 4, !tbaa !9
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds double, ptr %433, i64 %435
  %437 = load double, ptr %436, align 8, !tbaa !11
  %438 = load ptr, ptr %11, align 8, !tbaa !5
  %439 = load i32, ptr %29, align 4, !tbaa !9
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds double, ptr %438, i64 %440
  store double %437, ptr %441, align 8, !tbaa !11
  %442 = load i32, ptr %29, align 4, !tbaa !9
  %443 = add nsw i32 %442, 1
  store i32 %443, ptr %29, align 4, !tbaa !9
  br label %444

444:                                              ; preds = %432
  %445 = load i32, ptr %23, align 4, !tbaa !9
  %446 = add nsw i32 %445, 1
  store i32 %446, ptr %23, align 4, !tbaa !9
  br label %428, !llvm.loop !26

447:                                              ; preds = %428
  %448 = load i32, ptr %28, align 4, !tbaa !9
  %449 = load i32, ptr %25, align 4, !tbaa !9
  %450 = add nsw i32 %449, %448
  store i32 %450, ptr %25, align 4, !tbaa !9
  br label %451

451:                                              ; preds = %447
  %452 = load i32, ptr %17, align 4, !tbaa !9
  %453 = add nsw i32 %452, 1
  store i32 %453, ptr %17, align 4, !tbaa !9
  br label %419, !llvm.loop !27

454:                                              ; preds = %419
  %455 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %455, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %456

456:                                              ; preds = %503, %454
  %457 = load i32, ptr %16, align 4, !tbaa !9
  %458 = load i32, ptr %13, align 4, !tbaa !9
  %459 = icmp sle i32 %457, %458
  br i1 %459, label %460, label %506

460:                                              ; preds = %456
  %461 = load i32, ptr %16, align 4, !tbaa !9
  %462 = load i32, ptr %21, align 4, !tbaa !9
  %463 = load i32, ptr %16, align 4, !tbaa !9
  %464 = add nsw i32 %462, %463
  %465 = load i32, ptr %28, align 4, !tbaa !9
  %466 = mul nsw i32 %464, %465
  %467 = add nsw i32 %461, %466
  store i32 %467, ptr %15, align 4, !tbaa !9
  %468 = load i32, ptr %28, align 4, !tbaa !9
  store i32 %468, ptr %14, align 4, !tbaa !9
  %469 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %469, ptr %23, align 4, !tbaa !9
  br label %470

470:                                              ; preds = %498, %460
  %471 = load i32, ptr %14, align 4, !tbaa !9
  %472 = icmp slt i32 %471, 0
  br i1 %472, label %473, label %478

473:                                              ; preds = %470
  %474 = load i32, ptr %23, align 4, !tbaa !9
  %475 = load i32, ptr %15, align 4, !tbaa !9
  %476 = icmp sge i32 %474, %475
  %477 = zext i1 %476 to i32
  br label %483

478:                                              ; preds = %470
  %479 = load i32, ptr %23, align 4, !tbaa !9
  %480 = load i32, ptr %15, align 4, !tbaa !9
  %481 = icmp sle i32 %479, %480
  %482 = zext i1 %481 to i32
  br label %483

483:                                              ; preds = %478, %473
  %484 = phi i32 [ %477, %473 ], [ %482, %478 ]
  %485 = icmp ne i32 %484, 0
  br i1 %485, label %486, label %502

486:                                              ; preds = %483
  %487 = load ptr, ptr %10, align 8, !tbaa !5
  %488 = load i32, ptr %23, align 4, !tbaa !9
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds double, ptr %487, i64 %489
  %491 = load double, ptr %490, align 8, !tbaa !11
  %492 = load ptr, ptr %11, align 8, !tbaa !5
  %493 = load i32, ptr %29, align 4, !tbaa !9
  %494 = sext i32 %493 to i64
  %495 = getelementptr inbounds double, ptr %492, i64 %494
  store double %491, ptr %495, align 8, !tbaa !11
  %496 = load i32, ptr %29, align 4, !tbaa !9
  %497 = add nsw i32 %496, 1
  store i32 %497, ptr %29, align 4, !tbaa !9
  br label %498

498:                                              ; preds = %486
  %499 = load i32, ptr %14, align 4, !tbaa !9
  %500 = load i32, ptr %23, align 4, !tbaa !9
  %501 = add nsw i32 %500, %499
  store i32 %501, ptr %23, align 4, !tbaa !9
  br label %470, !llvm.loop !28

502:                                              ; preds = %483
  br label %503

503:                                              ; preds = %502
  %504 = load i32, ptr %16, align 4, !tbaa !9
  %505 = add nsw i32 %504, 1
  store i32 %505, ptr %16, align 4, !tbaa !9
  br label %456, !llvm.loop !29

506:                                              ; preds = %456
  br label %507

507:                                              ; preds = %506, %412
  br label %508

508:                                              ; preds = %507, %313
  br label %880

509:                                              ; preds = %144
  %510 = load i32, ptr %19, align 4, !tbaa !9
  %511 = icmp ne i32 %510, 0
  br i1 %511, label %512, label %679

512:                                              ; preds = %509
  %513 = load i32, ptr %20, align 4, !tbaa !9
  %514 = icmp ne i32 %513, 0
  br i1 %514, label %515, label %597

515:                                              ; preds = %512
  store i32 0, ptr %29, align 4, !tbaa !9
  store i32 0, ptr %24, align 4, !tbaa !9
  %516 = load i32, ptr %18, align 4, !tbaa !9
  %517 = sub nsw i32 %516, 1
  store i32 %517, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %518

518:                                              ; preds = %554, %515
  %519 = load i32, ptr %17, align 4, !tbaa !9
  %520 = load i32, ptr %13, align 4, !tbaa !9
  %521 = icmp sle i32 %519, %520
  br i1 %521, label %522, label %557

522:                                              ; preds = %518
  %523 = load ptr, ptr %9, align 8, !tbaa !5
  %524 = load i32, ptr %523, align 4, !tbaa !9
  %525 = sub nsw i32 %524, 1
  store i32 %525, ptr %14, align 4, !tbaa !9
  %526 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %526, ptr %16, align 4, !tbaa !9
  br label %527

527:                                              ; preds = %547, %522
  %528 = load i32, ptr %16, align 4, !tbaa !9
  %529 = load i32, ptr %14, align 4, !tbaa !9
  %530 = icmp sle i32 %528, %529
  br i1 %530, label %531, label %550

531:                                              ; preds = %527
  %532 = load i32, ptr %16, align 4, !tbaa !9
  %533 = add nsw i32 %532, 1
  %534 = load i32, ptr %24, align 4, !tbaa !9
  %535 = add nsw i32 %533, %534
  store i32 %535, ptr %23, align 4, !tbaa !9
  %536 = load ptr, ptr %10, align 8, !tbaa !5
  %537 = load i32, ptr %23, align 4, !tbaa !9
  %538 = sext i32 %537 to i64
  %539 = getelementptr inbounds double, ptr %536, i64 %538
  %540 = load double, ptr %539, align 8, !tbaa !11
  %541 = load ptr, ptr %11, align 8, !tbaa !5
  %542 = load i32, ptr %29, align 4, !tbaa !9
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds double, ptr %541, i64 %543
  store double %540, ptr %544, align 8, !tbaa !11
  %545 = load i32, ptr %29, align 4, !tbaa !9
  %546 = add nsw i32 %545, 1
  store i32 %546, ptr %29, align 4, !tbaa !9
  br label %547

547:                                              ; preds = %531
  %548 = load i32, ptr %16, align 4, !tbaa !9
  %549 = add nsw i32 %548, 1
  store i32 %549, ptr %16, align 4, !tbaa !9
  br label %527, !llvm.loop !30

550:                                              ; preds = %527
  %551 = load i32, ptr %28, align 4, !tbaa !9
  %552 = load i32, ptr %24, align 4, !tbaa !9
  %553 = add nsw i32 %552, %551
  store i32 %553, ptr %24, align 4, !tbaa !9
  br label %554

554:                                              ; preds = %550
  %555 = load i32, ptr %17, align 4, !tbaa !9
  %556 = add nsw i32 %555, 1
  store i32 %556, ptr %17, align 4, !tbaa !9
  br label %518, !llvm.loop !31

557:                                              ; preds = %518
  %558 = load i32, ptr %18, align 4, !tbaa !9
  %559 = sub nsw i32 %558, 1
  store i32 %559, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %560

560:                                              ; preds = %593, %557
  %561 = load i32, ptr %16, align 4, !tbaa !9
  %562 = load i32, ptr %13, align 4, !tbaa !9
  %563 = icmp sle i32 %561, %562
  br i1 %563, label %564, label %596

564:                                              ; preds = %560
  %565 = load i32, ptr %18, align 4, !tbaa !9
  %566 = sub nsw i32 %565, 1
  store i32 %566, ptr %14, align 4, !tbaa !9
  %567 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %567, ptr %17, align 4, !tbaa !9
  br label %568

568:                                              ; preds = %589, %564
  %569 = load i32, ptr %17, align 4, !tbaa !9
  %570 = load i32, ptr %14, align 4, !tbaa !9
  %571 = icmp sle i32 %569, %570
  br i1 %571, label %572, label %592

572:                                              ; preds = %568
  %573 = load i32, ptr %16, align 4, !tbaa !9
  %574 = load i32, ptr %17, align 4, !tbaa !9
  %575 = load i32, ptr %28, align 4, !tbaa !9
  %576 = mul nsw i32 %574, %575
  %577 = add nsw i32 %573, %576
  store i32 %577, ptr %23, align 4, !tbaa !9
  %578 = load ptr, ptr %10, align 8, !tbaa !5
  %579 = load i32, ptr %23, align 4, !tbaa !9
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds double, ptr %578, i64 %580
  %582 = load double, ptr %581, align 8, !tbaa !11
  %583 = load ptr, ptr %11, align 8, !tbaa !5
  %584 = load i32, ptr %29, align 4, !tbaa !9
  %585 = sext i32 %584 to i64
  %586 = getelementptr inbounds double, ptr %583, i64 %585
  store double %582, ptr %586, align 8, !tbaa !11
  %587 = load i32, ptr %29, align 4, !tbaa !9
  %588 = add nsw i32 %587, 1
  store i32 %588, ptr %29, align 4, !tbaa !9
  br label %589

589:                                              ; preds = %572
  %590 = load i32, ptr %17, align 4, !tbaa !9
  %591 = add nsw i32 %590, 1
  store i32 %591, ptr %17, align 4, !tbaa !9
  br label %568, !llvm.loop !32

592:                                              ; preds = %568
  br label %593

593:                                              ; preds = %592
  %594 = load i32, ptr %16, align 4, !tbaa !9
  %595 = add nsw i32 %594, 1
  store i32 %595, ptr %16, align 4, !tbaa !9
  br label %560, !llvm.loop !33

596:                                              ; preds = %560
  br label %678

597:                                              ; preds = %512
  store i32 0, ptr %29, align 4, !tbaa !9
  %598 = load i32, ptr %18, align 4, !tbaa !9
  %599 = sub nsw i32 %598, 1
  store i32 %599, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %600

600:                                              ; preds = %633, %597
  %601 = load i32, ptr %17, align 4, !tbaa !9
  %602 = load i32, ptr %13, align 4, !tbaa !9
  %603 = icmp sle i32 %601, %602
  br i1 %603, label %604, label %636

604:                                              ; preds = %600
  %605 = load i32, ptr %18, align 4, !tbaa !9
  %606 = add nsw i32 %605, 1
  %607 = load i32, ptr %17, align 4, !tbaa !9
  %608 = add nsw i32 %606, %607
  store i32 %608, ptr %23, align 4, !tbaa !9
  %609 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %609, ptr %14, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %610

610:                                              ; preds = %629, %604
  %611 = load i32, ptr %16, align 4, !tbaa !9
  %612 = load i32, ptr %14, align 4, !tbaa !9
  %613 = icmp sle i32 %611, %612
  br i1 %613, label %614, label %632

614:                                              ; preds = %610
  %615 = load ptr, ptr %10, align 8, !tbaa !5
  %616 = load i32, ptr %23, align 4, !tbaa !9
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds double, ptr %615, i64 %617
  %619 = load double, ptr %618, align 8, !tbaa !11
  %620 = load ptr, ptr %11, align 8, !tbaa !5
  %621 = load i32, ptr %29, align 4, !tbaa !9
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds double, ptr %620, i64 %622
  store double %619, ptr %623, align 8, !tbaa !11
  %624 = load i32, ptr %29, align 4, !tbaa !9
  %625 = add nsw i32 %624, 1
  store i32 %625, ptr %29, align 4, !tbaa !9
  %626 = load i32, ptr %28, align 4, !tbaa !9
  %627 = load i32, ptr %23, align 4, !tbaa !9
  %628 = add nsw i32 %627, %626
  store i32 %628, ptr %23, align 4, !tbaa !9
  br label %629

629:                                              ; preds = %614
  %630 = load i32, ptr %16, align 4, !tbaa !9
  %631 = add nsw i32 %630, 1
  store i32 %631, ptr %16, align 4, !tbaa !9
  br label %610, !llvm.loop !34

632:                                              ; preds = %610
  br label %633

633:                                              ; preds = %632
  %634 = load i32, ptr %17, align 4, !tbaa !9
  %635 = add nsw i32 %634, 1
  store i32 %635, ptr %17, align 4, !tbaa !9
  br label %600, !llvm.loop !35

636:                                              ; preds = %600
  store i32 0, ptr %25, align 4, !tbaa !9
  %637 = load ptr, ptr %9, align 8, !tbaa !5
  %638 = load i32, ptr %637, align 4, !tbaa !9
  %639 = sub nsw i32 %638, 1
  store i32 %639, ptr %13, align 4, !tbaa !9
  %640 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %640, ptr %17, align 4, !tbaa !9
  br label %641

641:                                              ; preds = %674, %636
  %642 = load i32, ptr %17, align 4, !tbaa !9
  %643 = load i32, ptr %13, align 4, !tbaa !9
  %644 = icmp sle i32 %642, %643
  br i1 %644, label %645, label %677

645:                                              ; preds = %641
  %646 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %646, ptr %23, align 4, !tbaa !9
  %647 = load i32, ptr %25, align 4, !tbaa !9
  %648 = load i32, ptr %17, align 4, !tbaa !9
  %649 = add nsw i32 %647, %648
  store i32 %649, ptr %14, align 4, !tbaa !9
  %650 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %650, ptr %23, align 4, !tbaa !9
  br label %651

651:                                              ; preds = %667, %645
  %652 = load i32, ptr %23, align 4, !tbaa !9
  %653 = load i32, ptr %14, align 4, !tbaa !9
  %654 = icmp sle i32 %652, %653
  br i1 %654, label %655, label %670

655:                                              ; preds = %651
  %656 = load ptr, ptr %10, align 8, !tbaa !5
  %657 = load i32, ptr %23, align 4, !tbaa !9
  %658 = sext i32 %657 to i64
  %659 = getelementptr inbounds double, ptr %656, i64 %658
  %660 = load double, ptr %659, align 8, !tbaa !11
  %661 = load ptr, ptr %11, align 8, !tbaa !5
  %662 = load i32, ptr %29, align 4, !tbaa !9
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds double, ptr %661, i64 %663
  store double %660, ptr %664, align 8, !tbaa !11
  %665 = load i32, ptr %29, align 4, !tbaa !9
  %666 = add nsw i32 %665, 1
  store i32 %666, ptr %29, align 4, !tbaa !9
  br label %667

667:                                              ; preds = %655
  %668 = load i32, ptr %23, align 4, !tbaa !9
  %669 = add nsw i32 %668, 1
  store i32 %669, ptr %23, align 4, !tbaa !9
  br label %651, !llvm.loop !36

670:                                              ; preds = %651
  %671 = load i32, ptr %28, align 4, !tbaa !9
  %672 = load i32, ptr %25, align 4, !tbaa !9
  %673 = add nsw i32 %672, %671
  store i32 %673, ptr %25, align 4, !tbaa !9
  br label %674

674:                                              ; preds = %670
  %675 = load i32, ptr %17, align 4, !tbaa !9
  %676 = add nsw i32 %675, 1
  store i32 %676, ptr %17, align 4, !tbaa !9
  br label %641, !llvm.loop !37

677:                                              ; preds = %641
  br label %678

678:                                              ; preds = %677, %596
  br label %879

679:                                              ; preds = %509
  %680 = load i32, ptr %20, align 4, !tbaa !9
  %681 = icmp ne i32 %680, 0
  br i1 %681, label %682, label %782

682:                                              ; preds = %679
  store i32 0, ptr %29, align 4, !tbaa !9
  %683 = load i32, ptr %18, align 4, !tbaa !9
  %684 = sub nsw i32 %683, 1
  store i32 %684, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %685

685:                                              ; preds = %736, %682
  %686 = load i32, ptr %16, align 4, !tbaa !9
  %687 = load i32, ptr %13, align 4, !tbaa !9
  %688 = icmp sle i32 %686, %687
  br i1 %688, label %689, label %739

689:                                              ; preds = %685
  %690 = load ptr, ptr %9, align 8, !tbaa !5
  %691 = load i32, ptr %690, align 4, !tbaa !9
  %692 = add nsw i32 %691, 1
  %693 = load i32, ptr %28, align 4, !tbaa !9
  %694 = mul nsw i32 %692, %693
  %695 = sub nsw i32 %694, 1
  store i32 %695, ptr %14, align 4, !tbaa !9
  %696 = load i32, ptr %28, align 4, !tbaa !9
  store i32 %696, ptr %15, align 4, !tbaa !9
  %697 = load i32, ptr %16, align 4, !tbaa !9
  %698 = load i32, ptr %16, align 4, !tbaa !9
  %699 = add nsw i32 %698, 1
  %700 = load i32, ptr %28, align 4, !tbaa !9
  %701 = mul nsw i32 %699, %700
  %702 = add nsw i32 %697, %701
  store i32 %702, ptr %23, align 4, !tbaa !9
  br label %703

703:                                              ; preds = %731, %689
  %704 = load i32, ptr %15, align 4, !tbaa !9
  %705 = icmp slt i32 %704, 0
  br i1 %705, label %706, label %711

706:                                              ; preds = %703
  %707 = load i32, ptr %23, align 4, !tbaa !9
  %708 = load i32, ptr %14, align 4, !tbaa !9
  %709 = icmp sge i32 %707, %708
  %710 = zext i1 %709 to i32
  br label %716

711:                                              ; preds = %703
  %712 = load i32, ptr %23, align 4, !tbaa !9
  %713 = load i32, ptr %14, align 4, !tbaa !9
  %714 = icmp sle i32 %712, %713
  %715 = zext i1 %714 to i32
  br label %716

716:                                              ; preds = %711, %706
  %717 = phi i32 [ %710, %706 ], [ %715, %711 ]
  %718 = icmp ne i32 %717, 0
  br i1 %718, label %719, label %735

719:                                              ; preds = %716
  %720 = load ptr, ptr %10, align 8, !tbaa !5
  %721 = load i32, ptr %23, align 4, !tbaa !9
  %722 = sext i32 %721 to i64
  %723 = getelementptr inbounds double, ptr %720, i64 %722
  %724 = load double, ptr %723, align 8, !tbaa !11
  %725 = load ptr, ptr %11, align 8, !tbaa !5
  %726 = load i32, ptr %29, align 4, !tbaa !9
  %727 = sext i32 %726 to i64
  %728 = getelementptr inbounds double, ptr %725, i64 %727
  store double %724, ptr %728, align 8, !tbaa !11
  %729 = load i32, ptr %29, align 4, !tbaa !9
  %730 = add nsw i32 %729, 1
  store i32 %730, ptr %29, align 4, !tbaa !9
  br label %731

731:                                              ; preds = %719
  %732 = load i32, ptr %15, align 4, !tbaa !9
  %733 = load i32, ptr %23, align 4, !tbaa !9
  %734 = add nsw i32 %733, %732
  store i32 %734, ptr %23, align 4, !tbaa !9
  br label %703, !llvm.loop !38

735:                                              ; preds = %716
  br label %736

736:                                              ; preds = %735
  %737 = load i32, ptr %16, align 4, !tbaa !9
  %738 = add nsw i32 %737, 1
  store i32 %738, ptr %16, align 4, !tbaa !9
  br label %685, !llvm.loop !39

739:                                              ; preds = %685
  store i32 0, ptr %25, align 4, !tbaa !9
  %740 = load i32, ptr %18, align 4, !tbaa !9
  %741 = sub nsw i32 %740, 1
  store i32 %741, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %742

742:                                              ; preds = %778, %739
  %743 = load i32, ptr %17, align 4, !tbaa !9
  %744 = load i32, ptr %13, align 4, !tbaa !9
  %745 = icmp sle i32 %743, %744
  br i1 %745, label %746, label %781

746:                                              ; preds = %742
  %747 = load i32, ptr %25, align 4, !tbaa !9
  %748 = load i32, ptr %18, align 4, !tbaa !9
  %749 = add nsw i32 %747, %748
  %750 = load i32, ptr %17, align 4, !tbaa !9
  %751 = sub nsw i32 %749, %750
  %752 = sub nsw i32 %751, 1
  store i32 %752, ptr %15, align 4, !tbaa !9
  %753 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %753, ptr %23, align 4, !tbaa !9
  br label %754

754:                                              ; preds = %770, %746
  %755 = load i32, ptr %23, align 4, !tbaa !9
  %756 = load i32, ptr %15, align 4, !tbaa !9
  %757 = icmp sle i32 %755, %756
  br i1 %757, label %758, label %773

758:                                              ; preds = %754
  %759 = load ptr, ptr %10, align 8, !tbaa !5
  %760 = load i32, ptr %23, align 4, !tbaa !9
  %761 = sext i32 %760 to i64
  %762 = getelementptr inbounds double, ptr %759, i64 %761
  %763 = load double, ptr %762, align 8, !tbaa !11
  %764 = load ptr, ptr %11, align 8, !tbaa !5
  %765 = load i32, ptr %29, align 4, !tbaa !9
  %766 = sext i32 %765 to i64
  %767 = getelementptr inbounds double, ptr %764, i64 %766
  store double %763, ptr %767, align 8, !tbaa !11
  %768 = load i32, ptr %29, align 4, !tbaa !9
  %769 = add nsw i32 %768, 1
  store i32 %769, ptr %29, align 4, !tbaa !9
  br label %770

770:                                              ; preds = %758
  %771 = load i32, ptr %23, align 4, !tbaa !9
  %772 = add nsw i32 %771, 1
  store i32 %772, ptr %23, align 4, !tbaa !9
  br label %754, !llvm.loop !40

773:                                              ; preds = %754
  %774 = load i32, ptr %25, align 4, !tbaa !9
  %775 = load i32, ptr %28, align 4, !tbaa !9
  %776 = add nsw i32 %774, %775
  %777 = add nsw i32 %776, 1
  store i32 %777, ptr %25, align 4, !tbaa !9
  br label %778

778:                                              ; preds = %773
  %779 = load i32, ptr %17, align 4, !tbaa !9
  %780 = add nsw i32 %779, 1
  store i32 %780, ptr %17, align 4, !tbaa !9
  br label %742, !llvm.loop !41

781:                                              ; preds = %742
  br label %878

782:                                              ; preds = %679
  store i32 0, ptr %29, align 4, !tbaa !9
  %783 = load i32, ptr %18, align 4, !tbaa !9
  %784 = add nsw i32 %783, 1
  %785 = load i32, ptr %28, align 4, !tbaa !9
  %786 = mul nsw i32 %784, %785
  store i32 %786, ptr %25, align 4, !tbaa !9
  %787 = load i32, ptr %18, align 4, !tbaa !9
  %788 = sub nsw i32 %787, 1
  store i32 %788, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %789

789:                                              ; preds = %821, %782
  %790 = load i32, ptr %17, align 4, !tbaa !9
  %791 = load i32, ptr %13, align 4, !tbaa !9
  %792 = icmp sle i32 %790, %791
  br i1 %792, label %793, label %824

793:                                              ; preds = %789
  %794 = load i32, ptr %25, align 4, !tbaa !9
  %795 = load i32, ptr %17, align 4, !tbaa !9
  %796 = add nsw i32 %794, %795
  store i32 %796, ptr %15, align 4, !tbaa !9
  %797 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %797, ptr %23, align 4, !tbaa !9
  br label %798

798:                                              ; preds = %814, %793
  %799 = load i32, ptr %23, align 4, !tbaa !9
  %800 = load i32, ptr %15, align 4, !tbaa !9
  %801 = icmp sle i32 %799, %800
  br i1 %801, label %802, label %817

802:                                              ; preds = %798
  %803 = load ptr, ptr %10, align 8, !tbaa !5
  %804 = load i32, ptr %23, align 4, !tbaa !9
  %805 = sext i32 %804 to i64
  %806 = getelementptr inbounds double, ptr %803, i64 %805
  %807 = load double, ptr %806, align 8, !tbaa !11
  %808 = load ptr, ptr %11, align 8, !tbaa !5
  %809 = load i32, ptr %29, align 4, !tbaa !9
  %810 = sext i32 %809 to i64
  %811 = getelementptr inbounds double, ptr %808, i64 %810
  store double %807, ptr %811, align 8, !tbaa !11
  %812 = load i32, ptr %29, align 4, !tbaa !9
  %813 = add nsw i32 %812, 1
  store i32 %813, ptr %29, align 4, !tbaa !9
  br label %814

814:                                              ; preds = %802
  %815 = load i32, ptr %23, align 4, !tbaa !9
  %816 = add nsw i32 %815, 1
  store i32 %816, ptr %23, align 4, !tbaa !9
  br label %798, !llvm.loop !42

817:                                              ; preds = %798
  %818 = load i32, ptr %28, align 4, !tbaa !9
  %819 = load i32, ptr %25, align 4, !tbaa !9
  %820 = add nsw i32 %819, %818
  store i32 %820, ptr %25, align 4, !tbaa !9
  br label %821

821:                                              ; preds = %817
  %822 = load i32, ptr %17, align 4, !tbaa !9
  %823 = add nsw i32 %822, 1
  store i32 %823, ptr %17, align 4, !tbaa !9
  br label %789, !llvm.loop !43

824:                                              ; preds = %789
  %825 = load i32, ptr %18, align 4, !tbaa !9
  %826 = sub nsw i32 %825, 1
  store i32 %826, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %827

827:                                              ; preds = %874, %824
  %828 = load i32, ptr %16, align 4, !tbaa !9
  %829 = load i32, ptr %13, align 4, !tbaa !9
  %830 = icmp sle i32 %828, %829
  br i1 %830, label %831, label %877

831:                                              ; preds = %827
  %832 = load i32, ptr %16, align 4, !tbaa !9
  %833 = load i32, ptr %18, align 4, !tbaa !9
  %834 = load i32, ptr %16, align 4, !tbaa !9
  %835 = add nsw i32 %833, %834
  %836 = load i32, ptr %28, align 4, !tbaa !9
  %837 = mul nsw i32 %835, %836
  %838 = add nsw i32 %832, %837
  store i32 %838, ptr %15, align 4, !tbaa !9
  %839 = load i32, ptr %28, align 4, !tbaa !9
  store i32 %839, ptr %14, align 4, !tbaa !9
  %840 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %840, ptr %23, align 4, !tbaa !9
  br label %841

841:                                              ; preds = %869, %831
  %842 = load i32, ptr %14, align 4, !tbaa !9
  %843 = icmp slt i32 %842, 0
  br i1 %843, label %844, label %849

844:                                              ; preds = %841
  %845 = load i32, ptr %23, align 4, !tbaa !9
  %846 = load i32, ptr %15, align 4, !tbaa !9
  %847 = icmp sge i32 %845, %846
  %848 = zext i1 %847 to i32
  br label %854

849:                                              ; preds = %841
  %850 = load i32, ptr %23, align 4, !tbaa !9
  %851 = load i32, ptr %15, align 4, !tbaa !9
  %852 = icmp sle i32 %850, %851
  %853 = zext i1 %852 to i32
  br label %854

854:                                              ; preds = %849, %844
  %855 = phi i32 [ %848, %844 ], [ %853, %849 ]
  %856 = icmp ne i32 %855, 0
  br i1 %856, label %857, label %873

857:                                              ; preds = %854
  %858 = load ptr, ptr %10, align 8, !tbaa !5
  %859 = load i32, ptr %23, align 4, !tbaa !9
  %860 = sext i32 %859 to i64
  %861 = getelementptr inbounds double, ptr %858, i64 %860
  %862 = load double, ptr %861, align 8, !tbaa !11
  %863 = load ptr, ptr %11, align 8, !tbaa !5
  %864 = load i32, ptr %29, align 4, !tbaa !9
  %865 = sext i32 %864 to i64
  %866 = getelementptr inbounds double, ptr %863, i64 %865
  store double %862, ptr %866, align 8, !tbaa !11
  %867 = load i32, ptr %29, align 4, !tbaa !9
  %868 = add nsw i32 %867, 1
  store i32 %868, ptr %29, align 4, !tbaa !9
  br label %869

869:                                              ; preds = %857
  %870 = load i32, ptr %14, align 4, !tbaa !9
  %871 = load i32, ptr %23, align 4, !tbaa !9
  %872 = add nsw i32 %871, %870
  store i32 %872, ptr %23, align 4, !tbaa !9
  br label %841, !llvm.loop !44

873:                                              ; preds = %854
  br label %874

874:                                              ; preds = %873
  %875 = load i32, ptr %16, align 4, !tbaa !9
  %876 = add nsw i32 %875, 1
  store i32 %876, ptr %16, align 4, !tbaa !9
  br label %827, !llvm.loop !45

877:                                              ; preds = %827
  br label %878

878:                                              ; preds = %877, %781
  br label %879

879:                                              ; preds = %878, %678
  br label %880

880:                                              ; preds = %879, %508
  store i32 1, ptr %30, align 4
  br label %881

881:                                              ; preds = %880, %94, %74, %65
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  ret void
}

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

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

declare i32 @xerbla_(ptr noundef, ptr noundef, i32 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 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !14}
!31 = distinct !{!31, !14}
!32 = distinct !{!32, !14}
!33 = distinct !{!33, !14}
!34 = distinct !{!34, !14}
!35 = distinct !{!35, !14}
!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 void @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 = ptrtoint ptr %3 to i64
  %28 = ptrtoint ptr %4 to i64
  %29 = ptrtoint ptr %3 to i64
  %30 = ptrtoint ptr %4 to i64
  %31 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #4
  store i32 0, ptr %5, align 4, !tbaa !5
  %32 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #4
  %33 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #4
  %.not = icmp eq i32 %32, 0
  br i1 %.not, label %34, label %36

34:                                               ; preds = %6
  %35 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #4
  %.not378 = icmp eq i32 %35, 0
  br i1 %.not378, label %.thread.sink.split, label %36

36:                                               ; preds = %34, %6
  %.not379 = icmp eq i32 %33, 0
  br i1 %.not379, label %37, label %39

37:                                               ; preds = %36
  %38 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #4
  %.not380 = icmp eq i32 %38, 0
  br i1 %.not380, label %.thread.sink.split, label %39

39:                                               ; preds = %37, %36
  %40 = load i32, ptr %2, align 4, !tbaa !5
  %41 = icmp slt i32 %40, 0
  br i1 %41, label %.thread.sink.split, label %42

42:                                               ; preds = %39
  %.pr = load i32, ptr %5, align 4, !tbaa !5
  %.not381 = icmp eq i32 %.pr, 0
  br i1 %.not381, label %46, label %.thread

.thread.sink.split:                               ; preds = %39, %37, %34
  %.sink = phi i32 [ -1, %34 ], [ -2, %37 ], [ -3, %39 ]
  store i32 %.sink, ptr %5, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %42
  %43 = phi i32 [ %.pr, %42 ], [ %.sink, %.thread.sink.split ]
  %44 = sub nsw i32 0, %43
  store i32 %44, ptr %31, align 4, !tbaa !5
  %45 = call i32 @xerbla_(ptr noundef nonnull @.str.4, ptr noundef nonnull %31, i32 noundef 6) #4
  br label %.loopexit

46:                                               ; preds = %42
  switch i32 %40, label %48 [
    i32 0, label %.loopexit
    i32 1, label %47
  ]

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

48:                                               ; preds = %46
  %49 = lshr i32 %40, 1
  %50 = sub nsw i32 %40, %49
  %. = select i1 %.not379, i32 %49, i32 %50
  %.896 = select i1 %.not379, i32 %50, i32 %49
  %51 = and i32 %40, 1
  %52 = icmp eq i32 %51, 0
  %53 = lshr i32 %40, 1
  %.0328 = or i32 %40, 1
  br i1 %.not, label %54, label %.thread416

54:                                               ; preds = %48
  %55 = add nuw i32 %40, 1
  %56 = lshr i32 %55, 1
  br i1 %52, label %475, label %180

.thread416:                                       ; preds = %48
  br i1 %52, label %.thread423, label %.thread420

.thread420:                                       ; preds = %.thread416
  br i1 %.not379, label %118, label %57

57:                                               ; preds = %.thread420
  %.not411440 = icmp slt i32 %.896, 0
  br i1 %.not411440, label %.loopexit, label %.preheader436.preheader

.preheader436.preheader:                          ; preds = %57
  %58 = zext nneg i32 %.0328 to i64
  %59 = add nuw i32 %.896, 1
  %wide.trip.count656 = zext i32 %59 to i64
  %wide.trip.count = zext nneg i32 %40 to i64
  %60 = sub i64 %30, %29
  %61 = shl nuw nsw i64 %58, 3
  %62 = sub nuw nsw i64 -8, %61
  %invariant.gep1370 = getelementptr i8, ptr %4, i64 8
  %invariant.gep1374 = getelementptr i8, ptr %4, i64 16
  %invariant.gep1378 = getelementptr i8, ptr %4, i64 24
  br label %.preheader436

.preheader436:                                    ; preds = %.preheader436.preheader, %._crit_edge
  %indvars.iv651 = phi i64 [ 0, %.preheader436.preheader ], [ %indvars.iv.next652, %._crit_edge ]
  %indvars.iv644 = phi i64 [ 0, %.preheader436.preheader ], [ %indvars.iv.next645, %._crit_edge ]
  %.0443 = phi i32 [ 0, %.preheader436.preheader ], [ %.1.lcssa, %._crit_edge ]
  %63 = sub nsw i64 %wide.trip.count, %indvars.iv644
  %64 = mul i64 %62, %indvars.iv644
  %65 = add i64 %60, %64
  %indvars655 = trunc i64 %indvars.iv644 to i32
  %.not414.not437 = icmp sgt i32 %40, %indvars655
  br i1 %.not414.not437, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %.preheader436
  %66 = sext i32 %.0443 to i64
  %invariant.gep = getelementptr inbounds double, ptr %3, i64 %indvars.iv651
  %min.iters.check = icmp ult i64 %63, 4
  br i1 %min.iters.check, label %.lr.ph.preheader1330, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph.preheader
  %67 = shl nsw i64 %66, 3
  %68 = add i64 %65, %67
  %diff.check = icmp ult i64 %68, 32
  br i1 %diff.check, label %.lr.ph.preheader1330, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %63, -4
  %ind.end = add i64 %indvars.iv644, %n.vec
  %ind.end905 = add i64 %n.vec, %66
  %69 = getelementptr double, ptr %invariant.gep, i64 %indvars.iv644
  %invariant.gep1366 = getelementptr double, ptr %4, i64 %66
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %70 = getelementptr double, ptr %69, i64 %index
  %71 = getelementptr inbounds i8, ptr %70, i64 16
  %wide.load = load <2 x double>, ptr %70, align 8, !tbaa !9
  %wide.load908 = load <2 x double>, ptr %71, align 8, !tbaa !9
  %gep1367 = getelementptr double, ptr %invariant.gep1366, i64 %index
  %72 = getelementptr inbounds i8, ptr %gep1367, i64 16
  store <2 x double> %wide.load, ptr %gep1367, align 8, !tbaa !9
  store <2 x double> %wide.load908, ptr %72, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 4
  %73 = icmp eq i64 %index.next, %n.vec
  br i1 %73, label %middle.block, label %vector.body, !llvm.loop !11

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

.lr.ph.preheader1330:                             ; preds = %middle.block, %vector.memcheck, %.lr.ph.preheader
  %indvars.iv646.ph = phi i64 [ %indvars.iv644, %vector.memcheck ], [ %indvars.iv644, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  %indvars.iv.ph = phi i64 [ %66, %vector.memcheck ], [ %66, %.lr.ph.preheader ], [ %ind.end905, %middle.block ]
  %74 = sub i64 %wide.trip.count, %indvars.iv646.ph
  %xtraiter = and i64 %74, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader1330, %.lr.ph.prol
  %indvars.iv646.prol = phi i64 [ %indvars.iv.next647.prol, %.lr.ph.prol ], [ %indvars.iv646.ph, %.lr.ph.preheader1330 ]
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %.lr.ph.prol ], [ %indvars.iv.ph, %.lr.ph.preheader1330 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph.prol ], [ 0, %.lr.ph.preheader1330 ]
  %gep.prol = getelementptr inbounds double, ptr %invariant.gep, i64 %indvars.iv646.prol
  %75 = load double, ptr %gep.prol, align 8, !tbaa !9
  %76 = getelementptr inbounds double, ptr %4, i64 %indvars.iv.prol
  store double %75, ptr %76, align 8, !tbaa !9
  %indvars.iv.next.prol = add nsw i64 %indvars.iv.prol, 1
  %indvars.iv.next647.prol = add nuw nsw i64 %indvars.iv646.prol, 1
  %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 %.lr.ph.prol.loopexit, label %.lr.ph.prol, !llvm.loop !15

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader1330
  %indvars.iv.next.lcssa1331.unr = phi i64 [ poison, %.lr.ph.preheader1330 ], [ %indvars.iv.next.prol, %.lr.ph.prol ]
  %indvars.iv646.unr = phi i64 [ %indvars.iv646.ph, %.lr.ph.preheader1330 ], [ %indvars.iv.next647.prol, %.lr.ph.prol ]
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %.lr.ph.preheader1330 ], [ %indvars.iv.next.prol, %.lr.ph.prol ]
  %77 = sub i64 %indvars.iv646.ph, %wide.trip.count
  %78 = icmp ugt i64 %77, -4
  br i1 %78, label %._crit_edge.loopexit, label %.lr.ph.preheader1330.new

.lr.ph.preheader1330.new:                         ; preds = %.lr.ph.prol.loopexit
  %invariant.gep1368 = getelementptr i8, ptr %invariant.gep, i64 8
  %invariant.gep1372 = getelementptr i8, ptr %invariant.gep, i64 16
  %invariant.gep1376 = getelementptr i8, ptr %invariant.gep, i64 24
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader1330.new
  %indvars.iv646 = phi i64 [ %indvars.iv646.unr, %.lr.ph.preheader1330.new ], [ %indvars.iv.next647.3, %.lr.ph ]
  %indvars.iv = phi i64 [ %indvars.iv.unr, %.lr.ph.preheader1330.new ], [ %indvars.iv.next.3, %.lr.ph ]
  %gep = getelementptr inbounds double, ptr %invariant.gep, i64 %indvars.iv646
  %79 = load double, ptr %gep, align 8, !tbaa !9
  %80 = getelementptr inbounds double, ptr %4, i64 %indvars.iv
  store double %79, ptr %80, align 8, !tbaa !9
  %gep1369 = getelementptr double, ptr %invariant.gep1368, i64 %indvars.iv646
  %81 = load double, ptr %gep1369, align 8, !tbaa !9
  %gep1371 = getelementptr double, ptr %invariant.gep1370, i64 %indvars.iv
  store double %81, ptr %gep1371, align 8, !tbaa !9
  %gep1373 = getelementptr double, ptr %invariant.gep1372, i64 %indvars.iv646
  %82 = load double, ptr %gep1373, align 8, !tbaa !9
  %gep1375 = getelementptr double, ptr %invariant.gep1374, i64 %indvars.iv
  store double %82, ptr %gep1375, align 8, !tbaa !9
  %gep1377 = getelementptr double, ptr %invariant.gep1376, i64 %indvars.iv646
  %83 = load double, ptr %gep1377, align 8, !tbaa !9
  %gep1379 = getelementptr double, ptr %invariant.gep1378, i64 %indvars.iv
  store double %83, ptr %gep1379, align 8, !tbaa !9
  %indvars.iv.next.3 = add nsw i64 %indvars.iv, 4
  %indvars.iv.next647.3 = add nuw nsw i64 %indvars.iv646, 4
  %exitcond.not.3 = icmp eq i64 %indvars.iv.next647.3, %wide.trip.count
  br i1 %exitcond.not.3, label %._crit_edge.loopexit, label %.lr.ph, !llvm.loop !17

._crit_edge.loopexit:                             ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block
  %indvars.iv.next.lcssa = phi i64 [ %ind.end905, %middle.block ], [ %indvars.iv.next.lcssa1331.unr, %.lr.ph.prol.loopexit ], [ %indvars.iv.next.3, %.lr.ph ]
  %84 = trunc nsw i64 %indvars.iv.next.lcssa to i32
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader436
  %.1.lcssa = phi i32 [ %.0443, %.preheader436 ], [ %84, %._crit_edge.loopexit ]
  %indvars.iv.next652 = add nuw nsw i64 %indvars.iv651, %58
  %indvars.iv.next645 = add nuw nsw i64 %indvars.iv644, 1
  %exitcond657.not = icmp eq i64 %indvars.iv.next645, %wide.trip.count656
  br i1 %exitcond657.not, label %._crit_edge444, label %.preheader436, !llvm.loop !18

._crit_edge444:                                   ; preds = %._crit_edge
  %.not412.not452.not = icmp eq i32 %.896, 0
  br i1 %.not412.not452.not, label %.loopexit, label %.lr.ph456.preheader

.lr.ph456.preheader:                              ; preds = %._crit_edge444
  %85 = zext nneg i32 %.0328 to i64
  %86 = add nuw i32 %.896, 1
  %wide.trip.count672 = zext nneg i32 %.896 to i64
  %wide.trip.count667 = zext i32 %86 to i64
  %87 = add i64 %28, -8
  %88 = zext nneg i32 %.896 to i64
  %89 = zext nneg i32 %.896 to i64
  %ident.check.not = icmp ult i32 %40, 2
  %invariant.gep1382 = getelementptr i8, ptr %4, i64 8
  %invariant.gep1384 = getelementptr i8, ptr %4, i64 16
  %invariant.gep1386 = getelementptr i8, ptr %4, i64 24
  br label %.lr.ph450.preheader

.loopexit434:                                     ; preds = %.lr.ph450.prol.loopexit, %.lr.ph450, %middle.block911
  %indvars.iv.next659.lcssa = phi i64 [ %ind.end919, %middle.block911 ], [ %indvars.iv.next659.lcssa1329.unr, %.lr.ph450.prol.loopexit ], [ %indvars.iv.next659.3, %.lr.ph450 ]
  %90 = trunc nsw i64 %indvars.iv.next659.lcssa to i32
  %indvars.iv.next661 = add nuw nsw i64 %indvars.iv660, 1
  %exitcond673.not = icmp eq i64 %indvars.iv.next670, %wide.trip.count672
  br i1 %exitcond673.not, label %.loopexit, label %.lr.ph450.preheader, !llvm.loop !19

.lr.ph450.preheader:                              ; preds = %.loopexit434, %.lr.ph456.preheader
  %indvars.iv669 = phi i64 [ 0, %.lr.ph456.preheader ], [ %indvars.iv.next670, %.loopexit434 ]
  %indvars.iv660 = phi i64 [ 1, %.lr.ph456.preheader ], [ %indvars.iv.next661, %.loopexit434 ]
  %.2454 = phi i32 [ %.1.lcssa, %.lr.ph456.preheader ], [ %90, %.loopexit434 ]
  %91 = sub nsw i64 %88, %indvars.iv669
  %indvars.iv.next670 = add nuw nsw i64 %indvars.iv669, 1
  %92 = sext i32 %.2454 to i64
  %invariant.gep890 = getelementptr inbounds double, ptr %3, i64 %indvars.iv669
  %min.iters.check913 = icmp ugt i64 %91, 3
  %or.cond = and i1 %min.iters.check913, %ident.check.not
  br i1 %or.cond, label %vector.memcheck909, label %.lr.ph450.preheader1327

vector.memcheck909:                               ; preds = %.lr.ph450.preheader
  %93 = shl i64 %indvars.iv669, 4
  %94 = add i64 %93, %27
  %95 = sub i64 %87, %94
  %96 = shl nsw i64 %92, 3
  %97 = add i64 %95, %96
  %diff.check910 = icmp ult i64 %97, 32
  br i1 %diff.check910, label %.lr.ph450.preheader1327, label %vector.ph914

vector.ph914:                                     ; preds = %vector.memcheck909
  %n.vec916 = and i64 %91, -4
  %ind.end917 = add i64 %indvars.iv660, %n.vec916
  %ind.end919 = add i64 %n.vec916, %92
  %98 = getelementptr double, ptr %invariant.gep890, i64 %indvars.iv660
  %invariant.gep1380 = getelementptr double, ptr %4, i64 %92
  br label %vector.body921

vector.body921:                                   ; preds = %vector.body921, %vector.ph914
  %index922 = phi i64 [ 0, %vector.ph914 ], [ %index.next927, %vector.body921 ]
  %99 = getelementptr double, ptr %98, i64 %index922
  %100 = getelementptr inbounds i8, ptr %99, i64 16
  %wide.load925 = load <2 x double>, ptr %99, align 8, !tbaa !9
  %wide.load926 = load <2 x double>, ptr %100, align 8, !tbaa !9
  %gep1381 = getelementptr double, ptr %invariant.gep1380, i64 %index922
  %101 = getelementptr inbounds i8, ptr %gep1381, i64 16
  store <2 x double> %wide.load925, ptr %gep1381, align 8, !tbaa !9
  store <2 x double> %wide.load926, ptr %101, align 8, !tbaa !9
  %index.next927 = add nuw i64 %index922, 4
  %102 = icmp eq i64 %index.next927, %n.vec916
  br i1 %102, label %middle.block911, label %vector.body921, !llvm.loop !20

middle.block911:                                  ; preds = %vector.body921
  %cmp.n928 = icmp eq i64 %91, %n.vec916
  br i1 %cmp.n928, label %.loopexit434, label %.lr.ph450.preheader1327

.lr.ph450.preheader1327:                          ; preds = %middle.block911, %vector.memcheck909, %.lr.ph450.preheader
  %indvars.iv662.ph = phi i64 [ %indvars.iv660, %vector.memcheck909 ], [ %indvars.iv660, %.lr.ph450.preheader ], [ %ind.end917, %middle.block911 ]
  %indvars.iv658.ph = phi i64 [ %92, %vector.memcheck909 ], [ %92, %.lr.ph450.preheader ], [ %ind.end919, %middle.block911 ]
  %103 = sub i64 %wide.trip.count656, %indvars.iv662.ph
  %104 = sub i64 %89, %indvars.iv662.ph
  %xtraiter1332 = and i64 %103, 3
  %lcmp.mod1333.not = icmp eq i64 %xtraiter1332, 0
  br i1 %lcmp.mod1333.not, label %.lr.ph450.prol.loopexit, label %.lr.ph450.prol

.lr.ph450.prol:                                   ; preds = %.lr.ph450.preheader1327, %.lr.ph450.prol
  %indvars.iv662.prol = phi i64 [ %indvars.iv.next663.prol, %.lr.ph450.prol ], [ %indvars.iv662.ph, %.lr.ph450.preheader1327 ]
  %indvars.iv658.prol = phi i64 [ %indvars.iv.next659.prol, %.lr.ph450.prol ], [ %indvars.iv658.ph, %.lr.ph450.preheader1327 ]
  %prol.iter1334 = phi i64 [ %prol.iter1334.next, %.lr.ph450.prol ], [ 0, %.lr.ph450.preheader1327 ]
  %105 = mul nuw nsw i64 %indvars.iv662.prol, %85
  %gep891.prol = getelementptr inbounds double, ptr %invariant.gep890, i64 %105
  %106 = load double, ptr %gep891.prol, align 8, !tbaa !9
  %107 = getelementptr inbounds double, ptr %4, i64 %indvars.iv658.prol
  store double %106, ptr %107, align 8, !tbaa !9
  %indvars.iv.next659.prol = add nsw i64 %indvars.iv658.prol, 1
  %indvars.iv.next663.prol = add nuw nsw i64 %indvars.iv662.prol, 1
  %prol.iter1334.next = add i64 %prol.iter1334, 1
  %prol.iter1334.cmp.not = icmp eq i64 %prol.iter1334.next, %xtraiter1332
  br i1 %prol.iter1334.cmp.not, label %.lr.ph450.prol.loopexit, label %.lr.ph450.prol, !llvm.loop !21

.lr.ph450.prol.loopexit:                          ; preds = %.lr.ph450.prol, %.lr.ph450.preheader1327
  %indvars.iv.next659.lcssa1329.unr = phi i64 [ poison, %.lr.ph450.preheader1327 ], [ %indvars.iv.next659.prol, %.lr.ph450.prol ]
  %indvars.iv662.unr = phi i64 [ %indvars.iv662.ph, %.lr.ph450.preheader1327 ], [ %indvars.iv.next663.prol, %.lr.ph450.prol ]
  %indvars.iv658.unr = phi i64 [ %indvars.iv658.ph, %.lr.ph450.preheader1327 ], [ %indvars.iv.next659.prol, %.lr.ph450.prol ]
  %108 = icmp ult i64 %104, 3
  br i1 %108, label %.loopexit434, label %.lr.ph450

.lr.ph450:                                        ; preds = %.lr.ph450.prol.loopexit, %.lr.ph450
  %indvars.iv662 = phi i64 [ %indvars.iv.next663.3, %.lr.ph450 ], [ %indvars.iv662.unr, %.lr.ph450.prol.loopexit ]
  %indvars.iv658 = phi i64 [ %indvars.iv.next659.3, %.lr.ph450 ], [ %indvars.iv658.unr, %.lr.ph450.prol.loopexit ]
  %109 = mul nuw nsw i64 %indvars.iv662, %85
  %gep891 = getelementptr inbounds double, ptr %invariant.gep890, i64 %109
  %110 = load double, ptr %gep891, align 8, !tbaa !9
  %111 = getelementptr inbounds double, ptr %4, i64 %indvars.iv658
  store double %110, ptr %111, align 8, !tbaa !9
  %indvars.iv.next663 = add nuw nsw i64 %indvars.iv662, 1
  %112 = mul nuw nsw i64 %indvars.iv.next663, %85
  %gep891.1 = getelementptr inbounds double, ptr %invariant.gep890, i64 %112
  %113 = load double, ptr %gep891.1, align 8, !tbaa !9
  %gep1383 = getelementptr double, ptr %invariant.gep1382, i64 %indvars.iv658
  store double %113, ptr %gep1383, align 8, !tbaa !9
  %indvars.iv.next663.1 = add nuw nsw i64 %indvars.iv662, 2
  %114 = mul nuw nsw i64 %indvars.iv.next663.1, %85
  %gep891.2 = getelementptr inbounds double, ptr %invariant.gep890, i64 %114
  %115 = load double, ptr %gep891.2, align 8, !tbaa !9
  %gep1385 = getelementptr double, ptr %invariant.gep1384, i64 %indvars.iv658
  store double %115, ptr %gep1385, align 8, !tbaa !9
  %indvars.iv.next663.2 = add nuw nsw i64 %indvars.iv662, 3
  %116 = mul nuw nsw i64 %indvars.iv.next663.2, %85
  %gep891.3 = getelementptr inbounds double, ptr %invariant.gep890, i64 %116
  %117 = load double, ptr %gep891.3, align 8, !tbaa !9
  %gep1387 = getelementptr double, ptr %invariant.gep1386, i64 %indvars.iv658
  store double %117, ptr %gep1387, align 8, !tbaa !9
  %indvars.iv.next659.3 = add nsw i64 %indvars.iv658, 4
  %indvars.iv.next663.3 = add nuw nsw i64 %indvars.iv662, 4
  %exitcond668.not.3 = icmp eq i64 %indvars.iv.next663.3, %wide.trip.count667
  br i1 %exitcond668.not.3, label %.loopexit434, label %.lr.ph450, !llvm.loop !22

118:                                              ; preds = %.thread420
  %.not407.not460 = icmp sgt i32 %., 0
  br i1 %.not407.not460, label %.lr.ph464.preheader, label %._crit_edge465

.lr.ph464.preheader:                              ; preds = %118
  %119 = zext nneg i32 %.0328 to i64
  %ident.check930.not = icmp ugt i32 %40, 1
  %invariant.gep1392 = getelementptr i8, ptr %4, i64 8
  %invariant.gep1394 = getelementptr i8, ptr %4, i64 16
  %invariant.gep1396 = getelementptr i8, ptr %4, i64 24
  br label %.lr.ph464

.lr.ph464:                                        ; preds = %.lr.ph464.preheader, %.loopexit1280
  %loop-unroll.iv1335 = phi i32 [ 0, %.lr.ph464.preheader ], [ %loop-unroll.iv.next1336, %.loopexit1280 ]
  %loop-unroll.iv = phi i32 [ 1, %.lr.ph464.preheader ], [ %loop-unroll.iv.next, %.loopexit1280 ]
  %indvar = phi i64 [ 0, %.lr.ph464.preheader ], [ %indvar.next, %.loopexit1280 ]
  %indvars.iv683 = phi i32 [ 1, %.lr.ph464.preheader ], [ %indvars.iv.next684, %.loopexit1280 ]
  %indvars.iv676 = phi i32 [ %.896, %.lr.ph464.preheader ], [ %indvars.iv.next677, %.loopexit1280 ]
  %.4462 = phi i32 [ 0, %.lr.ph464.preheader ], [ %134, %.loopexit1280 ]
  %120 = trunc i64 %indvar to i32
  %121 = add i32 %120, 2
  %122 = trunc i64 %indvar to i32
  %123 = add i32 %122, 2
  %124 = add i64 %indvar, 1
  %125 = sext i32 %.4462 to i64
  %126 = shl nsw i64 %125, 3
  %127 = sext i32 %indvars.iv676 to i64
  %128 = shl nsw i64 %127, 3
  %129 = add i64 %126, %26
  %130 = add i64 %128, %25
  %131 = sub i64 %129, %130
  %132 = sext i32 %indvars.iv676 to i64
  %133 = sext i32 %.4462 to i64
  %134 = add i32 %.4462, %indvars.iv683
  %min.iters.check935 = icmp ult i64 %124, 4
  %or.cond1293.not1298 = or i1 %min.iters.check935, %ident.check930.not
  %diff.check932 = icmp ult i64 %131, 32
  %or.cond1294 = select i1 %or.cond1293.not1298, i1 true, i1 %diff.check932
  br i1 %or.cond1294, label %scalar.ph934.preheader, label %vector.ph936

vector.ph936:                                     ; preds = %.lr.ph464
  %n.vec938 = and i64 %124, -4
  %135 = mul nuw i64 %n.vec938, %119
  %ind.end939 = add i64 %135, %132
  %ind.end941 = add i64 %n.vec938, %133
  %invariant.gep1388 = getelementptr double, ptr %3, i64 %132
  %invariant.gep1390 = getelementptr double, ptr %4, i64 %133
  br label %vector.body943

vector.body943:                                   ; preds = %vector.body943, %vector.ph936
  %index944 = phi i64 [ 0, %vector.ph936 ], [ %index.next949, %vector.body943 ]
  %136 = mul nuw i64 %index944, %119
  %gep1389 = getelementptr double, ptr %invariant.gep1388, i64 %136
  %137 = getelementptr inbounds i8, ptr %gep1389, i64 16
  %wide.load947 = load <2 x double>, ptr %gep1389, align 8, !tbaa !9
  %wide.load948 = load <2 x double>, ptr %137, align 8, !tbaa !9
  %gep1391 = getelementptr double, ptr %invariant.gep1390, i64 %index944
  %138 = getelementptr inbounds i8, ptr %gep1391, i64 16
  store <2 x double> %wide.load947, ptr %gep1391, align 8, !tbaa !9
  store <2 x double> %wide.load948, ptr %138, align 8, !tbaa !9
  %index.next949 = add nuw i64 %index944, 4
  %139 = icmp eq i64 %index.next949, %n.vec938
  br i1 %139, label %middle.block933, label %vector.body943, !llvm.loop !23

middle.block933:                                  ; preds = %vector.body943
  %cmp.n950 = icmp eq i64 %124, %n.vec938
  br i1 %cmp.n950, label %.loopexit1280, label %scalar.ph934.preheader

scalar.ph934.preheader:                           ; preds = %middle.block933, %.lr.ph464
  %indvars.iv678.ph = phi i64 [ %132, %.lr.ph464 ], [ %ind.end939, %middle.block933 ]
  %indvars.iv674.ph = phi i64 [ %133, %.lr.ph464 ], [ %ind.end941, %middle.block933 ]
  %140 = trunc i64 %indvars.iv674.ph to i32
  %141 = sub i32 %loop-unroll.iv, %140
  %142 = sub i32 %loop-unroll.iv1335, %140
  %xtraiter1337 = and i32 %141, 3
  %lcmp.mod1338.not = icmp eq i32 %xtraiter1337, 0
  br i1 %lcmp.mod1338.not, label %scalar.ph934.prol.loopexit, label %scalar.ph934.prol

scalar.ph934.prol:                                ; preds = %scalar.ph934.preheader, %scalar.ph934.prol
  %indvars.iv678.prol = phi i64 [ %indvars.iv.next679.prol, %scalar.ph934.prol ], [ %indvars.iv678.ph, %scalar.ph934.preheader ]
  %indvars.iv674.prol = phi i64 [ %indvars.iv.next675.prol, %scalar.ph934.prol ], [ %indvars.iv674.ph, %scalar.ph934.preheader ]
  %prol.iter1339 = phi i32 [ %prol.iter1339.next, %scalar.ph934.prol ], [ 0, %scalar.ph934.preheader ]
  %143 = getelementptr inbounds double, ptr %3, i64 %indvars.iv678.prol
  %144 = load double, ptr %143, align 8, !tbaa !9
  %145 = getelementptr inbounds double, ptr %4, i64 %indvars.iv674.prol
  store double %144, ptr %145, align 8, !tbaa !9
  %indvars.iv.next675.prol = add nsw i64 %indvars.iv674.prol, 1
  %indvars.iv.next679.prol = add nsw i64 %indvars.iv678.prol, %119
  %prol.iter1339.next = add i32 %prol.iter1339, 1
  %prol.iter1339.cmp.not = icmp eq i32 %prol.iter1339.next, %xtraiter1337
  br i1 %prol.iter1339.cmp.not, label %scalar.ph934.prol.loopexit, label %scalar.ph934.prol, !llvm.loop !24

scalar.ph934.prol.loopexit:                       ; preds = %scalar.ph934.prol, %scalar.ph934.preheader
  %indvars.iv678.unr = phi i64 [ %indvars.iv678.ph, %scalar.ph934.preheader ], [ %indvars.iv.next679.prol, %scalar.ph934.prol ]
  %indvars.iv674.unr = phi i64 [ %indvars.iv674.ph, %scalar.ph934.preheader ], [ %indvars.iv.next675.prol, %scalar.ph934.prol ]
  %146 = icmp ult i32 %142, 3
  br i1 %146, label %.loopexit1280, label %scalar.ph934

scalar.ph934:                                     ; preds = %scalar.ph934.prol.loopexit, %scalar.ph934
  %indvars.iv678 = phi i64 [ %indvars.iv.next679.3, %scalar.ph934 ], [ %indvars.iv678.unr, %scalar.ph934.prol.loopexit ]
  %indvars.iv674 = phi i64 [ %indvars.iv.next675.3, %scalar.ph934 ], [ %indvars.iv674.unr, %scalar.ph934.prol.loopexit ]
  %147 = getelementptr inbounds double, ptr %3, i64 %indvars.iv678
  %148 = load double, ptr %147, align 8, !tbaa !9
  %149 = getelementptr inbounds double, ptr %4, i64 %indvars.iv674
  store double %148, ptr %149, align 8, !tbaa !9
  %indvars.iv.next679 = add nsw i64 %indvars.iv678, %119
  %150 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next679
  %151 = load double, ptr %150, align 8, !tbaa !9
  %gep1393 = getelementptr double, ptr %invariant.gep1392, i64 %indvars.iv674
  store double %151, ptr %gep1393, align 8, !tbaa !9
  %indvars.iv.next679.1 = add nsw i64 %indvars.iv.next679, %119
  %152 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next679.1
  %153 = load double, ptr %152, align 8, !tbaa !9
  %gep1395 = getelementptr double, ptr %invariant.gep1394, i64 %indvars.iv674
  store double %153, ptr %gep1395, align 8, !tbaa !9
  %indvars.iv.next679.2 = add nsw i64 %indvars.iv.next679.1, %119
  %154 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next679.2
  %155 = load double, ptr %154, align 8, !tbaa !9
  %gep1397 = getelementptr double, ptr %invariant.gep1396, i64 %indvars.iv674
  store double %155, ptr %gep1397, align 8, !tbaa !9
  %indvars.iv.next675.3 = add nsw i64 %indvars.iv674, 4
  %indvars.iv.next679.3 = add nsw i64 %indvars.iv.next679.2, %119
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next675.3 to i32
  %exitcond685.not.3 = icmp eq i32 %134, %lftr.wideiv.3
  br i1 %exitcond685.not.3, label %.loopexit1280, label %scalar.ph934, !llvm.loop !25

.loopexit1280:                                    ; preds = %scalar.ph934.prol.loopexit, %scalar.ph934, %middle.block933
  %indvars.iv.next677 = add i32 %indvars.iv676, 1
  %indvars.iv.next684 = add nuw i32 %indvars.iv683, 1
  %exitcond686.not = icmp eq i32 %indvars.iv683, %.
  %indvar.next = add i64 %indvar, 1
  %loop-unroll.iv.next = add i32 %loop-unroll.iv, %123
  %loop-unroll.iv.next1336 = add i32 %loop-unroll.iv1335, %121
  br i1 %exitcond686.not, label %._crit_edge465, label %.lr.ph464, !llvm.loop !26

._crit_edge465:                                   ; preds = %.loopexit1280, %118
  %.4.lcssa = phi i32 [ 0, %118 ], [ %134, %.loopexit1280 ]
  %.not408.not474 = icmp slt i32 %., %40
  br i1 %.not408.not474, label %.lr.ph479.preheader, label %.loopexit

.lr.ph479.preheader:                              ; preds = %._crit_edge465
  %156 = zext nneg i32 %.0328 to i64
  %157 = sext i32 %. to i64
  %wide.trip.count702 = zext nneg i32 %40 to i64
  %158 = sub i64 %24, %23
  %159 = mul nsw i64 %156, -8
  %160 = add nuw nsw i64 %156, 1
  br label %.lr.ph479

.lr.ph479:                                        ; preds = %.lr.ph479.preheader, %._crit_edge472
  %indvar952 = phi i64 [ 0, %.lr.ph479.preheader ], [ %indvar.next953, %._crit_edge472 ]
  %indvars.iv697 = phi i64 [ %157, %.lr.ph479.preheader ], [ %indvars.iv.next698, %._crit_edge472 ]
  %indvars.iv690 = phi i64 [ 0, %.lr.ph479.preheader ], [ %indvars.iv.next691, %._crit_edge472 ]
  %.6477 = phi i32 [ %.4.lcssa, %.lr.ph479.preheader ], [ %.7.lcssa, %._crit_edge472 ]
  %161 = mul i64 %160, %indvar952
  %162 = add i64 %161, %157
  %smax = tail call i64 @llvm.smax.i64(i64 %162, i64 %indvars.iv690)
  %163 = mul i64 %indvar952, %156
  %reass.sub = sub i64 %smax, %163
  %164 = add i64 %reass.sub, 1
  %165 = mul i64 %159, %indvar952
  %166 = add i64 %158, %165
  %167 = add nsw i64 %indvars.iv690, %indvars.iv697
  %.not409467 = icmp slt i64 %indvars.iv697, 0
  br i1 %.not409467, label %._crit_edge472, label %.lr.ph471.preheader

.lr.ph471.preheader:                              ; preds = %.lr.ph479
  %168 = sext i32 %.6477 to i64
  %min.iters.check957 = icmp ult i64 %164, 4
  br i1 %min.iters.check957, label %.lr.ph471.preheader1323, label %vector.memcheck951

vector.memcheck951:                               ; preds = %.lr.ph471.preheader
  %169 = shl nsw i64 %168, 3
  %170 = add i64 %166, %169
  %diff.check954 = icmp ult i64 %170, 32
  br i1 %diff.check954, label %.lr.ph471.preheader1323, label %vector.ph958

vector.ph958:                                     ; preds = %vector.memcheck951
  %n.vec960 = and i64 %164, -4
  %ind.end961 = add i64 %indvars.iv690, %n.vec960
  %ind.end963 = add i64 %n.vec960, %168
  %171 = getelementptr double, ptr %3, i64 %indvars.iv690
  %invariant.gep1398 = getelementptr double, ptr %4, i64 %168
  br label %vector.body965

vector.body965:                                   ; preds = %vector.body965, %vector.ph958
  %index966 = phi i64 [ 0, %vector.ph958 ], [ %index.next971, %vector.body965 ]
  %172 = getelementptr double, ptr %171, i64 %index966
  %173 = getelementptr inbounds i8, ptr %172, i64 16
  %wide.load969 = load <2 x double>, ptr %172, align 8, !tbaa !9
  %wide.load970 = load <2 x double>, ptr %173, align 8, !tbaa !9
  %gep1399 = getelementptr double, ptr %invariant.gep1398, i64 %index966
  %174 = getelementptr inbounds i8, ptr %gep1399, i64 16
  store <2 x double> %wide.load969, ptr %gep1399, align 8, !tbaa !9
  store <2 x double> %wide.load970, ptr %174, align 8, !tbaa !9
  %index.next971 = add nuw i64 %index966, 4
  %175 = icmp eq i64 %index.next971, %n.vec960
  br i1 %175, label %middle.block955, label %vector.body965, !llvm.loop !27

middle.block955:                                  ; preds = %vector.body965
  %cmp.n972 = icmp eq i64 %164, %n.vec960
  br i1 %cmp.n972, label %._crit_edge472.loopexit, label %.lr.ph471.preheader1323

.lr.ph471.preheader1323:                          ; preds = %middle.block955, %vector.memcheck951, %.lr.ph471.preheader
  %indvars.iv692.ph = phi i64 [ %indvars.iv690, %vector.memcheck951 ], [ %indvars.iv690, %.lr.ph471.preheader ], [ %ind.end961, %middle.block955 ]
  %indvars.iv688.ph = phi i64 [ %168, %vector.memcheck951 ], [ %168, %.lr.ph471.preheader ], [ %ind.end963, %middle.block955 ]
  br label %.lr.ph471

.lr.ph471:                                        ; preds = %.lr.ph471.preheader1323, %.lr.ph471
  %indvars.iv692 = phi i64 [ %indvars.iv.next693, %.lr.ph471 ], [ %indvars.iv692.ph, %.lr.ph471.preheader1323 ]
  %indvars.iv688 = phi i64 [ %indvars.iv.next689, %.lr.ph471 ], [ %indvars.iv688.ph, %.lr.ph471.preheader1323 ]
  %176 = getelementptr inbounds double, ptr %3, i64 %indvars.iv692
  %177 = load double, ptr %176, align 8, !tbaa !9
  %178 = getelementptr inbounds double, ptr %4, i64 %indvars.iv688
  store double %177, ptr %178, align 8, !tbaa !9
  %indvars.iv.next689 = add nsw i64 %indvars.iv688, 1
  %indvars.iv.next693 = add nuw nsw i64 %indvars.iv692, 1
  %.not409.not = icmp slt i64 %indvars.iv692, %167
  br i1 %.not409.not, label %.lr.ph471, label %._crit_edge472.loopexit, !llvm.loop !28

._crit_edge472.loopexit:                          ; preds = %.lr.ph471, %middle.block955
  %indvars.iv.next689.lcssa = phi i64 [ %ind.end963, %middle.block955 ], [ %indvars.iv.next689, %.lr.ph471 ]
  %179 = trunc nsw i64 %indvars.iv.next689.lcssa to i32
  br label %._crit_edge472

._crit_edge472:                                   ; preds = %._crit_edge472.loopexit, %.lr.ph479
  %.7.lcssa = phi i32 [ %.6477, %.lr.ph479 ], [ %179, %._crit_edge472.loopexit ]
  %indvars.iv.next691 = add i64 %indvars.iv690, %156
  %indvars.iv.next698 = add nsw i64 %indvars.iv697, 1
  %exitcond703.not = icmp eq i64 %indvars.iv.next698, %wide.trip.count702
  %indvar.next953 = add i64 %indvar952, 1
  br i1 %exitcond703.not, label %.loopexit, label %.lr.ph479, !llvm.loop !29

180:                                              ; preds = %54
  br i1 %.not379, label %276, label %181

181:                                              ; preds = %180
  %.not403530 = icmp slt i32 %.896, 0
  br i1 %.not403530, label %.loopexit, label %.lr.ph534

.lr.ph534:                                        ; preds = %181
  %182 = mul nuw nsw i32 %56, %40
  %183 = add nuw nsw i32 %56, 1
  %184 = zext nneg i32 %56 to i64
  %185 = add nuw nsw i64 %184, 1
  %186 = zext nneg i32 %182 to i64
  %scevgep1066 = getelementptr i8, ptr %4, i64 8
  %187 = xor i64 %184, -1
  %umax = tail call i64 @llvm.umax.i64(i64 %184, i64 1)
  %188 = shl nuw nsw i64 %184, 3
  %189 = add nuw nsw i64 %188, 8
  %190 = shl nuw nsw i64 %184, 3
  %umax1078 = tail call i64 @llvm.umax.i64(i64 %184, i64 1)
  %invariant.gep1428 = getelementptr double, ptr %3, i64 %184
  %.idx = shl nuw nsw i64 %184, 4
  %invariant.gep1430 = getelementptr i8, ptr %3, i64 %.idx
  %.idx1282 = mul nuw nsw i64 %184, 24
  %invariant.gep1432 = getelementptr i8, ptr %3, i64 %.idx1282
  br label %191

191:                                              ; preds = %.lr.ph534, %._crit_edge528
  %indvar1068 = phi i64 [ 0, %.lr.ph534 ], [ %indvar.next1069, %._crit_edge528 ]
  %indvars.iv768 = phi i64 [ 0, %.lr.ph534 ], [ %indvars.iv.next769, %._crit_edge528 ]
  %.8532 = phi i32 [ 0, %.lr.ph534 ], [ %.9.lcssa, %._crit_edge528 ]
  %.3356531 = phi i32 [ 0, %.lr.ph534 ], [ %237, %._crit_edge528 ]
  %192 = add i64 %indvars.iv768, %184
  %smax1067 = tail call i64 @llvm.smax.i64(i64 %192, i64 %186)
  %193 = mul i64 %indvar1068, %187
  %194 = sub i64 %193, %184
  %195 = add i64 %smax1067, %194
  %196 = icmp ne i64 %195, 0
  %umin = zext i1 %196 to i64
  %197 = sub i64 %195, %umin
  %198 = mul i64 %189, %indvar1068
  %scevgep1071 = getelementptr i8, ptr %3, i64 %198
  %199 = mul nsw i32 %.3356531, %183
  %200 = icmp slt i32 %199, %182
  br i1 %200, label %.lr.ph527.preheader, label %._crit_edge528

.lr.ph527.preheader:                              ; preds = %191
  %201 = add i64 %indvars.iv768, %184
  %smax1076 = tail call i64 @llvm.smax.i64(i64 %201, i64 %186)
  %202 = mul i64 %indvar1068, %187
  %203 = sub i64 %202, %184
  %204 = add i64 %smax1076, %203
  %205 = icmp ne i64 %204, 0
  %umin1077.neg = sext i1 %205 to i64
  %206 = add i64 %204, %umin1077.neg
  %207 = sext i32 %.8532 to i64
  %208 = select i1 %205, i64 2, i64 1
  %209 = udiv i64 %206, %umax1078
  %210 = add i64 %208, %209
  %min.iters.check1081 = icmp ult i64 %210, 14
  br i1 %min.iters.check1081, label %.lr.ph527.preheader1315, label %vector.memcheck1065

vector.memcheck1065:                              ; preds = %.lr.ph527.preheader
  %211 = shl nsw i64 %207, 3
  %scevgep = getelementptr i8, ptr %4, i64 %211
  %212 = udiv i64 %197, %umax
  %213 = add i64 %212, %umin
  %214 = add i64 %213, %207
  %215 = shl i64 %214, 3
  %scevgep1070 = getelementptr i8, ptr %scevgep1066, i64 %215
  %216 = mul i64 %190, %213
  %scevgep1072 = getelementptr i8, ptr %scevgep1071, i64 %216
  %217 = icmp ult ptr %scevgep1071, %scevgep1072
  %umin1073 = select i1 %217, ptr %scevgep1071, ptr %scevgep1072
  %218 = icmp ugt ptr %scevgep1071, %scevgep1072
  %umax1074 = select i1 %218, ptr %scevgep1071, ptr %scevgep1072
  %scevgep1075 = getelementptr i8, ptr %umax1074, i64 8
  %bound0 = icmp ult ptr %scevgep, %scevgep1075
  %bound1 = icmp ult ptr %umin1073, %scevgep1070
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph527.preheader1315, label %vector.ph1082

vector.ph1082:                                    ; preds = %vector.memcheck1065
  %n.vec1084 = and i64 %210, -4
  %219 = mul i64 %n.vec1084, %184
  %ind.end1085 = add i64 %indvars.iv768, %219
  %ind.end1087 = add i64 %n.vec1084, %207
  %invariant.gep1434 = getelementptr double, ptr %4, i64 %207
  br label %vector.body1089

vector.body1089:                                  ; preds = %vector.body1089, %vector.ph1082
  %index1090 = phi i64 [ 0, %vector.ph1082 ], [ %index.next1093, %vector.body1089 ]
  %220 = mul i64 %index1090, %184
  %offset.idx1091 = add i64 %indvars.iv768, %220
  %221 = getelementptr inbounds double, ptr %3, i64 %offset.idx1091
  %gep1429 = getelementptr double, ptr %invariant.gep1428, i64 %offset.idx1091
  %gep1431 = getelementptr double, ptr %invariant.gep1430, i64 %offset.idx1091
  %gep1433 = getelementptr double, ptr %invariant.gep1432, i64 %offset.idx1091
  %222 = load double, ptr %221, align 8, !tbaa !9, !alias.scope !30
  %223 = load double, ptr %gep1429, align 8, !tbaa !9, !alias.scope !30
  %224 = insertelement <2 x double> poison, double %222, i64 0
  %225 = insertelement <2 x double> %224, double %223, i64 1
  %226 = load double, ptr %gep1431, align 8, !tbaa !9, !alias.scope !30
  %227 = load double, ptr %gep1433, align 8, !tbaa !9, !alias.scope !30
  %228 = insertelement <2 x double> poison, double %226, i64 0
  %229 = insertelement <2 x double> %228, double %227, i64 1
  %gep1435 = getelementptr double, ptr %invariant.gep1434, i64 %index1090
  %230 = getelementptr inbounds i8, ptr %gep1435, i64 16
  store <2 x double> %225, ptr %gep1435, align 8, !tbaa !9, !alias.scope !33, !noalias !30
  store <2 x double> %229, ptr %230, align 8, !tbaa !9, !alias.scope !33, !noalias !30
  %index.next1093 = add nuw i64 %index1090, 4
  %231 = icmp eq i64 %index.next1093, %n.vec1084
  br i1 %231, label %middle.block1079, label %vector.body1089, !llvm.loop !35

middle.block1079:                                 ; preds = %vector.body1089
  %cmp.n1094 = icmp eq i64 %210, %n.vec1084
  br i1 %cmp.n1094, label %._crit_edge528.loopexit, label %.lr.ph527.preheader1315

.lr.ph527.preheader1315:                          ; preds = %middle.block1079, %vector.memcheck1065, %.lr.ph527.preheader
  %indvars.iv770.ph = phi i64 [ %indvars.iv768, %vector.memcheck1065 ], [ %indvars.iv768, %.lr.ph527.preheader ], [ %ind.end1085, %middle.block1079 ]
  %indvars.iv766.ph = phi i64 [ %207, %vector.memcheck1065 ], [ %207, %.lr.ph527.preheader ], [ %ind.end1087, %middle.block1079 ]
  br label %.lr.ph527

.lr.ph527:                                        ; preds = %.lr.ph527.preheader1315, %.lr.ph527
  %indvars.iv770 = phi i64 [ %indvars.iv.next771, %.lr.ph527 ], [ %indvars.iv770.ph, %.lr.ph527.preheader1315 ]
  %indvars.iv766 = phi i64 [ %indvars.iv.next767, %.lr.ph527 ], [ %indvars.iv766.ph, %.lr.ph527.preheader1315 ]
  %232 = getelementptr inbounds double, ptr %3, i64 %indvars.iv770
  %233 = load double, ptr %232, align 8, !tbaa !9
  %234 = getelementptr inbounds double, ptr %4, i64 %indvars.iv766
  store double %233, ptr %234, align 8, !tbaa !9
  %indvars.iv.next767 = add nsw i64 %indvars.iv766, 1
  %indvars.iv.next771 = add nsw i64 %indvars.iv770, %184
  %235 = icmp slt i64 %indvars.iv.next771, %186
  br i1 %235, label %.lr.ph527, label %._crit_edge528.loopexit, !llvm.loop !36

._crit_edge528.loopexit:                          ; preds = %.lr.ph527, %middle.block1079
  %indvars.iv.next767.lcssa = phi i64 [ %ind.end1087, %middle.block1079 ], [ %indvars.iv.next767, %.lr.ph527 ]
  %236 = trunc nsw i64 %indvars.iv.next767.lcssa to i32
  br label %._crit_edge528

._crit_edge528:                                   ; preds = %._crit_edge528.loopexit, %191
  %.9.lcssa = phi i32 [ %.8532, %191 ], [ %236, %._crit_edge528.loopexit ]
  %237 = add nuw i32 %.3356531, 1
  %indvars.iv.next769 = add i64 %indvars.iv768, %185
  %exitcond775.not = icmp eq i32 %.3356531, %.896
  %indvar.next1069 = add i64 %indvar1068, 1
  br i1 %exitcond775.not, label %._crit_edge535, label %191, !llvm.loop !37

._crit_edge535:                                   ; preds = %._crit_edge528
  %.not404.not544.not = icmp eq i32 %.896, 0
  br i1 %.not404.not544.not, label %.loopexit, label %.lr.ph549

.lr.ph549:                                        ; preds = %._crit_edge535
  %238 = add nuw nsw i32 %56, 1
  %239 = add nuw i32 %.896, 1
  %invariant.gep1440 = getelementptr i8, ptr %3, i64 8
  %invariant.gep1442 = getelementptr i8, ptr %4, i64 8
  %invariant.gep1444 = getelementptr i8, ptr %3, i64 16
  %invariant.gep1446 = getelementptr i8, ptr %4, i64 16
  %invariant.gep1448 = getelementptr i8, ptr %3, i64 24
  %invariant.gep1450 = getelementptr i8, ptr %4, i64 24
  br label %240

240:                                              ; preds = %.lr.ph549, %._crit_edge542
  %indvars.iv786 = phi i32 [ %239, %.lr.ph549 ], [ %indvars.iv.next787, %._crit_edge542 ]
  %indvars.iv779 = phi i32 [ 1, %.lr.ph549 ], [ %indvars.iv.next780, %._crit_edge542 ]
  %.10547 = phi i32 [ %.9.lcssa, %.lr.ph549 ], [ %.11.lcssa, %._crit_edge542 ]
  %.4368545 = phi i32 [ 0, %.lr.ph549 ], [ %275, %._crit_edge542 ]
  %241 = mul i32 %56, %.4368545
  %242 = add i32 %.896, %241
  %243 = xor i32 %.4368545, -1
  %244 = add nsw i32 %.896, %243
  %245 = zext i32 %244 to i64
  %246 = add nuw nsw i64 %245, 1
  %247 = sext i32 %indvars.iv779 to i64
  %248 = shl nsw i64 %247, 3
  %249 = xor i32 %.4368545, -1
  %250 = add nsw i32 %.896, %249
  %251 = add i32 %250, %indvars.iv779
  %.not405537 = icmp sgt i32 %indvars.iv779, %251
  br i1 %.not405537, label %._crit_edge542, label %.lr.ph541.preheader

.lr.ph541.preheader:                              ; preds = %240
  %252 = sext i32 %indvars.iv779 to i64
  %253 = sext i32 %.10547 to i64
  %min.iters.check1099 = icmp ult i32 %244, 3
  br i1 %min.iters.check1099, label %.lr.ph541.preheader1312, label %vector.memcheck1095

vector.memcheck1095:                              ; preds = %.lr.ph541.preheader
  %254 = shl nsw i64 %253, 3
  %255 = add i64 %254, %14
  %256 = add i64 %248, %13
  %257 = sub i64 %255, %256
  %diff.check1096 = icmp ult i64 %257, 32
  br i1 %diff.check1096, label %.lr.ph541.preheader1312, label %vector.ph1100

vector.ph1100:                                    ; preds = %vector.memcheck1095
  %n.vec1102 = and i64 %246, 8589934588
  %ind.end1103 = add nsw i64 %n.vec1102, %252
  %ind.end1105 = add nsw i64 %n.vec1102, %253
  %invariant.gep1436 = getelementptr double, ptr %3, i64 %252
  %invariant.gep1438 = getelementptr double, ptr %4, i64 %253
  br label %vector.body1107

vector.body1107:                                  ; preds = %vector.body1107, %vector.ph1100
  %index1108 = phi i64 [ 0, %vector.ph1100 ], [ %index.next1113, %vector.body1107 ]
  %gep1437 = getelementptr double, ptr %invariant.gep1436, i64 %index1108
  %258 = getelementptr inbounds i8, ptr %gep1437, i64 16
  %wide.load1111 = load <2 x double>, ptr %gep1437, align 8, !tbaa !9
  %wide.load1112 = load <2 x double>, ptr %258, align 8, !tbaa !9
  %gep1439 = getelementptr double, ptr %invariant.gep1438, i64 %index1108
  %259 = getelementptr inbounds i8, ptr %gep1439, i64 16
  store <2 x double> %wide.load1111, ptr %gep1439, align 8, !tbaa !9
  store <2 x double> %wide.load1112, ptr %259, align 8, !tbaa !9
  %index.next1113 = add nuw i64 %index1108, 4
  %260 = icmp eq i64 %index.next1113, %n.vec1102
  br i1 %260, label %middle.block1097, label %vector.body1107, !llvm.loop !38

middle.block1097:                                 ; preds = %vector.body1107
  %cmp.n1114 = icmp eq i64 %246, %n.vec1102
  br i1 %cmp.n1114, label %._crit_edge542.loopexit, label %.lr.ph541.preheader1312

.lr.ph541.preheader1312:                          ; preds = %middle.block1097, %vector.memcheck1095, %.lr.ph541.preheader
  %indvars.iv781.ph = phi i64 [ %252, %vector.memcheck1095 ], [ %252, %.lr.ph541.preheader ], [ %ind.end1103, %middle.block1097 ]
  %indvars.iv777.ph = phi i64 [ %253, %vector.memcheck1095 ], [ %253, %.lr.ph541.preheader ], [ %ind.end1105, %middle.block1097 ]
  %261 = trunc i64 %indvars.iv781.ph to i32
  %262 = sub i32 %indvars.iv786, %261
  %263 = sub i32 %242, %261
  %xtraiter1350 = and i32 %262, 3
  %lcmp.mod1351.not = icmp eq i32 %xtraiter1350, 0
  br i1 %lcmp.mod1351.not, label %.lr.ph541.prol.loopexit, label %.lr.ph541.prol

.lr.ph541.prol:                                   ; preds = %.lr.ph541.preheader1312, %.lr.ph541.prol
  %indvars.iv781.prol = phi i64 [ %indvars.iv.next782.prol, %.lr.ph541.prol ], [ %indvars.iv781.ph, %.lr.ph541.preheader1312 ]
  %indvars.iv777.prol = phi i64 [ %indvars.iv.next778.prol, %.lr.ph541.prol ], [ %indvars.iv777.ph, %.lr.ph541.preheader1312 ]
  %prol.iter1352 = phi i32 [ %prol.iter1352.next, %.lr.ph541.prol ], [ 0, %.lr.ph541.preheader1312 ]
  %264 = getelementptr inbounds double, ptr %3, i64 %indvars.iv781.prol
  %265 = load double, ptr %264, align 8, !tbaa !9
  %266 = getelementptr inbounds double, ptr %4, i64 %indvars.iv777.prol
  store double %265, ptr %266, align 8, !tbaa !9
  %indvars.iv.next778.prol = add nsw i64 %indvars.iv777.prol, 1
  %indvars.iv.next782.prol = add nsw i64 %indvars.iv781.prol, 1
  %prol.iter1352.next = add i32 %prol.iter1352, 1
  %prol.iter1352.cmp.not = icmp eq i32 %prol.iter1352.next, %xtraiter1350
  br i1 %prol.iter1352.cmp.not, label %.lr.ph541.prol.loopexit, label %.lr.ph541.prol, !llvm.loop !39

.lr.ph541.prol.loopexit:                          ; preds = %.lr.ph541.prol, %.lr.ph541.preheader1312
  %indvars.iv.next778.lcssa1314.unr = phi i64 [ poison, %.lr.ph541.preheader1312 ], [ %indvars.iv.next778.prol, %.lr.ph541.prol ]
  %indvars.iv781.unr = phi i64 [ %indvars.iv781.ph, %.lr.ph541.preheader1312 ], [ %indvars.iv.next782.prol, %.lr.ph541.prol ]
  %indvars.iv777.unr = phi i64 [ %indvars.iv777.ph, %.lr.ph541.preheader1312 ], [ %indvars.iv.next778.prol, %.lr.ph541.prol ]
  %267 = icmp ult i32 %263, 3
  br i1 %267, label %._crit_edge542.loopexit, label %.lr.ph541

.lr.ph541:                                        ; preds = %.lr.ph541.prol.loopexit, %.lr.ph541
  %indvars.iv781 = phi i64 [ %indvars.iv.next782.3, %.lr.ph541 ], [ %indvars.iv781.unr, %.lr.ph541.prol.loopexit ]
  %indvars.iv777 = phi i64 [ %indvars.iv.next778.3, %.lr.ph541 ], [ %indvars.iv777.unr, %.lr.ph541.prol.loopexit ]
  %268 = getelementptr inbounds double, ptr %3, i64 %indvars.iv781
  %269 = load double, ptr %268, align 8, !tbaa !9
  %270 = getelementptr inbounds double, ptr %4, i64 %indvars.iv777
  store double %269, ptr %270, align 8, !tbaa !9
  %gep1441 = getelementptr double, ptr %invariant.gep1440, i64 %indvars.iv781
  %271 = load double, ptr %gep1441, align 8, !tbaa !9
  %gep1443 = getelementptr double, ptr %invariant.gep1442, i64 %indvars.iv777
  store double %271, ptr %gep1443, align 8, !tbaa !9
  %gep1445 = getelementptr double, ptr %invariant.gep1444, i64 %indvars.iv781
  %272 = load double, ptr %gep1445, align 8, !tbaa !9
  %gep1447 = getelementptr double, ptr %invariant.gep1446, i64 %indvars.iv777
  store double %272, ptr %gep1447, align 8, !tbaa !9
  %gep1449 = getelementptr double, ptr %invariant.gep1448, i64 %indvars.iv781
  %273 = load double, ptr %gep1449, align 8, !tbaa !9
  %gep1451 = getelementptr double, ptr %invariant.gep1450, i64 %indvars.iv777
  store double %273, ptr %gep1451, align 8, !tbaa !9
  %indvars.iv.next778.3 = add nsw i64 %indvars.iv777, 4
  %indvars.iv.next782.3 = add nsw i64 %indvars.iv781, 4
  %lftr.wideiv788.3 = trunc i64 %indvars.iv.next782.3 to i32
  %exitcond789.not.3 = icmp eq i32 %indvars.iv786, %lftr.wideiv788.3
  br i1 %exitcond789.not.3, label %._crit_edge542.loopexit, label %.lr.ph541, !llvm.loop !40

._crit_edge542.loopexit:                          ; preds = %.lr.ph541.prol.loopexit, %.lr.ph541, %middle.block1097
  %indvars.iv.next778.lcssa = phi i64 [ %ind.end1105, %middle.block1097 ], [ %indvars.iv.next778.lcssa1314.unr, %.lr.ph541.prol.loopexit ], [ %indvars.iv.next778.3, %.lr.ph541 ]
  %274 = trunc nsw i64 %indvars.iv.next778.lcssa to i32
  br label %._crit_edge542

._crit_edge542:                                   ; preds = %._crit_edge542.loopexit, %240
  %.11.lcssa = phi i32 [ %.10547, %240 ], [ %274, %._crit_edge542.loopexit ]
  %indvars.iv.next780 = add i32 %indvars.iv779, %238
  %275 = add nuw nsw i32 %.4368545, 1
  %indvars.iv.next787 = add i32 %indvars.iv786, %56
  %exitcond790.not = icmp eq i32 %275, %.896
  br i1 %exitcond790.not, label %.loopexit, label %240, !llvm.loop !41

276:                                              ; preds = %180
  %.not399.not552 = icmp sgt i32 %., 0
  br i1 %.not399.not552, label %.lr.ph557.preheader, label %._crit_edge558

.lr.ph557.preheader:                              ; preds = %276
  %277 = mul i32 %.896, %56
  %278 = sext i32 %277 to i64
  %279 = zext nneg i32 %56 to i64
  %wide.trip.count806 = zext nneg i32 %. to i64
  %280 = shl nsw i64 %278, 3
  %281 = add i64 %280, %11
  %282 = sub i64 %12, %281
  %283 = mul nsw i64 %279, -8
  %284 = add nuw nsw i64 %279, 1
  br label %.lr.ph557

.lr.ph557:                                        ; preds = %.lr.ph557.preheader, %.loopexit1278
  %indvars.iv801 = phi i64 [ 0, %.lr.ph557.preheader ], [ %indvars.iv.next802, %.loopexit1278 ]
  %indvars.iv794 = phi i64 [ %278, %.lr.ph557.preheader ], [ %indvars.iv.next795, %.loopexit1278 ]
  %.12555 = phi i64 [ 0, %.lr.ph557.preheader ], [ %indvars.iv.next793.lcssa, %.loopexit1278 ]
  %285 = mul i64 %284, %indvars.iv801
  %286 = add i64 %285, %278
  %smax1117 = tail call i64 @llvm.smax.i64(i64 %indvars.iv794, i64 %286)
  %287 = mul i64 %indvars.iv801, %279
  %288 = add i64 %287, %278
  %reass.sub1283 = sub i64 %smax1117, %288
  %289 = add i64 %reass.sub1283, 1
  %290 = add nsw i64 %indvars.iv794, %indvars.iv801
  %sext = shl i64 %.12555, 32
  %291 = ashr exact i64 %sext, 32
  %min.iters.check1120 = icmp ult i64 %289, 4
  br i1 %min.iters.check1120, label %scalar.ph1119.preheader, label %vector.memcheck1115

vector.memcheck1115:                              ; preds = %.lr.ph557
  %292 = mul i64 %283, %indvars.iv801
  %293 = add i64 %282, %292
  %294 = ashr exact i64 %sext, 29
  %295 = add i64 %293, %294
  %diff.check1116 = icmp ult i64 %295, 32
  br i1 %diff.check1116, label %scalar.ph1119.preheader, label %vector.ph1121

vector.ph1121:                                    ; preds = %vector.memcheck1115
  %n.vec1123 = and i64 %289, -4
  %ind.end1124 = add i64 %indvars.iv794, %n.vec1123
  %ind.end1126 = add i64 %291, %n.vec1123
  %296 = getelementptr double, ptr %3, i64 %indvars.iv794
  %297 = getelementptr double, ptr %4, i64 %291
  br label %vector.body1128

vector.body1128:                                  ; preds = %vector.body1128, %vector.ph1121
  %index1129 = phi i64 [ 0, %vector.ph1121 ], [ %index.next1134, %vector.body1128 ]
  %298 = getelementptr double, ptr %296, i64 %index1129
  %299 = getelementptr inbounds i8, ptr %298, i64 16
  %wide.load1132 = load <2 x double>, ptr %298, align 8, !tbaa !9
  %wide.load1133 = load <2 x double>, ptr %299, align 8, !tbaa !9
  %300 = getelementptr double, ptr %297, i64 %index1129
  %301 = getelementptr inbounds i8, ptr %300, i64 16
  store <2 x double> %wide.load1132, ptr %300, align 8, !tbaa !9
  store <2 x double> %wide.load1133, ptr %301, align 8, !tbaa !9
  %index.next1134 = add nuw i64 %index1129, 4
  %302 = icmp eq i64 %index.next1134, %n.vec1123
  br i1 %302, label %middle.block1118, label %vector.body1128, !llvm.loop !42

middle.block1118:                                 ; preds = %vector.body1128
  %cmp.n1135 = icmp eq i64 %289, %n.vec1123
  br i1 %cmp.n1135, label %.loopexit1278, label %scalar.ph1119.preheader

scalar.ph1119.preheader:                          ; preds = %middle.block1118, %vector.memcheck1115, %.lr.ph557
  %indvars.iv796.ph = phi i64 [ %indvars.iv794, %vector.memcheck1115 ], [ %indvars.iv794, %.lr.ph557 ], [ %ind.end1124, %middle.block1118 ]
  %indvars.iv792.ph = phi i64 [ %291, %vector.memcheck1115 ], [ %291, %.lr.ph557 ], [ %ind.end1126, %middle.block1118 ]
  br label %scalar.ph1119

scalar.ph1119:                                    ; preds = %scalar.ph1119.preheader, %scalar.ph1119
  %indvars.iv796 = phi i64 [ %indvars.iv.next797, %scalar.ph1119 ], [ %indvars.iv796.ph, %scalar.ph1119.preheader ]
  %indvars.iv792 = phi i64 [ %indvars.iv.next793, %scalar.ph1119 ], [ %indvars.iv792.ph, %scalar.ph1119.preheader ]
  %303 = getelementptr inbounds double, ptr %3, i64 %indvars.iv796
  %304 = load double, ptr %303, align 8, !tbaa !9
  %305 = getelementptr inbounds double, ptr %4, i64 %indvars.iv792
  store double %304, ptr %305, align 8, !tbaa !9
  %indvars.iv.next793 = add nsw i64 %indvars.iv792, 1
  %indvars.iv.next797 = add nsw i64 %indvars.iv796, 1
  %.not402.not = icmp slt i64 %indvars.iv796, %290
  br i1 %.not402.not, label %scalar.ph1119, label %.loopexit1278, !llvm.loop !43

.loopexit1278:                                    ; preds = %scalar.ph1119, %middle.block1118
  %indvars.iv.next793.lcssa = phi i64 [ %ind.end1126, %middle.block1118 ], [ %indvars.iv.next793, %scalar.ph1119 ]
  %indvars.iv.next795 = add nsw i64 %indvars.iv794, %279
  %indvars.iv.next802 = add nuw nsw i64 %indvars.iv801, 1
  %exitcond807.not = icmp eq i64 %indvars.iv.next802, %wide.trip.count806
  br i1 %exitcond807.not, label %._crit_edge558, label %.lr.ph557, !llvm.loop !44

._crit_edge558:                                   ; preds = %.loopexit1278, %276
  %.12.lcssa = phi i64 [ 0, %276 ], [ %indvars.iv.next793.lcssa, %.loopexit1278 ]
  %.not400567 = icmp slt i32 %., 0
  br i1 %.not400567, label %.loopexit, label %.lr.ph571

.lr.ph571:                                        ; preds = %._crit_edge558
  %306 = zext nneg i32 %56 to i64
  %307 = add nuw i32 %., 1
  %wide.trip.count818 = zext i32 %307 to i64
  %scevgep1138 = getelementptr i8, ptr %4, i64 8
  %umax1141 = tail call i64 @llvm.umax.i64(i64 %306, i64 1)
  %308 = shl nuw nsw i64 %306, 3
  %umax1153 = tail call i64 @llvm.umax.i64(i64 %306, i64 1)
  %invariant.gep1452 = getelementptr double, ptr %3, i64 %306
  %.idx1284 = shl nuw nsw i64 %306, 4
  %invariant.gep1454 = getelementptr i8, ptr %3, i64 %.idx1284
  %.idx1285 = mul nuw nsw i64 %306, 24
  %invariant.gep1456 = getelementptr i8, ptr %3, i64 %.idx1285
  br label %.lr.ph564.preheader

.lr.ph564.preheader:                              ; preds = %._crit_edge565, %.lr.ph571
  %indvars.iv810 = phi i64 [ 0, %.lr.ph571 ], [ %indvars.iv.next811, %._crit_edge565 ]
  %.14569 = phi i64 [ %.12.lcssa, %.lr.ph571 ], [ %indvars.iv.next809.lcssa, %._crit_edge565 ]
  %309 = add nuw i64 %indvars.iv810, %306
  %310 = add nuw i64 %indvars.iv810, 1
  %311 = trunc i64 %indvars.iv810 to i32
  %312 = add i32 %., %311
  %313 = mul i32 %56, %312
  %314 = sext i32 %313 to i64
  %315 = add i64 %310, %314
  %smax1151 = tail call i64 @llvm.smax.i64(i64 %309, i64 %315)
  %316 = add nuw i64 %indvars.iv810, %306
  %317 = icmp slt i64 %309, %315
  %umin1152 = zext i1 %317 to i64
  %318 = add i64 %316, %umin1152
  %319 = sub i64 %smax1151, %318
  %indvars817 = trunc i64 %indvars.iv810 to i32
  %320 = add nuw nsw i32 %., %indvars817
  %321 = mul nsw i32 %320, %56
  %322 = sext i32 %321 to i64
  %323 = add nsw i64 %indvars.iv810, %322
  %sext874 = shl i64 %.14569, 32
  %324 = ashr exact i64 %sext874, 32
  %325 = select i1 %317, i64 2, i64 1
  %326 = udiv i64 %319, %umax1153
  %327 = add i64 %325, %326
  %min.iters.check1156 = icmp ult i64 %327, 14
  br i1 %min.iters.check1156, label %.lr.ph564.preheader1308, label %vector.memcheck1136

vector.memcheck1136:                              ; preds = %.lr.ph564.preheader
  %328 = shl nuw nsw i64 %indvars.iv810, 3
  %scevgep1143 = getelementptr i8, ptr %3, i64 %328
  %329 = add nuw i64 %indvars.iv810, %306
  %330 = add nuw i64 %indvars.iv810, 1
  %331 = trunc i64 %indvars.iv810 to i32
  %332 = add i32 %., %331
  %333 = mul i32 %56, %332
  %334 = sext i32 %333 to i64
  %335 = add i64 %330, %334
  %336 = icmp slt i64 %329, %335
  %umin1140 = zext i1 %336 to i64
  %337 = add nuw i64 %indvars.iv810, %306
  %smax1139 = tail call i64 @llvm.smax.i64(i64 %329, i64 %335)
  %338 = add i64 %337, %umin1140
  %339 = sub i64 %smax1139, %338
  %340 = ashr exact i64 %sext874, 29
  %scevgep1137 = getelementptr i8, ptr %4, i64 %340
  %341 = udiv i64 %339, %umax1141
  %342 = add i64 %341, %umin1140
  %343 = shl i64 %342, 3
  %344 = getelementptr i8, ptr %scevgep1138, i64 %343
  %scevgep1142 = getelementptr i8, ptr %344, i64 %340
  %345 = mul i64 %308, %342
  %scevgep1144 = getelementptr i8, ptr %scevgep1143, i64 %345
  %346 = icmp ult ptr %scevgep1143, %scevgep1144
  %umin1145 = select i1 %346, ptr %scevgep1143, ptr %scevgep1144
  %347 = icmp ugt ptr %scevgep1143, %scevgep1144
  %umax1146 = select i1 %347, ptr %scevgep1143, ptr %scevgep1144
  %scevgep1147 = getelementptr i8, ptr %umax1146, i64 8
  %bound01148 = icmp ult ptr %scevgep1137, %scevgep1147
  %bound11149 = icmp ult ptr %umin1145, %scevgep1142
  %found.conflict1150 = and i1 %bound01148, %bound11149
  br i1 %found.conflict1150, label %.lr.ph564.preheader1308, label %vector.ph1157

vector.ph1157:                                    ; preds = %vector.memcheck1136
  %n.vec1159 = and i64 %327, -4
  %348 = mul i64 %n.vec1159, %306
  %ind.end1160 = add i64 %indvars.iv810, %348
  %ind.end1162 = add i64 %324, %n.vec1159
  %349 = getelementptr double, ptr %4, i64 %324
  br label %vector.body1164

vector.body1164:                                  ; preds = %vector.body1164, %vector.ph1157
  %index1165 = phi i64 [ 0, %vector.ph1157 ], [ %index.next1168, %vector.body1164 ]
  %350 = mul i64 %index1165, %306
  %offset.idx1166 = add i64 %indvars.iv810, %350
  %351 = getelementptr inbounds double, ptr %3, i64 %offset.idx1166
  %gep1453 = getelementptr double, ptr %invariant.gep1452, i64 %offset.idx1166
  %gep1455 = getelementptr double, ptr %invariant.gep1454, i64 %offset.idx1166
  %gep1457 = getelementptr double, ptr %invariant.gep1456, i64 %offset.idx1166
  %352 = load double, ptr %351, align 8, !tbaa !9, !alias.scope !45
  %353 = load double, ptr %gep1453, align 8, !tbaa !9, !alias.scope !45
  %354 = insertelement <2 x double> poison, double %352, i64 0
  %355 = insertelement <2 x double> %354, double %353, i64 1
  %356 = load double, ptr %gep1455, align 8, !tbaa !9, !alias.scope !45
  %357 = load double, ptr %gep1457, align 8, !tbaa !9, !alias.scope !45
  %358 = insertelement <2 x double> poison, double %356, i64 0
  %359 = insertelement <2 x double> %358, double %357, i64 1
  %360 = getelementptr double, ptr %349, i64 %index1165
  %361 = getelementptr inbounds i8, ptr %360, i64 16
  store <2 x double> %355, ptr %360, align 8, !tbaa !9, !alias.scope !48, !noalias !45
  store <2 x double> %359, ptr %361, align 8, !tbaa !9, !alias.scope !48, !noalias !45
  %index.next1168 = add nuw i64 %index1165, 4
  %362 = icmp eq i64 %index.next1168, %n.vec1159
  br i1 %362, label %middle.block1154, label %vector.body1164, !llvm.loop !50

middle.block1154:                                 ; preds = %vector.body1164
  %cmp.n1169 = icmp eq i64 %327, %n.vec1159
  br i1 %cmp.n1169, label %._crit_edge565, label %.lr.ph564.preheader1308

.lr.ph564.preheader1308:                          ; preds = %middle.block1154, %vector.memcheck1136, %.lr.ph564.preheader
  %indvars.iv812.ph = phi i64 [ %indvars.iv810, %vector.memcheck1136 ], [ %indvars.iv810, %.lr.ph564.preheader ], [ %ind.end1160, %middle.block1154 ]
  %indvars.iv808.ph = phi i64 [ %324, %vector.memcheck1136 ], [ %324, %.lr.ph564.preheader ], [ %ind.end1162, %middle.block1154 ]
  br label %.lr.ph564

.lr.ph564:                                        ; preds = %.lr.ph564.preheader1308, %.lr.ph564
  %indvars.iv812 = phi i64 [ %indvars.iv.next813, %.lr.ph564 ], [ %indvars.iv812.ph, %.lr.ph564.preheader1308 ]
  %indvars.iv808 = phi i64 [ %indvars.iv.next809, %.lr.ph564 ], [ %indvars.iv808.ph, %.lr.ph564.preheader1308 ]
  %363 = getelementptr inbounds double, ptr %3, i64 %indvars.iv812
  %364 = load double, ptr %363, align 8, !tbaa !9
  %365 = getelementptr inbounds double, ptr %4, i64 %indvars.iv808
  store double %364, ptr %365, align 8, !tbaa !9
  %indvars.iv.next809 = add nsw i64 %indvars.iv808, 1
  %indvars.iv.next813 = add nuw nsw i64 %indvars.iv812, %306
  %.not875 = icmp sgt i64 %indvars.iv.next813, %323
  br i1 %.not875, label %._crit_edge565, label %.lr.ph564, !llvm.loop !51

._crit_edge565:                                   ; preds = %.lr.ph564, %middle.block1154
  %indvars.iv.next809.lcssa = phi i64 [ %ind.end1162, %middle.block1154 ], [ %indvars.iv.next809, %.lr.ph564 ]
  %indvars.iv.next811 = add nuw nsw i64 %indvars.iv810, 1
  %exitcond819.not = icmp eq i64 %indvars.iv.next811, %wide.trip.count818
  br i1 %exitcond819.not, label %.loopexit, label %.lr.ph564.preheader, !llvm.loop !52

.thread423:                                       ; preds = %.thread416
  %366 = zext nneg i32 %.0328 to i64
  br i1 %.not379, label %.lr.ph507.preheader, label %.preheader432.preheader

.lr.ph507.preheader:                              ; preds = %.thread423
  %367 = add nuw nsw i32 %49, 1
  %ident.check1017.not = icmp ugt i32 %40, 1
  %invariant.gep1420 = getelementptr i8, ptr %4, i64 8
  %invariant.gep1422 = getelementptr i8, ptr %4, i64 16
  %invariant.gep1424 = getelementptr i8, ptr %4, i64 24
  br label %.lr.ph507

.preheader432.preheader:                          ; preds = %.thread423
  %wide.trip.count721 = zext nneg i32 %53 to i64
  %wide.trip.count714 = zext nneg i32 %40 to i64
  %368 = add i64 %22, -8
  %369 = sub i64 %368, %21
  %370 = shl nuw nsw i64 %366, 3
  %371 = sub nuw nsw i64 -8, %370
  %invariant.gep1406 = getelementptr i8, ptr %4, i64 8
  %invariant.gep1410 = getelementptr i8, ptr %4, i64 16
  %invariant.gep1412 = getelementptr i8, ptr %4, i64 24
  br label %.preheader432

.preheader432:                                    ; preds = %.preheader432.preheader, %._crit_edge484
  %indvars.iv716 = phi i64 [ 0, %.preheader432.preheader ], [ %indvars.iv.next717, %._crit_edge484 ]
  %indvars.iv707 = phi i64 [ 0, %.preheader432.preheader ], [ %indvars.iv.next708, %._crit_edge484 ]
  %.16489 = phi i32 [ 0, %.preheader432.preheader ], [ %.17.lcssa, %._crit_edge484 ]
  %372 = sub nsw i64 %wide.trip.count714, %indvars.iv707
  %373 = mul i64 %371, %indvars.iv707
  %374 = add i64 %369, %373
  %indvars720 = trunc i64 %indvars.iv707 to i32
  %.not398.not480 = icmp sgt i32 %40, %indvars720
  br i1 %.not398.not480, label %.lr.ph483.preheader, label %._crit_edge484

.lr.ph483.preheader:                              ; preds = %.preheader432
  %375 = sext i32 %.16489 to i64
  %invariant.gep892 = getelementptr inbounds double, ptr %3, i64 %indvars.iv716
  %min.iters.check977 = icmp ult i64 %372, 4
  br i1 %min.iters.check977, label %.lr.ph483.preheader1321, label %vector.memcheck973

vector.memcheck973:                               ; preds = %.lr.ph483.preheader
  %376 = shl nsw i64 %375, 3
  %377 = add i64 %374, %376
  %diff.check974 = icmp ult i64 %377, 32
  br i1 %diff.check974, label %.lr.ph483.preheader1321, label %vector.ph978

vector.ph978:                                     ; preds = %vector.memcheck973
  %n.vec980 = and i64 %372, -4
  %ind.end981 = add i64 %indvars.iv707, %n.vec980
  %ind.end983 = add i64 %n.vec980, %375
  %378 = getelementptr double, ptr %invariant.gep892, i64 %indvars.iv707
  %invariant.gep1400 = getelementptr double, ptr %4, i64 %375
  br label %vector.body985

vector.body985:                                   ; preds = %vector.body985, %vector.ph978
  %index986 = phi i64 [ 0, %vector.ph978 ], [ %index.next991, %vector.body985 ]
  %379 = getelementptr double, ptr %378, i64 %index986
  %380 = getelementptr i8, ptr %379, i64 8
  %381 = getelementptr i8, ptr %379, i64 24
  %wide.load989 = load <2 x double>, ptr %380, align 8, !tbaa !9
  %wide.load990 = load <2 x double>, ptr %381, align 8, !tbaa !9
  %gep1401 = getelementptr double, ptr %invariant.gep1400, i64 %index986
  %382 = getelementptr inbounds i8, ptr %gep1401, i64 16
  store <2 x double> %wide.load989, ptr %gep1401, align 8, !tbaa !9
  store <2 x double> %wide.load990, ptr %382, align 8, !tbaa !9
  %index.next991 = add nuw i64 %index986, 4
  %383 = icmp eq i64 %index.next991, %n.vec980
  br i1 %383, label %middle.block975, label %vector.body985, !llvm.loop !53

middle.block975:                                  ; preds = %vector.body985
  %cmp.n992 = icmp eq i64 %372, %n.vec980
  br i1 %cmp.n992, label %._crit_edge484.loopexit, label %.lr.ph483.preheader1321

.lr.ph483.preheader1321:                          ; preds = %middle.block975, %vector.memcheck973, %.lr.ph483.preheader
  %indvars.iv709.ph = phi i64 [ %indvars.iv707, %vector.memcheck973 ], [ %indvars.iv707, %.lr.ph483.preheader ], [ %ind.end981, %middle.block975 ]
  %indvars.iv705.ph = phi i64 [ %375, %vector.memcheck973 ], [ %375, %.lr.ph483.preheader ], [ %ind.end983, %middle.block975 ]
  %384 = sub i64 %wide.trip.count714, %indvars.iv709.ph
  %xtraiter1340 = and i64 %384, 3
  %lcmp.mod1341.not = icmp eq i64 %xtraiter1340, 0
  br i1 %lcmp.mod1341.not, label %.lr.ph483.prol.loopexit, label %.lr.ph483.prol

.lr.ph483.prol:                                   ; preds = %.lr.ph483.preheader1321, %.lr.ph483.prol
  %indvars.iv709.prol = phi i64 [ %indvars.iv.next710.prol, %.lr.ph483.prol ], [ %indvars.iv709.ph, %.lr.ph483.preheader1321 ]
  %indvars.iv705.prol = phi i64 [ %indvars.iv.next706.prol, %.lr.ph483.prol ], [ %indvars.iv705.ph, %.lr.ph483.preheader1321 ]
  %prol.iter1342 = phi i64 [ %prol.iter1342.next, %.lr.ph483.prol ], [ 0, %.lr.ph483.preheader1321 ]
  %indvars.iv.next710.prol = add nuw nsw i64 %indvars.iv709.prol, 1
  %gep893.prol = getelementptr inbounds double, ptr %invariant.gep892, i64 %indvars.iv.next710.prol
  %385 = load double, ptr %gep893.prol, align 8, !tbaa !9
  %386 = getelementptr inbounds double, ptr %4, i64 %indvars.iv705.prol
  store double %385, ptr %386, align 8, !tbaa !9
  %indvars.iv.next706.prol = add nsw i64 %indvars.iv705.prol, 1
  %prol.iter1342.next = add i64 %prol.iter1342, 1
  %prol.iter1342.cmp.not = icmp eq i64 %prol.iter1342.next, %xtraiter1340
  br i1 %prol.iter1342.cmp.not, label %.lr.ph483.prol.loopexit, label %.lr.ph483.prol, !llvm.loop !54

.lr.ph483.prol.loopexit:                          ; preds = %.lr.ph483.prol, %.lr.ph483.preheader1321
  %indvars.iv.next706.lcssa1322.unr = phi i64 [ poison, %.lr.ph483.preheader1321 ], [ %indvars.iv.next706.prol, %.lr.ph483.prol ]
  %indvars.iv709.unr = phi i64 [ %indvars.iv709.ph, %.lr.ph483.preheader1321 ], [ %indvars.iv.next710.prol, %.lr.ph483.prol ]
  %indvars.iv705.unr = phi i64 [ %indvars.iv705.ph, %.lr.ph483.preheader1321 ], [ %indvars.iv.next706.prol, %.lr.ph483.prol ]
  %387 = sub i64 %indvars.iv709.ph, %wide.trip.count714
  %388 = icmp ugt i64 %387, -4
  br i1 %388, label %._crit_edge484.loopexit, label %.lr.ph483.preheader1321.new

.lr.ph483.preheader1321.new:                      ; preds = %.lr.ph483.prol.loopexit
  %invariant.gep1402 = getelementptr i8, ptr %invariant.gep892, i64 8
  %invariant.gep1404 = getelementptr i8, ptr %invariant.gep892, i64 16
  %invariant.gep1408 = getelementptr i8, ptr %invariant.gep892, i64 24
  br label %.lr.ph483

.lr.ph483:                                        ; preds = %.lr.ph483, %.lr.ph483.preheader1321.new
  %indvars.iv709 = phi i64 [ %indvars.iv709.unr, %.lr.ph483.preheader1321.new ], [ %indvars.iv.next710.3, %.lr.ph483 ]
  %indvars.iv705 = phi i64 [ %indvars.iv705.unr, %.lr.ph483.preheader1321.new ], [ %indvars.iv.next706.3, %.lr.ph483 ]
  %gep1403 = getelementptr double, ptr %invariant.gep1402, i64 %indvars.iv709
  %389 = load double, ptr %gep1403, align 8, !tbaa !9
  %390 = getelementptr inbounds double, ptr %4, i64 %indvars.iv705
  store double %389, ptr %390, align 8, !tbaa !9
  %gep1405 = getelementptr double, ptr %invariant.gep1404, i64 %indvars.iv709
  %391 = load double, ptr %gep1405, align 8, !tbaa !9
  %gep1407 = getelementptr double, ptr %invariant.gep1406, i64 %indvars.iv705
  store double %391, ptr %gep1407, align 8, !tbaa !9
  %gep1409 = getelementptr double, ptr %invariant.gep1408, i64 %indvars.iv709
  %392 = load double, ptr %gep1409, align 8, !tbaa !9
  %gep1411 = getelementptr double, ptr %invariant.gep1410, i64 %indvars.iv705
  store double %392, ptr %gep1411, align 8, !tbaa !9
  %indvars.iv.next710.3 = add nuw nsw i64 %indvars.iv709, 4
  %gep893.3 = getelementptr inbounds double, ptr %invariant.gep892, i64 %indvars.iv.next710.3
  %393 = load double, ptr %gep893.3, align 8, !tbaa !9
  %gep1413 = getelementptr double, ptr %invariant.gep1412, i64 %indvars.iv705
  store double %393, ptr %gep1413, align 8, !tbaa !9
  %indvars.iv.next706.3 = add nsw i64 %indvars.iv705, 4
  %exitcond715.not.3 = icmp eq i64 %indvars.iv.next710.3, %wide.trip.count714
  br i1 %exitcond715.not.3, label %._crit_edge484.loopexit, label %.lr.ph483, !llvm.loop !55

._crit_edge484.loopexit:                          ; preds = %.lr.ph483.prol.loopexit, %.lr.ph483, %middle.block975
  %indvars.iv.next706.lcssa = phi i64 [ %ind.end983, %middle.block975 ], [ %indvars.iv.next706.lcssa1322.unr, %.lr.ph483.prol.loopexit ], [ %indvars.iv.next706.3, %.lr.ph483 ]
  %394 = trunc nsw i64 %indvars.iv.next706.lcssa to i32
  br label %._crit_edge484

._crit_edge484:                                   ; preds = %._crit_edge484.loopexit, %.preheader432
  %.17.lcssa = phi i32 [ %.16489, %.preheader432 ], [ %394, %._crit_edge484.loopexit ]
  %indvars.iv.next717 = add nuw nsw i64 %indvars.iv716, %366
  %indvars.iv.next708 = add nuw nsw i64 %indvars.iv707, 1
  %exitcond722.not = icmp eq i64 %indvars.iv.next708, %wide.trip.count721
  br i1 %exitcond722.not, label %.preheader.us.preheader, label %.preheader432, !llvm.loop !56

.preheader.us.preheader:                          ; preds = %._crit_edge484
  %395 = zext nneg i32 %.0328 to i64
  %396 = zext nneg i32 %53 to i64
  %wide.trip.count733 = zext nneg i32 %53 to i64
  %ident.check994.not = icmp ult i32 %40, 2
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge495.us
  %indvars.iv725 = phi i64 [ 0, %.preheader.us.preheader ], [ %indvars.iv.next726, %._crit_edge495.us ]
  %.18499.us = phi i32 [ %.17.lcssa, %.preheader.us.preheader ], [ %413, %._crit_edge495.us ]
  %397 = add nuw i64 %indvars.iv725, 1
  %smax997 = tail call i64 @llvm.smax.i64(i64 %397, i64 %396)
  %398 = sub nsw i64 %smax997, %indvars.iv725
  %399 = sext i32 %.18499.us to i64
  %invariant.gep894 = getelementptr inbounds double, ptr %3, i64 %indvars.iv725
  %min.iters.check1000 = icmp ugt i64 %398, 3
  %or.cond1295 = and i1 %min.iters.check1000, %ident.check994.not
  br i1 %or.cond1295, label %vector.memcheck995, label %scalar.ph999.preheader

vector.memcheck995:                               ; preds = %.preheader.us
  %400 = shl i64 %indvars.iv725, 4
  %401 = add i64 %400, %19
  %402 = sub i64 %20, %401
  %403 = shl nsw i64 %399, 3
  %404 = add i64 %402, %403
  %diff.check996 = icmp ult i64 %404, 32
  br i1 %diff.check996, label %scalar.ph999.preheader, label %vector.ph1001

vector.ph1001:                                    ; preds = %vector.memcheck995
  %n.vec1003 = and i64 %398, -4
  %ind.end1004 = add i64 %indvars.iv725, %n.vec1003
  %ind.end1006 = add i64 %n.vec1003, %399
  %405 = getelementptr double, ptr %invariant.gep894, i64 %indvars.iv725
  %invariant.gep1414 = getelementptr double, ptr %4, i64 %399
  br label %vector.body1008

vector.body1008:                                  ; preds = %vector.body1008, %vector.ph1001
  %index1009 = phi i64 [ 0, %vector.ph1001 ], [ %index.next1014, %vector.body1008 ]
  %406 = getelementptr double, ptr %405, i64 %index1009
  %407 = getelementptr inbounds i8, ptr %406, i64 16
  %wide.load1012 = load <2 x double>, ptr %406, align 8, !tbaa !9
  %wide.load1013 = load <2 x double>, ptr %407, align 8, !tbaa !9
  %gep1415 = getelementptr double, ptr %invariant.gep1414, i64 %index1009
  %408 = getelementptr inbounds i8, ptr %gep1415, i64 16
  store <2 x double> %wide.load1012, ptr %gep1415, align 8, !tbaa !9
  store <2 x double> %wide.load1013, ptr %408, align 8, !tbaa !9
  %index.next1014 = add nuw i64 %index1009, 4
  %409 = icmp eq i64 %index.next1014, %n.vec1003
  br i1 %409, label %middle.block998, label %vector.body1008, !llvm.loop !57

middle.block998:                                  ; preds = %vector.body1008
  %cmp.n1015 = icmp eq i64 %398, %n.vec1003
  br i1 %cmp.n1015, label %._crit_edge495.us, label %scalar.ph999.preheader

scalar.ph999.preheader:                           ; preds = %middle.block998, %vector.memcheck995, %.preheader.us
  %indvars.iv727.ph = phi i64 [ %indvars.iv725, %vector.memcheck995 ], [ %indvars.iv725, %.preheader.us ], [ %ind.end1004, %middle.block998 ]
  %indvars.iv723.ph = phi i64 [ %399, %vector.memcheck995 ], [ %399, %.preheader.us ], [ %ind.end1006, %middle.block998 ]
  br label %scalar.ph999

scalar.ph999:                                     ; preds = %scalar.ph999.preheader, %scalar.ph999
  %indvars.iv727 = phi i64 [ %indvars.iv.next728, %scalar.ph999 ], [ %indvars.iv727.ph, %scalar.ph999.preheader ]
  %indvars.iv723 = phi i64 [ %indvars.iv.next724, %scalar.ph999 ], [ %indvars.iv723.ph, %scalar.ph999.preheader ]
  %410 = mul nuw nsw i64 %indvars.iv727, %395
  %gep895 = getelementptr inbounds double, ptr %invariant.gep894, i64 %410
  %411 = load double, ptr %gep895, align 8, !tbaa !9
  %412 = getelementptr inbounds double, ptr %4, i64 %indvars.iv723
  store double %411, ptr %412, align 8, !tbaa !9
  %indvars.iv.next724 = add nsw i64 %indvars.iv723, 1
  %indvars.iv.next728 = add nuw nsw i64 %indvars.iv727, 1
  %.not397.not.us = icmp slt i64 %indvars.iv.next728, %396
  br i1 %.not397.not.us, label %scalar.ph999, label %._crit_edge495.us, !llvm.loop !58

._crit_edge495.us:                                ; preds = %scalar.ph999, %middle.block998
  %indvars.iv.next724.lcssa = phi i64 [ %ind.end1006, %middle.block998 ], [ %indvars.iv.next724, %scalar.ph999 ]
  %413 = trunc nsw i64 %indvars.iv.next724.lcssa to i32
  %indvars.iv.next726 = add nuw nsw i64 %indvars.iv725, 1
  %exitcond734.not = icmp eq i64 %indvars.iv.next726, %wide.trip.count733
  br i1 %exitcond734.not, label %.loopexit, label %.preheader.us, !llvm.loop !59

.lr.ph507:                                        ; preds = %.lr.ph507.preheader, %.loopexit1279
  %loop-unroll.iv1345 = phi i32 [ 0, %.lr.ph507.preheader ], [ %loop-unroll.iv.next1346, %.loopexit1279 ]
  %loop-unroll.iv1343 = phi i32 [ 1, %.lr.ph507.preheader ], [ %loop-unroll.iv.next1344, %.loopexit1279 ]
  %indvar1022 = phi i64 [ 0, %.lr.ph507.preheader ], [ %indvar.next1023, %.loopexit1279 ]
  %indvar1019 = phi i32 [ 0, %.lr.ph507.preheader ], [ %indvar.next1020, %.loopexit1279 ]
  %indvars.iv744 = phi i32 [ 1, %.lr.ph507.preheader ], [ %indvars.iv.next745, %.loopexit1279 ]
  %indvars.iv737.in = phi i32 [ %53, %.lr.ph507.preheader ], [ %indvars.iv737, %.loopexit1279 ]
  %.20505 = phi i32 [ 0, %.lr.ph507.preheader ], [ %429, %.loopexit1279 ]
  %414 = trunc i64 %indvar1022 to i32
  %415 = add i32 %414, 2
  %416 = trunc i64 %indvar1022 to i32
  %417 = add i32 %416, 2
  %418 = add i64 %indvar1022, 1
  %419 = sext i32 %.20505 to i64
  %420 = shl nsw i64 %419, 3
  %421 = add i32 %367, %indvar1019
  %422 = sext i32 %421 to i64
  %423 = shl nsw i64 %422, 3
  %424 = add i64 %420, %18
  %425 = add i64 %423, %17
  %426 = sub i64 %424, %425
  %indvars.iv737 = add i32 %indvars.iv737.in, 1
  %427 = sext i32 %indvars.iv737 to i64
  %428 = sext i32 %.20505 to i64
  %429 = add i32 %.20505, %indvars.iv744
  %min.iters.check1026 = icmp ult i64 %418, 4
  %or.cond1296.not1299 = or i1 %min.iters.check1026, %ident.check1017.not
  %diff.check1021 = icmp ult i64 %426, 32
  %or.cond1297 = select i1 %or.cond1296.not1299, i1 true, i1 %diff.check1021
  br i1 %or.cond1297, label %scalar.ph1025.preheader, label %vector.ph1027

vector.ph1027:                                    ; preds = %.lr.ph507
  %n.vec1029 = and i64 %418, -4
  %430 = mul nuw i64 %n.vec1029, %366
  %ind.end1030 = add i64 %430, %427
  %ind.end1032 = add i64 %n.vec1029, %428
  %invariant.gep1416 = getelementptr double, ptr %3, i64 %427
  %invariant.gep1418 = getelementptr double, ptr %4, i64 %428
  br label %vector.body1034

vector.body1034:                                  ; preds = %vector.body1034, %vector.ph1027
  %index1035 = phi i64 [ 0, %vector.ph1027 ], [ %index.next1040, %vector.body1034 ]
  %431 = mul nuw i64 %index1035, %366
  %gep1417 = getelementptr double, ptr %invariant.gep1416, i64 %431
  %432 = getelementptr inbounds i8, ptr %gep1417, i64 16
  %wide.load1038 = load <2 x double>, ptr %gep1417, align 8, !tbaa !9
  %wide.load1039 = load <2 x double>, ptr %432, align 8, !tbaa !9
  %gep1419 = getelementptr double, ptr %invariant.gep1418, i64 %index1035
  %433 = getelementptr inbounds i8, ptr %gep1419, i64 16
  store <2 x double> %wide.load1038, ptr %gep1419, align 8, !tbaa !9
  store <2 x double> %wide.load1039, ptr %433, align 8, !tbaa !9
  %index.next1040 = add nuw i64 %index1035, 4
  %434 = icmp eq i64 %index.next1040, %n.vec1029
  br i1 %434, label %middle.block1024, label %vector.body1034, !llvm.loop !60

middle.block1024:                                 ; preds = %vector.body1034
  %cmp.n1041 = icmp eq i64 %418, %n.vec1029
  br i1 %cmp.n1041, label %.loopexit1279, label %scalar.ph1025.preheader

scalar.ph1025.preheader:                          ; preds = %middle.block1024, %.lr.ph507
  %indvars.iv739.ph = phi i64 [ %427, %.lr.ph507 ], [ %ind.end1030, %middle.block1024 ]
  %indvars.iv735.ph = phi i64 [ %428, %.lr.ph507 ], [ %ind.end1032, %middle.block1024 ]
  %435 = trunc i64 %indvars.iv735.ph to i32
  %436 = sub i32 %loop-unroll.iv1343, %435
  %437 = sub i32 %loop-unroll.iv1345, %435
  %xtraiter1347 = and i32 %436, 3
  %lcmp.mod1348.not = icmp eq i32 %xtraiter1347, 0
  br i1 %lcmp.mod1348.not, label %scalar.ph1025.prol.loopexit, label %scalar.ph1025.prol

scalar.ph1025.prol:                               ; preds = %scalar.ph1025.preheader, %scalar.ph1025.prol
  %indvars.iv739.prol = phi i64 [ %indvars.iv.next740.prol, %scalar.ph1025.prol ], [ %indvars.iv739.ph, %scalar.ph1025.preheader ]
  %indvars.iv735.prol = phi i64 [ %indvars.iv.next736.prol, %scalar.ph1025.prol ], [ %indvars.iv735.ph, %scalar.ph1025.preheader ]
  %prol.iter1349 = phi i32 [ %prol.iter1349.next, %scalar.ph1025.prol ], [ 0, %scalar.ph1025.preheader ]
  %438 = getelementptr inbounds double, ptr %3, i64 %indvars.iv739.prol
  %439 = load double, ptr %438, align 8, !tbaa !9
  %440 = getelementptr inbounds double, ptr %4, i64 %indvars.iv735.prol
  store double %439, ptr %440, align 8, !tbaa !9
  %indvars.iv.next736.prol = add nsw i64 %indvars.iv735.prol, 1
  %indvars.iv.next740.prol = add nsw i64 %indvars.iv739.prol, %366
  %prol.iter1349.next = add i32 %prol.iter1349, 1
  %prol.iter1349.cmp.not = icmp eq i32 %prol.iter1349.next, %xtraiter1347
  br i1 %prol.iter1349.cmp.not, label %scalar.ph1025.prol.loopexit, label %scalar.ph1025.prol, !llvm.loop !61

scalar.ph1025.prol.loopexit:                      ; preds = %scalar.ph1025.prol, %scalar.ph1025.preheader
  %indvars.iv739.unr = phi i64 [ %indvars.iv739.ph, %scalar.ph1025.preheader ], [ %indvars.iv.next740.prol, %scalar.ph1025.prol ]
  %indvars.iv735.unr = phi i64 [ %indvars.iv735.ph, %scalar.ph1025.preheader ], [ %indvars.iv.next736.prol, %scalar.ph1025.prol ]
  %441 = icmp ult i32 %437, 3
  br i1 %441, label %.loopexit1279, label %scalar.ph1025

scalar.ph1025:                                    ; preds = %scalar.ph1025.prol.loopexit, %scalar.ph1025
  %indvars.iv739 = phi i64 [ %indvars.iv.next740.3, %scalar.ph1025 ], [ %indvars.iv739.unr, %scalar.ph1025.prol.loopexit ]
  %indvars.iv735 = phi i64 [ %indvars.iv.next736.3, %scalar.ph1025 ], [ %indvars.iv735.unr, %scalar.ph1025.prol.loopexit ]
  %442 = getelementptr inbounds double, ptr %3, i64 %indvars.iv739
  %443 = load double, ptr %442, align 8, !tbaa !9
  %444 = getelementptr inbounds double, ptr %4, i64 %indvars.iv735
  store double %443, ptr %444, align 8, !tbaa !9
  %indvars.iv.next740 = add nsw i64 %indvars.iv739, %366
  %445 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next740
  %446 = load double, ptr %445, align 8, !tbaa !9
  %gep1421 = getelementptr double, ptr %invariant.gep1420, i64 %indvars.iv735
  store double %446, ptr %gep1421, align 8, !tbaa !9
  %indvars.iv.next740.1 = add nsw i64 %indvars.iv.next740, %366
  %447 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next740.1
  %448 = load double, ptr %447, align 8, !tbaa !9
  %gep1423 = getelementptr double, ptr %invariant.gep1422, i64 %indvars.iv735
  store double %448, ptr %gep1423, align 8, !tbaa !9
  %indvars.iv.next740.2 = add nsw i64 %indvars.iv.next740.1, %366
  %449 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next740.2
  %450 = load double, ptr %449, align 8, !tbaa !9
  %gep1425 = getelementptr double, ptr %invariant.gep1424, i64 %indvars.iv735
  store double %450, ptr %gep1425, align 8, !tbaa !9
  %indvars.iv.next736.3 = add nsw i64 %indvars.iv735, 4
  %indvars.iv.next740.3 = add nsw i64 %indvars.iv.next740.2, %366
  %lftr.wideiv746.3 = trunc i64 %indvars.iv.next736.3 to i32
  %exitcond747.not.3 = icmp eq i32 %429, %lftr.wideiv746.3
  br i1 %exitcond747.not.3, label %.loopexit1279, label %scalar.ph1025, !llvm.loop !62

.loopexit1279:                                    ; preds = %scalar.ph1025.prol.loopexit, %scalar.ph1025, %middle.block1024
  %indvars.iv.next745 = add nuw nsw i32 %indvars.iv744, 1
  %exitcond748.not = icmp eq i32 %indvars.iv744, %53
  %indvar.next1020 = add i32 %indvar1019, 1
  %indvar.next1023 = add i64 %indvar1022, 1
  %loop-unroll.iv.next1344 = add i32 %loop-unroll.iv1343, %417
  %loop-unroll.iv.next1346 = add i32 %loop-unroll.iv1345, %415
  br i1 %exitcond748.not, label %._crit_edge508, label %.lr.ph507, !llvm.loop !63

._crit_edge508:                                   ; preds = %.loopexit1279
  %.not392.not517.not = icmp eq i32 %40, 0
  br i1 %.not392.not517.not, label %.loopexit, label %.lr.ph522.preheader

.lr.ph522.preheader:                              ; preds = %._crit_edge508
  %451 = zext nneg i32 %.0328 to i64
  %452 = zext nneg i32 %53 to i64
  %wide.trip.count764 = zext nneg i32 %40 to i64
  %453 = sub i64 %16, %15
  %454 = mul nsw i64 %451, -8
  %455 = add nuw nsw i64 %451, 1
  br label %.lr.ph522

.lr.ph522:                                        ; preds = %.lr.ph522.preheader, %._crit_edge515.loopexit
  %indvar1043 = phi i64 [ 0, %.lr.ph522.preheader ], [ %indvar.next1044, %._crit_edge515.loopexit ]
  %indvars.iv759 = phi i64 [ %452, %.lr.ph522.preheader ], [ %indvars.iv.next760, %._crit_edge515.loopexit ]
  %indvars.iv752 = phi i64 [ 0, %.lr.ph522.preheader ], [ %indvars.iv.next753, %._crit_edge515.loopexit ]
  %.22520 = phi i32 [ %429, %.lr.ph522.preheader ], [ %474, %._crit_edge515.loopexit ]
  %456 = mul i64 %455, %indvar1043
  %457 = add i64 %456, %452
  %smax1046 = tail call i64 @llvm.smax.i64(i64 %457, i64 %indvars.iv752)
  %458 = mul i64 %indvar1043, %451
  %reass.sub1281 = sub i64 %smax1046, %458
  %459 = add i64 %reass.sub1281, 1
  %460 = add nsw i64 %indvars.iv752, %indvars.iv759
  %461 = sext i32 %.22520 to i64
  %min.iters.check1049 = icmp ult i64 %459, 4
  br i1 %min.iters.check1049, label %.lr.ph514.preheader, label %vector.memcheck1042

vector.memcheck1042:                              ; preds = %.lr.ph522
  %462 = mul i64 %454, %indvar1043
  %463 = add i64 %453, %462
  %464 = shl nsw i64 %461, 3
  %465 = add i64 %463, %464
  %diff.check1045 = icmp ult i64 %465, 32
  br i1 %diff.check1045, label %.lr.ph514.preheader, label %vector.ph1050

vector.ph1050:                                    ; preds = %vector.memcheck1042
  %n.vec1052 = and i64 %459, -4
  %ind.end1053 = add i64 %indvars.iv752, %n.vec1052
  %ind.end1055 = add i64 %n.vec1052, %461
  %466 = getelementptr double, ptr %3, i64 %indvars.iv752
  %invariant.gep1426 = getelementptr double, ptr %4, i64 %461
  br label %vector.body1057

vector.body1057:                                  ; preds = %vector.body1057, %vector.ph1050
  %index1058 = phi i64 [ 0, %vector.ph1050 ], [ %index.next1063, %vector.body1057 ]
  %467 = getelementptr double, ptr %466, i64 %index1058
  %468 = getelementptr inbounds i8, ptr %467, i64 16
  %wide.load1061 = load <2 x double>, ptr %467, align 8, !tbaa !9
  %wide.load1062 = load <2 x double>, ptr %468, align 8, !tbaa !9
  %gep1427 = getelementptr double, ptr %invariant.gep1426, i64 %index1058
  %469 = getelementptr inbounds i8, ptr %gep1427, i64 16
  store <2 x double> %wide.load1061, ptr %gep1427, align 8, !tbaa !9
  store <2 x double> %wide.load1062, ptr %469, align 8, !tbaa !9
  %index.next1063 = add nuw i64 %index1058, 4
  %470 = icmp eq i64 %index.next1063, %n.vec1052
  br i1 %470, label %middle.block1047, label %vector.body1057, !llvm.loop !64

middle.block1047:                                 ; preds = %vector.body1057
  %cmp.n1064 = icmp eq i64 %459, %n.vec1052
  br i1 %cmp.n1064, label %._crit_edge515.loopexit, label %.lr.ph514.preheader

.lr.ph514.preheader:                              ; preds = %middle.block1047, %vector.memcheck1042, %.lr.ph522
  %indvars.iv754.ph = phi i64 [ %indvars.iv752, %vector.memcheck1042 ], [ %indvars.iv752, %.lr.ph522 ], [ %ind.end1053, %middle.block1047 ]
  %indvars.iv750.ph = phi i64 [ %461, %vector.memcheck1042 ], [ %461, %.lr.ph522 ], [ %ind.end1055, %middle.block1047 ]
  br label %.lr.ph514

.lr.ph514:                                        ; preds = %.lr.ph514.preheader, %.lr.ph514
  %indvars.iv754 = phi i64 [ %indvars.iv.next755, %.lr.ph514 ], [ %indvars.iv754.ph, %.lr.ph514.preheader ]
  %indvars.iv750 = phi i64 [ %indvars.iv.next751, %.lr.ph514 ], [ %indvars.iv750.ph, %.lr.ph514.preheader ]
  %471 = getelementptr inbounds double, ptr %3, i64 %indvars.iv754
  %472 = load double, ptr %471, align 8, !tbaa !9
  %473 = getelementptr inbounds double, ptr %4, i64 %indvars.iv750
  store double %472, ptr %473, align 8, !tbaa !9
  %indvars.iv.next751 = add nsw i64 %indvars.iv750, 1
  %indvars.iv.next755 = add nuw nsw i64 %indvars.iv754, 1
  %.not393.not = icmp slt i64 %indvars.iv754, %460
  br i1 %.not393.not, label %.lr.ph514, label %._crit_edge515.loopexit, !llvm.loop !65

._crit_edge515.loopexit:                          ; preds = %.lr.ph514, %middle.block1047
  %indvars.iv.next751.lcssa = phi i64 [ %ind.end1055, %middle.block1047 ], [ %indvars.iv.next751, %.lr.ph514 ]
  %474 = trunc nsw i64 %indvars.iv.next751.lcssa to i32
  %indvars.iv.next753 = add i64 %indvars.iv752, %451
  %indvars.iv.next760 = add nuw nsw i64 %indvars.iv759, 1
  %exitcond765.not = icmp eq i64 %indvars.iv.next760, %wide.trip.count764
  %indvar.next1044 = add i64 %indvar1043, 1
  br i1 %exitcond765.not, label %.loopexit, label %.lr.ph522, !llvm.loop !66

475:                                              ; preds = %54
  br i1 %.not379, label %.lr.ph605.preheader, label %.lr.ph582

.lr.ph582:                                        ; preds = %475
  %476 = mul nuw nsw i32 %56, %.0328
  %477 = add nuw nsw i32 %56, 1
  %478 = zext nneg i32 %56 to i64
  %479 = zext nneg i32 %476 to i64
  %scevgep1172 = getelementptr i8, ptr %4, i64 8
  %480 = shl nuw nsw i64 %478, 3
  %invariant.gep1458 = getelementptr double, ptr %3, i64 %478
  %.idx1286 = shl nuw nsw i64 %478, 4
  %invariant.gep1460 = getelementptr i8, ptr %3, i64 %.idx1286
  %.idx1287 = mul nuw nsw i64 %478, 24
  %invariant.gep1462 = getelementptr i8, ptr %3, i64 %.idx1287
  br label %482

.loopexit427.loopexit:                            ; preds = %.lr.ph576, %middle.block1186
  %indvars.iv.next821.lcssa = phi i64 [ %ind.end1194, %middle.block1186 ], [ %indvars.iv.next821, %.lr.ph576 ]
  %481 = trunc nsw i64 %indvars.iv.next821.lcssa to i32
  br label %.loopexit427

.loopexit427:                                     ; preds = %.loopexit427.loopexit, %482
  %.25.lcssa = phi i32 [ %.24580, %482 ], [ %481, %.loopexit427.loopexit ]
  %indvars.iv.next823 = add i32 %indvars.iv822, %477
  %exitcond829.not = icmp eq i32 %489, %53
  br i1 %exitcond829.not, label %.lr.ph597, label %482, !llvm.loop !67

482:                                              ; preds = %.lr.ph582, %.loopexit427
  %indvars.iv822 = phi i32 [ %56, %.lr.ph582 ], [ %indvars.iv.next823, %.loopexit427 ]
  %.24580 = phi i32 [ 0, %.lr.ph582 ], [ %.25.lcssa, %.loopexit427 ]
  %.8361579 = phi i32 [ 0, %.lr.ph582 ], [ %489, %.loopexit427 ]
  %483 = sext i32 %indvars.iv822 to i64
  %484 = add nsw i64 %478, %483
  %smax1173 = tail call i64 @llvm.smax.i64(i64 %484, i64 %479)
  %485 = icmp slt i64 %484, %479
  %umin1174 = zext i1 %485 to i64
  %486 = add nsw i64 %484, %umin1174
  %487 = sub i64 %smax1173, %486
  %488 = shl nsw i64 %483, 3
  %scevgep1177 = getelementptr i8, ptr %3, i64 %488
  %489 = add nuw nsw i32 %.8361579, 1
  %490 = mul nuw nsw i32 %489, %56
  %491 = add nuw nsw i32 %490, %.8361579
  %492 = icmp slt i32 %491, %476
  br i1 %492, label %.lr.ph576.preheader, label %.loopexit427

.lr.ph576.preheader:                              ; preds = %482
  %493 = sext i32 %indvars.iv822 to i64
  %494 = add nsw i64 %478, %493
  %495 = icmp slt i64 %494, %479
  %umin1185 = zext i1 %495 to i64
  %smax1184 = tail call i64 @llvm.smax.i64(i64 %494, i64 %479)
  %496 = add nsw i64 %494, %umin1185
  %497 = sub i64 %smax1184, %496
  %498 = sext i32 %indvars.iv822 to i64
  %499 = sext i32 %.24580 to i64
  %500 = select i1 %495, i64 2, i64 1
  %501 = udiv i64 %497, %478
  %502 = add i64 %500, %501
  %min.iters.check1188 = icmp ult i64 %502, 14
  br i1 %min.iters.check1188, label %.lr.ph576.preheader1306, label %vector.memcheck1170

vector.memcheck1170:                              ; preds = %.lr.ph576.preheader
  %503 = shl nsw i64 %499, 3
  %scevgep1171 = getelementptr i8, ptr %4, i64 %503
  %504 = udiv i64 %487, %478
  %505 = add i64 %504, %umin1174
  %506 = add i64 %505, %499
  %507 = shl i64 %506, 3
  %scevgep1175 = getelementptr i8, ptr %scevgep1172, i64 %507
  %508 = mul i64 %480, %505
  %509 = getelementptr i8, ptr %3, i64 %508
  %scevgep1176 = getelementptr i8, ptr %509, i64 %488
  %510 = icmp ult ptr %scevgep1176, %scevgep1177
  %umin1178 = select i1 %510, ptr %scevgep1176, ptr %scevgep1177
  %511 = icmp ugt ptr %scevgep1176, %scevgep1177
  %umax1179 = select i1 %511, ptr %scevgep1176, ptr %scevgep1177
  %scevgep1180 = getelementptr i8, ptr %umax1179, i64 8
  %bound01181 = icmp ult ptr %scevgep1171, %scevgep1180
  %bound11182 = icmp ult ptr %umin1178, %scevgep1175
  %found.conflict1183 = and i1 %bound01181, %bound11182
  br i1 %found.conflict1183, label %.lr.ph576.preheader1306, label %vector.ph1189

vector.ph1189:                                    ; preds = %vector.memcheck1170
  %n.vec1191 = and i64 %502, -4
  %512 = mul i64 %n.vec1191, %478
  %ind.end1192 = add i64 %512, %498
  %ind.end1194 = add i64 %n.vec1191, %499
  %invariant.gep1464 = getelementptr double, ptr %4, i64 %499
  br label %vector.body1196

vector.body1196:                                  ; preds = %vector.body1196, %vector.ph1189
  %index1197 = phi i64 [ 0, %vector.ph1189 ], [ %index.next1200, %vector.body1196 ]
  %513 = mul i64 %index1197, %478
  %offset.idx1198 = add i64 %513, %498
  %514 = getelementptr inbounds double, ptr %3, i64 %offset.idx1198
  %gep1459 = getelementptr double, ptr %invariant.gep1458, i64 %offset.idx1198
  %gep1461 = getelementptr double, ptr %invariant.gep1460, i64 %offset.idx1198
  %gep1463 = getelementptr double, ptr %invariant.gep1462, i64 %offset.idx1198
  %515 = load double, ptr %514, align 8, !tbaa !9, !alias.scope !68
  %516 = load double, ptr %gep1459, align 8, !tbaa !9, !alias.scope !68
  %517 = insertelement <2 x double> poison, double %515, i64 0
  %518 = insertelement <2 x double> %517, double %516, i64 1
  %519 = load double, ptr %gep1461, align 8, !tbaa !9, !alias.scope !68
  %520 = load double, ptr %gep1463, align 8, !tbaa !9, !alias.scope !68
  %521 = insertelement <2 x double> poison, double %519, i64 0
  %522 = insertelement <2 x double> %521, double %520, i64 1
  %gep1465 = getelementptr double, ptr %invariant.gep1464, i64 %index1197
  %523 = getelementptr inbounds i8, ptr %gep1465, i64 16
  store <2 x double> %518, ptr %gep1465, align 8, !tbaa !9, !alias.scope !71, !noalias !68
  store <2 x double> %522, ptr %523, align 8, !tbaa !9, !alias.scope !71, !noalias !68
  %index.next1200 = add nuw i64 %index1197, 4
  %524 = icmp eq i64 %index.next1200, %n.vec1191
  br i1 %524, label %middle.block1186, label %vector.body1196, !llvm.loop !73

middle.block1186:                                 ; preds = %vector.body1196
  %cmp.n1201 = icmp eq i64 %502, %n.vec1191
  br i1 %cmp.n1201, label %.loopexit427.loopexit, label %.lr.ph576.preheader1306

.lr.ph576.preheader1306:                          ; preds = %middle.block1186, %vector.memcheck1170, %.lr.ph576.preheader
  %indvars.iv824.ph = phi i64 [ %498, %vector.memcheck1170 ], [ %498, %.lr.ph576.preheader ], [ %ind.end1192, %middle.block1186 ]
  %indvars.iv820.ph = phi i64 [ %499, %vector.memcheck1170 ], [ %499, %.lr.ph576.preheader ], [ %ind.end1194, %middle.block1186 ]
  br label %.lr.ph576

.lr.ph576:                                        ; preds = %.lr.ph576.preheader1306, %.lr.ph576
  %indvars.iv824 = phi i64 [ %indvars.iv.next825, %.lr.ph576 ], [ %indvars.iv824.ph, %.lr.ph576.preheader1306 ]
  %indvars.iv820 = phi i64 [ %indvars.iv.next821, %.lr.ph576 ], [ %indvars.iv820.ph, %.lr.ph576.preheader1306 ]
  %525 = getelementptr inbounds double, ptr %3, i64 %indvars.iv824
  %526 = load double, ptr %525, align 8, !tbaa !9
  %527 = getelementptr inbounds double, ptr %4, i64 %indvars.iv820
  store double %526, ptr %527, align 8, !tbaa !9
  %indvars.iv.next821 = add nsw i64 %indvars.iv820, 1
  %indvars.iv.next825 = add nsw i64 %indvars.iv824, %478
  %528 = icmp slt i64 %indvars.iv.next825, %479
  br i1 %528, label %.lr.ph576, label %.loopexit427.loopexit, !llvm.loop !74

.lr.ph597:                                        ; preds = %.loopexit427
  %529 = add nuw nsw i32 %56, 1
  %530 = add nsw i32 %49, -1
  %invariant.gep1470 = getelementptr i8, ptr %3, i64 8
  %invariant.gep1472 = getelementptr i8, ptr %4, i64 8
  %invariant.gep1474 = getelementptr i8, ptr %3, i64 16
  %invariant.gep1476 = getelementptr i8, ptr %4, i64 16
  %invariant.gep1478 = getelementptr i8, ptr %3, i64 24
  %invariant.gep1480 = getelementptr i8, ptr %4, i64 24
  br label %531

531:                                              ; preds = %.lr.ph597, %._crit_edge590
  %indvars.iv840 = phi i32 [ %53, %.lr.ph597 ], [ %indvars.iv.next841, %._crit_edge590 ]
  %indvars.iv833 = phi i32 [ 0, %.lr.ph597 ], [ %indvars.iv.next834, %._crit_edge590 ]
  %.26595 = phi i32 [ %.25.lcssa, %.lr.ph597 ], [ %.27.lcssa, %._crit_edge590 ]
  %.10374593 = phi i32 [ 0, %.lr.ph597 ], [ %566, %._crit_edge590 ]
  %532 = mul i32 %56, %.10374593
  %533 = add i32 %530, %532
  %534 = xor i32 %.10374593, -1
  %535 = add nsw i32 %53, %534
  %536 = zext i32 %535 to i64
  %537 = add nuw nsw i64 %536, 1
  %538 = sext i32 %indvars.iv833 to i64
  %539 = shl nsw i64 %538, 3
  %540 = xor i32 %.10374593, -1
  %541 = add nsw i32 %53, %540
  %542 = add i32 %541, %indvars.iv833
  %.not389585 = icmp sgt i32 %indvars.iv833, %542
  br i1 %.not389585, label %._crit_edge590, label %.lr.ph589.preheader

.lr.ph589.preheader:                              ; preds = %531
  %543 = sext i32 %indvars.iv833 to i64
  %544 = sext i32 %.26595 to i64
  %min.iters.check1206 = icmp ult i32 %535, 3
  br i1 %min.iters.check1206, label %.lr.ph589.preheader1303, label %vector.memcheck1202

vector.memcheck1202:                              ; preds = %.lr.ph589.preheader
  %545 = shl nsw i64 %544, 3
  %546 = add i64 %545, %10
  %547 = add i64 %539, %9
  %548 = sub i64 %546, %547
  %diff.check1203 = icmp ult i64 %548, 32
  br i1 %diff.check1203, label %.lr.ph589.preheader1303, label %vector.ph1207

vector.ph1207:                                    ; preds = %vector.memcheck1202
  %n.vec1209 = and i64 %537, 8589934588
  %ind.end1210 = add nsw i64 %n.vec1209, %543
  %ind.end1212 = add nsw i64 %n.vec1209, %544
  %invariant.gep1466 = getelementptr double, ptr %3, i64 %543
  %invariant.gep1468 = getelementptr double, ptr %4, i64 %544
  br label %vector.body1214

vector.body1214:                                  ; preds = %vector.body1214, %vector.ph1207
  %index1215 = phi i64 [ 0, %vector.ph1207 ], [ %index.next1220, %vector.body1214 ]
  %gep1467 = getelementptr double, ptr %invariant.gep1466, i64 %index1215
  %549 = getelementptr inbounds i8, ptr %gep1467, i64 16
  %wide.load1218 = load <2 x double>, ptr %gep1467, align 8, !tbaa !9
  %wide.load1219 = load <2 x double>, ptr %549, align 8, !tbaa !9
  %gep1469 = getelementptr double, ptr %invariant.gep1468, i64 %index1215
  %550 = getelementptr inbounds i8, ptr %gep1469, i64 16
  store <2 x double> %wide.load1218, ptr %gep1469, align 8, !tbaa !9
  store <2 x double> %wide.load1219, ptr %550, align 8, !tbaa !9
  %index.next1220 = add nuw i64 %index1215, 4
  %551 = icmp eq i64 %index.next1220, %n.vec1209
  br i1 %551, label %middle.block1204, label %vector.body1214, !llvm.loop !75

middle.block1204:                                 ; preds = %vector.body1214
  %cmp.n1221 = icmp eq i64 %537, %n.vec1209
  br i1 %cmp.n1221, label %._crit_edge590.loopexit, label %.lr.ph589.preheader1303

.lr.ph589.preheader1303:                          ; preds = %middle.block1204, %vector.memcheck1202, %.lr.ph589.preheader
  %indvars.iv835.ph = phi i64 [ %543, %vector.memcheck1202 ], [ %543, %.lr.ph589.preheader ], [ %ind.end1210, %middle.block1204 ]
  %indvars.iv831.ph = phi i64 [ %544, %vector.memcheck1202 ], [ %544, %.lr.ph589.preheader ], [ %ind.end1212, %middle.block1204 ]
  %552 = trunc i64 %indvars.iv835.ph to i32
  %553 = sub i32 %indvars.iv840, %552
  %554 = sub i32 %533, %552
  %xtraiter1353 = and i32 %553, 3
  %lcmp.mod1354.not = icmp eq i32 %xtraiter1353, 0
  br i1 %lcmp.mod1354.not, label %.lr.ph589.prol.loopexit, label %.lr.ph589.prol

.lr.ph589.prol:                                   ; preds = %.lr.ph589.preheader1303, %.lr.ph589.prol
  %indvars.iv835.prol = phi i64 [ %indvars.iv.next836.prol, %.lr.ph589.prol ], [ %indvars.iv835.ph, %.lr.ph589.preheader1303 ]
  %indvars.iv831.prol = phi i64 [ %indvars.iv.next832.prol, %.lr.ph589.prol ], [ %indvars.iv831.ph, %.lr.ph589.preheader1303 ]
  %prol.iter1355 = phi i32 [ %prol.iter1355.next, %.lr.ph589.prol ], [ 0, %.lr.ph589.preheader1303 ]
  %555 = getelementptr inbounds double, ptr %3, i64 %indvars.iv835.prol
  %556 = load double, ptr %555, align 8, !tbaa !9
  %557 = getelementptr inbounds double, ptr %4, i64 %indvars.iv831.prol
  store double %556, ptr %557, align 8, !tbaa !9
  %indvars.iv.next832.prol = add nsw i64 %indvars.iv831.prol, 1
  %indvars.iv.next836.prol = add nsw i64 %indvars.iv835.prol, 1
  %prol.iter1355.next = add i32 %prol.iter1355, 1
  %prol.iter1355.cmp.not = icmp eq i32 %prol.iter1355.next, %xtraiter1353
  br i1 %prol.iter1355.cmp.not, label %.lr.ph589.prol.loopexit, label %.lr.ph589.prol, !llvm.loop !76

.lr.ph589.prol.loopexit:                          ; preds = %.lr.ph589.prol, %.lr.ph589.preheader1303
  %indvars.iv.next832.lcssa1305.unr = phi i64 [ poison, %.lr.ph589.preheader1303 ], [ %indvars.iv.next832.prol, %.lr.ph589.prol ]
  %indvars.iv835.unr = phi i64 [ %indvars.iv835.ph, %.lr.ph589.preheader1303 ], [ %indvars.iv.next836.prol, %.lr.ph589.prol ]
  %indvars.iv831.unr = phi i64 [ %indvars.iv831.ph, %.lr.ph589.preheader1303 ], [ %indvars.iv.next832.prol, %.lr.ph589.prol ]
  %558 = icmp ult i32 %554, 3
  br i1 %558, label %._crit_edge590.loopexit, label %.lr.ph589

.lr.ph589:                                        ; preds = %.lr.ph589.prol.loopexit, %.lr.ph589
  %indvars.iv835 = phi i64 [ %indvars.iv.next836.3, %.lr.ph589 ], [ %indvars.iv835.unr, %.lr.ph589.prol.loopexit ]
  %indvars.iv831 = phi i64 [ %indvars.iv.next832.3, %.lr.ph589 ], [ %indvars.iv831.unr, %.lr.ph589.prol.loopexit ]
  %559 = getelementptr inbounds double, ptr %3, i64 %indvars.iv835
  %560 = load double, ptr %559, align 8, !tbaa !9
  %561 = getelementptr inbounds double, ptr %4, i64 %indvars.iv831
  store double %560, ptr %561, align 8, !tbaa !9
  %gep1471 = getelementptr double, ptr %invariant.gep1470, i64 %indvars.iv835
  %562 = load double, ptr %gep1471, align 8, !tbaa !9
  %gep1473 = getelementptr double, ptr %invariant.gep1472, i64 %indvars.iv831
  store double %562, ptr %gep1473, align 8, !tbaa !9
  %gep1475 = getelementptr double, ptr %invariant.gep1474, i64 %indvars.iv835
  %563 = load double, ptr %gep1475, align 8, !tbaa !9
  %gep1477 = getelementptr double, ptr %invariant.gep1476, i64 %indvars.iv831
  store double %563, ptr %gep1477, align 8, !tbaa !9
  %gep1479 = getelementptr double, ptr %invariant.gep1478, i64 %indvars.iv835
  %564 = load double, ptr %gep1479, align 8, !tbaa !9
  %gep1481 = getelementptr double, ptr %invariant.gep1480, i64 %indvars.iv831
  store double %564, ptr %gep1481, align 8, !tbaa !9
  %indvars.iv.next832.3 = add nsw i64 %indvars.iv831, 4
  %indvars.iv.next836.3 = add nsw i64 %indvars.iv835, 4
  %lftr.wideiv842.3 = trunc i64 %indvars.iv.next836.3 to i32
  %exitcond843.not.3 = icmp eq i32 %indvars.iv840, %lftr.wideiv842.3
  br i1 %exitcond843.not.3, label %._crit_edge590.loopexit, label %.lr.ph589, !llvm.loop !77

._crit_edge590.loopexit:                          ; preds = %.lr.ph589.prol.loopexit, %.lr.ph589, %middle.block1204
  %indvars.iv.next832.lcssa = phi i64 [ %ind.end1212, %middle.block1204 ], [ %indvars.iv.next832.lcssa1305.unr, %.lr.ph589.prol.loopexit ], [ %indvars.iv.next832.3, %.lr.ph589 ]
  %565 = trunc nsw i64 %indvars.iv.next832.lcssa to i32
  br label %._crit_edge590

._crit_edge590:                                   ; preds = %._crit_edge590.loopexit, %531
  %.27.lcssa = phi i32 [ %.26595, %531 ], [ %565, %._crit_edge590.loopexit ]
  %indvars.iv.next834 = add i32 %indvars.iv833, %529
  %566 = add nuw nsw i32 %.10374593, 1
  %indvars.iv.next841 = add i32 %indvars.iv840, %56
  %exitcond844.not = icmp eq i32 %566, %53
  br i1 %exitcond844.not, label %.loopexit, label %531, !llvm.loop !78

.lr.ph605.preheader:                              ; preds = %475
  %567 = add nuw nsw i32 %53, 1
  %568 = mul i32 %567, %56
  %569 = sext i32 %568 to i64
  %570 = zext nneg i32 %56 to i64
  %wide.trip.count860 = zext nneg i32 %53 to i64
  %571 = shl nsw i64 %569, 3
  %572 = add i64 %571, %7
  %573 = sub i64 %8, %572
  %574 = mul nsw i64 %570, -8
  %575 = add nuw nsw i64 %570, 1
  br label %.lr.ph605

.lr.ph605:                                        ; preds = %.lr.ph605.preheader, %.loopexit1277
  %indvars.iv855 = phi i64 [ 0, %.lr.ph605.preheader ], [ %indvars.iv.next856, %.loopexit1277 ]
  %indvars.iv848 = phi i64 [ %569, %.lr.ph605.preheader ], [ %indvars.iv.next849, %.loopexit1277 ]
  %.28603 = phi i64 [ 0, %.lr.ph605.preheader ], [ %indvars.iv.next847.lcssa, %.loopexit1277 ]
  %576 = mul i64 %575, %indvars.iv855
  %577 = add i64 %576, %569
  %smax1224 = tail call i64 @llvm.smax.i64(i64 %indvars.iv848, i64 %577)
  %578 = mul i64 %indvars.iv855, %570
  %579 = add i64 %578, %569
  %reass.sub1289 = sub i64 %smax1224, %579
  %580 = add i64 %reass.sub1289, 1
  %581 = add nsw i64 %indvars.iv848, %indvars.iv855
  %sext876 = shl i64 %.28603, 32
  %582 = ashr exact i64 %sext876, 32
  %min.iters.check1227 = icmp ult i64 %580, 4
  br i1 %min.iters.check1227, label %scalar.ph1226.preheader, label %vector.memcheck1222

vector.memcheck1222:                              ; preds = %.lr.ph605
  %583 = mul i64 %574, %indvars.iv855
  %584 = add i64 %573, %583
  %585 = ashr exact i64 %sext876, 29
  %586 = add i64 %584, %585
  %diff.check1223 = icmp ult i64 %586, 32
  br i1 %diff.check1223, label %scalar.ph1226.preheader, label %vector.ph1228

vector.ph1228:                                    ; preds = %vector.memcheck1222
  %n.vec1230 = and i64 %580, -4
  %ind.end1231 = add i64 %indvars.iv848, %n.vec1230
  %ind.end1233 = add i64 %582, %n.vec1230
  %587 = getelementptr double, ptr %3, i64 %indvars.iv848
  %588 = getelementptr double, ptr %4, i64 %582
  br label %vector.body1235

vector.body1235:                                  ; preds = %vector.body1235, %vector.ph1228
  %index1236 = phi i64 [ 0, %vector.ph1228 ], [ %index.next1241, %vector.body1235 ]
  %589 = getelementptr double, ptr %587, i64 %index1236
  %590 = getelementptr inbounds i8, ptr %589, i64 16
  %wide.load1239 = load <2 x double>, ptr %589, align 8, !tbaa !9
  %wide.load1240 = load <2 x double>, ptr %590, align 8, !tbaa !9
  %591 = getelementptr double, ptr %588, i64 %index1236
  %592 = getelementptr inbounds i8, ptr %591, i64 16
  store <2 x double> %wide.load1239, ptr %591, align 8, !tbaa !9
  store <2 x double> %wide.load1240, ptr %592, align 8, !tbaa !9
  %index.next1241 = add nuw i64 %index1236, 4
  %593 = icmp eq i64 %index.next1241, %n.vec1230
  br i1 %593, label %middle.block1225, label %vector.body1235, !llvm.loop !79

middle.block1225:                                 ; preds = %vector.body1235
  %cmp.n1242 = icmp eq i64 %580, %n.vec1230
  br i1 %cmp.n1242, label %.loopexit1277, label %scalar.ph1226.preheader

scalar.ph1226.preheader:                          ; preds = %middle.block1225, %vector.memcheck1222, %.lr.ph605
  %indvars.iv850.ph = phi i64 [ %indvars.iv848, %vector.memcheck1222 ], [ %indvars.iv848, %.lr.ph605 ], [ %ind.end1231, %middle.block1225 ]
  %indvars.iv846.ph = phi i64 [ %582, %vector.memcheck1222 ], [ %582, %.lr.ph605 ], [ %ind.end1233, %middle.block1225 ]
  br label %scalar.ph1226

scalar.ph1226:                                    ; preds = %scalar.ph1226.preheader, %scalar.ph1226
  %indvars.iv850 = phi i64 [ %indvars.iv.next851, %scalar.ph1226 ], [ %indvars.iv850.ph, %scalar.ph1226.preheader ]
  %indvars.iv846 = phi i64 [ %indvars.iv.next847, %scalar.ph1226 ], [ %indvars.iv846.ph, %scalar.ph1226.preheader ]
  %594 = getelementptr inbounds double, ptr %3, i64 %indvars.iv850
  %595 = load double, ptr %594, align 8, !tbaa !9
  %596 = getelementptr inbounds double, ptr %4, i64 %indvars.iv846
  store double %595, ptr %596, align 8, !tbaa !9
  %indvars.iv.next847 = add nsw i64 %indvars.iv846, 1
  %indvars.iv.next851 = add nsw i64 %indvars.iv850, 1
  %.not386.not = icmp slt i64 %indvars.iv850, %581
  br i1 %.not386.not, label %scalar.ph1226, label %.loopexit1277, !llvm.loop !80

.loopexit1277:                                    ; preds = %scalar.ph1226, %middle.block1225
  %indvars.iv.next847.lcssa = phi i64 [ %ind.end1233, %middle.block1225 ], [ %indvars.iv.next847, %scalar.ph1226 ]
  %indvars.iv.next849 = add nsw i64 %indvars.iv848, %570
  %indvars.iv.next856 = add nuw nsw i64 %indvars.iv855, 1
  %exitcond861.not = icmp eq i64 %indvars.iv.next856, %wide.trip.count860
  br i1 %exitcond861.not, label %.lr.ph619, label %.lr.ph605, !llvm.loop !81

.lr.ph619:                                        ; preds = %.loopexit1277
  %597 = zext nneg i32 %56 to i64
  %wide.trip.count872 = zext nneg i32 %53 to i64
  %scevgep1245 = getelementptr i8, ptr %4, i64 8
  %umax1248 = tail call i64 @llvm.umax.i64(i64 %570, i64 1)
  %598 = shl nuw nsw i64 %570, 3
  %umax1260 = tail call i64 @llvm.umax.i64(i64 %570, i64 1)
  %invariant.gep1482 = getelementptr double, ptr %3, i64 %570
  %.idx1291 = shl nuw nsw i64 %570, 4
  %invariant.gep1484 = getelementptr i8, ptr %3, i64 %.idx1291
  %.idx1292 = mul nuw nsw i64 %570, 24
  %invariant.gep1486 = getelementptr i8, ptr %3, i64 %.idx1292
  br label %.lr.ph612.preheader

.lr.ph612.preheader:                              ; preds = %.lr.ph619, %._crit_edge613
  %indvars.iv864 = phi i64 [ 0, %.lr.ph619 ], [ %indvars.iv.next865, %._crit_edge613 ]
  %.30617 = phi i64 [ %indvars.iv.next847.lcssa, %.lr.ph619 ], [ %indvars.iv.next863.lcssa, %._crit_edge613 ]
  %indvars871 = trunc i64 %indvars.iv864 to i32
  %599 = add nsw i32 %53, %indvars871
  %600 = mul nsw i32 %599, %56
  %601 = sext i32 %600 to i64
  %602 = add nsw i64 %indvars.iv864, %601
  %603 = add nuw i64 %indvars.iv864, %570
  %604 = add nuw i64 %indvars.iv864, 1
  %605 = trunc i64 %indvars.iv864 to i32
  %606 = add i32 %53, %605
  %607 = mul i32 %56, %606
  %608 = sext i32 %607 to i64
  %609 = add i64 %604, %608
  %610 = icmp slt i64 %603, %609
  %umin1259 = zext i1 %610 to i64
  %611 = add nuw i64 %indvars.iv864, %570
  %smax1258 = tail call i64 @llvm.smax.i64(i64 %603, i64 %609)
  %612 = add i64 %611, %umin1259
  %613 = sub i64 %smax1258, %612
  %sext1290 = shl i64 %.30617, 32
  %614 = ashr exact i64 %sext1290, 32
  %615 = select i1 %610, i64 2, i64 1
  %616 = udiv i64 %613, %umax1260
  %617 = add i64 %615, %616
  %min.iters.check1263 = icmp ult i64 %617, 14
  br i1 %min.iters.check1263, label %.lr.ph612.preheader1300, label %vector.memcheck1243

vector.memcheck1243:                              ; preds = %.lr.ph612.preheader
  %618 = shl i64 %indvars.iv864, 3
  %scevgep1250 = getelementptr i8, ptr %3, i64 %618
  %619 = add nuw i64 %indvars.iv864, %570
  %620 = add nuw i64 %indvars.iv864, 1
  %621 = trunc i64 %indvars.iv864 to i32
  %622 = add i32 %53, %621
  %623 = mul i32 %56, %622
  %624 = sext i32 %623 to i64
  %625 = add i64 %620, %624
  %smax1246 = tail call i64 @llvm.smax.i64(i64 %619, i64 %625)
  %626 = add nuw i64 %indvars.iv864, %570
  %627 = icmp slt i64 %619, %625
  %umin1247 = zext i1 %627 to i64
  %628 = add i64 %626, %umin1247
  %629 = sub i64 %smax1246, %628
  %630 = ashr exact i64 %sext1290, 29
  %scevgep1244 = getelementptr i8, ptr %4, i64 %630
  %631 = udiv i64 %629, %umax1248
  %632 = add i64 %631, %umin1247
  %633 = shl i64 %632, 3
  %634 = getelementptr i8, ptr %scevgep1245, i64 %633
  %scevgep1249 = getelementptr i8, ptr %634, i64 %630
  %635 = mul i64 %598, %632
  %scevgep1251 = getelementptr i8, ptr %scevgep1250, i64 %635
  %636 = icmp ult ptr %scevgep1250, %scevgep1251
  %umin1252 = select i1 %636, ptr %scevgep1250, ptr %scevgep1251
  %637 = icmp ugt ptr %scevgep1250, %scevgep1251
  %umax1253 = select i1 %637, ptr %scevgep1250, ptr %scevgep1251
  %scevgep1254 = getelementptr i8, ptr %umax1253, i64 8
  %bound01255 = icmp ult ptr %scevgep1244, %scevgep1254
  %bound11256 = icmp ult ptr %umin1252, %scevgep1249
  %found.conflict1257 = and i1 %bound01255, %bound11256
  br i1 %found.conflict1257, label %.lr.ph612.preheader1300, label %vector.ph1264

vector.ph1264:                                    ; preds = %vector.memcheck1243
  %n.vec1266 = and i64 %617, -4
  %638 = mul i64 %n.vec1266, %570
  %ind.end1267 = add i64 %indvars.iv864, %638
  %ind.end1269 = add i64 %614, %n.vec1266
  %639 = getelementptr double, ptr %4, i64 %614
  br label %vector.body1271

vector.body1271:                                  ; preds = %vector.body1271, %vector.ph1264
  %index1272 = phi i64 [ 0, %vector.ph1264 ], [ %index.next1275, %vector.body1271 ]
  %640 = mul i64 %index1272, %570
  %offset.idx1273 = add i64 %indvars.iv864, %640
  %641 = getelementptr inbounds double, ptr %3, i64 %offset.idx1273
  %gep1483 = getelementptr double, ptr %invariant.gep1482, i64 %offset.idx1273
  %gep1485 = getelementptr double, ptr %invariant.gep1484, i64 %offset.idx1273
  %gep1487 = getelementptr double, ptr %invariant.gep1486, i64 %offset.idx1273
  %642 = load double, ptr %641, align 8, !tbaa !9, !alias.scope !82
  %643 = load double, ptr %gep1483, align 8, !tbaa !9, !alias.scope !82
  %644 = insertelement <2 x double> poison, double %642, i64 0
  %645 = insertelement <2 x double> %644, double %643, i64 1
  %646 = load double, ptr %gep1485, align 8, !tbaa !9, !alias.scope !82
  %647 = load double, ptr %gep1487, align 8, !tbaa !9, !alias.scope !82
  %648 = insertelement <2 x double> poison, double %646, i64 0
  %649 = insertelement <2 x double> %648, double %647, i64 1
  %650 = getelementptr double, ptr %639, i64 %index1272
  %651 = getelementptr inbounds i8, ptr %650, i64 16
  store <2 x double> %645, ptr %650, align 8, !tbaa !9, !alias.scope !85, !noalias !82
  store <2 x double> %649, ptr %651, align 8, !tbaa !9, !alias.scope !85, !noalias !82
  %index.next1275 = add nuw i64 %index1272, 4
  %652 = icmp eq i64 %index.next1275, %n.vec1266
  br i1 %652, label %middle.block1261, label %vector.body1271, !llvm.loop !87

middle.block1261:                                 ; preds = %vector.body1271
  %cmp.n1276 = icmp eq i64 %617, %n.vec1266
  br i1 %cmp.n1276, label %._crit_edge613, label %.lr.ph612.preheader1300

.lr.ph612.preheader1300:                          ; preds = %middle.block1261, %vector.memcheck1243, %.lr.ph612.preheader
  %indvars.iv866.ph = phi i64 [ %indvars.iv864, %vector.memcheck1243 ], [ %indvars.iv864, %.lr.ph612.preheader ], [ %ind.end1267, %middle.block1261 ]
  %indvars.iv862.ph = phi i64 [ %614, %vector.memcheck1243 ], [ %614, %.lr.ph612.preheader ], [ %ind.end1269, %middle.block1261 ]
  br label %.lr.ph612

.lr.ph612:                                        ; preds = %.lr.ph612.preheader1300, %.lr.ph612
  %indvars.iv866 = phi i64 [ %indvars.iv.next867, %.lr.ph612 ], [ %indvars.iv866.ph, %.lr.ph612.preheader1300 ]
  %indvars.iv862 = phi i64 [ %indvars.iv.next863, %.lr.ph612 ], [ %indvars.iv862.ph, %.lr.ph612.preheader1300 ]
  %653 = getelementptr inbounds double, ptr %3, i64 %indvars.iv866
  %654 = load double, ptr %653, align 8, !tbaa !9
  %655 = getelementptr inbounds double, ptr %4, i64 %indvars.iv862
  store double %654, ptr %655, align 8, !tbaa !9
  %indvars.iv.next863 = add nsw i64 %indvars.iv862, 1
  %indvars.iv.next867 = add nuw nsw i64 %indvars.iv866, %597
  %.not877 = icmp sgt i64 %indvars.iv.next867, %602
  br i1 %.not877, label %._crit_edge613, label %.lr.ph612, !llvm.loop !88

._crit_edge613:                                   ; preds = %.lr.ph612, %middle.block1261
  %indvars.iv.next863.lcssa = phi i64 [ %ind.end1269, %middle.block1261 ], [ %indvars.iv.next863, %.lr.ph612 ]
  %indvars.iv.next865 = add nuw nsw i64 %indvars.iv864, 1
  %exitcond873.not = icmp eq i64 %indvars.iv.next865, %wide.trip.count872
  br i1 %exitcond873.not, label %.loopexit, label %.lr.ph612.preheader, !llvm.loop !89

.loopexit:                                        ; preds = %.loopexit434, %._crit_edge472, %._crit_edge495.us, %._crit_edge515.loopexit, %._crit_edge542, %._crit_edge565, %._crit_edge590, %._crit_edge613, %181, %57, %._crit_edge444, %._crit_edge465, %._crit_edge508, %._crit_edge535, %._crit_edge558, %46, %47, %.thread
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #4
  ret void
}

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

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

declare i32 @xerbla_(ptr noundef, ptr noundef, i32 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 = !{!"int", !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, !16}
!16 = !{!"llvm.loop.unroll.disable"}
!17 = distinct !{!17, !12, !13}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12, !13, !14}
!21 = distinct !{!21, !16}
!22 = distinct !{!22, !12, !13}
!23 = distinct !{!23, !12, !13, !14}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !12, !13}
!26 = distinct !{!26, !12}
!27 = distinct !{!27, !12, !13, !14}
!28 = distinct !{!28, !12, !13}
!29 = distinct !{!29, !12}
!30 = !{!31}
!31 = distinct !{!31, !32}
!32 = distinct !{!32, !"LVerDomain"}
!33 = !{!34}
!34 = distinct !{!34, !32}
!35 = distinct !{!35, !12, !13, !14}
!36 = distinct !{!36, !12, !13}
!37 = distinct !{!37, !12}
!38 = distinct !{!38, !12, !13, !14}
!39 = distinct !{!39, !16}
!40 = distinct !{!40, !12, !13}
!41 = distinct !{!41, !12}
!42 = distinct !{!42, !12, !13, !14}
!43 = distinct !{!43, !12, !13}
!44 = distinct !{!44, !12}
!45 = !{!46}
!46 = distinct !{!46, !47}
!47 = distinct !{!47, !"LVerDomain"}
!48 = !{!49}
!49 = distinct !{!49, !47}
!50 = distinct !{!50, !12, !13, !14}
!51 = distinct !{!51, !12, !13}
!52 = distinct !{!52, !12}
!53 = distinct !{!53, !12, !13, !14}
!54 = distinct !{!54, !16}
!55 = distinct !{!55, !12, !13}
!56 = distinct !{!56, !12}
!57 = distinct !{!57, !12, !13, !14}
!58 = distinct !{!58, !12, !13}
!59 = distinct !{!59, !12}
!60 = distinct !{!60, !12, !13, !14}
!61 = distinct !{!61, !16}
!62 = distinct !{!62, !12, !13}
!63 = distinct !{!63, !12}
!64 = distinct !{!64, !12, !13, !14}
!65 = distinct !{!65, !12, !13}
!66 = distinct !{!66, !12}
!67 = distinct !{!67, !12}
!68 = !{!69}
!69 = distinct !{!69, !70}
!70 = distinct !{!70, !"LVerDomain"}
!71 = !{!72}
!72 = distinct !{!72, !70}
!73 = distinct !{!73, !12, !13, !14}
!74 = distinct !{!74, !12, !13}
!75 = distinct !{!75, !12, !13, !14}
!76 = distinct !{!76, !16}
!77 = distinct !{!77, !12, !13}
!78 = distinct !{!78, !12}
!79 = distinct !{!79, !12, !13, !14}
!80 = distinct !{!80, !12, !13}
!81 = distinct !{!81, !12}
!82 = !{!83}
!83 = distinct !{!83, !84}
!84 = distinct !{!84, !"LVerDomain"}
!85 = !{!86}
!86 = distinct !{!86, !84}
!87 = distinct !{!87, !12, !13, !14}
!88 = distinct !{!88, !12, !13}
!89 = distinct !{!89, !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