; LLVM IR from OpenMathLib/OpenBLAS :: lapack-netlib/SRC (dtfttr)

; 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 @dtfttr_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6) #0 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %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
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store ptr %3, ptr %11, align 8, !tbaa !5
  store ptr %4, ptr %12, align 8, !tbaa !5
  store ptr %5, ptr %13, align 8, !tbaa !5
  store ptr %6, ptr %14, align 8, !tbaa !5
  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
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  %33 = load ptr, ptr %13, align 8, !tbaa !5
  %34 = load i32, ptr %33, align 4, !tbaa !9
  %35 = sub nsw i32 %34, 1
  %36 = sub nsw i32 %35, 0
  %37 = add nsw i32 %36, 1
  store i32 %37, ptr %15, align 4, !tbaa !9
  %38 = load i32, ptr %15, align 4, !tbaa !9
  %39 = mul nsw i32 %38, 0
  %40 = add nsw i32 0, %39
  store i32 %40, ptr %16, align 4, !tbaa !9
  %41 = load i32, ptr %16, align 4, !tbaa !9
  %42 = load ptr, ptr %12, align 8, !tbaa !5
  %43 = sext i32 %41 to i64
  %44 = sub i64 0, %43
  %45 = getelementptr inbounds double, ptr %42, i64 %44
  store ptr %45, ptr %12, align 8, !tbaa !5
  %46 = load ptr, ptr %14, align 8, !tbaa !5
  store i32 0, ptr %46, align 4, !tbaa !9
  %47 = load ptr, ptr %8, align 8, !tbaa !5
  %48 = call i32 @lsame_(ptr noundef %47, ptr noundef @.str)
  store i32 %48, ptr %24, align 4, !tbaa !9
  %49 = load ptr, ptr %9, align 8, !tbaa !5
  %50 = call i32 @lsame_(ptr noundef %49, ptr noundef @.str.1)
  store i32 %50, ptr %25, align 4, !tbaa !9
  %51 = load i32, ptr %24, align 4, !tbaa !9
  %52 = icmp ne i32 %51, 0
  br i1 %52, label %59, label %53

53:                                               ; preds = %7
  %54 = load ptr, ptr %8, align 8, !tbaa !5
  %55 = call i32 @lsame_(ptr noundef %54, ptr noundef @.str.2)
  %56 = icmp ne i32 %55, 0
  br i1 %56, label %59, label %57

57:                                               ; preds = %53
  %58 = load ptr, ptr %14, align 8, !tbaa !5
  store i32 -1, ptr %58, align 4, !tbaa !9
  br label %92

59:                                               ; preds = %53, %7
  %60 = load i32, ptr %25, align 4, !tbaa !9
  %61 = icmp ne i32 %60, 0
  br i1 %61, label %68, label %62

62:                                               ; preds = %59
  %63 = load ptr, ptr %9, align 8, !tbaa !5
  %64 = call i32 @lsame_(ptr noundef %63, ptr noundef @.str.3)
  %65 = icmp ne i32 %64, 0
  br i1 %65, label %68, label %66

66:                                               ; preds = %62
  %67 = load ptr, ptr %14, align 8, !tbaa !5
  store i32 -2, ptr %67, align 4, !tbaa !9
  br label %91

68:                                               ; preds = %62, %59
  %69 = load ptr, ptr %10, align 8, !tbaa !5
  %70 = load i32, ptr %69, align 4, !tbaa !9
  %71 = icmp slt i32 %70, 0
  br i1 %71, label %72, label %74

72:                                               ; preds = %68
  %73 = load ptr, ptr %14, align 8, !tbaa !5
  store i32 -3, ptr %73, align 4, !tbaa !9
  br label %90

74:                                               ; preds = %68
  %75 = load ptr, ptr %13, align 8, !tbaa !5
  %76 = load i32, ptr %75, align 4, !tbaa !9
  %77 = load ptr, ptr %10, align 8, !tbaa !5
  %78 = load i32, ptr %77, align 4, !tbaa !9
  %79 = icmp sge i32 1, %78
  br i1 %79, label %80, label %81

80:                                               ; preds = %74
  br label %84

81:                                               ; preds = %74
  %82 = load ptr, ptr %10, align 8, !tbaa !5
  %83 = load i32, ptr %82, align 4, !tbaa !9
  br label %84

84:                                               ; preds = %81, %80
  %85 = phi i32 [ 1, %80 ], [ %83, %81 ]
  %86 = icmp slt i32 %76, %85
  br i1 %86, label %87, label %89

87:                                               ; preds = %84
  %88 = load ptr, ptr %14, align 8, !tbaa !5
  store i32 -6, ptr %88, align 4, !tbaa !9
  br label %89

89:                                               ; preds = %87, %84
  br label %90

90:                                               ; preds = %89, %72
  br label %91

91:                                               ; preds = %90, %66
  br label %92

92:                                               ; preds = %91, %57
  %93 = load ptr, ptr %14, align 8, !tbaa !5
  %94 = load i32, ptr %93, align 4, !tbaa !9
  %95 = icmp ne i32 %94, 0
  br i1 %95, label %96, label %101

96:                                               ; preds = %92
  %97 = load ptr, ptr %14, align 8, !tbaa !5
  %98 = load i32, ptr %97, align 4, !tbaa !9
  %99 = sub nsw i32 0, %98
  store i32 %99, ptr %17, align 4, !tbaa !9
  %100 = call i32 @xerbla_(ptr noundef @.str.4, ptr noundef %17, i32 noundef 6)
  store i32 1, ptr %32, align 4
  br label %982

101:                                              ; preds = %92
  %102 = load ptr, ptr %10, align 8, !tbaa !5
  %103 = load i32, ptr %102, align 4, !tbaa !9
  %104 = icmp sle i32 %103, 1
  br i1 %104, label %105, label %116

105:                                              ; preds = %101
  %106 = load ptr, ptr %10, align 8, !tbaa !5
  %107 = load i32, ptr %106, align 4, !tbaa !9
  %108 = icmp eq i32 %107, 1
  br i1 %108, label %109, label %115

109:                                              ; preds = %105
  %110 = load ptr, ptr %11, align 8, !tbaa !5
  %111 = getelementptr inbounds double, ptr %110, i64 0
  %112 = load double, ptr %111, align 8, !tbaa !11
  %113 = load ptr, ptr %12, align 8, !tbaa !5
  %114 = getelementptr inbounds double, ptr %113, i64 0
  store double %112, ptr %114, align 8, !tbaa !11
  br label %115

115:                                              ; preds = %109, %105
  store i32 1, ptr %32, align 4
  br label %982

116:                                              ; preds = %101
  %117 = load ptr, ptr %10, align 8, !tbaa !5
  %118 = load i32, ptr %117, align 4, !tbaa !9
  %119 = load ptr, ptr %10, align 8, !tbaa !5
  %120 = load i32, ptr %119, align 4, !tbaa !9
  %121 = add nsw i32 %120, 1
  %122 = mul nsw i32 %118, %121
  %123 = sdiv i32 %122, 2
  store i32 %123, ptr %29, align 4, !tbaa !9
  %124 = load i32, ptr %25, align 4, !tbaa !9
  %125 = icmp ne i32 %124, 0
  br i1 %125, label %126, label %134

126:                                              ; preds = %116
  %127 = load ptr, ptr %10, align 8, !tbaa !5
  %128 = load i32, ptr %127, align 4, !tbaa !9
  %129 = sdiv i32 %128, 2
  store i32 %129, ptr %27, align 4, !tbaa !9
  %130 = load ptr, ptr %10, align 8, !tbaa !5
  %131 = load i32, ptr %130, align 4, !tbaa !9
  %132 = load i32, ptr %27, align 4, !tbaa !9
  %133 = sub nsw i32 %131, %132
  store i32 %133, ptr %26, align 4, !tbaa !9
  br label %142

134:                                              ; preds = %116
  %135 = load ptr, ptr %10, align 8, !tbaa !5
  %136 = load i32, ptr %135, align 4, !tbaa !9
  %137 = sdiv i32 %136, 2
  store i32 %137, ptr %26, align 4, !tbaa !9
  %138 = load ptr, ptr %10, align 8, !tbaa !5
  %139 = load i32, ptr %138, align 4, !tbaa !9
  %140 = load i32, ptr %26, align 4, !tbaa !9
  %141 = sub nsw i32 %139, %140
  store i32 %141, ptr %27, align 4, !tbaa !9
  br label %142

142:                                              ; preds = %134, %126
  %143 = load ptr, ptr %10, align 8, !tbaa !5
  %144 = load i32, ptr %143, align 4, !tbaa !9
  %145 = srem i32 %144, 2
  %146 = icmp eq i32 %145, 0
  br i1 %146, label %147, label %161

147:                                              ; preds = %142
  %148 = load ptr, ptr %10, align 8, !tbaa !5
  %149 = load i32, ptr %148, align 4, !tbaa !9
  %150 = sdiv i32 %149, 2
  store i32 %150, ptr %22, align 4, !tbaa !9
  store i32 0, ptr %30, align 4, !tbaa !9
  %151 = load i32, ptr %25, align 4, !tbaa !9
  %152 = icmp ne i32 %151, 0
  br i1 %152, label %160, label %153

153:                                              ; preds = %147
  %154 = load ptr, ptr %10, align 8, !tbaa !5
  %155 = load i32, ptr %154, align 4, !tbaa !9
  %156 = load ptr, ptr %10, align 8, !tbaa !5
  %157 = load i32, ptr %156, align 4, !tbaa !9
  %158 = add nsw i32 %155, %157
  %159 = add nsw i32 %158, 2
  store i32 %159, ptr %19, align 4, !tbaa !9
  br label %160

160:                                              ; preds = %153, %147
  br label %171

161:                                              ; preds = %142
  store i32 1, ptr %30, align 4, !tbaa !9
  %162 = load i32, ptr %25, align 4, !tbaa !9
  %163 = icmp ne i32 %162, 0
  br i1 %163, label %170, label %164

164:                                              ; preds = %161
  %165 = load ptr, ptr %10, align 8, !tbaa !5
  %166 = load i32, ptr %165, align 4, !tbaa !9
  %167 = load ptr, ptr %10, align 8, !tbaa !5
  %168 = load i32, ptr %167, align 4, !tbaa !9
  %169 = add nsw i32 %166, %168
  store i32 %169, ptr %31, align 4, !tbaa !9
  br label %170

170:                                              ; preds = %164, %161
  br label %171

171:                                              ; preds = %170, %160
  %172 = load i32, ptr %30, align 4, !tbaa !9
  %173 = icmp ne i32 %172, 0
  br i1 %173, label %174, label %547

174:                                              ; preds = %171
  %175 = load i32, ptr %24, align 4, !tbaa !9
  %176 = icmp ne i32 %175, 0
  br i1 %176, label %177, label %327

177:                                              ; preds = %174
  %178 = load i32, ptr %25, align 4, !tbaa !9
  %179 = icmp ne i32 %178, 0
  br i1 %179, label %180, label %249

180:                                              ; preds = %177
  store i32 0, ptr %28, align 4, !tbaa !9
  %181 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %181, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %182

182:                                              ; preds = %245, %180
  %183 = load i32, ptr %21, align 4, !tbaa !9
  %184 = load i32, ptr %17, align 4, !tbaa !9
  %185 = icmp sle i32 %183, %184
  br i1 %185, label %186, label %248

186:                                              ; preds = %182
  %187 = load i32, ptr %27, align 4, !tbaa !9
  %188 = load i32, ptr %21, align 4, !tbaa !9
  %189 = add nsw i32 %187, %188
  store i32 %189, ptr %18, align 4, !tbaa !9
  %190 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %190, ptr %20, align 4, !tbaa !9
  br label %191

191:                                              ; preds = %213, %186
  %192 = load i32, ptr %20, align 4, !tbaa !9
  %193 = load i32, ptr %18, align 4, !tbaa !9
  %194 = icmp sle i32 %192, %193
  br i1 %194, label %195, label %216

195:                                              ; preds = %191
  %196 = load ptr, ptr %11, align 8, !tbaa !5
  %197 = load i32, ptr %28, align 4, !tbaa !9
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds double, ptr %196, i64 %198
  %200 = load double, ptr %199, align 8, !tbaa !11
  %201 = load ptr, ptr %12, align 8, !tbaa !5
  %202 = load i32, ptr %27, align 4, !tbaa !9
  %203 = load i32, ptr %21, align 4, !tbaa !9
  %204 = add nsw i32 %202, %203
  %205 = load i32, ptr %20, align 4, !tbaa !9
  %206 = load i32, ptr %15, align 4, !tbaa !9
  %207 = mul nsw i32 %205, %206
  %208 = add nsw i32 %204, %207
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds double, ptr %201, i64 %209
  store double %200, ptr %210, align 8, !tbaa !11
  %211 = load i32, ptr %28, align 4, !tbaa !9
  %212 = add nsw i32 %211, 1
  store i32 %212, ptr %28, align 4, !tbaa !9
  br label %213

213:                                              ; preds = %195
  %214 = load i32, ptr %20, align 4, !tbaa !9
  %215 = add nsw i32 %214, 1
  store i32 %215, ptr %20, align 4, !tbaa !9
  br label %191, !llvm.loop !13

216:                                              ; preds = %191
  %217 = load ptr, ptr %10, align 8, !tbaa !5
  %218 = load i32, ptr %217, align 4, !tbaa !9
  %219 = sub nsw i32 %218, 1
  store i32 %219, ptr %18, align 4, !tbaa !9
  %220 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %220, ptr %20, align 4, !tbaa !9
  br label %221

221:                                              ; preds = %241, %216
  %222 = load i32, ptr %20, align 4, !tbaa !9
  %223 = load i32, ptr %18, align 4, !tbaa !9
  %224 = icmp sle i32 %222, %223
  br i1 %224, label %225, label %244

225:                                              ; preds = %221
  %226 = load ptr, ptr %11, align 8, !tbaa !5
  %227 = load i32, ptr %28, align 4, !tbaa !9
  %228 = sext i32 %227 to i64
  %229 = getelementptr inbounds double, ptr %226, i64 %228
  %230 = load double, ptr %229, align 8, !tbaa !11
  %231 = load ptr, ptr %12, align 8, !tbaa !5
  %232 = load i32, ptr %20, align 4, !tbaa !9
  %233 = load i32, ptr %21, align 4, !tbaa !9
  %234 = load i32, ptr %15, align 4, !tbaa !9
  %235 = mul nsw i32 %233, %234
  %236 = add nsw i32 %232, %235
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds double, ptr %231, i64 %237
  store double %230, ptr %238, align 8, !tbaa !11
  %239 = load i32, ptr %28, align 4, !tbaa !9
  %240 = add nsw i32 %239, 1
  store i32 %240, ptr %28, align 4, !tbaa !9
  br label %241

241:                                              ; preds = %225
  %242 = load i32, ptr %20, align 4, !tbaa !9
  %243 = add nsw i32 %242, 1
  store i32 %243, ptr %20, align 4, !tbaa !9
  br label %221, !llvm.loop !15

244:                                              ; preds = %221
  br label %245

245:                                              ; preds = %244
  %246 = load i32, ptr %21, align 4, !tbaa !9
  %247 = add nsw i32 %246, 1
  store i32 %247, ptr %21, align 4, !tbaa !9
  br label %182, !llvm.loop !16

248:                                              ; preds = %182
  br label %326

249:                                              ; preds = %177
  %250 = load i32, ptr %29, align 4, !tbaa !9
  %251 = load ptr, ptr %10, align 8, !tbaa !5
  %252 = load i32, ptr %251, align 4, !tbaa !9
  %253 = sub nsw i32 %250, %252
  store i32 %253, ptr %28, align 4, !tbaa !9
  %254 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %254, ptr %17, align 4, !tbaa !9
  %255 = load ptr, ptr %10, align 8, !tbaa !5
  %256 = load i32, ptr %255, align 4, !tbaa !9
  %257 = sub nsw i32 %256, 1
  store i32 %257, ptr %21, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %322, %249
  %259 = load i32, ptr %21, align 4, !tbaa !9
  %260 = load i32, ptr %17, align 4, !tbaa !9
  %261 = icmp sge i32 %259, %260
  br i1 %261, label %262, label %325

262:                                              ; preds = %258
  %263 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %263, ptr %18, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %264

264:                                              ; preds = %284, %262
  %265 = load i32, ptr %20, align 4, !tbaa !9
  %266 = load i32, ptr %18, align 4, !tbaa !9
  %267 = icmp sle i32 %265, %266
  br i1 %267, label %268, label %287

268:                                              ; preds = %264
  %269 = load ptr, ptr %11, align 8, !tbaa !5
  %270 = load i32, ptr %28, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds double, ptr %269, i64 %271
  %273 = load double, ptr %272, align 8, !tbaa !11
  %274 = load ptr, ptr %12, align 8, !tbaa !5
  %275 = load i32, ptr %20, align 4, !tbaa !9
  %276 = load i32, ptr %21, align 4, !tbaa !9
  %277 = load i32, ptr %15, align 4, !tbaa !9
  %278 = mul nsw i32 %276, %277
  %279 = add nsw i32 %275, %278
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds double, ptr %274, i64 %280
  store double %273, ptr %281, align 8, !tbaa !11
  %282 = load i32, ptr %28, align 4, !tbaa !9
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr %28, align 4, !tbaa !9
  br label %284

284:                                              ; preds = %268
  %285 = load i32, ptr %20, align 4, !tbaa !9
  %286 = add nsw i32 %285, 1
  store i32 %286, ptr %20, align 4, !tbaa !9
  br label %264, !llvm.loop !17

287:                                              ; preds = %264
  %288 = load i32, ptr %26, align 4, !tbaa !9
  %289 = sub nsw i32 %288, 1
  store i32 %289, ptr %18, align 4, !tbaa !9
  %290 = load i32, ptr %21, align 4, !tbaa !9
  %291 = load i32, ptr %26, align 4, !tbaa !9
  %292 = sub nsw i32 %290, %291
  store i32 %292, ptr %23, align 4, !tbaa !9
  br label %293

293:                                              ; preds = %315, %287
  %294 = load i32, ptr %23, align 4, !tbaa !9
  %295 = load i32, ptr %18, align 4, !tbaa !9
  %296 = icmp sle i32 %294, %295
  br i1 %296, label %297, label %318

297:                                              ; preds = %293
  %298 = load ptr, ptr %11, align 8, !tbaa !5
  %299 = load i32, ptr %28, align 4, !tbaa !9
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds double, ptr %298, i64 %300
  %302 = load double, ptr %301, align 8, !tbaa !11
  %303 = load ptr, ptr %12, align 8, !tbaa !5
  %304 = load i32, ptr %21, align 4, !tbaa !9
  %305 = load i32, ptr %26, align 4, !tbaa !9
  %306 = sub nsw i32 %304, %305
  %307 = load i32, ptr %23, align 4, !tbaa !9
  %308 = load i32, ptr %15, align 4, !tbaa !9
  %309 = mul nsw i32 %307, %308
  %310 = add nsw i32 %306, %309
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds double, ptr %303, i64 %311
  store double %302, ptr %312, align 8, !tbaa !11
  %313 = load i32, ptr %28, align 4, !tbaa !9
  %314 = add nsw i32 %313, 1
  store i32 %314, ptr %28, align 4, !tbaa !9
  br label %315

315:                                              ; preds = %297
  %316 = load i32, ptr %23, align 4, !tbaa !9
  %317 = add nsw i32 %316, 1
  store i32 %317, ptr %23, align 4, !tbaa !9
  br label %293, !llvm.loop !18

318:                                              ; preds = %293
  %319 = load i32, ptr %31, align 4, !tbaa !9
  %320 = load i32, ptr %28, align 4, !tbaa !9
  %321 = sub nsw i32 %320, %319
  store i32 %321, ptr %28, align 4, !tbaa !9
  br label %322

322:                                              ; preds = %318
  %323 = load i32, ptr %21, align 4, !tbaa !9
  %324 = add nsw i32 %323, -1
  store i32 %324, ptr %21, align 4, !tbaa !9
  br label %258, !llvm.loop !19

325:                                              ; preds = %258
  br label %326

326:                                              ; preds = %325, %248
  br label %546

327:                                              ; preds = %174
  %328 = load i32, ptr %25, align 4, !tbaa !9
  %329 = icmp ne i32 %328, 0
  br i1 %329, label %330, label %438

330:                                              ; preds = %327
  store i32 0, ptr %28, align 4, !tbaa !9
  %331 = load i32, ptr %27, align 4, !tbaa !9
  %332 = sub nsw i32 %331, 1
  store i32 %332, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %333

333:                                              ; preds = %395, %330
  %334 = load i32, ptr %21, align 4, !tbaa !9
  %335 = load i32, ptr %17, align 4, !tbaa !9
  %336 = icmp sle i32 %334, %335
  br i1 %336, label %337, label %398

337:                                              ; preds = %333
  %338 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %338, ptr %18, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %339

339:                                              ; preds = %359, %337
  %340 = load i32, ptr %20, align 4, !tbaa !9
  %341 = load i32, ptr %18, align 4, !tbaa !9
  %342 = icmp sle i32 %340, %341
  br i1 %342, label %343, label %362

343:                                              ; preds = %339
  %344 = load ptr, ptr %11, align 8, !tbaa !5
  %345 = load i32, ptr %28, align 4, !tbaa !9
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds double, ptr %344, i64 %346
  %348 = load double, ptr %347, align 8, !tbaa !11
  %349 = load ptr, ptr %12, align 8, !tbaa !5
  %350 = load i32, ptr %21, align 4, !tbaa !9
  %351 = load i32, ptr %20, align 4, !tbaa !9
  %352 = load i32, ptr %15, align 4, !tbaa !9
  %353 = mul nsw i32 %351, %352
  %354 = add nsw i32 %350, %353
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds double, ptr %349, i64 %355
  store double %348, ptr %356, align 8, !tbaa !11
  %357 = load i32, ptr %28, align 4, !tbaa !9
  %358 = add nsw i32 %357, 1
  store i32 %358, ptr %28, align 4, !tbaa !9
  br label %359

359:                                              ; preds = %343
  %360 = load i32, ptr %20, align 4, !tbaa !9
  %361 = add nsw i32 %360, 1
  store i32 %361, ptr %20, align 4, !tbaa !9
  br label %339, !llvm.loop !20

362:                                              ; preds = %339
  %363 = load ptr, ptr %10, align 8, !tbaa !5
  %364 = load i32, ptr %363, align 4, !tbaa !9
  %365 = sub nsw i32 %364, 1
  store i32 %365, ptr %18, align 4, !tbaa !9
  %366 = load i32, ptr %26, align 4, !tbaa !9
  %367 = load i32, ptr %21, align 4, !tbaa !9
  %368 = add nsw i32 %366, %367
  store i32 %368, ptr %20, align 4, !tbaa !9
  br label %369

369:                                              ; preds = %391, %362
  %370 = load i32, ptr %20, align 4, !tbaa !9
  %371 = load i32, ptr %18, align 4, !tbaa !9
  %372 = icmp sle i32 %370, %371
  br i1 %372, label %373, label %394

373:                                              ; preds = %369
  %374 = load ptr, ptr %11, align 8, !tbaa !5
  %375 = load i32, ptr %28, align 4, !tbaa !9
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds double, ptr %374, i64 %376
  %378 = load double, ptr %377, align 8, !tbaa !11
  %379 = load ptr, ptr %12, align 8, !tbaa !5
  %380 = load i32, ptr %20, align 4, !tbaa !9
  %381 = load i32, ptr %26, align 4, !tbaa !9
  %382 = load i32, ptr %21, align 4, !tbaa !9
  %383 = add nsw i32 %381, %382
  %384 = load i32, ptr %15, align 4, !tbaa !9
  %385 = mul nsw i32 %383, %384
  %386 = add nsw i32 %380, %385
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds double, ptr %379, i64 %387
  store double %378, ptr %388, align 8, !tbaa !11
  %389 = load i32, ptr %28, align 4, !tbaa !9
  %390 = add nsw i32 %389, 1
  store i32 %390, ptr %28, align 4, !tbaa !9
  br label %391

391:                                              ; preds = %373
  %392 = load i32, ptr %20, align 4, !tbaa !9
  %393 = add nsw i32 %392, 1
  store i32 %393, ptr %20, align 4, !tbaa !9
  br label %369, !llvm.loop !21

394:                                              ; preds = %369
  br label %395

395:                                              ; preds = %394
  %396 = load i32, ptr %21, align 4, !tbaa !9
  %397 = add nsw i32 %396, 1
  store i32 %397, ptr %21, align 4, !tbaa !9
  br label %333, !llvm.loop !22

398:                                              ; preds = %333
  %399 = load ptr, ptr %10, align 8, !tbaa !5
  %400 = load i32, ptr %399, align 4, !tbaa !9
  %401 = sub nsw i32 %400, 1
  store i32 %401, ptr %17, align 4, !tbaa !9
  %402 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %402, ptr %21, align 4, !tbaa !9
  br label %403

403:                                              ; preds = %434, %398
  %404 = load i32, ptr %21, align 4, !tbaa !9
  %405 = load i32, ptr %17, align 4, !tbaa !9
  %406 = icmp sle i32 %404, %405
  br i1 %406, label %407, label %437

407:                                              ; preds = %403
  %408 = load i32, ptr %26, align 4, !tbaa !9
  %409 = sub nsw i32 %408, 1
  store i32 %409, ptr %18, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %410

410:                                              ; preds = %430, %407
  %411 = load i32, ptr %20, align 4, !tbaa !9
  %412 = load i32, ptr %18, align 4, !tbaa !9
  %413 = icmp sle i32 %411, %412
  br i1 %413, label %414, label %433

414:                                              ; preds = %410
  %415 = load ptr, ptr %11, align 8, !tbaa !5
  %416 = load i32, ptr %28, align 4, !tbaa !9
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds double, ptr %415, i64 %417
  %419 = load double, ptr %418, align 8, !tbaa !11
  %420 = load ptr, ptr %12, align 8, !tbaa !5
  %421 = load i32, ptr %21, align 4, !tbaa !9
  %422 = load i32, ptr %20, align 4, !tbaa !9
  %423 = load i32, ptr %15, align 4, !tbaa !9
  %424 = mul nsw i32 %422, %423
  %425 = add nsw i32 %421, %424
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds double, ptr %420, i64 %426
  store double %419, ptr %427, align 8, !tbaa !11
  %428 = load i32, ptr %28, align 4, !tbaa !9
  %429 = add nsw i32 %428, 1
  store i32 %429, ptr %28, align 4, !tbaa !9
  br label %430

430:                                              ; preds = %414
  %431 = load i32, ptr %20, align 4, !tbaa !9
  %432 = add nsw i32 %431, 1
  store i32 %432, ptr %20, align 4, !tbaa !9
  br label %410, !llvm.loop !23

433:                                              ; preds = %410
  br label %434

434:                                              ; preds = %433
  %435 = load i32, ptr %21, align 4, !tbaa !9
  %436 = add nsw i32 %435, 1
  store i32 %436, ptr %21, align 4, !tbaa !9
  br label %403, !llvm.loop !24

437:                                              ; preds = %403
  br label %545

438:                                              ; preds = %327
  store i32 0, ptr %28, align 4, !tbaa !9
  %439 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %439, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %440

440:                                              ; preds = %473, %438
  %441 = load i32, ptr %21, align 4, !tbaa !9
  %442 = load i32, ptr %17, align 4, !tbaa !9
  %443 = icmp sle i32 %441, %442
  br i1 %443, label %444, label %476

444:                                              ; preds = %440
  %445 = load ptr, ptr %10, align 8, !tbaa !5
  %446 = load i32, ptr %445, align 4, !tbaa !9
  %447 = sub nsw i32 %446, 1
  store i32 %447, ptr %18, align 4, !tbaa !9
  %448 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %448, ptr %20, align 4, !tbaa !9
  br label %449

449:                                              ; preds = %469, %444
  %450 = load i32, ptr %20, align 4, !tbaa !9
  %451 = load i32, ptr %18, align 4, !tbaa !9
  %452 = icmp sle i32 %450, %451
  br i1 %452, label %453, label %472

453:                                              ; preds = %449
  %454 = load ptr, ptr %11, align 8, !tbaa !5
  %455 = load i32, ptr %28, align 4, !tbaa !9
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds double, ptr %454, i64 %456
  %458 = load double, ptr %457, align 8, !tbaa !11
  %459 = load ptr, ptr %12, align 8, !tbaa !5
  %460 = load i32, ptr %21, align 4, !tbaa !9
  %461 = load i32, ptr %20, align 4, !tbaa !9
  %462 = load i32, ptr %15, align 4, !tbaa !9
  %463 = mul nsw i32 %461, %462
  %464 = add nsw i32 %460, %463
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds double, ptr %459, i64 %465
  store double %458, ptr %466, align 8, !tbaa !11
  %467 = load i32, ptr %28, align 4, !tbaa !9
  %468 = add nsw i32 %467, 1
  store i32 %468, ptr %28, align 4, !tbaa !9
  br label %469

469:                                              ; preds = %453
  %470 = load i32, ptr %20, align 4, !tbaa !9
  %471 = add nsw i32 %470, 1
  store i32 %471, ptr %20, align 4, !tbaa !9
  br label %449, !llvm.loop !25

472:                                              ; preds = %449
  br label %473

473:                                              ; preds = %472
  %474 = load i32, ptr %21, align 4, !tbaa !9
  %475 = add nsw i32 %474, 1
  store i32 %475, ptr %21, align 4, !tbaa !9
  br label %440, !llvm.loop !26

476:                                              ; preds = %440
  %477 = load i32, ptr %26, align 4, !tbaa !9
  %478 = sub nsw i32 %477, 1
  store i32 %478, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %479

479:                                              ; preds = %541, %476
  %480 = load i32, ptr %21, align 4, !tbaa !9
  %481 = load i32, ptr %17, align 4, !tbaa !9
  %482 = icmp sle i32 %480, %481
  br i1 %482, label %483, label %544

483:                                              ; preds = %479
  %484 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %484, ptr %18, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %485

485:                                              ; preds = %505, %483
  %486 = load i32, ptr %20, align 4, !tbaa !9
  %487 = load i32, ptr %18, align 4, !tbaa !9
  %488 = icmp sle i32 %486, %487
  br i1 %488, label %489, label %508

489:                                              ; preds = %485
  %490 = load ptr, ptr %11, align 8, !tbaa !5
  %491 = load i32, ptr %28, align 4, !tbaa !9
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds double, ptr %490, i64 %492
  %494 = load double, ptr %493, align 8, !tbaa !11
  %495 = load ptr, ptr %12, align 8, !tbaa !5
  %496 = load i32, ptr %20, align 4, !tbaa !9
  %497 = load i32, ptr %21, align 4, !tbaa !9
  %498 = load i32, ptr %15, align 4, !tbaa !9
  %499 = mul nsw i32 %497, %498
  %500 = add nsw i32 %496, %499
  %501 = sext i32 %500 to i64
  %502 = getelementptr inbounds double, ptr %495, i64 %501
  store double %494, ptr %502, align 8, !tbaa !11
  %503 = load i32, ptr %28, align 4, !tbaa !9
  %504 = add nsw i32 %503, 1
  store i32 %504, ptr %28, align 4, !tbaa !9
  br label %505

505:                                              ; preds = %489
  %506 = load i32, ptr %20, align 4, !tbaa !9
  %507 = add nsw i32 %506, 1
  store i32 %507, ptr %20, align 4, !tbaa !9
  br label %485, !llvm.loop !27

508:                                              ; preds = %485
  %509 = load ptr, ptr %10, align 8, !tbaa !5
  %510 = load i32, ptr %509, align 4, !tbaa !9
  %511 = sub nsw i32 %510, 1
  store i32 %511, ptr %18, align 4, !tbaa !9
  %512 = load i32, ptr %27, align 4, !tbaa !9
  %513 = load i32, ptr %21, align 4, !tbaa !9
  %514 = add nsw i32 %512, %513
  store i32 %514, ptr %23, align 4, !tbaa !9
  br label %515

515:                                              ; preds = %537, %508
  %516 = load i32, ptr %23, align 4, !tbaa !9
  %517 = load i32, ptr %18, align 4, !tbaa !9
  %518 = icmp sle i32 %516, %517
  br i1 %518, label %519, label %540

519:                                              ; preds = %515
  %520 = load ptr, ptr %11, align 8, !tbaa !5
  %521 = load i32, ptr %28, align 4, !tbaa !9
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds double, ptr %520, i64 %522
  %524 = load double, ptr %523, align 8, !tbaa !11
  %525 = load ptr, ptr %12, align 8, !tbaa !5
  %526 = load i32, ptr %27, align 4, !tbaa !9
  %527 = load i32, ptr %21, align 4, !tbaa !9
  %528 = add nsw i32 %526, %527
  %529 = load i32, ptr %23, align 4, !tbaa !9
  %530 = load i32, ptr %15, align 4, !tbaa !9
  %531 = mul nsw i32 %529, %530
  %532 = add nsw i32 %528, %531
  %533 = sext i32 %532 to i64
  %534 = getelementptr inbounds double, ptr %525, i64 %533
  store double %524, ptr %534, align 8, !tbaa !11
  %535 = load i32, ptr %28, align 4, !tbaa !9
  %536 = add nsw i32 %535, 1
  store i32 %536, ptr %28, align 4, !tbaa !9
  br label %537

537:                                              ; preds = %519
  %538 = load i32, ptr %23, align 4, !tbaa !9
  %539 = add nsw i32 %538, 1
  store i32 %539, ptr %23, align 4, !tbaa !9
  br label %515, !llvm.loop !28

540:                                              ; preds = %515
  br label %541

541:                                              ; preds = %540
  %542 = load i32, ptr %21, align 4, !tbaa !9
  %543 = add nsw i32 %542, 1
  store i32 %543, ptr %21, align 4, !tbaa !9
  br label %479, !llvm.loop !29

544:                                              ; preds = %479
  br label %545

545:                                              ; preds = %544, %437
  br label %546

546:                                              ; preds = %545, %326
  br label %981

547:                                              ; preds = %171
  %548 = load i32, ptr %24, align 4, !tbaa !9
  %549 = icmp ne i32 %548, 0
  br i1 %549, label %550, label %702

550:                                              ; preds = %547
  %551 = load i32, ptr %25, align 4, !tbaa !9
  %552 = icmp ne i32 %551, 0
  br i1 %552, label %553, label %623

553:                                              ; preds = %550
  store i32 0, ptr %28, align 4, !tbaa !9
  %554 = load i32, ptr %22, align 4, !tbaa !9
  %555 = sub nsw i32 %554, 1
  store i32 %555, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %556

556:                                              ; preds = %619, %553
  %557 = load i32, ptr %21, align 4, !tbaa !9
  %558 = load i32, ptr %17, align 4, !tbaa !9
  %559 = icmp sle i32 %557, %558
  br i1 %559, label %560, label %622

560:                                              ; preds = %556
  %561 = load i32, ptr %22, align 4, !tbaa !9
  %562 = load i32, ptr %21, align 4, !tbaa !9
  %563 = add nsw i32 %561, %562
  store i32 %563, ptr %18, align 4, !tbaa !9
  %564 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %564, ptr %20, align 4, !tbaa !9
  br label %565

565:                                              ; preds = %587, %560
  %566 = load i32, ptr %20, align 4, !tbaa !9
  %567 = load i32, ptr %18, align 4, !tbaa !9
  %568 = icmp sle i32 %566, %567
  br i1 %568, label %569, label %590

569:                                              ; preds = %565
  %570 = load ptr, ptr %11, align 8, !tbaa !5
  %571 = load i32, ptr %28, align 4, !tbaa !9
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds double, ptr %570, i64 %572
  %574 = load double, ptr %573, align 8, !tbaa !11
  %575 = load ptr, ptr %12, align 8, !tbaa !5
  %576 = load i32, ptr %22, align 4, !tbaa !9
  %577 = load i32, ptr %21, align 4, !tbaa !9
  %578 = add nsw i32 %576, %577
  %579 = load i32, ptr %20, align 4, !tbaa !9
  %580 = load i32, ptr %15, align 4, !tbaa !9
  %581 = mul nsw i32 %579, %580
  %582 = add nsw i32 %578, %581
  %583 = sext i32 %582 to i64
  %584 = getelementptr inbounds double, ptr %575, i64 %583
  store double %574, ptr %584, align 8, !tbaa !11
  %585 = load i32, ptr %28, align 4, !tbaa !9
  %586 = add nsw i32 %585, 1
  store i32 %586, ptr %28, align 4, !tbaa !9
  br label %587

587:                                              ; preds = %569
  %588 = load i32, ptr %20, align 4, !tbaa !9
  %589 = add nsw i32 %588, 1
  store i32 %589, ptr %20, align 4, !tbaa !9
  br label %565, !llvm.loop !30

590:                                              ; preds = %565
  %591 = load ptr, ptr %10, align 8, !tbaa !5
  %592 = load i32, ptr %591, align 4, !tbaa !9
  %593 = sub nsw i32 %592, 1
  store i32 %593, ptr %18, align 4, !tbaa !9
  %594 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %594, ptr %20, align 4, !tbaa !9
  br label %595

595:                                              ; preds = %615, %590
  %596 = load i32, ptr %20, align 4, !tbaa !9
  %597 = load i32, ptr %18, align 4, !tbaa !9
  %598 = icmp sle i32 %596, %597
  br i1 %598, label %599, label %618

599:                                              ; preds = %595
  %600 = load ptr, ptr %11, align 8, !tbaa !5
  %601 = load i32, ptr %28, align 4, !tbaa !9
  %602 = sext i32 %601 to i64
  %603 = getelementptr inbounds double, ptr %600, i64 %602
  %604 = load double, ptr %603, align 8, !tbaa !11
  %605 = load ptr, ptr %12, align 8, !tbaa !5
  %606 = load i32, ptr %20, align 4, !tbaa !9
  %607 = load i32, ptr %21, align 4, !tbaa !9
  %608 = load i32, ptr %15, align 4, !tbaa !9
  %609 = mul nsw i32 %607, %608
  %610 = add nsw i32 %606, %609
  %611 = sext i32 %610 to i64
  %612 = getelementptr inbounds double, ptr %605, i64 %611
  store double %604, ptr %612, align 8, !tbaa !11
  %613 = load i32, ptr %28, align 4, !tbaa !9
  %614 = add nsw i32 %613, 1
  store i32 %614, ptr %28, align 4, !tbaa !9
  br label %615

615:                                              ; preds = %599
  %616 = load i32, ptr %20, align 4, !tbaa !9
  %617 = add nsw i32 %616, 1
  store i32 %617, ptr %20, align 4, !tbaa !9
  br label %595, !llvm.loop !31

618:                                              ; preds = %595
  br label %619

619:                                              ; preds = %618
  %620 = load i32, ptr %21, align 4, !tbaa !9
  %621 = add nsw i32 %620, 1
  store i32 %621, ptr %21, align 4, !tbaa !9
  br label %556, !llvm.loop !32

622:                                              ; preds = %556
  br label %701

623:                                              ; preds = %550
  %624 = load i32, ptr %29, align 4, !tbaa !9
  %625 = load ptr, ptr %10, align 8, !tbaa !5
  %626 = load i32, ptr %625, align 4, !tbaa !9
  %627 = sub nsw i32 %624, %626
  %628 = sub nsw i32 %627, 1
  store i32 %628, ptr %28, align 4, !tbaa !9
  %629 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %629, ptr %17, align 4, !tbaa !9
  %630 = load ptr, ptr %10, align 8, !tbaa !5
  %631 = load i32, ptr %630, align 4, !tbaa !9
  %632 = sub nsw i32 %631, 1
  store i32 %632, ptr %21, align 4, !tbaa !9
  br label %633

633:                                              ; preds = %697, %623
  %634 = load i32, ptr %21, align 4, !tbaa !9
  %635 = load i32, ptr %17, align 4, !tbaa !9
  %636 = icmp sge i32 %634, %635
  br i1 %636, label %637, label %700

637:                                              ; preds = %633
  %638 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %638, ptr %18, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %639

639:                                              ; preds = %659, %637
  %640 = load i32, ptr %20, align 4, !tbaa !9
  %641 = load i32, ptr %18, align 4, !tbaa !9
  %642 = icmp sle i32 %640, %641
  br i1 %642, label %643, label %662

643:                                              ; preds = %639
  %644 = load ptr, ptr %11, align 8, !tbaa !5
  %645 = load i32, ptr %28, align 4, !tbaa !9
  %646 = sext i32 %645 to i64
  %647 = getelementptr inbounds double, ptr %644, i64 %646
  %648 = load double, ptr %647, align 8, !tbaa !11
  %649 = load ptr, ptr %12, align 8, !tbaa !5
  %650 = load i32, ptr %20, align 4, !tbaa !9
  %651 = load i32, ptr %21, align 4, !tbaa !9
  %652 = load i32, ptr %15, align 4, !tbaa !9
  %653 = mul nsw i32 %651, %652
  %654 = add nsw i32 %650, %653
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds double, ptr %649, i64 %655
  store double %648, ptr %656, align 8, !tbaa !11
  %657 = load i32, ptr %28, align 4, !tbaa !9
  %658 = add nsw i32 %657, 1
  store i32 %658, ptr %28, align 4, !tbaa !9
  br label %659

659:                                              ; preds = %643
  %660 = load i32, ptr %20, align 4, !tbaa !9
  %661 = add nsw i32 %660, 1
  store i32 %661, ptr %20, align 4, !tbaa !9
  br label %639, !llvm.loop !33

662:                                              ; preds = %639
  %663 = load i32, ptr %22, align 4, !tbaa !9
  %664 = sub nsw i32 %663, 1
  store i32 %664, ptr %18, align 4, !tbaa !9
  %665 = load i32, ptr %21, align 4, !tbaa !9
  %666 = load i32, ptr %22, align 4, !tbaa !9
  %667 = sub nsw i32 %665, %666
  store i32 %667, ptr %23, align 4, !tbaa !9
  br label %668

668:                                              ; preds = %690, %662
  %669 = load i32, ptr %23, align 4, !tbaa !9
  %670 = load i32, ptr %18, align 4, !tbaa !9
  %671 = icmp sle i32 %669, %670
  br i1 %671, label %672, label %693

672:                                              ; preds = %668
  %673 = load ptr, ptr %11, align 8, !tbaa !5
  %674 = load i32, ptr %28, align 4, !tbaa !9
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds double, ptr %673, i64 %675
  %677 = load double, ptr %676, align 8, !tbaa !11
  %678 = load ptr, ptr %12, align 8, !tbaa !5
  %679 = load i32, ptr %21, align 4, !tbaa !9
  %680 = load i32, ptr %22, align 4, !tbaa !9
  %681 = sub nsw i32 %679, %680
  %682 = load i32, ptr %23, align 4, !tbaa !9
  %683 = load i32, ptr %15, align 4, !tbaa !9
  %684 = mul nsw i32 %682, %683
  %685 = add nsw i32 %681, %684
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds double, ptr %678, i64 %686
  store double %677, ptr %687, align 8, !tbaa !11
  %688 = load i32, ptr %28, align 4, !tbaa !9
  %689 = add nsw i32 %688, 1
  store i32 %689, ptr %28, align 4, !tbaa !9
  br label %690

690:                                              ; preds = %672
  %691 = load i32, ptr %23, align 4, !tbaa !9
  %692 = add nsw i32 %691, 1
  store i32 %692, ptr %23, align 4, !tbaa !9
  br label %668, !llvm.loop !34

693:                                              ; preds = %668
  %694 = load i32, ptr %19, align 4, !tbaa !9
  %695 = load i32, ptr %28, align 4, !tbaa !9
  %696 = sub nsw i32 %695, %694
  store i32 %696, ptr %28, align 4, !tbaa !9
  br label %697

697:                                              ; preds = %693
  %698 = load i32, ptr %21, align 4, !tbaa !9
  %699 = add nsw i32 %698, -1
  store i32 %699, ptr %21, align 4, !tbaa !9
  br label %633, !llvm.loop !35

700:                                              ; preds = %633
  br label %701

701:                                              ; preds = %700, %622
  br label %980

702:                                              ; preds = %547
  %703 = load i32, ptr %25, align 4, !tbaa !9
  %704 = icmp ne i32 %703, 0
  br i1 %704, label %705, label %845

705:                                              ; preds = %702
  store i32 0, ptr %28, align 4, !tbaa !9
  %706 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %706, ptr %21, align 4, !tbaa !9
  %707 = load ptr, ptr %10, align 8, !tbaa !5
  %708 = load i32, ptr %707, align 4, !tbaa !9
  %709 = sub nsw i32 %708, 1
  store i32 %709, ptr %17, align 4, !tbaa !9
  %710 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %710, ptr %20, align 4, !tbaa !9
  br label %711

711:                                              ; preds = %731, %705
  %712 = load i32, ptr %20, align 4, !tbaa !9
  %713 = load i32, ptr %17, align 4, !tbaa !9
  %714 = icmp sle i32 %712, %713
  br i1 %714, label %715, label %734

715:                                              ; preds = %711
  %716 = load ptr, ptr %11, align 8, !tbaa !5
  %717 = load i32, ptr %28, align 4, !tbaa !9
  %718 = sext i32 %717 to i64
  %719 = getelementptr inbounds double, ptr %716, i64 %718
  %720 = load double, ptr %719, align 8, !tbaa !11
  %721 = load ptr, ptr %12, align 8, !tbaa !5
  %722 = load i32, ptr %20, align 4, !tbaa !9
  %723 = load i32, ptr %21, align 4, !tbaa !9
  %724 = load i32, ptr %15, align 4, !tbaa !9
  %725 = mul nsw i32 %723, %724
  %726 = add nsw i32 %722, %725
  %727 = sext i32 %726 to i64
  %728 = getelementptr inbounds double, ptr %721, i64 %727
  store double %720, ptr %728, align 8, !tbaa !11
  %729 = load i32, ptr %28, align 4, !tbaa !9
  %730 = add nsw i32 %729, 1
  store i32 %730, ptr %28, align 4, !tbaa !9
  br label %731

731:                                              ; preds = %715
  %732 = load i32, ptr %20, align 4, !tbaa !9
  %733 = add nsw i32 %732, 1
  store i32 %733, ptr %20, align 4, !tbaa !9
  br label %711, !llvm.loop !36

734:                                              ; preds = %711
  %735 = load i32, ptr %22, align 4, !tbaa !9
  %736 = sub nsw i32 %735, 2
  store i32 %736, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %737

737:                                              ; preds = %801, %734
  %738 = load i32, ptr %21, align 4, !tbaa !9
  %739 = load i32, ptr %17, align 4, !tbaa !9
  %740 = icmp sle i32 %738, %739
  br i1 %740, label %741, label %804

741:                                              ; preds = %737
  %742 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %742, ptr %18, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %743

743:                                              ; preds = %763, %741
  %744 = load i32, ptr %20, align 4, !tbaa !9
  %745 = load i32, ptr %18, align 4, !tbaa !9
  %746 = icmp sle i32 %744, %745
  br i1 %746, label %747, label %766

747:                                              ; preds = %743
  %748 = load ptr, ptr %11, align 8, !tbaa !5
  %749 = load i32, ptr %28, align 4, !tbaa !9
  %750 = sext i32 %749 to i64
  %751 = getelementptr inbounds double, ptr %748, i64 %750
  %752 = load double, ptr %751, align 8, !tbaa !11
  %753 = load ptr, ptr %12, align 8, !tbaa !5
  %754 = load i32, ptr %21, align 4, !tbaa !9
  %755 = load i32, ptr %20, align 4, !tbaa !9
  %756 = load i32, ptr %15, align 4, !tbaa !9
  %757 = mul nsw i32 %755, %756
  %758 = add nsw i32 %754, %757
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds double, ptr %753, i64 %759
  store double %752, ptr %760, align 8, !tbaa !11
  %761 = load i32, ptr %28, align 4, !tbaa !9
  %762 = add nsw i32 %761, 1
  store i32 %762, ptr %28, align 4, !tbaa !9
  br label %763

763:                                              ; preds = %747
  %764 = load i32, ptr %20, align 4, !tbaa !9
  %765 = add nsw i32 %764, 1
  store i32 %765, ptr %20, align 4, !tbaa !9
  br label %743, !llvm.loop !37

766:                                              ; preds = %743
  %767 = load ptr, ptr %10, align 8, !tbaa !5
  %768 = load i32, ptr %767, align 4, !tbaa !9
  %769 = sub nsw i32 %768, 1
  store i32 %769, ptr %18, align 4, !tbaa !9
  %770 = load i32, ptr %22, align 4, !tbaa !9
  %771 = add nsw i32 %770, 1
  %772 = load i32, ptr %21, align 4, !tbaa !9
  %773 = add nsw i32 %771, %772
  store i32 %773, ptr %20, align 4, !tbaa !9
  br label %774

774:                                              ; preds = %797, %766
  %775 = load i32, ptr %20, align 4, !tbaa !9
  %776 = load i32, ptr %18, align 4, !tbaa !9
  %777 = icmp sle i32 %775, %776
  br i1 %777, label %778, label %800

778:                                              ; preds = %774
  %779 = load ptr, ptr %11, align 8, !tbaa !5
  %780 = load i32, ptr %28, align 4, !tbaa !9
  %781 = sext i32 %780 to i64
  %782 = getelementptr inbounds double, ptr %779, i64 %781
  %783 = load double, ptr %782, align 8, !tbaa !11
  %784 = load ptr, ptr %12, align 8, !tbaa !5
  %785 = load i32, ptr %20, align 4, !tbaa !9
  %786 = load i32, ptr %22, align 4, !tbaa !9
  %787 = add nsw i32 %786, 1
  %788 = load i32, ptr %21, align 4, !tbaa !9
  %789 = add nsw i32 %787, %788
  %790 = load i32, ptr %15, align 4, !tbaa !9
  %791 = mul nsw i32 %789, %790
  %792 = add nsw i32 %785, %791
  %793 = sext i32 %792 to i64
  %794 = getelementptr inbounds double, ptr %784, i64 %793
  store double %783, ptr %794, align 8, !tbaa !11
  %795 = load i32, ptr %28, align 4, !tbaa !9
  %796 = add nsw i32 %795, 1
  store i32 %796, ptr %28, align 4, !tbaa !9
  br label %797

797:                                              ; preds = %778
  %798 = load i32, ptr %20, align 4, !tbaa !9
  %799 = add nsw i32 %798, 1
  store i32 %799, ptr %20, align 4, !tbaa !9
  br label %774, !llvm.loop !38

800:                                              ; preds = %774
  br label %801

801:                                              ; preds = %800
  %802 = load i32, ptr %21, align 4, !tbaa !9
  %803 = add nsw i32 %802, 1
  store i32 %803, ptr %21, align 4, !tbaa !9
  br label %737, !llvm.loop !39

804:                                              ; preds = %737
  %805 = load ptr, ptr %10, align 8, !tbaa !5
  %806 = load i32, ptr %805, align 4, !tbaa !9
  %807 = sub nsw i32 %806, 1
  store i32 %807, ptr %17, align 4, !tbaa !9
  %808 = load i32, ptr %22, align 4, !tbaa !9
  %809 = sub nsw i32 %808, 1
  store i32 %809, ptr %21, align 4, !tbaa !9
  br label %810

810:                                              ; preds = %841, %804
  %811 = load i32, ptr %21, align 4, !tbaa !9
  %812 = load i32, ptr %17, align 4, !tbaa !9
  %813 = icmp sle i32 %811, %812
  br i1 %813, label %814, label %844

814:                                              ; preds = %810
  %815 = load i32, ptr %22, align 4, !tbaa !9
  %816 = sub nsw i32 %815, 1
  store i32 %816, ptr %18, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %817

817:                                              ; preds = %837, %814
  %818 = load i32, ptr %20, align 4, !tbaa !9
  %819 = load i32, ptr %18, align 4, !tbaa !9
  %820 = icmp sle i32 %818, %819
  br i1 %820, label %821, label %840

821:                                              ; preds = %817
  %822 = load ptr, ptr %11, align 8, !tbaa !5
  %823 = load i32, ptr %28, align 4, !tbaa !9
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds double, ptr %822, i64 %824
  %826 = load double, ptr %825, align 8, !tbaa !11
  %827 = load ptr, ptr %12, align 8, !tbaa !5
  %828 = load i32, ptr %21, align 4, !tbaa !9
  %829 = load i32, ptr %20, align 4, !tbaa !9
  %830 = load i32, ptr %15, align 4, !tbaa !9
  %831 = mul nsw i32 %829, %830
  %832 = add nsw i32 %828, %831
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds double, ptr %827, i64 %833
  store double %826, ptr %834, align 8, !tbaa !11
  %835 = load i32, ptr %28, align 4, !tbaa !9
  %836 = add nsw i32 %835, 1
  store i32 %836, ptr %28, align 4, !tbaa !9
  br label %837

837:                                              ; preds = %821
  %838 = load i32, ptr %20, align 4, !tbaa !9
  %839 = add nsw i32 %838, 1
  store i32 %839, ptr %20, align 4, !tbaa !9
  br label %817, !llvm.loop !40

840:                                              ; preds = %817
  br label %841

841:                                              ; preds = %840
  %842 = load i32, ptr %21, align 4, !tbaa !9
  %843 = add nsw i32 %842, 1
  store i32 %843, ptr %21, align 4, !tbaa !9
  br label %810, !llvm.loop !41

844:                                              ; preds = %810
  br label %979

845:                                              ; preds = %702
  store i32 0, ptr %28, align 4, !tbaa !9
  %846 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %846, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %847

847:                                              ; preds = %880, %845
  %848 = load i32, ptr %21, align 4, !tbaa !9
  %849 = load i32, ptr %17, align 4, !tbaa !9
  %850 = icmp sle i32 %848, %849
  br i1 %850, label %851, label %883

851:                                              ; preds = %847
  %852 = load ptr, ptr %10, align 8, !tbaa !5
  %853 = load i32, ptr %852, align 4, !tbaa !9
  %854 = sub nsw i32 %853, 1
  store i32 %854, ptr %18, align 4, !tbaa !9
  %855 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %855, ptr %20, align 4, !tbaa !9
  br label %856

856:                                              ; preds = %876, %851
  %857 = load i32, ptr %20, align 4, !tbaa !9
  %858 = load i32, ptr %18, align 4, !tbaa !9
  %859 = icmp sle i32 %857, %858
  br i1 %859, label %860, label %879

860:                                              ; preds = %856
  %861 = load ptr, ptr %11, align 8, !tbaa !5
  %862 = load i32, ptr %28, align 4, !tbaa !9
  %863 = sext i32 %862 to i64
  %864 = getelementptr inbounds double, ptr %861, i64 %863
  %865 = load double, ptr %864, align 8, !tbaa !11
  %866 = load ptr, ptr %12, align 8, !tbaa !5
  %867 = load i32, ptr %21, align 4, !tbaa !9
  %868 = load i32, ptr %20, align 4, !tbaa !9
  %869 = load i32, ptr %15, align 4, !tbaa !9
  %870 = mul nsw i32 %868, %869
  %871 = add nsw i32 %867, %870
  %872 = sext i32 %871 to i64
  %873 = getelementptr inbounds double, ptr %866, i64 %872
  store double %865, ptr %873, align 8, !tbaa !11
  %874 = load i32, ptr %28, align 4, !tbaa !9
  %875 = add nsw i32 %874, 1
  store i32 %875, ptr %28, align 4, !tbaa !9
  br label %876

876:                                              ; preds = %860
  %877 = load i32, ptr %20, align 4, !tbaa !9
  %878 = add nsw i32 %877, 1
  store i32 %878, ptr %20, align 4, !tbaa !9
  br label %856, !llvm.loop !42

879:                                              ; preds = %856
  br label %880

880:                                              ; preds = %879
  %881 = load i32, ptr %21, align 4, !tbaa !9
  %882 = add nsw i32 %881, 1
  store i32 %882, ptr %21, align 4, !tbaa !9
  br label %847, !llvm.loop !43

883:                                              ; preds = %847
  %884 = load i32, ptr %22, align 4, !tbaa !9
  %885 = sub nsw i32 %884, 2
  store i32 %885, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %886

886:                                              ; preds = %950, %883
  %887 = load i32, ptr %21, align 4, !tbaa !9
  %888 = load i32, ptr %17, align 4, !tbaa !9
  %889 = icmp sle i32 %887, %888
  br i1 %889, label %890, label %953

890:                                              ; preds = %886
  %891 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %891, ptr %18, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %892

892:                                              ; preds = %912, %890
  %893 = load i32, ptr %20, align 4, !tbaa !9
  %894 = load i32, ptr %18, align 4, !tbaa !9
  %895 = icmp sle i32 %893, %894
  br i1 %895, label %896, label %915

896:                                              ; preds = %892
  %897 = load ptr, ptr %11, align 8, !tbaa !5
  %898 = load i32, ptr %28, align 4, !tbaa !9
  %899 = sext i32 %898 to i64
  %900 = getelementptr inbounds double, ptr %897, i64 %899
  %901 = load double, ptr %900, align 8, !tbaa !11
  %902 = load ptr, ptr %12, align 8, !tbaa !5
  %903 = load i32, ptr %20, align 4, !tbaa !9
  %904 = load i32, ptr %21, align 4, !tbaa !9
  %905 = load i32, ptr %15, align 4, !tbaa !9
  %906 = mul nsw i32 %904, %905
  %907 = add nsw i32 %903, %906
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds double, ptr %902, i64 %908
  store double %901, ptr %909, align 8, !tbaa !11
  %910 = load i32, ptr %28, align 4, !tbaa !9
  %911 = add nsw i32 %910, 1
  store i32 %911, ptr %28, align 4, !tbaa !9
  br label %912

912:                                              ; preds = %896
  %913 = load i32, ptr %20, align 4, !tbaa !9
  %914 = add nsw i32 %913, 1
  store i32 %914, ptr %20, align 4, !tbaa !9
  br label %892, !llvm.loop !44

915:                                              ; preds = %892
  %916 = load ptr, ptr %10, align 8, !tbaa !5
  %917 = load i32, ptr %916, align 4, !tbaa !9
  %918 = sub nsw i32 %917, 1
  store i32 %918, ptr %18, align 4, !tbaa !9
  %919 = load i32, ptr %22, align 4, !tbaa !9
  %920 = add nsw i32 %919, 1
  %921 = load i32, ptr %21, align 4, !tbaa !9
  %922 = add nsw i32 %920, %921
  store i32 %922, ptr %23, align 4, !tbaa !9
  br label %923

923:                                              ; preds = %946, %915
  %924 = load i32, ptr %23, align 4, !tbaa !9
  %925 = load i32, ptr %18, align 4, !tbaa !9
  %926 = icmp sle i32 %924, %925
  br i1 %926, label %927, label %949

927:                                              ; preds = %923
  %928 = load ptr, ptr %11, align 8, !tbaa !5
  %929 = load i32, ptr %28, align 4, !tbaa !9
  %930 = sext i32 %929 to i64
  %931 = getelementptr inbounds double, ptr %928, i64 %930
  %932 = load double, ptr %931, align 8, !tbaa !11
  %933 = load ptr, ptr %12, align 8, !tbaa !5
  %934 = load i32, ptr %22, align 4, !tbaa !9
  %935 = add nsw i32 %934, 1
  %936 = load i32, ptr %21, align 4, !tbaa !9
  %937 = add nsw i32 %935, %936
  %938 = load i32, ptr %23, align 4, !tbaa !9
  %939 = load i32, ptr %15, align 4, !tbaa !9
  %940 = mul nsw i32 %938, %939
  %941 = add nsw i32 %937, %940
  %942 = sext i32 %941 to i64
  %943 = getelementptr inbounds double, ptr %933, i64 %942
  store double %932, ptr %943, align 8, !tbaa !11
  %944 = load i32, ptr %28, align 4, !tbaa !9
  %945 = add nsw i32 %944, 1
  store i32 %945, ptr %28, align 4, !tbaa !9
  br label %946

946:                                              ; preds = %927
  %947 = load i32, ptr %23, align 4, !tbaa !9
  %948 = add nsw i32 %947, 1
  store i32 %948, ptr %23, align 4, !tbaa !9
  br label %923, !llvm.loop !45

949:                                              ; preds = %923
  br label %950

950:                                              ; preds = %949
  %951 = load i32, ptr %21, align 4, !tbaa !9
  %952 = add nsw i32 %951, 1
  store i32 %952, ptr %21, align 4, !tbaa !9
  br label %886, !llvm.loop !46

953:                                              ; preds = %886
  %954 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %954, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %955

955:                                              ; preds = %975, %953
  %956 = load i32, ptr %20, align 4, !tbaa !9
  %957 = load i32, ptr %17, align 4, !tbaa !9
  %958 = icmp sle i32 %956, %957
  br i1 %958, label %959, label %978

959:                                              ; preds = %955
  %960 = load ptr, ptr %11, align 8, !tbaa !5
  %961 = load i32, ptr %28, align 4, !tbaa !9
  %962 = sext i32 %961 to i64
  %963 = getelementptr inbounds double, ptr %960, i64 %962
  %964 = load double, ptr %963, align 8, !tbaa !11
  %965 = load ptr, ptr %12, align 8, !tbaa !5
  %966 = load i32, ptr %20, align 4, !tbaa !9
  %967 = load i32, ptr %21, align 4, !tbaa !9
  %968 = load i32, ptr %15, align 4, !tbaa !9
  %969 = mul nsw i32 %967, %968
  %970 = add nsw i32 %966, %969
  %971 = sext i32 %970 to i64
  %972 = getelementptr inbounds double, ptr %965, i64 %971
  store double %964, ptr %972, align 8, !tbaa !11
  %973 = load i32, ptr %28, align 4, !tbaa !9
  %974 = add nsw i32 %973, 1
  store i32 %974, ptr %28, align 4, !tbaa !9
  br label %975

975:                                              ; preds = %959
  %976 = load i32, ptr %20, align 4, !tbaa !9
  %977 = add nsw i32 %976, 1
  store i32 %977, ptr %20, align 4, !tbaa !9
  br label %955, !llvm.loop !47

978:                                              ; preds = %955
  br label %979

979:                                              ; preds = %978, %844
  br label %980

980:                                              ; preds = %979, %701
  br label %981

981:                                              ; preds = %980, %546
  store i32 1, ptr %32, align 4
  br label %982

982:                                              ; preds = %981, %115, %96
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  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
  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}
!46 = distinct !{!46, !14}
!47 = distinct !{!47, !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 @dtfttr_(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef writeonly %4, ptr nocapture noundef readonly %5, ptr nocapture noundef %6) local_unnamed_addr #0 {
  %8 = ptrtoint ptr %3 to i64
  %9 = ptrtoint ptr %4 to i64
  %10 = ptrtoint ptr %3 to i64
  %11 = ptrtoint ptr %4 to i64
  %12 = ptrtoint ptr %3 to i64
  %13 = ptrtoint ptr %4 to i64
  %14 = ptrtoint ptr %3 to i64
  %15 = ptrtoint ptr %4 to i64
  %16 = ptrtoint ptr %3 to i64
  %17 = ptrtoint ptr %4 to i64
  %18 = ptrtoint ptr %3 to i64
  %19 = ptrtoint ptr %4 to i64
  %20 = ptrtoint ptr %3 to i64
  %21 = ptrtoint ptr %4 to i64
  %22 = ptrtoint ptr %3 to i64
  %23 = ptrtoint ptr %4 to i64
  %24 = ptrtoint ptr %3 to i64
  %25 = ptrtoint ptr %4 to i64
  %26 = ptrtoint ptr %3 to i64
  %27 = ptrtoint ptr %4 to i64
  %28 = ptrtoint ptr %3 to i64
  %29 = ptrtoint ptr %4 to i64
  %30 = ptrtoint ptr %3 to i64
  %31 = ptrtoint ptr %4 to i64
  %32 = ptrtoint ptr %3 to i64
  %33 = ptrtoint ptr %4 to i64
  %34 = ptrtoint ptr %3 to i64
  %35 = ptrtoint ptr %4 to i64
  %36 = ptrtoint ptr %3 to i64
  %37 = ptrtoint ptr %4 to i64
  %38 = ptrtoint ptr %3 to i64
  %39 = ptrtoint ptr %4 to i64
  %40 = ptrtoint ptr %3 to i64
  %41 = ptrtoint ptr %4 to i64
  %42 = ptrtoint ptr %3 to i64
  %43 = ptrtoint ptr %4 to i64
  %44 = ptrtoint ptr %3 to i64
  %45 = ptrtoint ptr %4 to i64
  %46 = ptrtoint ptr %3 to i64
  %47 = ptrtoint ptr %4 to i64
  %48 = ptrtoint ptr %3 to i64
  %49 = ptrtoint ptr %4 to i64
  %50 = ptrtoint ptr %3 to i64
  %51 = ptrtoint ptr %4 to i64
  %52 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %52) #4
  %53 = load i32, ptr %5, align 4, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !5
  %54 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #4
  %55 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #4
  %.not = icmp eq i32 %54, 0
  br i1 %.not, label %56, label %58

56:                                               ; preds = %7
  %57 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #4
  %.not412 = icmp eq i32 %57, 0
  br i1 %.not412, label %.thread.sink.split, label %58

58:                                               ; preds = %56, %7
  %.not413 = icmp eq i32 %55, 0
  br i1 %.not413, label %59, label %61

59:                                               ; preds = %58
  %60 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #4
  %.not414 = icmp eq i32 %60, 0
  br i1 %.not414, label %.thread.sink.split, label %61

61:                                               ; preds = %59, %58
  %62 = load i32, ptr %2, align 4, !tbaa !5
  %63 = icmp slt i32 %62, 0
  br i1 %63, label %.thread.sink.split, label %64

64:                                               ; preds = %61
  %65 = load i32, ptr %5, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %62, i32 1)
  %66 = icmp slt i32 %65, %spec.select
  br i1 %66, label %.thread.sink.split, label %67

67:                                               ; preds = %64
  %.pr = load i32, ptr %6, align 4, !tbaa !5
  %.not415 = icmp eq i32 %.pr, 0
  br i1 %.not415, label %71, label %.thread

.thread.sink.split:                               ; preds = %64, %61, %59, %56
  %.sink = phi i32 [ -1, %56 ], [ -2, %59 ], [ -3, %61 ], [ -6, %64 ]
  store i32 %.sink, ptr %6, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %67
  %68 = phi i32 [ %.pr, %67 ], [ %.sink, %.thread.sink.split ]
  %69 = sub nsw i32 0, %68
  store i32 %69, ptr %52, align 4, !tbaa !5
  %70 = call i32 @xerbla_(ptr noundef nonnull @.str.4, ptr noundef nonnull %52, i32 noundef 6) #4
  br label %.loopexit

71:                                               ; preds = %67
  %72 = icmp ult i32 %62, 2
  br i1 %72, label %73, label %77

73:                                               ; preds = %71
  %74 = icmp eq i32 %62, 1
  br i1 %74, label %75, label %.loopexit

75:                                               ; preds = %73
  %76 = load double, ptr %3, align 8, !tbaa !9
  store double %76, ptr %4, align 8, !tbaa !9
  br label %.loopexit

77:                                               ; preds = %71
  %78 = add nuw nsw i32 %62, 1
  %79 = mul nuw nsw i32 %78, %62
  %80 = lshr i32 %79, 1
  %81 = lshr i32 %62, 1
  %82 = sub nsw i32 %62, %81
  %.0369 = select i1 %.not413, i32 %81, i32 %82
  %.0368 = select i1 %.not413, i32 %82, i32 %81
  %83 = and i32 %62, 1
  %84 = icmp eq i32 %83, 0
  br i1 %84, label %85, label %86

85:                                               ; preds = %77
  br i1 %.not413, label %376, label %.thread461

86:                                               ; preds = %77
  %87 = shl nuw nsw i32 %62, 1
  %spec.select452 = select i1 %.not413, i32 %87, i32 undef
  br i1 %.not, label %213, label %88

88:                                               ; preds = %86
  %89 = zext nneg i32 %81 to i64
  br i1 %.not413, label %.preheader482.preheader, label %.lr.ph498.preheader

.lr.ph498.preheader:                              ; preds = %88
  %90 = sext i32 %82 to i64
  %91 = sext i32 %53 to i64
  %92 = add nuw nsw i32 %81, 1
  %93 = zext nneg i32 %62 to i64
  %wide.trip.count698 = zext nneg i32 %92 to i64
  %wide.trip.count = zext nneg i32 %62 to i64
  %94 = shl nsw i64 %91, 3
  %95 = add nsw i64 %94, 8
  %96 = zext nneg i32 %62 to i64
  %ident.check.not = icmp eq i32 %53, 1
  %invariant.gep1610 = getelementptr i8, ptr %3, i64 8
  %invariant.gep1612 = getelementptr i8, ptr %3, i64 16
  %invariant.gep1614 = getelementptr i8, ptr %3, i64 24
  %invariant.gep1618 = getelementptr i8, ptr %3, i64 8
  %invariant.gep1622 = getelementptr i8, ptr %3, i64 16
  %invariant.gep1626 = getelementptr i8, ptr %3, i64 24
  br label %.lr.ph498

.lr.ph498:                                        ; preds = %.lr.ph498.preheader, %._crit_edge
  %indvars.iv689 = phi i64 [ 0, %.lr.ph498.preheader ], [ %indvars.iv.next690, %._crit_edge ]
  %indvars.iv684 = phi i32 [ %92, %.lr.ph498.preheader ], [ %indvars.iv.next685, %._crit_edge ]
  %.0367496 = phi i32 [ 0, %.lr.ph498.preheader ], [ %.2.lcssa, %._crit_edge ]
  %97 = trunc i64 %indvars.iv689 to i32
  %98 = add i32 %81, %97
  %99 = add nuw i64 %indvars.iv689, 4294967295
  %100 = and i64 %99, 4294967295
  %101 = add nuw nsw i64 %100, 1
  %102 = sub nsw i64 %wide.trip.count, %indvars.iv689
  %103 = mul i64 %95, %indvars.iv689
  %104 = add nuw nsw i64 %indvars.iv689, %89
  %.not450486 = icmp slt i64 %104, %90
  br i1 %.not450486, label %.preheader484, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.lr.ph498
  %105 = sext i32 %.0367496 to i64
  %invariant.gep = getelementptr double, ptr %4, i64 %104
  %min.iters.check1038 = icmp ugt i64 %100, 2
  %or.cond1498 = select i1 %min.iters.check1038, i1 %ident.check.not, i1 false
  br i1 %or.cond1498, label %vector.memcheck1034, label %.lr.ph.preheader1550

.lr.ph.preheader1550:                             ; preds = %middle.block1036, %vector.memcheck1034, %.lr.ph.preheader
  %indvars.iv679.ph = phi i64 [ %90, %vector.memcheck1034 ], [ %90, %.lr.ph.preheader ], [ %ind.end1042, %middle.block1036 ]
  %indvars.iv.ph = phi i64 [ %105, %vector.memcheck1034 ], [ %105, %.lr.ph.preheader ], [ %ind.end1044, %middle.block1036 ]
  %106 = trunc i64 %indvars.iv679.ph to i32
  %107 = sub i32 %indvars.iv684, %106
  %108 = sub i32 %98, %106
  %xtraiter = and i32 %107, 3
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader1550, %.lr.ph.prol
  %indvars.iv679.prol = phi i64 [ %indvars.iv.next680.prol, %.lr.ph.prol ], [ %indvars.iv679.ph, %.lr.ph.preheader1550 ]
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %.lr.ph.prol ], [ %indvars.iv.ph, %.lr.ph.preheader1550 ]
  %prol.iter = phi i32 [ %prol.iter.next, %.lr.ph.prol ], [ 0, %.lr.ph.preheader1550 ]
  %109 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.prol
  %110 = load double, ptr %109, align 8, !tbaa !9
  %111 = mul nsw i64 %indvars.iv679.prol, %91
  %gep.prol = getelementptr double, ptr %invariant.gep, i64 %111
  store double %110, ptr %gep.prol, align 8, !tbaa !9
  %indvars.iv.next.prol = add nsw i64 %indvars.iv.prol, 1
  %indvars.iv.next680.prol = add nsw i64 %indvars.iv679.prol, 1
  %prol.iter.next = add i32 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i32 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol, !llvm.loop !11

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader1550
  %indvars.iv.next.lcssa1552.unr = phi i64 [ poison, %.lr.ph.preheader1550 ], [ %indvars.iv.next.prol, %.lr.ph.prol ]
  %indvars.iv679.unr = phi i64 [ %indvars.iv679.ph, %.lr.ph.preheader1550 ], [ %indvars.iv.next680.prol, %.lr.ph.prol ]
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %.lr.ph.preheader1550 ], [ %indvars.iv.next.prol, %.lr.ph.prol ]
  %112 = icmp ult i32 %108, 3
  br i1 %112, label %.preheader484.loopexit, label %.lr.ph

vector.memcheck1034:                              ; preds = %.lr.ph.preheader
  %113 = shl nsw i64 %105, 3
  %114 = add nuw i64 %indvars.iv689, %96
  %115 = shl i64 %114, 3
  %116 = add i64 %115, %49
  %117 = add i64 %113, %48
  %118 = sub i64 %116, %117
  %diff.check1035 = icmp ult i64 %118, 32
  br i1 %diff.check1035, label %.lr.ph.preheader1550, label %vector.ph1039

vector.ph1039:                                    ; preds = %vector.memcheck1034
  %n.vec1041 = and i64 %101, 8589934588
  %ind.end1042 = add nsw i64 %n.vec1041, %90
  %ind.end1044 = add nsw i64 %n.vec1041, %105
  %invariant.gep1606 = getelementptr double, ptr %3, i64 %105
  %invariant.gep1608 = getelementptr double, ptr %invariant.gep, i64 %90
  br label %vector.body1046

vector.body1046:                                  ; preds = %vector.body1046, %vector.ph1039
  %index1047 = phi i64 [ 0, %vector.ph1039 ], [ %index.next1052, %vector.body1046 ]
  %gep1607 = getelementptr double, ptr %invariant.gep1606, i64 %index1047
  %119 = getelementptr inbounds i8, ptr %gep1607, i64 16
  %wide.load1050 = load <2 x double>, ptr %gep1607, align 8, !tbaa !9
  %wide.load1051 = load <2 x double>, ptr %119, align 8, !tbaa !9
  %gep1609 = getelementptr double, ptr %invariant.gep1608, i64 %index1047
  %120 = getelementptr i8, ptr %gep1609, i64 16
  store <2 x double> %wide.load1050, ptr %gep1609, align 8, !tbaa !9
  store <2 x double> %wide.load1051, ptr %120, align 8, !tbaa !9
  %index.next1052 = add nuw i64 %index1047, 4
  %121 = icmp eq i64 %index.next1052, %n.vec1041
  br i1 %121, label %middle.block1036, label %vector.body1046, !llvm.loop !13

middle.block1036:                                 ; preds = %vector.body1046
  %cmp.n1053 = icmp eq i64 %101, %n.vec1041
  br i1 %cmp.n1053, label %.preheader484.loopexit, label %.lr.ph.preheader1550

.preheader484.loopexit:                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block1036
  %indvars.iv.next.lcssa = phi i64 [ %ind.end1044, %middle.block1036 ], [ %indvars.iv.next.lcssa1552.unr, %.lr.ph.prol.loopexit ], [ %indvars.iv.next.3, %.lr.ph ]
  %122 = trunc nsw i64 %indvars.iv.next.lcssa to i32
  br label %.preheader484

.preheader484:                                    ; preds = %.preheader484.loopexit, %.lr.ph498
  %.1.lcssa = phi i32 [ %.0367496, %.lr.ph498 ], [ %122, %.preheader484.loopexit ]
  %.not451.not489 = icmp ult i64 %indvars.iv689, %93
  br i1 %.not451.not489, label %.lr.ph492, label %._crit_edge

.lr.ph492:                                        ; preds = %.preheader484
  %123 = mul nsw i64 %indvars.iv689, %91
  %124 = sext i32 %.1.lcssa to i64
  %invariant.gep981 = getelementptr double, ptr %4, i64 %123
  %min.iters.check = icmp ult i64 %102, 4
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph492
  %indvars.iv691.ph = phi i64 [ %indvars.iv689, %vector.memcheck ], [ %indvars.iv689, %.lr.ph492 ], [ %ind.end, %middle.block ]
  %indvars.iv687.ph = phi i64 [ %124, %vector.memcheck ], [ %124, %.lr.ph492 ], [ %ind.end1030, %middle.block ]
  %125 = sub i64 %96, %indvars.iv691.ph
  %xtraiter1554 = and i64 %125, 3
  %lcmp.mod1555.not = icmp eq i64 %xtraiter1554, 0
  br i1 %lcmp.mod1555.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv691.prol = phi i64 [ %indvars.iv.next692.prol, %scalar.ph.prol ], [ %indvars.iv691.ph, %scalar.ph.preheader ]
  %indvars.iv687.prol = phi i64 [ %indvars.iv.next688.prol, %scalar.ph.prol ], [ %indvars.iv687.ph, %scalar.ph.preheader ]
  %prol.iter1556 = phi i64 [ %prol.iter1556.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %126 = getelementptr inbounds double, ptr %3, i64 %indvars.iv687.prol
  %127 = load double, ptr %126, align 8, !tbaa !9
  %gep982.prol = getelementptr double, ptr %invariant.gep981, i64 %indvars.iv691.prol
  store double %127, ptr %gep982.prol, align 8, !tbaa !9
  %indvars.iv.next688.prol = add nsw i64 %indvars.iv687.prol, 1
  %indvars.iv.next692.prol = add nuw nsw i64 %indvars.iv691.prol, 1
  %prol.iter1556.next = add i64 %prol.iter1556, 1
  %prol.iter1556.cmp.not = icmp eq i64 %prol.iter1556.next, %xtraiter1554
  br i1 %prol.iter1556.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !17

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv.next688.lcssa1553.unr = phi i64 [ poison, %scalar.ph.preheader ], [ %indvars.iv.next688.prol, %scalar.ph.prol ]
  %indvars.iv691.unr = phi i64 [ %indvars.iv691.ph, %scalar.ph.preheader ], [ %indvars.iv.next692.prol, %scalar.ph.prol ]
  %indvars.iv687.unr = phi i64 [ %indvars.iv687.ph, %scalar.ph.preheader ], [ %indvars.iv.next688.prol, %scalar.ph.prol ]
  %128 = sub i64 %indvars.iv691.ph, %96
  %129 = icmp ugt i64 %128, -4
  br i1 %129, label %._crit_edge.loopexit, label %scalar.ph.preheader.new

scalar.ph.preheader.new:                          ; preds = %scalar.ph.prol.loopexit
  %invariant.gep1620 = getelementptr i8, ptr %invariant.gep981, i64 8
  %invariant.gep1624 = getelementptr i8, ptr %invariant.gep981, i64 16
  %invariant.gep1628 = getelementptr i8, ptr %invariant.gep981, i64 24
  br label %scalar.ph

vector.memcheck:                                  ; preds = %.lr.ph492
  %130 = shl nsw i64 %124, 3
  %131 = add i64 %103, %51
  %132 = add i64 %130, %50
  %133 = sub i64 %131, %132
  %diff.check = icmp ult i64 %133, 32
  br i1 %diff.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %102, -4
  %ind.end = add i64 %indvars.iv689, %n.vec
  %ind.end1030 = add i64 %n.vec, %124
  %invariant.gep1616 = getelementptr double, ptr %3, i64 %124
  %134 = getelementptr double, ptr %invariant.gep981, i64 %indvars.iv689
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %gep1617 = getelementptr double, ptr %invariant.gep1616, i64 %index
  %135 = getelementptr inbounds i8, ptr %gep1617, i64 16
  %wide.load = load <2 x double>, ptr %gep1617, align 8, !tbaa !9
  %wide.load1033 = load <2 x double>, ptr %135, align 8, !tbaa !9
  %136 = getelementptr double, ptr %134, i64 %index
  %137 = getelementptr i8, ptr %136, i64 16
  store <2 x double> %wide.load, ptr %136, align 8, !tbaa !9
  store <2 x double> %wide.load1033, ptr %137, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 4
  %138 = icmp eq i64 %index.next, %n.vec
  br i1 %138, label %middle.block, label %vector.body, !llvm.loop !18

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

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %indvars.iv679 = phi i64 [ %indvars.iv.next680.3, %.lr.ph ], [ %indvars.iv679.unr, %.lr.ph.prol.loopexit ]
  %indvars.iv = phi i64 [ %indvars.iv.next.3, %.lr.ph ], [ %indvars.iv.unr, %.lr.ph.prol.loopexit ]
  %139 = getelementptr inbounds double, ptr %3, i64 %indvars.iv
  %140 = load double, ptr %139, align 8, !tbaa !9
  %141 = mul nsw i64 %indvars.iv679, %91
  %gep = getelementptr double, ptr %invariant.gep, i64 %141
  store double %140, ptr %gep, align 8, !tbaa !9
  %indvars.iv.next680 = add nsw i64 %indvars.iv679, 1
  %gep1611 = getelementptr double, ptr %invariant.gep1610, i64 %indvars.iv
  %142 = load double, ptr %gep1611, align 8, !tbaa !9
  %143 = mul nsw i64 %indvars.iv.next680, %91
  %gep.1 = getelementptr double, ptr %invariant.gep, i64 %143
  store double %142, ptr %gep.1, align 8, !tbaa !9
  %indvars.iv.next680.1 = add nsw i64 %indvars.iv679, 2
  %gep1613 = getelementptr double, ptr %invariant.gep1612, i64 %indvars.iv
  %144 = load double, ptr %gep1613, align 8, !tbaa !9
  %145 = mul nsw i64 %indvars.iv.next680.1, %91
  %gep.2 = getelementptr double, ptr %invariant.gep, i64 %145
  store double %144, ptr %gep.2, align 8, !tbaa !9
  %indvars.iv.next680.2 = add nsw i64 %indvars.iv679, 3
  %gep1615 = getelementptr double, ptr %invariant.gep1614, i64 %indvars.iv
  %146 = load double, ptr %gep1615, align 8, !tbaa !9
  %147 = mul nsw i64 %indvars.iv.next680.2, %91
  %gep.3 = getelementptr double, ptr %invariant.gep, i64 %147
  store double %146, ptr %gep.3, align 8, !tbaa !9
  %indvars.iv.next.3 = add nsw i64 %indvars.iv, 4
  %indvars.iv.next680.3 = add nsw i64 %indvars.iv679, 4
  %lftr.wideiv.3 = trunc i64 %indvars.iv.next680.3 to i32
  %exitcond.not.3 = icmp eq i32 %indvars.iv684, %lftr.wideiv.3
  br i1 %exitcond.not.3, label %.preheader484.loopexit, label %.lr.ph, !llvm.loop !19

scalar.ph:                                        ; preds = %scalar.ph, %scalar.ph.preheader.new
  %indvars.iv691 = phi i64 [ %indvars.iv691.unr, %scalar.ph.preheader.new ], [ %indvars.iv.next692.3, %scalar.ph ]
  %indvars.iv687 = phi i64 [ %indvars.iv687.unr, %scalar.ph.preheader.new ], [ %indvars.iv.next688.3, %scalar.ph ]
  %148 = getelementptr inbounds double, ptr %3, i64 %indvars.iv687
  %149 = load double, ptr %148, align 8, !tbaa !9
  %gep982 = getelementptr double, ptr %invariant.gep981, i64 %indvars.iv691
  store double %149, ptr %gep982, align 8, !tbaa !9
  %gep1619 = getelementptr double, ptr %invariant.gep1618, i64 %indvars.iv687
  %150 = load double, ptr %gep1619, align 8, !tbaa !9
  %gep1621 = getelementptr double, ptr %invariant.gep1620, i64 %indvars.iv691
  store double %150, ptr %gep1621, align 8, !tbaa !9
  %gep1623 = getelementptr double, ptr %invariant.gep1622, i64 %indvars.iv687
  %151 = load double, ptr %gep1623, align 8, !tbaa !9
  %gep1625 = getelementptr double, ptr %invariant.gep1624, i64 %indvars.iv691
  store double %151, ptr %gep1625, align 8, !tbaa !9
  %gep1627 = getelementptr double, ptr %invariant.gep1626, i64 %indvars.iv687
  %152 = load double, ptr %gep1627, align 8, !tbaa !9
  %gep1629 = getelementptr double, ptr %invariant.gep1628, i64 %indvars.iv691
  store double %152, ptr %gep1629, align 8, !tbaa !9
  %indvars.iv.next688.3 = add nsw i64 %indvars.iv687, 4
  %indvars.iv.next692.3 = add nuw nsw i64 %indvars.iv691, 4
  %exitcond696.not.3 = icmp eq i64 %indvars.iv.next692.3, %wide.trip.count
  br i1 %exitcond696.not.3, label %._crit_edge.loopexit, label %scalar.ph, !llvm.loop !20

._crit_edge.loopexit:                             ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %indvars.iv.next688.lcssa = phi i64 [ %ind.end1030, %middle.block ], [ %indvars.iv.next688.lcssa1553.unr, %scalar.ph.prol.loopexit ], [ %indvars.iv.next688.3, %scalar.ph ]
  %153 = trunc nsw i64 %indvars.iv.next688.lcssa to i32
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader484
  %.2.lcssa = phi i32 [ %.1.lcssa, %.preheader484 ], [ %153, %._crit_edge.loopexit ]
  %indvars.iv.next690 = add nuw nsw i64 %indvars.iv689, 1
  %indvars.iv.next685 = add i32 %indvars.iv684, 1
  %exitcond699.not = icmp eq i64 %indvars.iv.next690, %wide.trip.count698
  br i1 %exitcond699.not, label %.loopexit, label %.lr.ph498, !llvm.loop !21

.preheader482.preheader:                          ; preds = %88
  %154 = sub nsw i32 %80, %62
  %155 = xor i32 %81, -1
  %156 = add nsw i32 %62, %155
  %157 = sext i32 %53 to i64
  %158 = zext nneg i32 %62 to i64
  %159 = shl nuw nsw i64 %158, 3
  %160 = add i64 %159, %47
  %161 = add i64 %160, -8
  %162 = add nuw nsw i64 %158, 2305843009213693951
  %163 = mul i64 %162, %157
  %164 = shl i64 %163, 3
  %165 = add i64 %164, %45
  %166 = mul nsw i64 %157, -8
  %invariant.gep1632 = getelementptr i8, ptr %3, i64 8
  %invariant.gep1636 = getelementptr i8, ptr %3, i64 16
  %invariant.gep1640 = getelementptr i8, ptr %3, i64 24
  %ident.check1055.not = icmp eq i32 %53, 1
  br label %.preheader482

.preheader482:                                    ; preds = %.preheader482.preheader, %._crit_edge510
  %indvar = phi i64 [ 0, %.preheader482.preheader ], [ %indvar.next, %._crit_edge510 ]
  %indvars.iv719 = phi i64 [ %158, %.preheader482.preheader ], [ %indvars.iv.next720, %._crit_edge510 ]
  %indvars.iv712 = phi i32 [ %156, %.preheader482.preheader ], [ %indvars.iv.next713, %._crit_edge510 ]
  %.3515 = phi i32 [ %154, %.preheader482.preheader ], [ %212, %._crit_edge510 ]
  %167 = and i64 %indvars.iv719, 4294967295
  %168 = and i64 %indvars.iv719, 4294967295
  %169 = mul i64 %166, %indvar
  %170 = sext i32 %indvars.iv712 to i64
  %171 = add nsw i64 %170, 1
  %smax1058 = tail call i64 @llvm.smax.i64(i64 %89, i64 %171)
  %172 = sub i64 %smax1058, %170
  %173 = add i64 %indvar, %89
  %174 = sext i32 %indvars.iv712 to i64
  %175 = shl nsw i64 %174, 3
  %176 = sext i32 %indvars.iv712 to i64
  %indvars.iv.next720 = add nsw i64 %indvars.iv719, -1
  %.not447.not499 = icmp sgt i64 %indvars.iv719, 0
  br i1 %.not447.not499, label %.lr.ph502, label %._crit_edge503

.lr.ph502:                                        ; preds = %.preheader482
  %177 = mul nsw i64 %indvars.iv.next720, %157
  %178 = sext i32 %.3515 to i64
  %wide.trip.count708 = and i64 %indvars.iv719, 4294967295
  %invariant.gep983 = getelementptr double, ptr %4, i64 %177
  %min.iters.check1081 = icmp ult i64 %168, 4
  br i1 %min.iters.check1081, label %scalar.ph1080.preheader, label %vector.memcheck1077

vector.memcheck1077:                              ; preds = %.lr.ph502
  %179 = shl nsw i64 %178, 3
  %180 = add i64 %165, %169
  %181 = add i64 %179, %44
  %182 = sub i64 %180, %181
  %diff.check1078 = icmp ult i64 %182, 32
  br i1 %diff.check1078, label %scalar.ph1080.preheader, label %vector.ph1082

vector.ph1082:                                    ; preds = %vector.memcheck1077
  %n.mod.vf1083 = and i64 %indvars.iv719, 3
  %n.vec1084 = sub nsw i64 %168, %n.mod.vf1083
  %ind.end1086 = add nsw i64 %n.vec1084, %178
  %invariant.gep1630 = getelementptr double, ptr %3, i64 %178
  br label %vector.body1088

vector.body1088:                                  ; preds = %vector.body1088, %vector.ph1082
  %index1089 = phi i64 [ 0, %vector.ph1082 ], [ %index.next1093, %vector.body1088 ]
  %gep1631 = getelementptr double, ptr %invariant.gep1630, i64 %index1089
  %183 = getelementptr inbounds i8, ptr %gep1631, i64 16
  %wide.load1091 = load <2 x double>, ptr %gep1631, align 8, !tbaa !9
  %wide.load1092 = load <2 x double>, ptr %183, align 8, !tbaa !9
  %184 = getelementptr double, ptr %invariant.gep983, i64 %index1089
  %185 = getelementptr i8, ptr %184, i64 16
  store <2 x double> %wide.load1091, ptr %184, align 8, !tbaa !9
  store <2 x double> %wide.load1092, ptr %185, align 8, !tbaa !9
  %index.next1093 = add nuw i64 %index1089, 4
  %186 = icmp eq i64 %index.next1093, %n.vec1084
  br i1 %186, label %middle.block1079, label %vector.body1088, !llvm.loop !22

middle.block1079:                                 ; preds = %vector.body1088
  %cmp.n1094 = icmp eq i64 %n.mod.vf1083, 0
  br i1 %cmp.n1094, label %._crit_edge503.loopexit, label %scalar.ph1080.preheader

scalar.ph1080.preheader:                          ; preds = %middle.block1079, %vector.memcheck1077, %.lr.ph502
  %indvars.iv703.ph = phi i64 [ 0, %vector.memcheck1077 ], [ 0, %.lr.ph502 ], [ %n.vec1084, %middle.block1079 ]
  %indvars.iv701.ph = phi i64 [ %178, %vector.memcheck1077 ], [ %178, %.lr.ph502 ], [ %ind.end1086, %middle.block1079 ]
  %187 = sub i64 %indvars.iv719, %indvars.iv703.ph
  %xtraiter1557 = and i64 %187, 3
  %lcmp.mod1558.not = icmp eq i64 %xtraiter1557, 0
  br i1 %lcmp.mod1558.not, label %scalar.ph1080.prol.loopexit, label %scalar.ph1080.prol

scalar.ph1080.prol:                               ; preds = %scalar.ph1080.preheader, %scalar.ph1080.prol
  %indvars.iv703.prol = phi i64 [ %indvars.iv.next704.prol, %scalar.ph1080.prol ], [ %indvars.iv703.ph, %scalar.ph1080.preheader ]
  %indvars.iv701.prol = phi i64 [ %indvars.iv.next702.prol, %scalar.ph1080.prol ], [ %indvars.iv701.ph, %scalar.ph1080.preheader ]
  %prol.iter1559 = phi i64 [ %prol.iter1559.next, %scalar.ph1080.prol ], [ 0, %scalar.ph1080.preheader ]
  %188 = getelementptr inbounds double, ptr %3, i64 %indvars.iv701.prol
  %189 = load double, ptr %188, align 8, !tbaa !9
  %gep984.prol = getelementptr double, ptr %invariant.gep983, i64 %indvars.iv703.prol
  store double %189, ptr %gep984.prol, align 8, !tbaa !9
  %indvars.iv.next702.prol = add nsw i64 %indvars.iv701.prol, 1
  %indvars.iv.next704.prol = add nuw nsw i64 %indvars.iv703.prol, 1
  %prol.iter1559.next = add i64 %prol.iter1559, 1
  %prol.iter1559.cmp.not = icmp eq i64 %prol.iter1559.next, %xtraiter1557
  br i1 %prol.iter1559.cmp.not, label %scalar.ph1080.prol.loopexit, label %scalar.ph1080.prol, !llvm.loop !23

scalar.ph1080.prol.loopexit:                      ; preds = %scalar.ph1080.prol, %scalar.ph1080.preheader
  %indvars.iv.next702.lcssa1548.unr = phi i64 [ poison, %scalar.ph1080.preheader ], [ %indvars.iv.next702.prol, %scalar.ph1080.prol ]
  %indvars.iv703.unr = phi i64 [ %indvars.iv703.ph, %scalar.ph1080.preheader ], [ %indvars.iv.next704.prol, %scalar.ph1080.prol ]
  %indvars.iv701.unr = phi i64 [ %indvars.iv701.ph, %scalar.ph1080.preheader ], [ %indvars.iv.next702.prol, %scalar.ph1080.prol ]
  %190 = sub nsw i64 %indvars.iv703.ph, %167
  %191 = icmp ugt i64 %190, -4
  br i1 %191, label %._crit_edge503.loopexit, label %scalar.ph1080.preheader.new

scalar.ph1080.preheader.new:                      ; preds = %scalar.ph1080.prol.loopexit
  %invariant.gep1634 = getelementptr i8, ptr %invariant.gep983, i64 8
  %invariant.gep1638 = getelementptr i8, ptr %invariant.gep983, i64 16
  %invariant.gep1642 = getelementptr i8, ptr %invariant.gep983, i64 24
  br label %scalar.ph1080

scalar.ph1080:                                    ; preds = %scalar.ph1080, %scalar.ph1080.preheader.new
  %indvars.iv703 = phi i64 [ %indvars.iv703.unr, %scalar.ph1080.preheader.new ], [ %indvars.iv.next704.3, %scalar.ph1080 ]
  %indvars.iv701 = phi i64 [ %indvars.iv701.unr, %scalar.ph1080.preheader.new ], [ %indvars.iv.next702.3, %scalar.ph1080 ]
  %192 = getelementptr inbounds double, ptr %3, i64 %indvars.iv701
  %193 = load double, ptr %192, align 8, !tbaa !9
  %gep984 = getelementptr double, ptr %invariant.gep983, i64 %indvars.iv703
  store double %193, ptr %gep984, align 8, !tbaa !9
  %gep1633 = getelementptr double, ptr %invariant.gep1632, i64 %indvars.iv701
  %194 = load double, ptr %gep1633, align 8, !tbaa !9
  %gep1635 = getelementptr double, ptr %invariant.gep1634, i64 %indvars.iv703
  store double %194, ptr %gep1635, align 8, !tbaa !9
  %gep1637 = getelementptr double, ptr %invariant.gep1636, i64 %indvars.iv701
  %195 = load double, ptr %gep1637, align 8, !tbaa !9
  %gep1639 = getelementptr double, ptr %invariant.gep1638, i64 %indvars.iv703
  store double %195, ptr %gep1639, align 8, !tbaa !9
  %gep1641 = getelementptr double, ptr %invariant.gep1640, i64 %indvars.iv701
  %196 = load double, ptr %gep1641, align 8, !tbaa !9
  %gep1643 = getelementptr double, ptr %invariant.gep1642, i64 %indvars.iv703
  store double %196, ptr %gep1643, align 8, !tbaa !9
  %indvars.iv.next702.3 = add nsw i64 %indvars.iv701, 4
  %indvars.iv.next704.3 = add nuw nsw i64 %indvars.iv703, 4
  %exitcond709.not.3 = icmp eq i64 %indvars.iv.next704.3, %wide.trip.count708
  br i1 %exitcond709.not.3, label %._crit_edge503.loopexit, label %scalar.ph1080, !llvm.loop !24

._crit_edge503.loopexit:                          ; preds = %scalar.ph1080.prol.loopexit, %scalar.ph1080, %middle.block1079
  %indvars.iv.next702.lcssa = phi i64 [ %ind.end1086, %middle.block1079 ], [ %indvars.iv.next702.lcssa1548.unr, %scalar.ph1080.prol.loopexit ], [ %indvars.iv.next702.3, %scalar.ph1080 ]
  %197 = trunc nsw i64 %indvars.iv.next702.lcssa to i32
  br label %._crit_edge503

._crit_edge503:                                   ; preds = %._crit_edge503.loopexit, %.preheader482
  %.4.lcssa = phi i32 [ %.3515, %.preheader482 ], [ %197, %._crit_edge503.loopexit ]
  %198 = sub nsw i64 %indvars.iv.next720, %89
  %.not448.not505 = icmp slt i64 %198, %89
  br i1 %.not448.not505, label %.lr.ph509.preheader, label %._crit_edge510

.lr.ph509.preheader:                              ; preds = %._crit_edge503
  %199 = sext i32 %.4.lcssa to i64
  %invariant.gep985 = getelementptr double, ptr %4, i64 %198
  %min.iters.check1061 = icmp ugt i64 %172, 5
  %or.cond1499 = select i1 %min.iters.check1061, i1 %ident.check1055.not, i1 false
  br i1 %or.cond1499, label %vector.memcheck1056, label %.lr.ph509.preheader1546

vector.memcheck1056:                              ; preds = %.lr.ph509.preheader
  %200 = add i64 %161, %175
  %201 = add i64 %173, %199
  %202 = shl i64 %201, 3
  %203 = add i64 %202, %46
  %204 = sub i64 %200, %203
  %diff.check1057 = icmp ult i64 %204, 32
  br i1 %diff.check1057, label %.lr.ph509.preheader1546, label %vector.ph1062

vector.ph1062:                                    ; preds = %vector.memcheck1056
  %n.vec1064 = and i64 %172, -4
  %ind.end1065 = add i64 %n.vec1064, %176
  %ind.end1067 = add i64 %n.vec1064, %199
  %invariant.gep1644 = getelementptr double, ptr %3, i64 %199
  %invariant.gep1646 = getelementptr double, ptr %invariant.gep985, i64 %176
  br label %vector.body1069

vector.body1069:                                  ; preds = %vector.body1069, %vector.ph1062
  %index1070 = phi i64 [ 0, %vector.ph1062 ], [ %index.next1075, %vector.body1069 ]
  %gep1645 = getelementptr double, ptr %invariant.gep1644, i64 %index1070
  %205 = getelementptr inbounds i8, ptr %gep1645, i64 16
  %wide.load1073 = load <2 x double>, ptr %gep1645, align 8, !tbaa !9
  %wide.load1074 = load <2 x double>, ptr %205, align 8, !tbaa !9
  %gep1647 = getelementptr double, ptr %invariant.gep1646, i64 %index1070
  %206 = getelementptr i8, ptr %gep1647, i64 16
  store <2 x double> %wide.load1073, ptr %gep1647, align 8, !tbaa !9
  store <2 x double> %wide.load1074, ptr %206, align 8, !tbaa !9
  %index.next1075 = add nuw i64 %index1070, 4
  %207 = icmp eq i64 %index.next1075, %n.vec1064
  br i1 %207, label %middle.block1059, label %vector.body1069, !llvm.loop !25

middle.block1059:                                 ; preds = %vector.body1069
  %cmp.n1076 = icmp eq i64 %172, %n.vec1064
  br i1 %cmp.n1076, label %._crit_edge510.loopexit, label %.lr.ph509.preheader1546

.lr.ph509.preheader1546:                          ; preds = %middle.block1059, %vector.memcheck1056, %.lr.ph509.preheader
  %indvars.iv714.ph = phi i64 [ %176, %vector.memcheck1056 ], [ %176, %.lr.ph509.preheader ], [ %ind.end1065, %middle.block1059 ]
  %indvars.iv710.ph = phi i64 [ %199, %vector.memcheck1056 ], [ %199, %.lr.ph509.preheader ], [ %ind.end1067, %middle.block1059 ]
  br label %.lr.ph509

.lr.ph509:                                        ; preds = %.lr.ph509.preheader1546, %.lr.ph509
  %indvars.iv714 = phi i64 [ %indvars.iv.next715, %.lr.ph509 ], [ %indvars.iv714.ph, %.lr.ph509.preheader1546 ]
  %indvars.iv710 = phi i64 [ %indvars.iv.next711, %.lr.ph509 ], [ %indvars.iv710.ph, %.lr.ph509.preheader1546 ]
  %208 = getelementptr inbounds double, ptr %3, i64 %indvars.iv710
  %209 = load double, ptr %208, align 8, !tbaa !9
  %210 = mul nsw i64 %indvars.iv714, %157
  %gep986 = getelementptr double, ptr %invariant.gep985, i64 %210
  store double %209, ptr %gep986, align 8, !tbaa !9
  %indvars.iv.next711 = add nsw i64 %indvars.iv710, 1
  %indvars.iv.next715 = add nsw i64 %indvars.iv714, 1
  %.not448.not = icmp slt i64 %indvars.iv.next715, %89
  br i1 %.not448.not, label %.lr.ph509, label %._crit_edge510.loopexit, !llvm.loop !26

._crit_edge510.loopexit:                          ; preds = %.lr.ph509, %middle.block1059
  %indvars.iv.next711.lcssa = phi i64 [ %ind.end1067, %middle.block1059 ], [ %indvars.iv.next711, %.lr.ph509 ]
  %211 = trunc nsw i64 %indvars.iv.next711.lcssa to i32
  br label %._crit_edge510

._crit_edge510:                                   ; preds = %._crit_edge510.loopexit, %._crit_edge503
  %.5.lcssa = phi i32 [ %.4.lcssa, %._crit_edge503 ], [ %211, %._crit_edge510.loopexit ]
  %212 = sub nsw i32 %.5.lcssa, %spec.select452
  %.not446.not = icmp sgt i64 %indvars.iv.next720, %89
  %indvars.iv.next713 = add i32 %indvars.iv712, -1
  %indvar.next = add i64 %indvar, 1
  br i1 %.not446.not, label %.preheader482, label %.loopexit, !llvm.loop !27

213:                                              ; preds = %86
  br i1 %.not413, label %.preheader478.us.preheader, label %.preheader481.preheader

.preheader481.preheader:                          ; preds = %213
  %214 = sext i32 %53 to i64
  %215 = zext nneg i32 %62 to i64
  %216 = sext i32 %82 to i64
  %wide.trip.count752 = zext nneg i32 %81 to i64
  %217 = mul nsw i64 %216, %214
  %218 = shl i64 %217, 3
  %219 = add i64 %218, %43
  %220 = sub i64 %219, %42
  %221 = shl nsw i64 %214, 3
  %ident.check1117.not = icmp eq i32 %53, 1
  %invariant.gep1650 = getelementptr i8, ptr %3, i64 8
  br label %.preheader481

.preheader481:                                    ; preds = %.preheader481.preheader, %._crit_edge524
  %indvars.iv747 = phi i64 [ 0, %.preheader481.preheader ], [ %indvars.iv.next748, %._crit_edge524 ]
  %indvars.iv745 = phi i64 [ 1, %.preheader481.preheader ], [ %indvars.iv.next746, %._crit_edge524 ]
  %indvars.iv738 = phi i32 [ %82, %.preheader481.preheader ], [ %indvars.iv.next739, %._crit_edge524 ]
  %.6528 = phi i32 [ 0, %.preheader481.preheader ], [ %.8.lcssa, %._crit_edge524 ]
  %222 = sext i32 %indvars.iv738 to i64
  %223 = add nsw i64 %222, 1
  %smax1097 = tail call i64 @llvm.smax.i64(i64 %223, i64 %215)
  %224 = sub i64 %smax1097, %222
  %225 = mul i64 %221, %indvars.iv747
  %226 = add i64 %220, %225
  %227 = sext i32 %indvars.iv738 to i64
  %228 = shl nsw i64 %227, 3
  %229 = sext i32 %indvars.iv738 to i64
  %230 = sext i32 %.6528 to i64
  %invariant.gep987 = getelementptr double, ptr %4, i64 %indvars.iv747
  %min.iters.check1122 = icmp ugt i64 %indvars.iv745, 3
  %or.cond1500 = select i1 %min.iters.check1122, i1 %ident.check1117.not, i1 false
  br i1 %or.cond1500, label %vector.memcheck1118, label %scalar.ph1121.preheader

vector.memcheck1118:                              ; preds = %.preheader481
  %231 = shl nuw nsw i64 %indvars.iv747, 3
  %232 = shl nsw i64 %230, 3
  %233 = add i64 %231, %41
  %234 = add i64 %232, %40
  %235 = sub i64 %233, %234
  %diff.check1119 = icmp ult i64 %235, 32
  br i1 %diff.check1119, label %scalar.ph1121.preheader, label %vector.ph1123

vector.ph1123:                                    ; preds = %vector.memcheck1118
  %n.vec1125 = and i64 %indvars.iv745, 9223372036854775804
  %ind.end1127 = add i64 %n.vec1125, %230
  %236 = insertelement <2 x i32> <i32 poison, i32 0>, i32 %.6528, i64 0
  %invariant.gep1648 = getelementptr double, ptr %3, i64 %230
  br label %vector.body1129

vector.body1129:                                  ; preds = %vector.body1129, %vector.ph1123
  %index1130 = phi i64 [ 0, %vector.ph1123 ], [ %index.next1135, %vector.body1129 ]
  %vec.phi = phi <2 x i32> [ %236, %vector.ph1123 ], [ %237, %vector.body1129 ]
  %vec.phi1131 = phi <2 x i32> [ zeroinitializer, %vector.ph1123 ], [ %238, %vector.body1129 ]
  %237 = add <2 x i32> %vec.phi, <i32 1, i32 1>
  %238 = add <2 x i32> %vec.phi1131, <i32 1, i32 1>
  %gep1649 = getelementptr double, ptr %invariant.gep1648, i64 %index1130
  %239 = getelementptr inbounds i8, ptr %gep1649, i64 16
  %wide.load1133 = load <2 x double>, ptr %gep1649, align 8, !tbaa !9
  %wide.load1134 = load <2 x double>, ptr %239, align 8, !tbaa !9
  %240 = getelementptr double, ptr %invariant.gep987, i64 %index1130
  %241 = getelementptr i8, ptr %240, i64 16
  store <2 x double> %wide.load1133, ptr %240, align 8, !tbaa !9
  store <2 x double> %wide.load1134, ptr %241, align 8, !tbaa !9
  %index.next1135 = add nuw i64 %index1130, 4
  %242 = icmp eq i64 %index.next1135, %n.vec1125
  br i1 %242, label %middle.block1120, label %vector.body1129, !llvm.loop !28

middle.block1120:                                 ; preds = %vector.body1129
  %bin.rdx = add <2 x i32> %238, %237
  %243 = tail call i32 @llvm.vector.reduce.add.v2i32(<2 x i32> %bin.rdx)
  %cmp.n1136 = icmp eq i64 %indvars.iv745, %n.vec1125
  br i1 %cmp.n1136, label %.loopexit1496, label %scalar.ph1121.preheader

scalar.ph1121.preheader:                          ; preds = %middle.block1120, %vector.memcheck1118, %.preheader481
  %indvars.iv734.in.ph = phi i32 [ %.6528, %vector.memcheck1118 ], [ %.6528, %.preheader481 ], [ %243, %middle.block1120 ]
  %indvars.iv724.ph = phi i64 [ 0, %vector.memcheck1118 ], [ 0, %.preheader481 ], [ %n.vec1125, %middle.block1120 ]
  %indvars.iv722.ph = phi i64 [ %230, %vector.memcheck1118 ], [ %230, %.preheader481 ], [ %ind.end1127, %middle.block1120 ]
  %xtraiter1560 = and i64 %indvars.iv745, 1
  %lcmp.mod1561.not = icmp eq i64 %xtraiter1560, 0
  br i1 %lcmp.mod1561.not, label %scalar.ph1121.prol.loopexit, label %scalar.ph1121.prol

scalar.ph1121.prol:                               ; preds = %scalar.ph1121.preheader
  %indvars.iv734.prol = add i32 %indvars.iv734.in.ph, 1
  %244 = getelementptr inbounds double, ptr %3, i64 %indvars.iv722.ph
  %245 = load double, ptr %244, align 8, !tbaa !9
  %246 = mul nsw i64 %indvars.iv724.ph, %214
  %gep988.prol = getelementptr double, ptr %invariant.gep987, i64 %246
  store double %245, ptr %gep988.prol, align 8, !tbaa !9
  %indvars.iv.next723.prol = add nsw i64 %indvars.iv722.ph, 1
  %indvars.iv.next725.prol = or disjoint i64 %indvars.iv724.ph, 1
  br label %scalar.ph1121.prol.loopexit

scalar.ph1121.prol.loopexit:                      ; preds = %scalar.ph1121.prol, %scalar.ph1121.preheader
  %indvars.iv734.lcssa1545.unr = phi i32 [ poison, %scalar.ph1121.preheader ], [ %indvars.iv734.prol, %scalar.ph1121.prol ]
  %indvars.iv.next723.lcssa1544.unr = phi i64 [ poison, %scalar.ph1121.preheader ], [ %indvars.iv.next723.prol, %scalar.ph1121.prol ]
  %indvars.iv734.in.unr = phi i32 [ %indvars.iv734.in.ph, %scalar.ph1121.preheader ], [ %indvars.iv734.prol, %scalar.ph1121.prol ]
  %indvars.iv724.unr = phi i64 [ %indvars.iv724.ph, %scalar.ph1121.preheader ], [ %indvars.iv.next725.prol, %scalar.ph1121.prol ]
  %indvars.iv722.unr = phi i64 [ %indvars.iv722.ph, %scalar.ph1121.preheader ], [ %indvars.iv.next723.prol, %scalar.ph1121.prol ]
  %247 = icmp eq i64 %indvars.iv747, %indvars.iv724.ph
  br i1 %247, label %.loopexit1496, label %scalar.ph1121

scalar.ph1121:                                    ; preds = %scalar.ph1121.prol.loopexit, %scalar.ph1121
  %indvars.iv734.in = phi i32 [ %indvars.iv734.1, %scalar.ph1121 ], [ %indvars.iv734.in.unr, %scalar.ph1121.prol.loopexit ]
  %indvars.iv724 = phi i64 [ %indvars.iv.next725.1, %scalar.ph1121 ], [ %indvars.iv724.unr, %scalar.ph1121.prol.loopexit ]
  %indvars.iv722 = phi i64 [ %indvars.iv.next723.1, %scalar.ph1121 ], [ %indvars.iv722.unr, %scalar.ph1121.prol.loopexit ]
  %248 = getelementptr inbounds double, ptr %3, i64 %indvars.iv722
  %249 = load double, ptr %248, align 8, !tbaa !9
  %250 = mul nsw i64 %indvars.iv724, %214
  %gep988 = getelementptr double, ptr %invariant.gep987, i64 %250
  store double %249, ptr %gep988, align 8, !tbaa !9
  %indvars.iv.next725 = add nuw nsw i64 %indvars.iv724, 1
  %indvars.iv734.1 = add i32 %indvars.iv734.in, 2
  %gep1651 = getelementptr double, ptr %invariant.gep1650, i64 %indvars.iv722
  %251 = load double, ptr %gep1651, align 8, !tbaa !9
  %252 = mul nsw i64 %indvars.iv.next725, %214
  %gep988.1 = getelementptr double, ptr %invariant.gep987, i64 %252
  store double %251, ptr %gep988.1, align 8, !tbaa !9
  %indvars.iv.next723.1 = add nsw i64 %indvars.iv722, 2
  %indvars.iv.next725.1 = add nuw nsw i64 %indvars.iv724, 2
  %exitcond732.not.1 = icmp eq i64 %indvars.iv.next725.1, %indvars.iv745
  br i1 %exitcond732.not.1, label %.loopexit1496, label %scalar.ph1121, !llvm.loop !29

.loopexit1496:                                    ; preds = %scalar.ph1121.prol.loopexit, %scalar.ph1121, %middle.block1120
  %indvars.iv734.lcssa = phi i32 [ %243, %middle.block1120 ], [ %indvars.iv734.lcssa1545.unr, %scalar.ph1121.prol.loopexit ], [ %indvars.iv734.1, %scalar.ph1121 ]
  %indvars.iv.next723.lcssa = phi i64 [ %ind.end1127, %middle.block1120 ], [ %indvars.iv.next723.lcssa1544.unr, %scalar.ph1121.prol.loopexit ], [ %indvars.iv.next723.1, %scalar.ph1121 ]
  %253 = add nsw i64 %indvars.iv747, %216
  %.not445.not519 = icmp slt i64 %253, %215
  br i1 %.not445.not519, label %.lr.ph523, label %._crit_edge524

.lr.ph523:                                        ; preds = %.loopexit1496
  %254 = mul nsw i64 %253, %214
  %255 = sext i32 %indvars.iv734.lcssa to i64
  %invariant.gep989 = getelementptr double, ptr %4, i64 %254
  %min.iters.check1100 = icmp ult i64 %224, 4
  br i1 %min.iters.check1100, label %scalar.ph1099.preheader, label %vector.memcheck1095

vector.memcheck1095:                              ; preds = %.lr.ph523
  %256 = add i64 %226, %228
  %257 = shl nsw i64 %255, 3
  %258 = sub i64 %256, %257
  %diff.check1096 = icmp ult i64 %258, 32
  br i1 %diff.check1096, label %scalar.ph1099.preheader, label %vector.ph1101

vector.ph1101:                                    ; preds = %vector.memcheck1095
  %n.vec1103 = and i64 %224, -4
  %ind.end1104 = add i64 %n.vec1103, %229
  %ind.end1106 = add i64 %n.vec1103, %255
  %invariant.gep1652 = getelementptr double, ptr %3, i64 %255
  %invariant.gep1654 = getelementptr double, ptr %invariant.gep989, i64 %229
  br label %vector.body1108

vector.body1108:                                  ; preds = %vector.body1108, %vector.ph1101
  %index1109 = phi i64 [ 0, %vector.ph1101 ], [ %index.next1114, %vector.body1108 ]
  %gep1653 = getelementptr double, ptr %invariant.gep1652, i64 %index1109
  %259 = getelementptr inbounds i8, ptr %gep1653, i64 16
  %wide.load1112 = load <2 x double>, ptr %gep1653, align 8, !tbaa !9
  %wide.load1113 = load <2 x double>, ptr %259, align 8, !tbaa !9
  %gep1655 = getelementptr double, ptr %invariant.gep1654, i64 %index1109
  %260 = getelementptr i8, ptr %gep1655, i64 16
  store <2 x double> %wide.load1112, ptr %gep1655, align 8, !tbaa !9
  store <2 x double> %wide.load1113, ptr %260, align 8, !tbaa !9
  %index.next1114 = add nuw i64 %index1109, 4
  %261 = icmp eq i64 %index.next1114, %n.vec1103
  br i1 %261, label %middle.block1098, label %vector.body1108, !llvm.loop !30

middle.block1098:                                 ; preds = %vector.body1108
  %cmp.n1115 = icmp eq i64 %224, %n.vec1103
  br i1 %cmp.n1115, label %._crit_edge524, label %scalar.ph1099.preheader

scalar.ph1099.preheader:                          ; preds = %middle.block1098, %vector.memcheck1095, %.lr.ph523
  %indvars.iv740.ph = phi i64 [ %229, %vector.memcheck1095 ], [ %229, %.lr.ph523 ], [ %ind.end1104, %middle.block1098 ]
  %indvars.iv736.ph = phi i64 [ %255, %vector.memcheck1095 ], [ %255, %.lr.ph523 ], [ %ind.end1106, %middle.block1098 ]
  br label %scalar.ph1099

scalar.ph1099:                                    ; preds = %scalar.ph1099.preheader, %scalar.ph1099
  %indvars.iv740 = phi i64 [ %indvars.iv.next741, %scalar.ph1099 ], [ %indvars.iv740.ph, %scalar.ph1099.preheader ]
  %indvars.iv736 = phi i64 [ %indvars.iv.next737, %scalar.ph1099 ], [ %indvars.iv736.ph, %scalar.ph1099.preheader ]
  %262 = getelementptr inbounds double, ptr %3, i64 %indvars.iv736
  %263 = load double, ptr %262, align 8, !tbaa !9
  %gep990 = getelementptr double, ptr %invariant.gep989, i64 %indvars.iv740
  store double %263, ptr %gep990, align 8, !tbaa !9
  %indvars.iv.next737 = add nsw i64 %indvars.iv736, 1
  %indvars.iv.next741 = add nsw i64 %indvars.iv740, 1
  %.not445.not = icmp slt i64 %indvars.iv.next741, %215
  br i1 %.not445.not, label %scalar.ph1099, label %._crit_edge524, !llvm.loop !31

._crit_edge524:                                   ; preds = %scalar.ph1099, %middle.block1098, %.loopexit1496
  %.8.lcssa.in = phi i64 [ %indvars.iv.next723.lcssa, %.loopexit1496 ], [ %ind.end1106, %middle.block1098 ], [ %indvars.iv.next737, %scalar.ph1099 ]
  %.8.lcssa = trunc i64 %.8.lcssa.in to i32
  %indvars.iv.next748 = add nuw nsw i64 %indvars.iv747, 1
  %indvars.iv.next746 = add nuw nsw i64 %indvars.iv745, 1
  %indvars.iv.next739 = add i32 %indvars.iv738, 1
  %exitcond753.not = icmp eq i64 %indvars.iv.next748, %wide.trip.count752
  br i1 %exitcond753.not, label %._crit_edge529, label %.preheader481, !llvm.loop !32

._crit_edge529:                                   ; preds = %._crit_edge524
  %.not442.not537 = icmp slt i32 %.0368, %62
  %.not443.not531 = icmp sgt i32 %.0369, 0
  %or.cond = select i1 %.not442.not537, i1 %.not443.not531, i1 false
  br i1 %or.cond, label %.preheader479.us.preheader, label %.loopexit

.preheader479.us.preheader:                       ; preds = %._crit_edge529
  %264 = sext i32 %53 to i64
  %265 = sext i32 %.0368 to i64
  %wide.trip.count766 = zext nneg i32 %62 to i64
  %wide.trip.count761 = zext nneg i32 %.0369 to i64
  %min.iters.check1145 = icmp ugt i32 %.0369, 3
  %ident.check1138.not = icmp eq i32 %53, 1
  %or.cond1501 = select i1 %min.iters.check1145, i1 %ident.check1138.not, i1 false
  %n.vec1148 = and i64 %wide.trip.count761, 2147483644
  %cmp.n1158 = icmp eq i64 %n.vec1148, %wide.trip.count761
  %xtraiter1563 = and i64 %wide.trip.count761, 3
  %lcmp.mod1564.not = icmp eq i64 %xtraiter1563, 0
  %invariant.gep1656 = getelementptr i8, ptr %3, i64 8
  %invariant.gep1658 = getelementptr i8, ptr %3, i64 16
  %invariant.gep1660 = getelementptr i8, ptr %3, i64 24
  br label %.preheader479.us

.preheader479.us:                                 ; preds = %.preheader479.us.preheader, %._crit_edge535.us
  %indvar1140 = phi i64 [ 0, %.preheader479.us.preheader ], [ %indvar.next1141, %._crit_edge535.us ]
  %indvars.iv763 = phi i64 [ %265, %.preheader479.us.preheader ], [ %indvars.iv.next764, %._crit_edge535.us ]
  %.9539.us = phi i64 [ %.8.lcssa.in, %.preheader479.us.preheader ], [ %indvars.iv.next755.lcssa, %._crit_edge535.us ]
  %sext = shl i64 %.9539.us, 32
  %266 = ashr exact i64 %sext, 32
  %invariant.gep991 = getelementptr double, ptr %4, i64 %indvars.iv763
  br i1 %or.cond1501, label %vector.memcheck1139, label %scalar.ph1144.preheader

vector.memcheck1139:                              ; preds = %.preheader479.us
  %267 = ashr exact i64 %sext, 29
  %268 = add i64 %indvar1140, %265
  %269 = shl i64 %268, 3
  %270 = add i64 %269, %39
  %271 = add i64 %267, %38
  %272 = sub i64 %270, %271
  %diff.check1142 = icmp ult i64 %272, 32
  br i1 %diff.check1142, label %scalar.ph1144.preheader, label %vector.ph1146

vector.ph1146:                                    ; preds = %vector.memcheck1139
  %ind.end1150 = add nsw i64 %266, %n.vec1148
  %273 = getelementptr double, ptr %3, i64 %266
  br label %vector.body1152

vector.body1152:                                  ; preds = %vector.body1152, %vector.ph1146
  %index1153 = phi i64 [ 0, %vector.ph1146 ], [ %index.next1157, %vector.body1152 ]
  %274 = getelementptr double, ptr %273, i64 %index1153
  %275 = getelementptr inbounds i8, ptr %274, i64 16
  %wide.load1155 = load <2 x double>, ptr %274, align 8, !tbaa !9
  %wide.load1156 = load <2 x double>, ptr %275, align 8, !tbaa !9
  %276 = getelementptr double, ptr %invariant.gep991, i64 %index1153
  %277 = getelementptr i8, ptr %276, i64 16
  store <2 x double> %wide.load1155, ptr %276, align 8, !tbaa !9
  store <2 x double> %wide.load1156, ptr %277, align 8, !tbaa !9
  %index.next1157 = add nuw i64 %index1153, 4
  %278 = icmp eq i64 %index.next1157, %n.vec1148
  br i1 %278, label %middle.block1143, label %vector.body1152, !llvm.loop !33

middle.block1143:                                 ; preds = %vector.body1152
  br i1 %cmp.n1158, label %._crit_edge535.us, label %scalar.ph1144.preheader

scalar.ph1144.preheader:                          ; preds = %middle.block1143, %vector.memcheck1139, %.preheader479.us
  %indvars.iv756.ph = phi i64 [ 0, %vector.memcheck1139 ], [ 0, %.preheader479.us ], [ %n.vec1148, %middle.block1143 ]
  %indvars.iv754.ph = phi i64 [ %266, %vector.memcheck1139 ], [ %266, %.preheader479.us ], [ %ind.end1150, %middle.block1143 ]
  br i1 %lcmp.mod1564.not, label %scalar.ph1144.prol.loopexit, label %scalar.ph1144.prol

scalar.ph1144.prol:                               ; preds = %scalar.ph1144.preheader, %scalar.ph1144.prol
  %indvars.iv756.prol = phi i64 [ %indvars.iv.next757.prol, %scalar.ph1144.prol ], [ %indvars.iv756.ph, %scalar.ph1144.preheader ]
  %indvars.iv754.prol = phi i64 [ %indvars.iv.next755.prol, %scalar.ph1144.prol ], [ %indvars.iv754.ph, %scalar.ph1144.preheader ]
  %prol.iter1565 = phi i64 [ %prol.iter1565.next, %scalar.ph1144.prol ], [ 0, %scalar.ph1144.preheader ]
  %279 = getelementptr inbounds double, ptr %3, i64 %indvars.iv754.prol
  %280 = load double, ptr %279, align 8, !tbaa !9
  %281 = mul nsw i64 %indvars.iv756.prol, %264
  %gep992.prol = getelementptr double, ptr %invariant.gep991, i64 %281
  store double %280, ptr %gep992.prol, align 8, !tbaa !9
  %indvars.iv.next755.prol = add nsw i64 %indvars.iv754.prol, 1
  %indvars.iv.next757.prol = add nuw nsw i64 %indvars.iv756.prol, 1
  %prol.iter1565.next = add i64 %prol.iter1565, 1
  %prol.iter1565.cmp.not = icmp eq i64 %prol.iter1565.next, %xtraiter1563
  br i1 %prol.iter1565.cmp.not, label %scalar.ph1144.prol.loopexit, label %scalar.ph1144.prol, !llvm.loop !34

scalar.ph1144.prol.loopexit:                      ; preds = %scalar.ph1144.prol, %scalar.ph1144.preheader
  %indvars.iv.next755.lcssa1541.unr = phi i64 [ poison, %scalar.ph1144.preheader ], [ %indvars.iv.next755.prol, %scalar.ph1144.prol ]
  %indvars.iv756.unr = phi i64 [ %indvars.iv756.ph, %scalar.ph1144.preheader ], [ %indvars.iv.next757.prol, %scalar.ph1144.prol ]
  %indvars.iv754.unr = phi i64 [ %indvars.iv754.ph, %scalar.ph1144.preheader ], [ %indvars.iv.next755.prol, %scalar.ph1144.prol ]
  %282 = sub nsw i64 %indvars.iv756.ph, %wide.trip.count761
  %283 = icmp ugt i64 %282, -4
  br i1 %283, label %._crit_edge535.us, label %scalar.ph1144

scalar.ph1144:                                    ; preds = %scalar.ph1144.prol.loopexit, %scalar.ph1144
  %indvars.iv756 = phi i64 [ %indvars.iv.next757.3, %scalar.ph1144 ], [ %indvars.iv756.unr, %scalar.ph1144.prol.loopexit ]
  %indvars.iv754 = phi i64 [ %indvars.iv.next755.3, %scalar.ph1144 ], [ %indvars.iv754.unr, %scalar.ph1144.prol.loopexit ]
  %284 = getelementptr inbounds double, ptr %3, i64 %indvars.iv754
  %285 = load double, ptr %284, align 8, !tbaa !9
  %286 = mul nsw i64 %indvars.iv756, %264
  %gep992 = getelementptr double, ptr %invariant.gep991, i64 %286
  store double %285, ptr %gep992, align 8, !tbaa !9
  %indvars.iv.next757 = add nuw nsw i64 %indvars.iv756, 1
  %gep1657 = getelementptr double, ptr %invariant.gep1656, i64 %indvars.iv754
  %287 = load double, ptr %gep1657, align 8, !tbaa !9
  %288 = mul nsw i64 %indvars.iv.next757, %264
  %gep992.1 = getelementptr double, ptr %invariant.gep991, i64 %288
  store double %287, ptr %gep992.1, align 8, !tbaa !9
  %indvars.iv.next757.1 = add nuw nsw i64 %indvars.iv756, 2
  %gep1659 = getelementptr double, ptr %invariant.gep1658, i64 %indvars.iv754
  %289 = load double, ptr %gep1659, align 8, !tbaa !9
  %290 = mul nsw i64 %indvars.iv.next757.1, %264
  %gep992.2 = getelementptr double, ptr %invariant.gep991, i64 %290
  store double %289, ptr %gep992.2, align 8, !tbaa !9
  %indvars.iv.next757.2 = add nuw nsw i64 %indvars.iv756, 3
  %gep1661 = getelementptr double, ptr %invariant.gep1660, i64 %indvars.iv754
  %291 = load double, ptr %gep1661, align 8, !tbaa !9
  %292 = mul nsw i64 %indvars.iv.next757.2, %264
  %gep992.3 = getelementptr double, ptr %invariant.gep991, i64 %292
  store double %291, ptr %gep992.3, align 8, !tbaa !9
  %indvars.iv.next755.3 = add nsw i64 %indvars.iv754, 4
  %indvars.iv.next757.3 = add nuw nsw i64 %indvars.iv756, 4
  %exitcond762.not.3 = icmp eq i64 %indvars.iv.next757.3, %wide.trip.count761
  br i1 %exitcond762.not.3, label %._crit_edge535.us, label %scalar.ph1144, !llvm.loop !35

._crit_edge535.us:                                ; preds = %scalar.ph1144.prol.loopexit, %scalar.ph1144, %middle.block1143
  %indvars.iv.next755.lcssa = phi i64 [ %ind.end1150, %middle.block1143 ], [ %indvars.iv.next755.lcssa1541.unr, %scalar.ph1144.prol.loopexit ], [ %indvars.iv.next755.3, %scalar.ph1144 ]
  %indvars.iv.next764 = add nsw i64 %indvars.iv763, 1
  %exitcond767.not = icmp eq i64 %indvars.iv.next764, %wide.trip.count766
  %indvar.next1141 = add i64 %indvar1140, 1
  br i1 %exitcond767.not, label %.loopexit, label %.preheader479.us, !llvm.loop !36

.preheader478.us.preheader:                       ; preds = %213
  %293 = zext nneg i32 %81 to i64
  %294 = sext i32 %53 to i64
  %295 = add nuw nsw i32 %81, 1
  %wide.trip.count780 = zext nneg i32 %295 to i64
  %wide.trip.count775 = zext nneg i32 %62 to i64
  %296 = sub nsw i64 %wide.trip.count775, %293
  %min.iters.check1165 = icmp ugt i64 %296, 3
  %ident.check1160.not = icmp eq i32 %53, 1
  %or.cond1502 = select i1 %min.iters.check1165, i1 %ident.check1160.not, i1 false
  %n.vec1168 = and i64 %296, -4
  %ind.end1169 = add nsw i64 %n.vec1168, %293
  %cmp.n1180 = icmp eq i64 %296, %n.vec1168
  %invariant.gep1664 = getelementptr i8, ptr %3, i64 8
  %invariant.gep1666 = getelementptr i8, ptr %3, i64 16
  %invariant.gep1668 = getelementptr i8, ptr %3, i64 24
  br label %.preheader478.us

.preheader478.us:                                 ; preds = %.preheader478.us.preheader, %._crit_edge544.us
  %indvars.iv777 = phi i64 [ 0, %.preheader478.us.preheader ], [ %indvars.iv.next778, %._crit_edge544.us ]
  %.11548.us = phi i64 [ 0, %.preheader478.us.preheader ], [ %indvars.iv.next769.lcssa, %._crit_edge544.us ]
  %sext962 = shl i64 %.11548.us, 32
  %297 = ashr exact i64 %sext962, 32
  %invariant.gep993 = getelementptr double, ptr %4, i64 %indvars.iv777
  br i1 %or.cond1502, label %vector.memcheck1161, label %scalar.ph1164.preheader

vector.memcheck1161:                              ; preds = %.preheader478.us
  %298 = ashr exact i64 %sext962, 29
  %299 = add nuw i64 %indvars.iv777, %293
  %300 = shl i64 %299, 3
  %301 = add i64 %300, %37
  %302 = add i64 %298, %36
  %303 = sub i64 %301, %302
  %diff.check1162 = icmp ult i64 %303, 32
  br i1 %diff.check1162, label %scalar.ph1164.preheader, label %vector.ph1166

vector.ph1166:                                    ; preds = %vector.memcheck1161
  %ind.end1171 = add nsw i64 %297, %n.vec1168
  %304 = getelementptr double, ptr %3, i64 %297
  %invariant.gep1662 = getelementptr double, ptr %invariant.gep993, i64 %293
  br label %vector.body1173

vector.body1173:                                  ; preds = %vector.body1173, %vector.ph1166
  %index1174 = phi i64 [ 0, %vector.ph1166 ], [ %index.next1179, %vector.body1173 ]
  %305 = getelementptr double, ptr %304, i64 %index1174
  %306 = getelementptr inbounds i8, ptr %305, i64 16
  %wide.load1177 = load <2 x double>, ptr %305, align 8, !tbaa !9
  %wide.load1178 = load <2 x double>, ptr %306, align 8, !tbaa !9
  %gep1663 = getelementptr double, ptr %invariant.gep1662, i64 %index1174
  %307 = getelementptr i8, ptr %gep1663, i64 16
  store <2 x double> %wide.load1177, ptr %gep1663, align 8, !tbaa !9
  store <2 x double> %wide.load1178, ptr %307, align 8, !tbaa !9
  %index.next1179 = add nuw i64 %index1174, 4
  %308 = icmp eq i64 %index.next1179, %n.vec1168
  br i1 %308, label %middle.block1163, label %vector.body1173, !llvm.loop !37

middle.block1163:                                 ; preds = %vector.body1173
  br i1 %cmp.n1180, label %._crit_edge544.us, label %scalar.ph1164.preheader

scalar.ph1164.preheader:                          ; preds = %middle.block1163, %vector.memcheck1161, %.preheader478.us
  %indvars.iv770.ph = phi i64 [ %293, %vector.memcheck1161 ], [ %293, %.preheader478.us ], [ %ind.end1169, %middle.block1163 ]
  %indvars.iv768.ph = phi i64 [ %297, %vector.memcheck1161 ], [ %297, %.preheader478.us ], [ %ind.end1171, %middle.block1163 ]
  %309 = sub nsw i64 %wide.trip.count775, %indvars.iv770.ph
  %xtraiter1566 = and i64 %309, 3
  %lcmp.mod1567.not = icmp eq i64 %xtraiter1566, 0
  br i1 %lcmp.mod1567.not, label %scalar.ph1164.prol.loopexit, label %scalar.ph1164.prol

scalar.ph1164.prol:                               ; preds = %scalar.ph1164.preheader, %scalar.ph1164.prol
  %indvars.iv770.prol = phi i64 [ %indvars.iv.next771.prol, %scalar.ph1164.prol ], [ %indvars.iv770.ph, %scalar.ph1164.preheader ]
  %indvars.iv768.prol = phi i64 [ %indvars.iv.next769.prol, %scalar.ph1164.prol ], [ %indvars.iv768.ph, %scalar.ph1164.preheader ]
  %prol.iter1568 = phi i64 [ %prol.iter1568.next, %scalar.ph1164.prol ], [ 0, %scalar.ph1164.preheader ]
  %310 = getelementptr inbounds double, ptr %3, i64 %indvars.iv768.prol
  %311 = load double, ptr %310, align 8, !tbaa !9
  %312 = mul nsw i64 %indvars.iv770.prol, %294
  %gep994.prol = getelementptr double, ptr %invariant.gep993, i64 %312
  store double %311, ptr %gep994.prol, align 8, !tbaa !9
  %indvars.iv.next769.prol = add nsw i64 %indvars.iv768.prol, 1
  %indvars.iv.next771.prol = add nuw nsw i64 %indvars.iv770.prol, 1
  %prol.iter1568.next = add i64 %prol.iter1568, 1
  %prol.iter1568.cmp.not = icmp eq i64 %prol.iter1568.next, %xtraiter1566
  br i1 %prol.iter1568.cmp.not, label %scalar.ph1164.prol.loopexit, label %scalar.ph1164.prol, !llvm.loop !38

scalar.ph1164.prol.loopexit:                      ; preds = %scalar.ph1164.prol, %scalar.ph1164.preheader
  %indvars.iv.next769.lcssa1539.unr = phi i64 [ poison, %scalar.ph1164.preheader ], [ %indvars.iv.next769.prol, %scalar.ph1164.prol ]
  %indvars.iv770.unr = phi i64 [ %indvars.iv770.ph, %scalar.ph1164.preheader ], [ %indvars.iv.next771.prol, %scalar.ph1164.prol ]
  %indvars.iv768.unr = phi i64 [ %indvars.iv768.ph, %scalar.ph1164.preheader ], [ %indvars.iv.next769.prol, %scalar.ph1164.prol ]
  %313 = sub nsw i64 %indvars.iv770.ph, %wide.trip.count775
  %314 = icmp ugt i64 %313, -4
  br i1 %314, label %._crit_edge544.us, label %scalar.ph1164

scalar.ph1164:                                    ; preds = %scalar.ph1164.prol.loopexit, %scalar.ph1164
  %indvars.iv770 = phi i64 [ %indvars.iv.next771.3, %scalar.ph1164 ], [ %indvars.iv770.unr, %scalar.ph1164.prol.loopexit ]
  %indvars.iv768 = phi i64 [ %indvars.iv.next769.3, %scalar.ph1164 ], [ %indvars.iv768.unr, %scalar.ph1164.prol.loopexit ]
  %315 = getelementptr inbounds double, ptr %3, i64 %indvars.iv768
  %316 = load double, ptr %315, align 8, !tbaa !9
  %317 = mul nsw i64 %indvars.iv770, %294
  %gep994 = getelementptr double, ptr %invariant.gep993, i64 %317
  store double %316, ptr %gep994, align 8, !tbaa !9
  %indvars.iv.next771 = add nuw nsw i64 %indvars.iv770, 1
  %gep1665 = getelementptr double, ptr %invariant.gep1664, i64 %indvars.iv768
  %318 = load double, ptr %gep1665, align 8, !tbaa !9
  %319 = mul nsw i64 %indvars.iv.next771, %294
  %gep994.1 = getelementptr double, ptr %invariant.gep993, i64 %319
  store double %318, ptr %gep994.1, align 8, !tbaa !9
  %indvars.iv.next771.1 = add nuw nsw i64 %indvars.iv770, 2
  %gep1667 = getelementptr double, ptr %invariant.gep1666, i64 %indvars.iv768
  %320 = load double, ptr %gep1667, align 8, !tbaa !9
  %321 = mul nsw i64 %indvars.iv.next771.1, %294
  %gep994.2 = getelementptr double, ptr %invariant.gep993, i64 %321
  store double %320, ptr %gep994.2, align 8, !tbaa !9
  %indvars.iv.next771.2 = add nuw nsw i64 %indvars.iv770, 3
  %gep1669 = getelementptr double, ptr %invariant.gep1668, i64 %indvars.iv768
  %322 = load double, ptr %gep1669, align 8, !tbaa !9
  %323 = mul nsw i64 %indvars.iv.next771.2, %294
  %gep994.3 = getelementptr double, ptr %invariant.gep993, i64 %323
  store double %322, ptr %gep994.3, align 8, !tbaa !9
  %indvars.iv.next769.3 = add nsw i64 %indvars.iv768, 4
  %indvars.iv.next771.3 = add nuw nsw i64 %indvars.iv770, 4
  %exitcond776.not.3 = icmp eq i64 %indvars.iv.next771.3, %wide.trip.count775
  br i1 %exitcond776.not.3, label %._crit_edge544.us, label %scalar.ph1164, !llvm.loop !39

._crit_edge544.us:                                ; preds = %scalar.ph1164.prol.loopexit, %scalar.ph1164, %middle.block1163
  %indvars.iv.next769.lcssa = phi i64 [ %ind.end1171, %middle.block1163 ], [ %indvars.iv.next769.lcssa1539.unr, %scalar.ph1164.prol.loopexit ], [ %indvars.iv.next769.3, %scalar.ph1164 ]
  %indvars.iv.next778 = add nuw nsw i64 %indvars.iv777, 1
  %exitcond781.not = icmp eq i64 %indvars.iv.next778, %wide.trip.count780
  br i1 %exitcond781.not, label %._crit_edge549, label %.preheader478.us, !llvm.loop !40

._crit_edge549:                                   ; preds = %._crit_edge544.us
  %.not437.not560 = icmp sgt i32 %.0369, 0
  br i1 %.not437.not560, label %.preheader476.preheader, label %.loopexit

.preheader476.preheader:                          ; preds = %._crit_edge549
  %324 = sext i32 %53 to i64
  %325 = zext nneg i32 %62 to i64
  %326 = sext i32 %.0368 to i64
  %wide.trip.count812 = zext nneg i32 %.0369 to i64
  %327 = shl nsw i64 %326, 3
  %328 = add i64 %327, %35
  %329 = sub i64 %328, %34
  %330 = shl nsw i64 %294, 3
  %invariant.gep1670 = getelementptr i8, ptr %3, i64 8
  %invariant.gep1674 = getelementptr i8, ptr %3, i64 16
  %invariant.gep1678 = getelementptr i8, ptr %3, i64 24
  %ident.check1182.not = icmp eq i32 %53, 1
  br label %.preheader476

.preheader476:                                    ; preds = %.preheader476.preheader, %._crit_edge558
  %indvars.iv807 = phi i64 [ 0, %.preheader476.preheader ], [ %indvars.iv.next808, %._crit_edge558 ]
  %indvars.iv805 = phi i64 [ 1, %.preheader476.preheader ], [ %indvars.iv.next806, %._crit_edge558 ]
  %indvars.iv798 = phi i32 [ %.0368, %.preheader476.preheader ], [ %indvars.iv.next799, %._crit_edge558 ]
  %.13562.in = phi i64 [ %indvars.iv.next769.lcssa, %.preheader476.preheader ], [ %.15.lcssa.in, %._crit_edge558 ]
  %.13562 = trunc i64 %.13562.in to i32
  %331 = sext i32 %indvars.iv798 to i64
  %332 = add nsw i64 %331, 1
  %smax1185 = tail call i64 @llvm.smax.i64(i64 %332, i64 %wide.trip.count775)
  %333 = sub i64 %smax1185, %331
  %334 = shl nuw nsw i64 %indvars.iv807, 3
  %335 = add i64 %329, %334
  %336 = sext i32 %indvars.iv798 to i64
  %337 = shl nsw i64 %336, 3
  %338 = sext i32 %indvars.iv798 to i64
  %339 = mul nsw i64 %indvars.iv807, %324
  %sext1497 = shl i64 %.13562.in, 32
  %340 = ashr exact i64 %sext1497, 32
  %invariant.gep995 = getelementptr double, ptr %4, i64 %339
  %min.iters.check1208 = icmp ult i64 %indvars.iv805, 4
  br i1 %min.iters.check1208, label %scalar.ph1207.preheader, label %vector.memcheck1204

vector.memcheck1204:                              ; preds = %.preheader476
  %341 = mul i64 %330, %indvars.iv807
  %342 = ashr exact i64 %sext1497, 29
  %343 = add i64 %341, %33
  %344 = add i64 %342, %32
  %345 = sub i64 %343, %344
  %diff.check1205 = icmp ult i64 %345, 32
  br i1 %diff.check1205, label %scalar.ph1207.preheader, label %vector.ph1209

vector.ph1209:                                    ; preds = %vector.memcheck1204
  %n.vec1211 = and i64 %indvars.iv805, 9223372036854775804
  %ind.end1213 = add i64 %340, %n.vec1211
  %346 = insertelement <2 x i32> <i32 poison, i32 0>, i32 %.13562, i64 0
  %347 = getelementptr double, ptr %3, i64 %340
  br label %vector.body1215

vector.body1215:                                  ; preds = %vector.body1215, %vector.ph1209
  %index1216 = phi i64 [ 0, %vector.ph1209 ], [ %index.next1222, %vector.body1215 ]
  %vec.phi1217 = phi <2 x i32> [ %346, %vector.ph1209 ], [ %348, %vector.body1215 ]
  %vec.phi1218 = phi <2 x i32> [ zeroinitializer, %vector.ph1209 ], [ %349, %vector.body1215 ]
  %348 = add <2 x i32> %vec.phi1217, <i32 1, i32 1>
  %349 = add <2 x i32> %vec.phi1218, <i32 1, i32 1>
  %350 = getelementptr double, ptr %347, i64 %index1216
  %351 = getelementptr inbounds i8, ptr %350, i64 16
  %wide.load1220 = load <2 x double>, ptr %350, align 8, !tbaa !9
  %wide.load1221 = load <2 x double>, ptr %351, align 8, !tbaa !9
  %352 = getelementptr double, ptr %invariant.gep995, i64 %index1216
  %353 = getelementptr i8, ptr %352, i64 16
  store <2 x double> %wide.load1220, ptr %352, align 8, !tbaa !9
  store <2 x double> %wide.load1221, ptr %353, align 8, !tbaa !9
  %index.next1222 = add nuw i64 %index1216, 4
  %354 = icmp eq i64 %index.next1222, %n.vec1211
  br i1 %354, label %middle.block1206, label %vector.body1215, !llvm.loop !41

middle.block1206:                                 ; preds = %vector.body1215
  %bin.rdx1223 = add <2 x i32> %349, %348
  %355 = tail call i32 @llvm.vector.reduce.add.v2i32(<2 x i32> %bin.rdx1223)
  %cmp.n1224 = icmp eq i64 %indvars.iv805, %n.vec1211
  br i1 %cmp.n1224, label %.loopexit1495, label %scalar.ph1207.preheader

scalar.ph1207.preheader:                          ; preds = %middle.block1206, %vector.memcheck1204, %.preheader476
  %indvars.iv794.in.ph = phi i32 [ %.13562, %vector.memcheck1204 ], [ %.13562, %.preheader476 ], [ %355, %middle.block1206 ]
  %indvars.iv785.ph = phi i64 [ 0, %vector.memcheck1204 ], [ 0, %.preheader476 ], [ %n.vec1211, %middle.block1206 ]
  %indvars.iv783.ph = phi i64 [ %340, %vector.memcheck1204 ], [ %340, %.preheader476 ], [ %ind.end1213, %middle.block1206 ]
  %356 = sub nsw i64 %indvars.iv807, %indvars.iv785.ph
  %xtraiter1569 = and i64 %indvars.iv805, 3
  %lcmp.mod1570.not = icmp eq i64 %xtraiter1569, 0
  br i1 %lcmp.mod1570.not, label %scalar.ph1207.prol.loopexit, label %scalar.ph1207.prol

scalar.ph1207.prol:                               ; preds = %scalar.ph1207.preheader, %scalar.ph1207.prol
  %indvars.iv794.in.prol = phi i32 [ %indvars.iv794.prol, %scalar.ph1207.prol ], [ %indvars.iv794.in.ph, %scalar.ph1207.preheader ]
  %indvars.iv785.prol = phi i64 [ %indvars.iv.next786.prol, %scalar.ph1207.prol ], [ %indvars.iv785.ph, %scalar.ph1207.preheader ]
  %indvars.iv783.prol = phi i64 [ %indvars.iv.next784.prol, %scalar.ph1207.prol ], [ %indvars.iv783.ph, %scalar.ph1207.preheader ]
  %prol.iter1571 = phi i64 [ %prol.iter1571.next, %scalar.ph1207.prol ], [ 0, %scalar.ph1207.preheader ]
  %indvars.iv794.prol = add i32 %indvars.iv794.in.prol, 1
  %357 = getelementptr inbounds double, ptr %3, i64 %indvars.iv783.prol
  %358 = load double, ptr %357, align 8, !tbaa !9
  %gep996.prol = getelementptr double, ptr %invariant.gep995, i64 %indvars.iv785.prol
  store double %358, ptr %gep996.prol, align 8, !tbaa !9
  %indvars.iv.next784.prol = add nsw i64 %indvars.iv783.prol, 1
  %indvars.iv.next786.prol = add nuw nsw i64 %indvars.iv785.prol, 1
  %prol.iter1571.next = add i64 %prol.iter1571, 1
  %prol.iter1571.cmp.not = icmp eq i64 %prol.iter1571.next, %xtraiter1569
  br i1 %prol.iter1571.cmp.not, label %scalar.ph1207.prol.loopexit, label %scalar.ph1207.prol, !llvm.loop !42

scalar.ph1207.prol.loopexit:                      ; preds = %scalar.ph1207.prol, %scalar.ph1207.preheader
  %indvars.iv794.lcssa1538.unr = phi i32 [ poison, %scalar.ph1207.preheader ], [ %indvars.iv794.prol, %scalar.ph1207.prol ]
  %indvars.iv.next784.lcssa1537.unr = phi i64 [ poison, %scalar.ph1207.preheader ], [ %indvars.iv.next784.prol, %scalar.ph1207.prol ]
  %indvars.iv794.in.unr = phi i32 [ %indvars.iv794.in.ph, %scalar.ph1207.preheader ], [ %indvars.iv794.prol, %scalar.ph1207.prol ]
  %indvars.iv785.unr = phi i64 [ %indvars.iv785.ph, %scalar.ph1207.preheader ], [ %indvars.iv.next786.prol, %scalar.ph1207.prol ]
  %indvars.iv783.unr = phi i64 [ %indvars.iv783.ph, %scalar.ph1207.preheader ], [ %indvars.iv.next784.prol, %scalar.ph1207.prol ]
  %359 = icmp ult i64 %356, 3
  br i1 %359, label %.loopexit1495, label %scalar.ph1207.preheader.new

scalar.ph1207.preheader.new:                      ; preds = %scalar.ph1207.prol.loopexit
  %invariant.gep1672 = getelementptr i8, ptr %invariant.gep995, i64 8
  %invariant.gep1676 = getelementptr i8, ptr %invariant.gep995, i64 16
  %invariant.gep1680 = getelementptr i8, ptr %invariant.gep995, i64 24
  br label %scalar.ph1207

scalar.ph1207:                                    ; preds = %scalar.ph1207, %scalar.ph1207.preheader.new
  %indvars.iv794.in = phi i32 [ %indvars.iv794.in.unr, %scalar.ph1207.preheader.new ], [ %indvars.iv794.3, %scalar.ph1207 ]
  %indvars.iv785 = phi i64 [ %indvars.iv785.unr, %scalar.ph1207.preheader.new ], [ %indvars.iv.next786.3, %scalar.ph1207 ]
  %indvars.iv783 = phi i64 [ %indvars.iv783.unr, %scalar.ph1207.preheader.new ], [ %indvars.iv.next784.3, %scalar.ph1207 ]
  %360 = getelementptr inbounds double, ptr %3, i64 %indvars.iv783
  %361 = load double, ptr %360, align 8, !tbaa !9
  %gep996 = getelementptr double, ptr %invariant.gep995, i64 %indvars.iv785
  store double %361, ptr %gep996, align 8, !tbaa !9
  %gep1671 = getelementptr double, ptr %invariant.gep1670, i64 %indvars.iv783
  %362 = load double, ptr %gep1671, align 8, !tbaa !9
  %gep1673 = getelementptr double, ptr %invariant.gep1672, i64 %indvars.iv785
  store double %362, ptr %gep1673, align 8, !tbaa !9
  %gep1675 = getelementptr double, ptr %invariant.gep1674, i64 %indvars.iv783
  %363 = load double, ptr %gep1675, align 8, !tbaa !9
  %gep1677 = getelementptr double, ptr %invariant.gep1676, i64 %indvars.iv785
  store double %363, ptr %gep1677, align 8, !tbaa !9
  %indvars.iv794.3 = add i32 %indvars.iv794.in, 4
  %gep1679 = getelementptr double, ptr %invariant.gep1678, i64 %indvars.iv783
  %364 = load double, ptr %gep1679, align 8, !tbaa !9
  %gep1681 = getelementptr double, ptr %invariant.gep1680, i64 %indvars.iv785
  store double %364, ptr %gep1681, align 8, !tbaa !9
  %indvars.iv.next784.3 = add nsw i64 %indvars.iv783, 4
  %indvars.iv.next786.3 = add nuw nsw i64 %indvars.iv785, 4
  %exitcond793.not.3 = icmp eq i64 %indvars.iv.next786.3, %indvars.iv805
  br i1 %exitcond793.not.3, label %.loopexit1495, label %scalar.ph1207, !llvm.loop !43

.loopexit1495:                                    ; preds = %scalar.ph1207.prol.loopexit, %scalar.ph1207, %middle.block1206
  %indvars.iv794.lcssa = phi i32 [ %355, %middle.block1206 ], [ %indvars.iv794.lcssa1538.unr, %scalar.ph1207.prol.loopexit ], [ %indvars.iv794.3, %scalar.ph1207 ]
  %indvars.iv.next784.lcssa = phi i64 [ %ind.end1213, %middle.block1206 ], [ %indvars.iv.next784.lcssa1537.unr, %scalar.ph1207.prol.loopexit ], [ %indvars.iv.next784.3, %scalar.ph1207 ]
  %365 = add nsw i64 %indvars.iv807, %326
  %.not439.not553 = icmp slt i64 %365, %325
  br i1 %.not439.not553, label %.lr.ph557.preheader, label %._crit_edge558

.lr.ph557.preheader:                              ; preds = %.loopexit1495
  %366 = sext i32 %indvars.iv794.lcssa to i64
  %invariant.gep997 = getelementptr double, ptr %4, i64 %365
  %min.iters.check1188 = icmp ugt i64 %333, 5
  %or.cond1503 = select i1 %min.iters.check1188, i1 %ident.check1182.not, i1 false
  br i1 %or.cond1503, label %vector.memcheck1183, label %.lr.ph557.preheader1533

vector.memcheck1183:                              ; preds = %.lr.ph557.preheader
  %367 = add i64 %335, %337
  %368 = shl nsw i64 %366, 3
  %369 = sub i64 %367, %368
  %diff.check1184 = icmp ult i64 %369, 32
  br i1 %diff.check1184, label %.lr.ph557.preheader1533, label %vector.ph1189

vector.ph1189:                                    ; preds = %vector.memcheck1183
  %n.vec1191 = and i64 %333, -4
  %ind.end1192 = add i64 %n.vec1191, %338
  %ind.end1194 = add i64 %n.vec1191, %366
  %invariant.gep1682 = getelementptr double, ptr %3, i64 %366
  %invariant.gep1684 = getelementptr double, ptr %invariant.gep997, i64 %338
  br label %vector.body1196

vector.body1196:                                  ; preds = %vector.body1196, %vector.ph1189
  %index1197 = phi i64 [ 0, %vector.ph1189 ], [ %index.next1202, %vector.body1196 ]
  %gep1683 = getelementptr double, ptr %invariant.gep1682, i64 %index1197
  %370 = getelementptr inbounds i8, ptr %gep1683, i64 16
  %wide.load1200 = load <2 x double>, ptr %gep1683, align 8, !tbaa !9
  %wide.load1201 = load <2 x double>, ptr %370, align 8, !tbaa !9
  %gep1685 = getelementptr double, ptr %invariant.gep1684, i64 %index1197
  %371 = getelementptr i8, ptr %gep1685, i64 16
  store <2 x double> %wide.load1200, ptr %gep1685, align 8, !tbaa !9
  store <2 x double> %wide.load1201, ptr %371, align 8, !tbaa !9
  %index.next1202 = add nuw i64 %index1197, 4
  %372 = icmp eq i64 %index.next1202, %n.vec1191
  br i1 %372, label %middle.block1186, label %vector.body1196, !llvm.loop !44

middle.block1186:                                 ; preds = %vector.body1196
  %cmp.n1203 = icmp eq i64 %333, %n.vec1191
  br i1 %cmp.n1203, label %._crit_edge558, label %.lr.ph557.preheader1533

.lr.ph557.preheader1533:                          ; preds = %middle.block1186, %vector.memcheck1183, %.lr.ph557.preheader
  %indvars.iv800.ph = phi i64 [ %338, %vector.memcheck1183 ], [ %338, %.lr.ph557.preheader ], [ %ind.end1192, %middle.block1186 ]
  %indvars.iv796.ph = phi i64 [ %366, %vector.memcheck1183 ], [ %366, %.lr.ph557.preheader ], [ %ind.end1194, %middle.block1186 ]
  br label %.lr.ph557

.lr.ph557:                                        ; preds = %.lr.ph557.preheader1533, %.lr.ph557
  %indvars.iv800 = phi i64 [ %indvars.iv.next801, %.lr.ph557 ], [ %indvars.iv800.ph, %.lr.ph557.preheader1533 ]
  %indvars.iv796 = phi i64 [ %indvars.iv.next797, %.lr.ph557 ], [ %indvars.iv796.ph, %.lr.ph557.preheader1533 ]
  %373 = getelementptr inbounds double, ptr %3, i64 %indvars.iv796
  %374 = load double, ptr %373, align 8, !tbaa !9
  %375 = mul nsw i64 %indvars.iv800, %324
  %gep998 = getelementptr double, ptr %invariant.gep997, i64 %375
  store double %374, ptr %gep998, align 8, !tbaa !9
  %indvars.iv.next797 = add nsw i64 %indvars.iv796, 1
  %indvars.iv.next801 = add nsw i64 %indvars.iv800, 1
  %.not439.not = icmp slt i64 %indvars.iv.next801, %325
  br i1 %.not439.not, label %.lr.ph557, label %._crit_edge558, !llvm.loop !45

._crit_edge558:                                   ; preds = %.lr.ph557, %middle.block1186, %.loopexit1495
  %.15.lcssa.in = phi i64 [ %indvars.iv.next784.lcssa, %.loopexit1495 ], [ %ind.end1194, %middle.block1186 ], [ %indvars.iv.next797, %.lr.ph557 ]
  %indvars.iv.next808 = add nuw nsw i64 %indvars.iv807, 1
  %indvars.iv.next806 = add nuw nsw i64 %indvars.iv805, 1
  %indvars.iv.next799 = add i32 %indvars.iv798, 1
  %exitcond813.not = icmp eq i64 %indvars.iv.next808, %wide.trip.count812
  br i1 %exitcond813.not, label %.loopexit, label %.preheader476, !llvm.loop !46

376:                                              ; preds = %85
  br i1 %.not, label %.preheader468.us.preheader, label %.preheader469.lr.ph

.thread461:                                       ; preds = %85
  br i1 %.not, label %.lr.ph578, label %.lr.ph574.preheader

.lr.ph574.preheader:                              ; preds = %.thread461
  %377 = zext nneg i32 %62 to i64
  %378 = lshr exact i64 %377, 1
  %379 = sext i32 %53 to i64
  %380 = zext nneg i32 %62 to i64
  %381 = zext nneg i32 %81 to i64
  %wide.trip.count834 = zext nneg i32 %81 to i64
  %382 = shl nsw i64 %379, 3
  %383 = add nsw i64 %382, 8
  %ident.check1247.not = icmp eq i32 %53, 1
  %invariant.gep1690 = getelementptr i8, ptr %3, i64 8
  %invariant.gep1694 = getelementptr i8, ptr %3, i64 16
  %invariant.gep1698 = getelementptr i8, ptr %3, i64 24
  br label %.lr.ph574

.lr.ph574:                                        ; preds = %.lr.ph574.preheader, %._crit_edge569
  %indvars.iv824 = phi i64 [ 0, %.lr.ph574.preheader ], [ %indvars.iv.next825, %._crit_edge569 ]
  %.16573 = phi i32 [ 0, %.lr.ph574.preheader ], [ %.18.lcssa, %._crit_edge569 ]
  %384 = add nuw i64 %indvars.iv824, 1
  %385 = sub nsw i64 %377, %indvars.iv824
  %386 = mul i64 %383, %indvars.iv824
  %387 = add nuw nsw i64 %indvars.iv824, %381
  %388 = sext i32 %.16573 to i64
  %invariant.gep999 = getelementptr double, ptr %4, i64 %387
  %min.iters.check1253 = icmp ugt i64 %indvars.iv824, 2
  %or.cond1504 = select i1 %min.iters.check1253, i1 %ident.check1247.not, i1 false
  br i1 %or.cond1504, label %vector.memcheck1248, label %scalar.ph1252.preheader

scalar.ph1252.preheader:                          ; preds = %middle.block1251, %vector.memcheck1248, %.lr.ph574
  %indvars.iv820.in.ph = phi i32 [ %.16573, %vector.memcheck1248 ], [ %.16573, %.lr.ph574 ], [ %403, %middle.block1251 ]
  %indvars.iv816.ph = phi i64 [ %378, %vector.memcheck1248 ], [ %378, %.lr.ph574 ], [ %ind.end1257, %middle.block1251 ]
  %indvars.iv814.ph = phi i64 [ %388, %vector.memcheck1248 ], [ %388, %.lr.ph574 ], [ %ind.end1259, %middle.block1251 ]
  br label %scalar.ph1252

vector.memcheck1248:                              ; preds = %.lr.ph574
  %389 = shl nsw i64 %388, 3
  %390 = add nuw i64 %indvars.iv824, %377
  %391 = shl i64 %390, 3
  %392 = add i64 %391, %29
  %393 = add i64 %389, %28
  %394 = sub i64 %392, %393
  %diff.check1249 = icmp ult i64 %394, 32
  br i1 %diff.check1249, label %scalar.ph1252.preheader, label %vector.ph1254

vector.ph1254:                                    ; preds = %vector.memcheck1248
  %n.vec1256 = and i64 %384, -4
  %ind.end1257 = add i64 %378, %n.vec1256
  %ind.end1259 = add i64 %n.vec1256, %388
  %395 = insertelement <2 x i32> <i32 poison, i32 0>, i32 %.16573, i64 0
  %invariant.gep1686 = getelementptr double, ptr %3, i64 %388
  %396 = getelementptr double, ptr %invariant.gep999, i64 %378
  br label %vector.body1261

vector.body1261:                                  ; preds = %vector.body1261, %vector.ph1254
  %index1262 = phi i64 [ 0, %vector.ph1254 ], [ %index.next1269, %vector.body1261 ]
  %vec.phi1263 = phi <2 x i32> [ %395, %vector.ph1254 ], [ %397, %vector.body1261 ]
  %vec.phi1264 = phi <2 x i32> [ zeroinitializer, %vector.ph1254 ], [ %398, %vector.body1261 ]
  %397 = add <2 x i32> %vec.phi1263, <i32 1, i32 1>
  %398 = add <2 x i32> %vec.phi1264, <i32 1, i32 1>
  %gep1687 = getelementptr double, ptr %invariant.gep1686, i64 %index1262
  %399 = getelementptr inbounds i8, ptr %gep1687, i64 16
  %wide.load1267 = load <2 x double>, ptr %gep1687, align 8, !tbaa !9
  %wide.load1268 = load <2 x double>, ptr %399, align 8, !tbaa !9
  %400 = getelementptr double, ptr %396, i64 %index1262
  %401 = getelementptr i8, ptr %400, i64 16
  store <2 x double> %wide.load1267, ptr %400, align 8, !tbaa !9
  store <2 x double> %wide.load1268, ptr %401, align 8, !tbaa !9
  %index.next1269 = add nuw i64 %index1262, 4
  %402 = icmp eq i64 %index.next1269, %n.vec1256
  br i1 %402, label %middle.block1251, label %vector.body1261, !llvm.loop !47

middle.block1251:                                 ; preds = %vector.body1261
  %bin.rdx1270 = add <2 x i32> %398, %397
  %403 = tail call i32 @llvm.vector.reduce.add.v2i32(<2 x i32> %bin.rdx1270)
  %cmp.n1271 = icmp eq i64 %384, %n.vec1256
  br i1 %cmp.n1271, label %.preheader474, label %scalar.ph1252.preheader

.preheader474:                                    ; preds = %scalar.ph1252, %middle.block1251
  %indvars.iv820.lcssa = phi i32 [ %403, %middle.block1251 ], [ %indvars.iv820, %scalar.ph1252 ]
  %indvars.iv.next815.lcssa = phi i64 [ %ind.end1259, %middle.block1251 ], [ %indvars.iv.next815, %scalar.ph1252 ]
  %.not435.not565 = icmp ult i64 %indvars.iv824, %380
  br i1 %.not435.not565, label %.lr.ph568, label %._crit_edge569

.lr.ph568:                                        ; preds = %.preheader474
  %404 = mul nsw i64 %indvars.iv824, %379
  %405 = sext i32 %indvars.iv820.lcssa to i64
  %invariant.gep1001 = getelementptr double, ptr %4, i64 %404
  %min.iters.check1230 = icmp ult i64 %385, 4
  br i1 %min.iters.check1230, label %scalar.ph1229.preheader, label %vector.memcheck1226

scalar.ph1229.preheader:                          ; preds = %middle.block1228, %vector.memcheck1226, %.lr.ph568
  %indvars.iv826.ph = phi i64 [ %indvars.iv824, %vector.memcheck1226 ], [ %indvars.iv824, %.lr.ph568 ], [ %ind.end1234, %middle.block1228 ]
  %indvars.iv822.ph = phi i64 [ %405, %vector.memcheck1226 ], [ %405, %.lr.ph568 ], [ %ind.end1236, %middle.block1228 ]
  %406 = sub i64 %377, %indvars.iv826.ph
  %xtraiter1572 = and i64 %406, 3
  %lcmp.mod1573.not = icmp eq i64 %xtraiter1572, 0
  br i1 %lcmp.mod1573.not, label %scalar.ph1229.prol.loopexit, label %scalar.ph1229.prol

scalar.ph1229.prol:                               ; preds = %scalar.ph1229.preheader, %scalar.ph1229.prol
  %indvars.iv826.prol = phi i64 [ %indvars.iv.next827.prol, %scalar.ph1229.prol ], [ %indvars.iv826.ph, %scalar.ph1229.preheader ]
  %indvars.iv822.prol = phi i64 [ %indvars.iv.next823.prol, %scalar.ph1229.prol ], [ %indvars.iv822.ph, %scalar.ph1229.preheader ]
  %prol.iter1574 = phi i64 [ %prol.iter1574.next, %scalar.ph1229.prol ], [ 0, %scalar.ph1229.preheader ]
  %407 = getelementptr inbounds double, ptr %3, i64 %indvars.iv822.prol
  %408 = load double, ptr %407, align 8, !tbaa !9
  %gep1002.prol = getelementptr double, ptr %invariant.gep1001, i64 %indvars.iv826.prol
  store double %408, ptr %gep1002.prol, align 8, !tbaa !9
  %indvars.iv.next823.prol = add nsw i64 %indvars.iv822.prol, 1
  %indvars.iv.next827.prol = add nuw nsw i64 %indvars.iv826.prol, 1
  %prol.iter1574.next = add i64 %prol.iter1574, 1
  %prol.iter1574.cmp.not = icmp eq i64 %prol.iter1574.next, %xtraiter1572
  br i1 %prol.iter1574.cmp.not, label %scalar.ph1229.prol.loopexit, label %scalar.ph1229.prol, !llvm.loop !48

scalar.ph1229.prol.loopexit:                      ; preds = %scalar.ph1229.prol, %scalar.ph1229.preheader
  %indvars.iv.next823.lcssa.unr = phi i64 [ poison, %scalar.ph1229.preheader ], [ %indvars.iv.next823.prol, %scalar.ph1229.prol ]
  %indvars.iv826.unr = phi i64 [ %indvars.iv826.ph, %scalar.ph1229.preheader ], [ %indvars.iv.next827.prol, %scalar.ph1229.prol ]
  %indvars.iv822.unr = phi i64 [ %indvars.iv822.ph, %scalar.ph1229.preheader ], [ %indvars.iv.next823.prol, %scalar.ph1229.prol ]
  %409 = sub i64 %indvars.iv826.ph, %377
  %410 = icmp ugt i64 %409, -4
  br i1 %410, label %._crit_edge569, label %scalar.ph1229.preheader.new

scalar.ph1229.preheader.new:                      ; preds = %scalar.ph1229.prol.loopexit
  %invariant.gep1692 = getelementptr i8, ptr %invariant.gep1001, i64 8
  %invariant.gep1696 = getelementptr i8, ptr %invariant.gep1001, i64 16
  %invariant.gep1700 = getelementptr i8, ptr %invariant.gep1001, i64 24
  br label %scalar.ph1229

vector.memcheck1226:                              ; preds = %.lr.ph568
  %411 = shl nsw i64 %405, 3
  %412 = add i64 %386, %31
  %413 = add i64 %411, %30
  %414 = sub i64 %412, %413
  %diff.check1227 = icmp ult i64 %414, 32
  br i1 %diff.check1227, label %scalar.ph1229.preheader, label %vector.ph1231

vector.ph1231:                                    ; preds = %vector.memcheck1226
  %n.vec1233 = and i64 %385, -4
  %ind.end1234 = add i64 %indvars.iv824, %n.vec1233
  %ind.end1236 = add i64 %n.vec1233, %405
  %invariant.gep1688 = getelementptr double, ptr %3, i64 %405
  %415 = getelementptr double, ptr %invariant.gep1001, i64 %indvars.iv824
  br label %vector.body1238

vector.body1238:                                  ; preds = %vector.body1238, %vector.ph1231
  %index1239 = phi i64 [ 0, %vector.ph1231 ], [ %index.next1244, %vector.body1238 ]
  %gep1689 = getelementptr double, ptr %invariant.gep1688, i64 %index1239
  %416 = getelementptr inbounds i8, ptr %gep1689, i64 16
  %wide.load1242 = load <2 x double>, ptr %gep1689, align 8, !tbaa !9
  %wide.load1243 = load <2 x double>, ptr %416, align 8, !tbaa !9
  %417 = getelementptr double, ptr %415, i64 %index1239
  %418 = getelementptr i8, ptr %417, i64 16
  store <2 x double> %wide.load1242, ptr %417, align 8, !tbaa !9
  store <2 x double> %wide.load1243, ptr %418, align 8, !tbaa !9
  %index.next1244 = add nuw i64 %index1239, 4
  %419 = icmp eq i64 %index.next1244, %n.vec1233
  br i1 %419, label %middle.block1228, label %vector.body1238, !llvm.loop !49

middle.block1228:                                 ; preds = %vector.body1238
  %cmp.n1245 = icmp eq i64 %385, %n.vec1233
  br i1 %cmp.n1245, label %._crit_edge569, label %scalar.ph1229.preheader

scalar.ph1252:                                    ; preds = %scalar.ph1252.preheader, %scalar.ph1252
  %indvars.iv820.in = phi i32 [ %indvars.iv820, %scalar.ph1252 ], [ %indvars.iv820.in.ph, %scalar.ph1252.preheader ]
  %indvars.iv816 = phi i64 [ %indvars.iv.next817, %scalar.ph1252 ], [ %indvars.iv816.ph, %scalar.ph1252.preheader ]
  %indvars.iv814 = phi i64 [ %indvars.iv.next815, %scalar.ph1252 ], [ %indvars.iv814.ph, %scalar.ph1252.preheader ]
  %indvars.iv820 = add i32 %indvars.iv820.in, 1
  %420 = getelementptr inbounds double, ptr %3, i64 %indvars.iv814
  %421 = load double, ptr %420, align 8, !tbaa !9
  %422 = mul nsw i64 %indvars.iv816, %379
  %gep1000 = getelementptr double, ptr %invariant.gep999, i64 %422
  store double %421, ptr %gep1000, align 8, !tbaa !9
  %indvars.iv.next815 = add nsw i64 %indvars.iv814, 1
  %indvars.iv.next817 = add nuw nsw i64 %indvars.iv816, 1
  %.not434.not = icmp ult i64 %indvars.iv816, %387
  br i1 %.not434.not, label %scalar.ph1252, label %.preheader474, !llvm.loop !50

scalar.ph1229:                                    ; preds = %scalar.ph1229, %scalar.ph1229.preheader.new
  %indvars.iv826 = phi i64 [ %indvars.iv826.unr, %scalar.ph1229.preheader.new ], [ %indvars.iv.next827.3, %scalar.ph1229 ]
  %indvars.iv822 = phi i64 [ %indvars.iv822.unr, %scalar.ph1229.preheader.new ], [ %indvars.iv.next823.3, %scalar.ph1229 ]
  %423 = getelementptr inbounds double, ptr %3, i64 %indvars.iv822
  %424 = load double, ptr %423, align 8, !tbaa !9
  %gep1002 = getelementptr double, ptr %invariant.gep1001, i64 %indvars.iv826
  store double %424, ptr %gep1002, align 8, !tbaa !9
  %gep1691 = getelementptr double, ptr %invariant.gep1690, i64 %indvars.iv822
  %425 = load double, ptr %gep1691, align 8, !tbaa !9
  %gep1693 = getelementptr double, ptr %invariant.gep1692, i64 %indvars.iv826
  store double %425, ptr %gep1693, align 8, !tbaa !9
  %gep1695 = getelementptr double, ptr %invariant.gep1694, i64 %indvars.iv822
  %426 = load double, ptr %gep1695, align 8, !tbaa !9
  %gep1697 = getelementptr double, ptr %invariant.gep1696, i64 %indvars.iv826
  store double %426, ptr %gep1697, align 8, !tbaa !9
  %gep1699 = getelementptr double, ptr %invariant.gep1698, i64 %indvars.iv822
  %427 = load double, ptr %gep1699, align 8, !tbaa !9
  %gep1701 = getelementptr double, ptr %invariant.gep1700, i64 %indvars.iv826
  store double %427, ptr %gep1701, align 8, !tbaa !9
  %indvars.iv.next823.3 = add nsw i64 %indvars.iv822, 4
  %indvars.iv.next827.3 = add nuw nsw i64 %indvars.iv826, 4
  %exitcond832.not.3 = icmp eq i64 %indvars.iv.next827.3, %377
  br i1 %exitcond832.not.3, label %._crit_edge569, label %scalar.ph1229, !llvm.loop !51

._crit_edge569:                                   ; preds = %scalar.ph1229.prol.loopexit, %scalar.ph1229, %middle.block1228, %.preheader474
  %.18.lcssa.in = phi i64 [ %indvars.iv.next815.lcssa, %.preheader474 ], [ %ind.end1236, %middle.block1228 ], [ %indvars.iv.next823.lcssa.unr, %scalar.ph1229.prol.loopexit ], [ %indvars.iv.next823.3, %scalar.ph1229 ]
  %.18.lcssa = trunc i64 %.18.lcssa.in to i32
  %indvars.iv.next825 = add nuw nsw i64 %indvars.iv824, 1
  %exitcond835.not = icmp eq i64 %indvars.iv.next825, %wide.trip.count834
  br i1 %exitcond835.not, label %.loopexit, label %.lr.ph574, !llvm.loop !52

.preheader469.lr.ph:                              ; preds = %376
  %428 = xor i32 %62, -1
  %429 = add nsw i32 %80, %428
  %430 = shl nuw i32 %62, 1
  %431 = xor i32 %81, -1
  %432 = add nsw i32 %62, %431
  %433 = sext i32 %53 to i64
  %434 = zext nneg i32 %81 to i64
  %435 = zext nneg i32 %62 to i64
  %436 = shl nuw nsw i64 %435, 3
  %437 = add i64 %436, %19
  %438 = add i64 %437, -8
  %439 = add nuw nsw i64 %435, 2305843009213693951
  %440 = mul i64 %439, %433
  %441 = shl i64 %440, 3
  %442 = add i64 %441, %17
  %443 = mul nsw i64 %433, -8
  %invariant.gep1718 = getelementptr i8, ptr %3, i64 8
  %invariant.gep1722 = getelementptr i8, ptr %3, i64 16
  %invariant.gep1726 = getelementptr i8, ptr %3, i64 24
  %ident.check1360.not = icmp eq i32 %53, 1
  br label %.preheader469

.preheader469:                                    ; preds = %.preheader469.lr.ph, %._crit_edge611
  %indvar1362 = phi i64 [ 0, %.preheader469.lr.ph ], [ %indvar.next1363, %._crit_edge611 ]
  %indvars.iv907 = phi i64 [ %435, %.preheader469.lr.ph ], [ %indvars.iv.next908, %._crit_edge611 ]
  %indvars.iv900 = phi i32 [ %432, %.preheader469.lr.ph ], [ %indvars.iv.next901, %._crit_edge611 ]
  %.19616 = phi i32 [ %429, %.preheader469.lr.ph ], [ %489, %._crit_edge611 ]
  %444 = sext i32 %indvars.iv900 to i64
  %445 = add nsw i64 %444, 1
  %smax1365 = tail call i64 @llvm.smax.i64(i64 %434, i64 %445)
  %446 = sub i64 %smax1365, %444
  %447 = add i64 %indvar1362, %434
  %448 = sext i32 %indvars.iv900 to i64
  %449 = shl nsw i64 %448, 3
  %450 = sext i32 %indvars.iv900 to i64
  %indvars.iv.next908 = add nsw i64 %indvars.iv907, -1
  %451 = mul nsw i64 %indvars.iv.next908, %433
  %452 = sext i32 %.19616 to i64
  %invariant.gep1011 = getelementptr double, ptr %4, i64 %451
  %min.iters.check1388 = icmp ult i64 %indvars.iv907, 4
  br i1 %min.iters.check1388, label %scalar.ph1387.preheader, label %vector.memcheck1384

vector.memcheck1384:                              ; preds = %.preheader469
  %453 = mul i64 %443, %indvar1362
  %454 = shl nsw i64 %452, 3
  %455 = add i64 %442, %453
  %456 = add i64 %454, %16
  %457 = sub i64 %455, %456
  %diff.check1385 = icmp ult i64 %457, 32
  br i1 %diff.check1385, label %scalar.ph1387.preheader, label %vector.ph1389

vector.ph1389:                                    ; preds = %vector.memcheck1384
  %n.vec1391 = and i64 %indvars.iv907, -4
  %ind.end1393 = add i64 %n.vec1391, %452
  %458 = insertelement <2 x i32> <i32 poison, i32 0>, i32 %.19616, i64 0
  %invariant.gep1716 = getelementptr double, ptr %3, i64 %452
  br label %vector.body1395

vector.body1395:                                  ; preds = %vector.body1395, %vector.ph1389
  %index1396 = phi i64 [ 0, %vector.ph1389 ], [ %index.next1402, %vector.body1395 ]
  %vec.phi1397 = phi <2 x i32> [ %458, %vector.ph1389 ], [ %459, %vector.body1395 ]
  %vec.phi1398 = phi <2 x i32> [ zeroinitializer, %vector.ph1389 ], [ %460, %vector.body1395 ]
  %459 = add <2 x i32> %vec.phi1397, <i32 1, i32 1>
  %460 = add <2 x i32> %vec.phi1398, <i32 1, i32 1>
  %gep1717 = getelementptr double, ptr %invariant.gep1716, i64 %index1396
  %461 = getelementptr inbounds i8, ptr %gep1717, i64 16
  %wide.load1400 = load <2 x double>, ptr %gep1717, align 8, !tbaa !9
  %wide.load1401 = load <2 x double>, ptr %461, align 8, !tbaa !9
  %462 = getelementptr double, ptr %invariant.gep1011, i64 %index1396
  %463 = getelementptr i8, ptr %462, i64 16
  store <2 x double> %wide.load1400, ptr %462, align 8, !tbaa !9
  store <2 x double> %wide.load1401, ptr %463, align 8, !tbaa !9
  %index.next1402 = add nuw i64 %index1396, 4
  %464 = icmp eq i64 %index.next1402, %n.vec1391
  br i1 %464, label %middle.block1386, label %vector.body1395, !llvm.loop !53

middle.block1386:                                 ; preds = %vector.body1395
  %bin.rdx1403 = add <2 x i32> %460, %459
  %465 = tail call i32 @llvm.vector.reduce.add.v2i32(<2 x i32> %bin.rdx1403)
  %cmp.n1404 = icmp eq i64 %indvars.iv907, %n.vec1391
  br i1 %cmp.n1404, label %.loopexit1493, label %scalar.ph1387.preheader

scalar.ph1387.preheader:                          ; preds = %middle.block1386, %vector.memcheck1384, %.preheader469
  %indvars.iv896.in.ph = phi i32 [ %.19616, %vector.memcheck1384 ], [ %.19616, %.preheader469 ], [ %465, %middle.block1386 ]
  %indvars.iv889.ph = phi i64 [ 0, %vector.memcheck1384 ], [ 0, %.preheader469 ], [ %n.vec1391, %middle.block1386 ]
  %indvars.iv887.ph = phi i64 [ %452, %vector.memcheck1384 ], [ %452, %.preheader469 ], [ %ind.end1393, %middle.block1386 ]
  %xtraiter1581 = and i64 %indvars.iv907, 3
  %lcmp.mod1582.not = icmp eq i64 %xtraiter1581, 0
  br i1 %lcmp.mod1582.not, label %scalar.ph1387.prol.loopexit, label %scalar.ph1387.prol

scalar.ph1387.prol:                               ; preds = %scalar.ph1387.preheader, %scalar.ph1387.prol
  %indvars.iv896.in.prol = phi i32 [ %indvars.iv896.prol, %scalar.ph1387.prol ], [ %indvars.iv896.in.ph, %scalar.ph1387.preheader ]
  %indvars.iv889.prol = phi i64 [ %indvars.iv.next890.prol, %scalar.ph1387.prol ], [ %indvars.iv889.ph, %scalar.ph1387.preheader ]
  %indvars.iv887.prol = phi i64 [ %indvars.iv.next888.prol, %scalar.ph1387.prol ], [ %indvars.iv887.ph, %scalar.ph1387.preheader ]
  %prol.iter1583 = phi i64 [ %prol.iter1583.next, %scalar.ph1387.prol ], [ 0, %scalar.ph1387.preheader ]
  %indvars.iv896.prol = add i32 %indvars.iv896.in.prol, 1
  %466 = getelementptr inbounds double, ptr %3, i64 %indvars.iv887.prol
  %467 = load double, ptr %466, align 8, !tbaa !9
  %gep1012.prol = getelementptr double, ptr %invariant.gep1011, i64 %indvars.iv889.prol
  store double %467, ptr %gep1012.prol, align 8, !tbaa !9
  %indvars.iv.next888.prol = add nsw i64 %indvars.iv887.prol, 1
  %indvars.iv.next890.prol = add nuw nsw i64 %indvars.iv889.prol, 1
  %prol.iter1583.next = add i64 %prol.iter1583, 1
  %prol.iter1583.cmp.not = icmp eq i64 %prol.iter1583.next, %xtraiter1581
  br i1 %prol.iter1583.cmp.not, label %scalar.ph1387.prol.loopexit, label %scalar.ph1387.prol, !llvm.loop !54

scalar.ph1387.prol.loopexit:                      ; preds = %scalar.ph1387.prol, %scalar.ph1387.preheader
  %indvars.iv896.lcssa1520.unr = phi i32 [ poison, %scalar.ph1387.preheader ], [ %indvars.iv896.prol, %scalar.ph1387.prol ]
  %indvars.iv.next888.lcssa1519.unr = phi i64 [ poison, %scalar.ph1387.preheader ], [ %indvars.iv.next888.prol, %scalar.ph1387.prol ]
  %indvars.iv896.in.unr = phi i32 [ %indvars.iv896.in.ph, %scalar.ph1387.preheader ], [ %indvars.iv896.prol, %scalar.ph1387.prol ]
  %indvars.iv889.unr = phi i64 [ %indvars.iv889.ph, %scalar.ph1387.preheader ], [ %indvars.iv.next890.prol, %scalar.ph1387.prol ]
  %indvars.iv887.unr = phi i64 [ %indvars.iv887.ph, %scalar.ph1387.preheader ], [ %indvars.iv.next888.prol, %scalar.ph1387.prol ]
  %468 = sub i64 %indvar1362, %435
  %469 = add i64 %468, %indvars.iv889.ph
  %470 = icmp ugt i64 %469, -4
  br i1 %470, label %.loopexit1493, label %scalar.ph1387.preheader.new

scalar.ph1387.preheader.new:                      ; preds = %scalar.ph1387.prol.loopexit
  %invariant.gep1720 = getelementptr i8, ptr %invariant.gep1011, i64 8
  %invariant.gep1724 = getelementptr i8, ptr %invariant.gep1011, i64 16
  %invariant.gep1728 = getelementptr i8, ptr %invariant.gep1011, i64 24
  br label %scalar.ph1387

scalar.ph1387:                                    ; preds = %scalar.ph1387, %scalar.ph1387.preheader.new
  %indvars.iv896.in = phi i32 [ %indvars.iv896.in.unr, %scalar.ph1387.preheader.new ], [ %indvars.iv896.3, %scalar.ph1387 ]
  %indvars.iv889 = phi i64 [ %indvars.iv889.unr, %scalar.ph1387.preheader.new ], [ %indvars.iv.next890.3, %scalar.ph1387 ]
  %indvars.iv887 = phi i64 [ %indvars.iv887.unr, %scalar.ph1387.preheader.new ], [ %indvars.iv.next888.3, %scalar.ph1387 ]
  %471 = getelementptr inbounds double, ptr %3, i64 %indvars.iv887
  %472 = load double, ptr %471, align 8, !tbaa !9
  %gep1012 = getelementptr double, ptr %invariant.gep1011, i64 %indvars.iv889
  store double %472, ptr %gep1012, align 8, !tbaa !9
  %gep1719 = getelementptr double, ptr %invariant.gep1718, i64 %indvars.iv887
  %473 = load double, ptr %gep1719, align 8, !tbaa !9
  %gep1721 = getelementptr double, ptr %invariant.gep1720, i64 %indvars.iv889
  store double %473, ptr %gep1721, align 8, !tbaa !9
  %gep1723 = getelementptr double, ptr %invariant.gep1722, i64 %indvars.iv887
  %474 = load double, ptr %gep1723, align 8, !tbaa !9
  %gep1725 = getelementptr double, ptr %invariant.gep1724, i64 %indvars.iv889
  store double %474, ptr %gep1725, align 8, !tbaa !9
  %indvars.iv896.3 = add i32 %indvars.iv896.in, 4
  %gep1727 = getelementptr double, ptr %invariant.gep1726, i64 %indvars.iv887
  %475 = load double, ptr %gep1727, align 8, !tbaa !9
  %gep1729 = getelementptr double, ptr %invariant.gep1728, i64 %indvars.iv889
  store double %475, ptr %gep1729, align 8, !tbaa !9
  %indvars.iv.next888.3 = add nsw i64 %indvars.iv887, 4
  %indvars.iv.next890.3 = add nuw nsw i64 %indvars.iv889, 4
  %exitcond895.not.3 = icmp eq i64 %indvars.iv.next890.3, %indvars.iv907
  br i1 %exitcond895.not.3, label %.loopexit1493, label %scalar.ph1387, !llvm.loop !55

.loopexit1493:                                    ; preds = %scalar.ph1387.prol.loopexit, %scalar.ph1387, %middle.block1386
  %indvars.iv896.lcssa = phi i32 [ %465, %middle.block1386 ], [ %indvars.iv896.lcssa1520.unr, %scalar.ph1387.prol.loopexit ], [ %indvars.iv896.3, %scalar.ph1387 ]
  %indvars.iv.next888.lcssa = phi i64 [ %ind.end1393, %middle.block1386 ], [ %indvars.iv.next888.lcssa1519.unr, %scalar.ph1387.prol.loopexit ], [ %indvars.iv.next888.3, %scalar.ph1387 ]
  %476 = sub nsw i64 %indvars.iv.next908, %434
  %.not432.not606 = icmp slt i64 %476, %434
  br i1 %.not432.not606, label %.lr.ph610.preheader, label %._crit_edge611

.lr.ph610.preheader:                              ; preds = %.loopexit1493
  %477 = sext i32 %indvars.iv896.lcssa to i64
  %invariant.gep1013 = getelementptr double, ptr %4, i64 %476
  %min.iters.check1368 = icmp ugt i64 %446, 5
  %or.cond1505 = select i1 %min.iters.check1368, i1 %ident.check1360.not, i1 false
  br i1 %or.cond1505, label %vector.memcheck1361, label %.lr.ph610.preheader1515

vector.memcheck1361:                              ; preds = %.lr.ph610.preheader
  %478 = add i64 %438, %449
  %479 = add i64 %447, %477
  %480 = shl i64 %479, 3
  %481 = add i64 %480, %18
  %482 = sub i64 %478, %481
  %diff.check1364 = icmp ult i64 %482, 32
  br i1 %diff.check1364, label %.lr.ph610.preheader1515, label %vector.ph1369

vector.ph1369:                                    ; preds = %vector.memcheck1361
  %n.vec1371 = and i64 %446, -4
  %ind.end1372 = add i64 %n.vec1371, %450
  %ind.end1374 = add i64 %n.vec1371, %477
  %invariant.gep1730 = getelementptr double, ptr %3, i64 %477
  %invariant.gep1732 = getelementptr double, ptr %invariant.gep1013, i64 %450
  br label %vector.body1376

vector.body1376:                                  ; preds = %vector.body1376, %vector.ph1369
  %index1377 = phi i64 [ 0, %vector.ph1369 ], [ %index.next1382, %vector.body1376 ]
  %gep1731 = getelementptr double, ptr %invariant.gep1730, i64 %index1377
  %483 = getelementptr inbounds i8, ptr %gep1731, i64 16
  %wide.load1380 = load <2 x double>, ptr %gep1731, align 8, !tbaa !9
  %wide.load1381 = load <2 x double>, ptr %483, align 8, !tbaa !9
  %gep1733 = getelementptr double, ptr %invariant.gep1732, i64 %index1377
  %484 = getelementptr i8, ptr %gep1733, i64 16
  store <2 x double> %wide.load1380, ptr %gep1733, align 8, !tbaa !9
  store <2 x double> %wide.load1381, ptr %484, align 8, !tbaa !9
  %index.next1382 = add nuw i64 %index1377, 4
  %485 = icmp eq i64 %index.next1382, %n.vec1371
  br i1 %485, label %middle.block1366, label %vector.body1376, !llvm.loop !56

middle.block1366:                                 ; preds = %vector.body1376
  %cmp.n1383 = icmp eq i64 %446, %n.vec1371
  br i1 %cmp.n1383, label %._crit_edge611, label %.lr.ph610.preheader1515

.lr.ph610.preheader1515:                          ; preds = %middle.block1366, %vector.memcheck1361, %.lr.ph610.preheader
  %indvars.iv902.ph = phi i64 [ %450, %vector.memcheck1361 ], [ %450, %.lr.ph610.preheader ], [ %ind.end1372, %middle.block1366 ]
  %indvars.iv898.ph = phi i64 [ %477, %vector.memcheck1361 ], [ %477, %.lr.ph610.preheader ], [ %ind.end1374, %middle.block1366 ]
  br label %.lr.ph610

.lr.ph610:                                        ; preds = %.lr.ph610.preheader1515, %.lr.ph610
  %indvars.iv902 = phi i64 [ %indvars.iv.next903, %.lr.ph610 ], [ %indvars.iv902.ph, %.lr.ph610.preheader1515 ]
  %indvars.iv898 = phi i64 [ %indvars.iv.next899, %.lr.ph610 ], [ %indvars.iv898.ph, %.lr.ph610.preheader1515 ]
  %486 = getelementptr inbounds double, ptr %3, i64 %indvars.iv898
  %487 = load double, ptr %486, align 8, !tbaa !9
  %488 = mul nsw i64 %indvars.iv902, %433
  %gep1014 = getelementptr double, ptr %invariant.gep1013, i64 %488
  store double %487, ptr %gep1014, align 8, !tbaa !9
  %indvars.iv.next899 = add nsw i64 %indvars.iv898, 1
  %indvars.iv.next903 = add nsw i64 %indvars.iv902, 1
  %.not432.not = icmp slt i64 %indvars.iv.next903, %434
  br i1 %.not432.not, label %.lr.ph610, label %._crit_edge611, !llvm.loop !57

._crit_edge611:                                   ; preds = %.lr.ph610, %middle.block1366, %.loopexit1493
  %.21.lcssa.in = phi i64 [ %indvars.iv.next888.lcssa, %.loopexit1493 ], [ %ind.end1374, %middle.block1366 ], [ %indvars.iv.next899, %.lr.ph610 ]
  %.21.lcssa = trunc i64 %.21.lcssa.in to i32
  %reass.sub = sub i32 %.21.lcssa, %430
  %489 = add i32 %reass.sub, -2
  %.not430.not = icmp sgt i64 %indvars.iv.next908, %434
  %indvars.iv.next901 = add i32 %indvars.iv900, -1
  %indvar.next1363 = add i64 %indvar1362, 1
  br i1 %.not430.not, label %.preheader469, label %.loopexit, !llvm.loop !58

.lr.ph578:                                        ; preds = %.thread461
  %490 = mul nsw i32 %81, %53
  %491 = lshr exact i32 %62, 1
  %492 = zext nneg i32 %491 to i64
  %493 = sext i32 %490 to i64
  %494 = zext nneg i32 %62 to i64
  %invariant.gep1003 = getelementptr double, ptr %4, i64 %493
  %495 = add nuw nsw i64 %492, 1
  %umax1275 = tail call i64 @llvm.umax.i64(i64 %495, i64 %494)
  %496 = sub nsw i64 %umax1275, %492
  %min.iters.check1278 = icmp ult i64 %496, 12
  br i1 %min.iters.check1278, label %scalar.ph1277.preheader, label %vector.memcheck1273

vector.memcheck1273:                              ; preds = %.lr.ph578
  %497 = add nsw i64 %492, %493
  %498 = shl nsw i64 %497, 3
  %499 = add i64 %498, %27
  %500 = sub i64 %499, %26
  %diff.check1274 = icmp ult i64 %500, 32
  br i1 %diff.check1274, label %scalar.ph1277.preheader, label %vector.ph1279

vector.ph1279:                                    ; preds = %vector.memcheck1273
  %n.vec1281 = and i64 %496, -4
  %ind.end1282 = add nsw i64 %n.vec1281, %492
  %invariant.gep1702 = getelementptr double, ptr %invariant.gep1003, i64 %492
  br label %vector.body1285

vector.body1285:                                  ; preds = %vector.body1285, %vector.ph1279
  %index1286 = phi i64 [ 0, %vector.ph1279 ], [ %index.next1290, %vector.body1285 ]
  %501 = getelementptr inbounds double, ptr %3, i64 %index1286
  %502 = getelementptr inbounds i8, ptr %501, i64 16
  %wide.load1288 = load <2 x double>, ptr %501, align 8, !tbaa !9
  %wide.load1289 = load <2 x double>, ptr %502, align 8, !tbaa !9
  %gep1703 = getelementptr double, ptr %invariant.gep1702, i64 %index1286
  %503 = getelementptr i8, ptr %gep1703, i64 16
  store <2 x double> %wide.load1288, ptr %gep1703, align 8, !tbaa !9
  store <2 x double> %wide.load1289, ptr %503, align 8, !tbaa !9
  %index.next1290 = add nuw i64 %index1286, 4
  %504 = icmp eq i64 %index.next1290, %n.vec1281
  br i1 %504, label %middle.block1276, label %vector.body1285, !llvm.loop !59

middle.block1276:                                 ; preds = %vector.body1285
  %cmp.n1291 = icmp eq i64 %496, %n.vec1281
  br i1 %cmp.n1291, label %._crit_edge579, label %scalar.ph1277.preheader

scalar.ph1277.preheader:                          ; preds = %middle.block1276, %vector.memcheck1273, %.lr.ph578
  %indvars.iv838.ph = phi i64 [ %492, %vector.memcheck1273 ], [ %492, %.lr.ph578 ], [ %ind.end1282, %middle.block1276 ]
  %indvars.iv836.ph = phi i64 [ 0, %vector.memcheck1273 ], [ 0, %.lr.ph578 ], [ %n.vec1281, %middle.block1276 ]
  br label %scalar.ph1277

scalar.ph1277:                                    ; preds = %scalar.ph1277.preheader, %scalar.ph1277
  %indvars.iv838 = phi i64 [ %indvars.iv.next839, %scalar.ph1277 ], [ %indvars.iv838.ph, %scalar.ph1277.preheader ]
  %indvars.iv836 = phi i64 [ %indvars.iv.next837, %scalar.ph1277 ], [ %indvars.iv836.ph, %scalar.ph1277.preheader ]
  %505 = getelementptr inbounds double, ptr %3, i64 %indvars.iv836
  %506 = load double, ptr %505, align 8, !tbaa !9
  %gep1004 = getelementptr double, ptr %invariant.gep1003, i64 %indvars.iv838
  store double %506, ptr %gep1004, align 8, !tbaa !9
  %indvars.iv.next837 = add nuw nsw i64 %indvars.iv836, 1
  %indvars.iv.next839 = add nuw nsw i64 %indvars.iv838, 1
  %.not424.not = icmp ult i64 %indvars.iv.next839, %494
  br i1 %.not424.not, label %scalar.ph1277, label %._crit_edge579, !llvm.loop !60

._crit_edge579:                                   ; preds = %scalar.ph1277, %middle.block1276
  %indvars.iv.next837.lcssa = phi i64 [ %n.vec1281, %middle.block1276 ], [ %indvars.iv.next837, %scalar.ph1277 ]
  %.not425590 = icmp ult i32 %62, 4
  br i1 %.not425590, label %.preheader471.us.preheader, label %.preheader473.lr.ph

.preheader473.lr.ph:                              ; preds = %._crit_edge579
  %507 = add nuw nsw i32 %81, 1
  %508 = sext i32 %53 to i64
  %509 = zext nneg i32 %62 to i64
  %510 = zext nneg i32 %507 to i64
  %511 = add nsw i32 %81, -1
  %wide.trip.count871 = zext i32 %511 to i64
  %512 = mul nsw i64 %510, %508
  %513 = shl i64 %512, 3
  %514 = add i64 %513, %25
  %515 = sub i64 %514, %24
  %516 = shl nsw i64 %508, 3
  %ident.check1314.not = icmp eq i32 %53, 1
  %invariant.gep1704 = getelementptr i8, ptr %3, i64 8
  br label %.preheader473

.preheader473:                                    ; preds = %.preheader473.lr.ph, %._crit_edge588
  %indvars.iv866 = phi i64 [ 0, %.preheader473.lr.ph ], [ %indvars.iv.next867, %._crit_edge588 ]
  %indvars.iv864 = phi i64 [ 1, %.preheader473.lr.ph ], [ %indvars.iv.next865, %._crit_edge588 ]
  %indvars.iv857 = phi i32 [ %507, %.preheader473.lr.ph ], [ %indvars.iv.next858, %._crit_edge588 ]
  %.23592.in = phi i64 [ %indvars.iv.next837.lcssa, %.preheader473.lr.ph ], [ %.25.lcssa.in, %._crit_edge588 ]
  %517 = sext i32 %indvars.iv857 to i64
  %518 = add nsw i64 %517, 1
  %smax1294 = tail call i64 @llvm.smax.i64(i64 %518, i64 %494)
  %519 = sub i64 %smax1294, %517
  %520 = mul i64 %516, %indvars.iv866
  %521 = add i64 %515, %520
  %522 = sext i32 %indvars.iv857 to i64
  %523 = shl nsw i64 %522, 3
  %.23592 = trunc i64 %.23592.in to i32
  %524 = sext i32 %indvars.iv857 to i64
  %sext964 = shl i64 %.23592.in, 32
  %525 = ashr exact i64 %sext964, 32
  %invariant.gep1005 = getelementptr double, ptr %4, i64 %indvars.iv866
  %min.iters.check1319 = icmp ugt i64 %indvars.iv864, 3
  %or.cond1506 = select i1 %min.iters.check1319, i1 %ident.check1314.not, i1 false
  br i1 %or.cond1506, label %vector.memcheck1315, label %scalar.ph1318.preheader

vector.memcheck1315:                              ; preds = %.preheader473
  %526 = shl nuw nsw i64 %indvars.iv866, 3
  %527 = ashr exact i64 %sext964, 29
  %528 = add i64 %526, %23
  %529 = add i64 %527, %22
  %530 = sub i64 %528, %529
  %diff.check1316 = icmp ult i64 %530, 32
  br i1 %diff.check1316, label %scalar.ph1318.preheader, label %vector.ph1320

vector.ph1320:                                    ; preds = %vector.memcheck1315
  %n.vec1322 = and i64 %indvars.iv864, 9223372036854775804
  %ind.end1324 = add i64 %525, %n.vec1322
  %531 = insertelement <2 x i32> <i32 poison, i32 0>, i32 %.23592, i64 0
  %532 = getelementptr double, ptr %3, i64 %525
  br label %vector.body1326

vector.body1326:                                  ; preds = %vector.body1326, %vector.ph1320
  %index1327 = phi i64 [ 0, %vector.ph1320 ], [ %index.next1333, %vector.body1326 ]
  %vec.phi1328 = phi <2 x i32> [ %531, %vector.ph1320 ], [ %533, %vector.body1326 ]
  %vec.phi1329 = phi <2 x i32> [ zeroinitializer, %vector.ph1320 ], [ %534, %vector.body1326 ]
  %533 = add <2 x i32> %vec.phi1328, <i32 1, i32 1>
  %534 = add <2 x i32> %vec.phi1329, <i32 1, i32 1>
  %535 = getelementptr double, ptr %532, i64 %index1327
  %536 = getelementptr inbounds i8, ptr %535, i64 16
  %wide.load1331 = load <2 x double>, ptr %535, align 8, !tbaa !9
  %wide.load1332 = load <2 x double>, ptr %536, align 8, !tbaa !9
  %537 = getelementptr double, ptr %invariant.gep1005, i64 %index1327
  %538 = getelementptr i8, ptr %537, i64 16
  store <2 x double> %wide.load1331, ptr %537, align 8, !tbaa !9
  store <2 x double> %wide.load1332, ptr %538, align 8, !tbaa !9
  %index.next1333 = add nuw i64 %index1327, 4
  %539 = icmp eq i64 %index.next1333, %n.vec1322
  br i1 %539, label %middle.block1317, label %vector.body1326, !llvm.loop !61

middle.block1317:                                 ; preds = %vector.body1326
  %bin.rdx1334 = add <2 x i32> %534, %533
  %540 = tail call i32 @llvm.vector.reduce.add.v2i32(<2 x i32> %bin.rdx1334)
  %cmp.n1335 = icmp eq i64 %indvars.iv864, %n.vec1322
  br i1 %cmp.n1335, label %.loopexit1494, label %scalar.ph1318.preheader

scalar.ph1318.preheader:                          ; preds = %middle.block1317, %vector.memcheck1315, %.preheader473
  %indvars.iv853.in.ph = phi i32 [ %.23592, %vector.memcheck1315 ], [ %.23592, %.preheader473 ], [ %540, %middle.block1317 ]
  %indvars.iv843.ph = phi i64 [ 0, %vector.memcheck1315 ], [ 0, %.preheader473 ], [ %n.vec1322, %middle.block1317 ]
  %indvars.iv841.ph = phi i64 [ %525, %vector.memcheck1315 ], [ %525, %.preheader473 ], [ %ind.end1324, %middle.block1317 ]
  %xtraiter1575 = and i64 %indvars.iv864, 1
  %lcmp.mod1576.not = icmp eq i64 %xtraiter1575, 0
  br i1 %lcmp.mod1576.not, label %scalar.ph1318.prol.loopexit, label %scalar.ph1318.prol

scalar.ph1318.prol:                               ; preds = %scalar.ph1318.preheader
  %indvars.iv853.prol = add i32 %indvars.iv853.in.ph, 1
  %541 = getelementptr inbounds double, ptr %3, i64 %indvars.iv841.ph
  %542 = load double, ptr %541, align 8, !tbaa !9
  %543 = mul nsw i64 %indvars.iv843.ph, %508
  %gep1006.prol = getelementptr double, ptr %invariant.gep1005, i64 %543
  store double %542, ptr %gep1006.prol, align 8, !tbaa !9
  %indvars.iv.next842.prol = add nsw i64 %indvars.iv841.ph, 1
  %indvars.iv.next844.prol = or disjoint i64 %indvars.iv843.ph, 1
  br label %scalar.ph1318.prol.loopexit

scalar.ph1318.prol.loopexit:                      ; preds = %scalar.ph1318.prol, %scalar.ph1318.preheader
  %indvars.iv853.lcssa1526.unr = phi i32 [ poison, %scalar.ph1318.preheader ], [ %indvars.iv853.prol, %scalar.ph1318.prol ]
  %indvars.iv.next842.lcssa1525.unr = phi i64 [ poison, %scalar.ph1318.preheader ], [ %indvars.iv.next842.prol, %scalar.ph1318.prol ]
  %indvars.iv853.in.unr = phi i32 [ %indvars.iv853.in.ph, %scalar.ph1318.preheader ], [ %indvars.iv853.prol, %scalar.ph1318.prol ]
  %indvars.iv843.unr = phi i64 [ %indvars.iv843.ph, %scalar.ph1318.preheader ], [ %indvars.iv.next844.prol, %scalar.ph1318.prol ]
  %indvars.iv841.unr = phi i64 [ %indvars.iv841.ph, %scalar.ph1318.preheader ], [ %indvars.iv.next842.prol, %scalar.ph1318.prol ]
  %544 = icmp eq i64 %indvars.iv866, %indvars.iv843.ph
  br i1 %544, label %.loopexit1494, label %scalar.ph1318

scalar.ph1318:                                    ; preds = %scalar.ph1318.prol.loopexit, %scalar.ph1318
  %indvars.iv853.in = phi i32 [ %indvars.iv853.1, %scalar.ph1318 ], [ %indvars.iv853.in.unr, %scalar.ph1318.prol.loopexit ]
  %indvars.iv843 = phi i64 [ %indvars.iv.next844.1, %scalar.ph1318 ], [ %indvars.iv843.unr, %scalar.ph1318.prol.loopexit ]
  %indvars.iv841 = phi i64 [ %indvars.iv.next842.1, %scalar.ph1318 ], [ %indvars.iv841.unr, %scalar.ph1318.prol.loopexit ]
  %545 = getelementptr inbounds double, ptr %3, i64 %indvars.iv841
  %546 = load double, ptr %545, align 8, !tbaa !9
  %547 = mul nsw i64 %indvars.iv843, %508
  %gep1006 = getelementptr double, ptr %invariant.gep1005, i64 %547
  store double %546, ptr %gep1006, align 8, !tbaa !9
  %indvars.iv.next844 = add nuw nsw i64 %indvars.iv843, 1
  %indvars.iv853.1 = add i32 %indvars.iv853.in, 2
  %gep1705 = getelementptr double, ptr %invariant.gep1704, i64 %indvars.iv841
  %548 = load double, ptr %gep1705, align 8, !tbaa !9
  %549 = mul nsw i64 %indvars.iv.next844, %508
  %gep1006.1 = getelementptr double, ptr %invariant.gep1005, i64 %549
  store double %548, ptr %gep1006.1, align 8, !tbaa !9
  %indvars.iv.next842.1 = add nsw i64 %indvars.iv841, 2
  %indvars.iv.next844.1 = add nuw nsw i64 %indvars.iv843, 2
  %exitcond851.not.1 = icmp eq i64 %indvars.iv.next844.1, %indvars.iv864
  br i1 %exitcond851.not.1, label %.loopexit1494, label %scalar.ph1318, !llvm.loop !62

.loopexit1494:                                    ; preds = %scalar.ph1318.prol.loopexit, %scalar.ph1318, %middle.block1317
  %indvars.iv853.lcssa = phi i32 [ %540, %middle.block1317 ], [ %indvars.iv853.lcssa1526.unr, %scalar.ph1318.prol.loopexit ], [ %indvars.iv853.1, %scalar.ph1318 ]
  %indvars.iv.next842.lcssa = phi i64 [ %ind.end1324, %middle.block1317 ], [ %indvars.iv.next842.lcssa1525.unr, %scalar.ph1318.prol.loopexit ], [ %indvars.iv.next842.1, %scalar.ph1318 ]
  %550 = add nuw nsw i64 %indvars.iv866, %510
  %.not429.not583 = icmp ult i64 %550, %509
  br i1 %.not429.not583, label %.lr.ph587, label %._crit_edge588

.lr.ph587:                                        ; preds = %.loopexit1494
  %551 = mul nsw i64 %550, %508
  %552 = sext i32 %indvars.iv853.lcssa to i64
  %invariant.gep1007 = getelementptr double, ptr %4, i64 %551
  %min.iters.check1297 = icmp ult i64 %519, 4
  br i1 %min.iters.check1297, label %scalar.ph1296.preheader, label %vector.memcheck1292

vector.memcheck1292:                              ; preds = %.lr.ph587
  %553 = add i64 %521, %523
  %554 = shl nsw i64 %552, 3
  %555 = sub i64 %553, %554
  %diff.check1293 = icmp ult i64 %555, 32
  br i1 %diff.check1293, label %scalar.ph1296.preheader, label %vector.ph1298

vector.ph1298:                                    ; preds = %vector.memcheck1292
  %n.vec1300 = and i64 %519, -4
  %ind.end1301 = add i64 %n.vec1300, %524
  %ind.end1303 = add i64 %n.vec1300, %552
  %invariant.gep1706 = getelementptr double, ptr %3, i64 %552
  %invariant.gep1708 = getelementptr double, ptr %invariant.gep1007, i64 %524
  br label %vector.body1305

vector.body1305:                                  ; preds = %vector.body1305, %vector.ph1298
  %index1306 = phi i64 [ 0, %vector.ph1298 ], [ %index.next1311, %vector.body1305 ]
  %gep1707 = getelementptr double, ptr %invariant.gep1706, i64 %index1306
  %556 = getelementptr inbounds i8, ptr %gep1707, i64 16
  %wide.load1309 = load <2 x double>, ptr %gep1707, align 8, !tbaa !9
  %wide.load1310 = load <2 x double>, ptr %556, align 8, !tbaa !9
  %gep1709 = getelementptr double, ptr %invariant.gep1708, i64 %index1306
  %557 = getelementptr i8, ptr %gep1709, i64 16
  store <2 x double> %wide.load1309, ptr %gep1709, align 8, !tbaa !9
  store <2 x double> %wide.load1310, ptr %557, align 8, !tbaa !9
  %index.next1311 = add nuw i64 %index1306, 4
  %558 = icmp eq i64 %index.next1311, %n.vec1300
  br i1 %558, label %middle.block1295, label %vector.body1305, !llvm.loop !63

middle.block1295:                                 ; preds = %vector.body1305
  %cmp.n1312 = icmp eq i64 %519, %n.vec1300
  br i1 %cmp.n1312, label %._crit_edge588, label %scalar.ph1296.preheader

scalar.ph1296.preheader:                          ; preds = %middle.block1295, %vector.memcheck1292, %.lr.ph587
  %indvars.iv859.ph = phi i64 [ %524, %vector.memcheck1292 ], [ %524, %.lr.ph587 ], [ %ind.end1301, %middle.block1295 ]
  %indvars.iv855.ph = phi i64 [ %552, %vector.memcheck1292 ], [ %552, %.lr.ph587 ], [ %ind.end1303, %middle.block1295 ]
  br label %scalar.ph1296

scalar.ph1296:                                    ; preds = %scalar.ph1296.preheader, %scalar.ph1296
  %indvars.iv859 = phi i64 [ %indvars.iv.next860, %scalar.ph1296 ], [ %indvars.iv859.ph, %scalar.ph1296.preheader ]
  %indvars.iv855 = phi i64 [ %indvars.iv.next856, %scalar.ph1296 ], [ %indvars.iv855.ph, %scalar.ph1296.preheader ]
  %559 = getelementptr inbounds double, ptr %3, i64 %indvars.iv855
  %560 = load double, ptr %559, align 8, !tbaa !9
  %gep1008 = getelementptr double, ptr %invariant.gep1007, i64 %indvars.iv859
  store double %560, ptr %gep1008, align 8, !tbaa !9
  %indvars.iv.next856 = add nsw i64 %indvars.iv855, 1
  %indvars.iv.next860 = add nuw nsw i64 %indvars.iv859, 1
  %.not429.not = icmp slt i64 %indvars.iv.next860, %509
  br i1 %.not429.not, label %scalar.ph1296, label %._crit_edge588, !llvm.loop !64

._crit_edge588:                                   ; preds = %scalar.ph1296, %middle.block1295, %.loopexit1494
  %.25.lcssa.in = phi i64 [ %indvars.iv.next842.lcssa, %.loopexit1494 ], [ %ind.end1303, %middle.block1295 ], [ %indvars.iv.next856, %scalar.ph1296 ]
  %indvars.iv.next867 = add nuw nsw i64 %indvars.iv866, 1
  %indvars.iv.next865 = add nuw nsw i64 %indvars.iv864, 1
  %indvars.iv.next858 = add nuw i32 %indvars.iv857, 1
  %exitcond872.not = icmp eq i64 %indvars.iv.next867, %wide.trip.count871
  br i1 %exitcond872.not, label %.preheader471.us.preheader, label %.preheader473, !llvm.loop !65

.preheader471.us.preheader:                       ; preds = %._crit_edge588, %._crit_edge579
  %.23.lcssa = phi i64 [ %indvars.iv.next837.lcssa, %._crit_edge579 ], [ %.25.lcssa.in, %._crit_edge588 ]
  %561 = sext i32 %53 to i64
  %umax = tail call i32 @llvm.umax.i32(i32 %81, i32 1)
  %562 = lshr exact i32 %62, 1
  %563 = zext nneg i32 %562 to i64
  %564 = add nsw i64 %563, -1
  %smax = tail call i32 @llvm.smax.i32(i32 %62, i32 %81)
  %565 = add nuw i32 %smax, %562
  %566 = sub i32 %565, %81
  %wide.trip.count884 = zext i32 %566 to i64
  %wide.trip.count880 = zext nneg i32 %umax to i64
  %567 = shl nuw nsw i64 %492, 3
  %568 = add i64 %567, %21
  %569 = add i64 %568, -8
  %min.iters.check1345 = icmp ugt i32 %62, 7
  %ident.check1338.not = icmp eq i32 %53, 1
  %or.cond1507 = select i1 %min.iters.check1345, i1 %ident.check1338.not, i1 false
  %n.vec1348 = and i64 %wide.trip.count880, 1073741820
  %cmp.n1358 = icmp eq i64 %n.vec1348, %wide.trip.count880
  %xtraiter1578 = and i64 %wide.trip.count880, 3
  %lcmp.mod1579.not = icmp eq i64 %xtraiter1578, 0
  %invariant.gep1710 = getelementptr i8, ptr %3, i64 8
  %invariant.gep1712 = getelementptr i8, ptr %3, i64 16
  %invariant.gep1714 = getelementptr i8, ptr %3, i64 24
  br label %.preheader471.us

.preheader471.us:                                 ; preds = %.preheader471.us.preheader, %._crit_edge599.us
  %indvar1340 = phi i64 [ 0, %.preheader471.us.preheader ], [ %indvar.next1341, %._crit_edge599.us ]
  %indvars.iv882 = phi i64 [ %564, %.preheader471.us.preheader ], [ %indvars.iv.next883, %._crit_edge599.us ]
  %.26603.us = phi i64 [ %.23.lcssa, %.preheader471.us.preheader ], [ %indvars.iv.next874.lcssa, %._crit_edge599.us ]
  %sext963 = shl i64 %.26603.us, 32
  %570 = ashr exact i64 %sext963, 32
  %invariant.gep1009 = getelementptr double, ptr %4, i64 %indvars.iv882
  br i1 %or.cond1507, label %vector.memcheck1339, label %scalar.ph1344.preheader

vector.memcheck1339:                              ; preds = %.preheader471.us
  %571 = shl i64 %indvar1340, 3
  %572 = ashr exact i64 %sext963, 29
  %573 = add i64 %569, %571
  %574 = add i64 %572, %20
  %575 = sub i64 %573, %574
  %diff.check1342 = icmp ult i64 %575, 32
  br i1 %diff.check1342, label %scalar.ph1344.preheader, label %vector.ph1346

vector.ph1346:                                    ; preds = %vector.memcheck1339
  %ind.end1350 = add nsw i64 %570, %n.vec1348
  %576 = getelementptr double, ptr %3, i64 %570
  br label %vector.body1352

vector.body1352:                                  ; preds = %vector.body1352, %vector.ph1346
  %index1353 = phi i64 [ 0, %vector.ph1346 ], [ %index.next1357, %vector.body1352 ]
  %577 = getelementptr double, ptr %576, i64 %index1353
  %578 = getelementptr inbounds i8, ptr %577, i64 16
  %wide.load1355 = load <2 x double>, ptr %577, align 8, !tbaa !9
  %wide.load1356 = load <2 x double>, ptr %578, align 8, !tbaa !9
  %579 = getelementptr double, ptr %invariant.gep1009, i64 %index1353
  %580 = getelementptr i8, ptr %579, i64 16
  store <2 x double> %wide.load1355, ptr %579, align 8, !tbaa !9
  store <2 x double> %wide.load1356, ptr %580, align 8, !tbaa !9
  %index.next1357 = add nuw i64 %index1353, 4
  %581 = icmp eq i64 %index.next1357, %n.vec1348
  br i1 %581, label %middle.block1343, label %vector.body1352, !llvm.loop !66

middle.block1343:                                 ; preds = %vector.body1352
  br i1 %cmp.n1358, label %._crit_edge599.us, label %scalar.ph1344.preheader

scalar.ph1344.preheader:                          ; preds = %middle.block1343, %vector.memcheck1339, %.preheader471.us
  %indvars.iv875.ph = phi i64 [ 0, %vector.memcheck1339 ], [ 0, %.preheader471.us ], [ %n.vec1348, %middle.block1343 ]
  %indvars.iv873.ph = phi i64 [ %570, %vector.memcheck1339 ], [ %570, %.preheader471.us ], [ %ind.end1350, %middle.block1343 ]
  br i1 %lcmp.mod1579.not, label %scalar.ph1344.prol.loopexit, label %scalar.ph1344.prol

scalar.ph1344.prol:                               ; preds = %scalar.ph1344.preheader, %scalar.ph1344.prol
  %indvars.iv875.prol = phi i64 [ %indvars.iv.next876.prol, %scalar.ph1344.prol ], [ %indvars.iv875.ph, %scalar.ph1344.preheader ]
  %indvars.iv873.prol = phi i64 [ %indvars.iv.next874.prol, %scalar.ph1344.prol ], [ %indvars.iv873.ph, %scalar.ph1344.preheader ]
  %prol.iter1580 = phi i64 [ %prol.iter1580.next, %scalar.ph1344.prol ], [ 0, %scalar.ph1344.preheader ]
  %582 = getelementptr inbounds double, ptr %3, i64 %indvars.iv873.prol
  %583 = load double, ptr %582, align 8, !tbaa !9
  %584 = mul nsw i64 %indvars.iv875.prol, %561
  %gep1010.prol = getelementptr double, ptr %invariant.gep1009, i64 %584
  store double %583, ptr %gep1010.prol, align 8, !tbaa !9
  %indvars.iv.next874.prol = add nsw i64 %indvars.iv873.prol, 1
  %indvars.iv.next876.prol = add nuw nsw i64 %indvars.iv875.prol, 1
  %prol.iter1580.next = add i64 %prol.iter1580, 1
  %prol.iter1580.cmp.not = icmp eq i64 %prol.iter1580.next, %xtraiter1578
  br i1 %prol.iter1580.cmp.not, label %scalar.ph1344.prol.loopexit, label %scalar.ph1344.prol, !llvm.loop !67

scalar.ph1344.prol.loopexit:                      ; preds = %scalar.ph1344.prol, %scalar.ph1344.preheader
  %indvars.iv.next874.lcssa1522.unr = phi i64 [ poison, %scalar.ph1344.preheader ], [ %indvars.iv.next874.prol, %scalar.ph1344.prol ]
  %indvars.iv875.unr = phi i64 [ %indvars.iv875.ph, %scalar.ph1344.preheader ], [ %indvars.iv.next876.prol, %scalar.ph1344.prol ]
  %indvars.iv873.unr = phi i64 [ %indvars.iv873.ph, %scalar.ph1344.preheader ], [ %indvars.iv.next874.prol, %scalar.ph1344.prol ]
  %585 = sub nsw i64 %indvars.iv875.ph, %wide.trip.count880
  %586 = icmp ugt i64 %585, -4
  br i1 %586, label %._crit_edge599.us, label %scalar.ph1344

scalar.ph1344:                                    ; preds = %scalar.ph1344.prol.loopexit, %scalar.ph1344
  %indvars.iv875 = phi i64 [ %indvars.iv.next876.3, %scalar.ph1344 ], [ %indvars.iv875.unr, %scalar.ph1344.prol.loopexit ]
  %indvars.iv873 = phi i64 [ %indvars.iv.next874.3, %scalar.ph1344 ], [ %indvars.iv873.unr, %scalar.ph1344.prol.loopexit ]
  %587 = getelementptr inbounds double, ptr %3, i64 %indvars.iv873
  %588 = load double, ptr %587, align 8, !tbaa !9
  %589 = mul nsw i64 %indvars.iv875, %561
  %gep1010 = getelementptr double, ptr %invariant.gep1009, i64 %589
  store double %588, ptr %gep1010, align 8, !tbaa !9
  %indvars.iv.next876 = add nuw nsw i64 %indvars.iv875, 1
  %gep1711 = getelementptr double, ptr %invariant.gep1710, i64 %indvars.iv873
  %590 = load double, ptr %gep1711, align 8, !tbaa !9
  %591 = mul nsw i64 %indvars.iv.next876, %561
  %gep1010.1 = getelementptr double, ptr %invariant.gep1009, i64 %591
  store double %590, ptr %gep1010.1, align 8, !tbaa !9
  %indvars.iv.next876.1 = add nuw nsw i64 %indvars.iv875, 2
  %gep1713 = getelementptr double, ptr %invariant.gep1712, i64 %indvars.iv873
  %592 = load double, ptr %gep1713, align 8, !tbaa !9
  %593 = mul nsw i64 %indvars.iv.next876.1, %561
  %gep1010.2 = getelementptr double, ptr %invariant.gep1009, i64 %593
  store double %592, ptr %gep1010.2, align 8, !tbaa !9
  %indvars.iv.next876.2 = add nuw nsw i64 %indvars.iv875, 3
  %gep1715 = getelementptr double, ptr %invariant.gep1714, i64 %indvars.iv873
  %594 = load double, ptr %gep1715, align 8, !tbaa !9
  %595 = mul nsw i64 %indvars.iv.next876.2, %561
  %gep1010.3 = getelementptr double, ptr %invariant.gep1009, i64 %595
  store double %594, ptr %gep1010.3, align 8, !tbaa !9
  %indvars.iv.next874.3 = add nsw i64 %indvars.iv873, 4
  %indvars.iv.next876.3 = add nuw nsw i64 %indvars.iv875, 4
  %exitcond881.not.3 = icmp eq i64 %indvars.iv.next876.3, %wide.trip.count880
  br i1 %exitcond881.not.3, label %._crit_edge599.us, label %scalar.ph1344, !llvm.loop !68

._crit_edge599.us:                                ; preds = %scalar.ph1344.prol.loopexit, %scalar.ph1344, %middle.block1343
  %indvars.iv.next874.lcssa = phi i64 [ %ind.end1350, %middle.block1343 ], [ %indvars.iv.next874.lcssa1522.unr, %scalar.ph1344.prol.loopexit ], [ %indvars.iv.next874.3, %scalar.ph1344 ]
  %indvars.iv.next883 = add nsw i64 %indvars.iv882, 1
  %exitcond885.not = icmp eq i64 %indvars.iv.next883, %wide.trip.count884
  %indvar.next1341 = add i64 %indvar1340, 1
  br i1 %exitcond885.not, label %.loopexit, label %.preheader471.us, !llvm.loop !69

.preheader468.us.preheader:                       ; preds = %376
  %596 = lshr exact i32 %62, 1
  %597 = zext nneg i32 %596 to i64
  %598 = sext i32 %53 to i64
  %599 = zext nneg i32 %62 to i64
  %600 = add nuw nsw i32 %81, 1
  %wide.trip.count918 = zext nneg i32 %600 to i64
  %umax1410 = tail call i64 @llvm.umax.i64(i64 %wide.trip.count918, i64 %599)
  %601 = sub nsw i64 %umax1410, %597
  %min.iters.check1413 = icmp ugt i64 %601, 3
  %ident.check1407.not = icmp eq i32 %53, 1
  %or.cond1508 = select i1 %min.iters.check1413, i1 %ident.check1407.not, i1 false
  %n.vec1416 = and i64 %601, -4
  %ind.end1417 = add nsw i64 %n.vec1416, %597
  %cmp.n1428 = icmp eq i64 %601, %n.vec1416
  br label %.preheader468.us

.preheader468.us:                                 ; preds = %.preheader468.us.preheader, %._crit_edge622.us
  %indvars.iv915 = phi i64 [ 0, %.preheader468.us.preheader ], [ %indvars.iv.next916, %._crit_edge622.us ]
  %.28625.us = phi i64 [ 0, %.preheader468.us.preheader ], [ %indvars.iv.next911.lcssa, %._crit_edge622.us ]
  %sext965 = shl i64 %.28625.us, 32
  %602 = ashr exact i64 %sext965, 32
  %invariant.gep1015 = getelementptr double, ptr %4, i64 %indvars.iv915
  br i1 %or.cond1508, label %vector.memcheck1408, label %scalar.ph1412.preheader

vector.memcheck1408:                              ; preds = %.preheader468.us
  %603 = ashr exact i64 %sext965, 29
  %604 = add nuw i64 %indvars.iv915, %597
  %605 = shl i64 %604, 3
  %606 = add i64 %605, %15
  %607 = add i64 %603, %14
  %608 = sub i64 %606, %607
  %diff.check1409 = icmp ult i64 %608, 32
  br i1 %diff.check1409, label %scalar.ph1412.preheader, label %vector.ph1414

vector.ph1414:                                    ; preds = %vector.memcheck1408
  %ind.end1419 = add nsw i64 %602, %n.vec1416
  %609 = getelementptr double, ptr %3, i64 %602
  %invariant.gep1734 = getelementptr double, ptr %invariant.gep1015, i64 %597
  br label %vector.body1421

vector.body1421:                                  ; preds = %vector.body1421, %vector.ph1414
  %index1422 = phi i64 [ 0, %vector.ph1414 ], [ %index.next1427, %vector.body1421 ]
  %610 = getelementptr double, ptr %609, i64 %index1422
  %611 = getelementptr inbounds i8, ptr %610, i64 16
  %wide.load1425 = load <2 x double>, ptr %610, align 8, !tbaa !9
  %wide.load1426 = load <2 x double>, ptr %611, align 8, !tbaa !9
  %gep1735 = getelementptr double, ptr %invariant.gep1734, i64 %index1422
  %612 = getelementptr i8, ptr %gep1735, i64 16
  store <2 x double> %wide.load1425, ptr %gep1735, align 8, !tbaa !9
  store <2 x double> %wide.load1426, ptr %612, align 8, !tbaa !9
  %index.next1427 = add nuw i64 %index1422, 4
  %613 = icmp eq i64 %index.next1427, %n.vec1416
  br i1 %613, label %middle.block1411, label %vector.body1421, !llvm.loop !70

middle.block1411:                                 ; preds = %vector.body1421
  br i1 %cmp.n1428, label %._crit_edge622.us, label %scalar.ph1412.preheader

scalar.ph1412.preheader:                          ; preds = %middle.block1411, %vector.memcheck1408, %.preheader468.us
  %indvars.iv912.ph = phi i64 [ %597, %vector.memcheck1408 ], [ %597, %.preheader468.us ], [ %ind.end1417, %middle.block1411 ]
  %indvars.iv910.ph = phi i64 [ %602, %vector.memcheck1408 ], [ %602, %.preheader468.us ], [ %ind.end1419, %middle.block1411 ]
  br label %scalar.ph1412

scalar.ph1412:                                    ; preds = %scalar.ph1412.preheader, %scalar.ph1412
  %indvars.iv912 = phi i64 [ %indvars.iv.next913, %scalar.ph1412 ], [ %indvars.iv912.ph, %scalar.ph1412.preheader ]
  %indvars.iv910 = phi i64 [ %indvars.iv.next911, %scalar.ph1412 ], [ %indvars.iv910.ph, %scalar.ph1412.preheader ]
  %614 = getelementptr inbounds double, ptr %3, i64 %indvars.iv910
  %615 = load double, ptr %614, align 8, !tbaa !9
  %616 = mul nsw i64 %indvars.iv912, %598
  %gep1016 = getelementptr double, ptr %invariant.gep1015, i64 %616
  store double %615, ptr %gep1016, align 8, !tbaa !9
  %indvars.iv.next911 = add nsw i64 %indvars.iv910, 1
  %indvars.iv.next913 = add nuw nsw i64 %indvars.iv912, 1
  %.not423.not.us = icmp ult i64 %indvars.iv.next913, %599
  br i1 %.not423.not.us, label %scalar.ph1412, label %._crit_edge622.us, !llvm.loop !71

._crit_edge622.us:                                ; preds = %scalar.ph1412, %middle.block1411
  %indvars.iv.next911.lcssa = phi i64 [ %ind.end1419, %middle.block1411 ], [ %indvars.iv.next911, %scalar.ph1412 ]
  %indvars.iv.next916 = add nuw nsw i64 %indvars.iv915, 1
  %exitcond919.not = icmp eq i64 %indvars.iv.next916, %wide.trip.count918
  br i1 %exitcond919.not, label %.split627.us, label %.preheader468.us, !llvm.loop !72

.split627.us:                                     ; preds = %._crit_edge622.us
  %.not419638 = icmp ult i32 %62, 4
  br i1 %.not419638, label %._crit_edge641, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %.split627.us
  %617 = add nuw nsw i32 %81, 1
  %618 = sext i32 %53 to i64
  %619 = zext nneg i32 %62 to i64
  %620 = zext nneg i32 %617 to i64
  %621 = add nsw i32 %81, -1
  %wide.trip.count950 = zext i32 %621 to i64
  %622 = shl nuw nsw i64 %597, 3
  %623 = add i64 %622, %13
  %624 = add i64 %623, 8
  %625 = sub i64 %624, %12
  %626 = shl nsw i64 %598, 3
  %invariant.gep1736 = getelementptr i8, ptr %3, i64 8
  %invariant.gep1740 = getelementptr i8, ptr %3, i64 16
  %invariant.gep1744 = getelementptr i8, ptr %3, i64 24
  %ident.check1430.not = icmp eq i32 %53, 1
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge636
  %indvars.iv945 = phi i64 [ 0, %.preheader.lr.ph ], [ %indvars.iv.next946, %._crit_edge636 ]
  %indvars.iv943 = phi i64 [ 1, %.preheader.lr.ph ], [ %indvars.iv.next944, %._crit_edge636 ]
  %indvars.iv936 = phi i32 [ %617, %.preheader.lr.ph ], [ %indvars.iv.next937, %._crit_edge636 ]
  %.30640.in = phi i64 [ %indvars.iv.next911.lcssa, %.preheader.lr.ph ], [ %.32.lcssa.in, %._crit_edge636 ]
  %627 = sext i32 %indvars.iv936 to i64
  %628 = add nsw i64 %627, 1
  %smax1433 = tail call i64 @llvm.smax.i64(i64 %628, i64 %599)
  %629 = sub i64 %smax1433, %627
  %630 = shl nuw nsw i64 %indvars.iv945, 3
  %631 = add i64 %625, %630
  %632 = sext i32 %indvars.iv936 to i64
  %633 = shl nsw i64 %632, 3
  %.30640 = trunc i64 %.30640.in to i32
  %634 = sext i32 %indvars.iv936 to i64
  %635 = mul nsw i64 %indvars.iv945, %618
  %sext967 = shl i64 %.30640.in, 32
  %636 = ashr exact i64 %sext967, 32
  %invariant.gep1017 = getelementptr double, ptr %4, i64 %635
  %min.iters.check1456 = icmp ult i64 %indvars.iv943, 4
  br i1 %min.iters.check1456, label %scalar.ph1455.preheader, label %vector.memcheck1452

vector.memcheck1452:                              ; preds = %.preheader
  %637 = mul i64 %626, %indvars.iv945
  %638 = ashr exact i64 %sext967, 29
  %639 = add i64 %637, %11
  %640 = add i64 %638, %10
  %641 = sub i64 %639, %640
  %diff.check1453 = icmp ult i64 %641, 32
  br i1 %diff.check1453, label %scalar.ph1455.preheader, label %vector.ph1457

vector.ph1457:                                    ; preds = %vector.memcheck1452
  %n.vec1459 = and i64 %indvars.iv943, 9223372036854775804
  %ind.end1461 = add i64 %636, %n.vec1459
  %642 = insertelement <2 x i32> <i32 poison, i32 0>, i32 %.30640, i64 0
  %643 = getelementptr double, ptr %3, i64 %636
  br label %vector.body1463

vector.body1463:                                  ; preds = %vector.body1463, %vector.ph1457
  %index1464 = phi i64 [ 0, %vector.ph1457 ], [ %index.next1470, %vector.body1463 ]
  %vec.phi1465 = phi <2 x i32> [ %642, %vector.ph1457 ], [ %644, %vector.body1463 ]
  %vec.phi1466 = phi <2 x i32> [ zeroinitializer, %vector.ph1457 ], [ %645, %vector.body1463 ]
  %644 = add <2 x i32> %vec.phi1465, <i32 1, i32 1>
  %645 = add <2 x i32> %vec.phi1466, <i32 1, i32 1>
  %646 = getelementptr double, ptr %643, i64 %index1464
  %647 = getelementptr inbounds i8, ptr %646, i64 16
  %wide.load1468 = load <2 x double>, ptr %646, align 8, !tbaa !9
  %wide.load1469 = load <2 x double>, ptr %647, align 8, !tbaa !9
  %648 = getelementptr double, ptr %invariant.gep1017, i64 %index1464
  %649 = getelementptr i8, ptr %648, i64 16
  store <2 x double> %wide.load1468, ptr %648, align 8, !tbaa !9
  store <2 x double> %wide.load1469, ptr %649, align 8, !tbaa !9
  %index.next1470 = add nuw i64 %index1464, 4
  %650 = icmp eq i64 %index.next1470, %n.vec1459
  br i1 %650, label %middle.block1454, label %vector.body1463, !llvm.loop !73

middle.block1454:                                 ; preds = %vector.body1463
  %bin.rdx1471 = add <2 x i32> %645, %644
  %651 = tail call i32 @llvm.vector.reduce.add.v2i32(<2 x i32> %bin.rdx1471)
  %cmp.n1472 = icmp eq i64 %indvars.iv943, %n.vec1459
  br i1 %cmp.n1472, label %.loopexit1492, label %scalar.ph1455.preheader

scalar.ph1455.preheader:                          ; preds = %middle.block1454, %vector.memcheck1452, %.preheader
  %indvars.iv932.in.ph = phi i32 [ %.30640, %vector.memcheck1452 ], [ %.30640, %.preheader ], [ %651, %middle.block1454 ]
  %indvars.iv923.ph = phi i64 [ 0, %vector.memcheck1452 ], [ 0, %.preheader ], [ %n.vec1459, %middle.block1454 ]
  %indvars.iv921.ph = phi i64 [ %636, %vector.memcheck1452 ], [ %636, %.preheader ], [ %ind.end1461, %middle.block1454 ]
  %652 = sub nsw i64 %indvars.iv945, %indvars.iv923.ph
  %xtraiter1584 = and i64 %indvars.iv943, 3
  %lcmp.mod1585.not = icmp eq i64 %xtraiter1584, 0
  br i1 %lcmp.mod1585.not, label %scalar.ph1455.prol.loopexit, label %scalar.ph1455.prol

scalar.ph1455.prol:                               ; preds = %scalar.ph1455.preheader, %scalar.ph1455.prol
  %indvars.iv932.in.prol = phi i32 [ %indvars.iv932.prol, %scalar.ph1455.prol ], [ %indvars.iv932.in.ph, %scalar.ph1455.preheader ]
  %indvars.iv923.prol = phi i64 [ %indvars.iv.next924.prol, %scalar.ph1455.prol ], [ %indvars.iv923.ph, %scalar.ph1455.preheader ]
  %indvars.iv921.prol = phi i64 [ %indvars.iv.next922.prol, %scalar.ph1455.prol ], [ %indvars.iv921.ph, %scalar.ph1455.preheader ]
  %prol.iter1586 = phi i64 [ %prol.iter1586.next, %scalar.ph1455.prol ], [ 0, %scalar.ph1455.preheader ]
  %indvars.iv932.prol = add i32 %indvars.iv932.in.prol, 1
  %653 = getelementptr inbounds double, ptr %3, i64 %indvars.iv921.prol
  %654 = load double, ptr %653, align 8, !tbaa !9
  %gep1018.prol = getelementptr double, ptr %invariant.gep1017, i64 %indvars.iv923.prol
  store double %654, ptr %gep1018.prol, align 8, !tbaa !9
  %indvars.iv.next922.prol = add nsw i64 %indvars.iv921.prol, 1
  %indvars.iv.next924.prol = add nuw nsw i64 %indvars.iv923.prol, 1
  %prol.iter1586.next = add i64 %prol.iter1586, 1
  %prol.iter1586.cmp.not = icmp eq i64 %prol.iter1586.next, %xtraiter1584
  br i1 %prol.iter1586.cmp.not, label %scalar.ph1455.prol.loopexit, label %scalar.ph1455.prol, !llvm.loop !74

scalar.ph1455.prol.loopexit:                      ; preds = %scalar.ph1455.prol, %scalar.ph1455.preheader
  %indvars.iv932.lcssa1513.unr = phi i32 [ poison, %scalar.ph1455.preheader ], [ %indvars.iv932.prol, %scalar.ph1455.prol ]
  %indvars.iv.next922.lcssa1512.unr = phi i64 [ poison, %scalar.ph1455.preheader ], [ %indvars.iv.next922.prol, %scalar.ph1455.prol ]
  %indvars.iv932.in.unr = phi i32 [ %indvars.iv932.in.ph, %scalar.ph1455.preheader ], [ %indvars.iv932.prol, %scalar.ph1455.prol ]
  %indvars.iv923.unr = phi i64 [ %indvars.iv923.ph, %scalar.ph1455.preheader ], [ %indvars.iv.next924.prol, %scalar.ph1455.prol ]
  %indvars.iv921.unr = phi i64 [ %indvars.iv921.ph, %scalar.ph1455.preheader ], [ %indvars.iv.next922.prol, %scalar.ph1455.prol ]
  %655 = icmp ult i64 %652, 3
  br i1 %655, label %.loopexit1492, label %scalar.ph1455.preheader.new

scalar.ph1455.preheader.new:                      ; preds = %scalar.ph1455.prol.loopexit
  %invariant.gep1738 = getelementptr i8, ptr %invariant.gep1017, i64 8
  %invariant.gep1742 = getelementptr i8, ptr %invariant.gep1017, i64 16
  %invariant.gep1746 = getelementptr i8, ptr %invariant.gep1017, i64 24
  br label %scalar.ph1455

scalar.ph1455:                                    ; preds = %scalar.ph1455, %scalar.ph1455.preheader.new
  %indvars.iv932.in = phi i32 [ %indvars.iv932.in.unr, %scalar.ph1455.preheader.new ], [ %indvars.iv932.3, %scalar.ph1455 ]
  %indvars.iv923 = phi i64 [ %indvars.iv923.unr, %scalar.ph1455.preheader.new ], [ %indvars.iv.next924.3, %scalar.ph1455 ]
  %indvars.iv921 = phi i64 [ %indvars.iv921.unr, %scalar.ph1455.preheader.new ], [ %indvars.iv.next922.3, %scalar.ph1455 ]
  %656 = getelementptr inbounds double, ptr %3, i64 %indvars.iv921
  %657 = load double, ptr %656, align 8, !tbaa !9
  %gep1018 = getelementptr double, ptr %invariant.gep1017, i64 %indvars.iv923
  store double %657, ptr %gep1018, align 8, !tbaa !9
  %gep1737 = getelementptr double, ptr %invariant.gep1736, i64 %indvars.iv921
  %658 = load double, ptr %gep1737, align 8, !tbaa !9
  %gep1739 = getelementptr double, ptr %invariant.gep1738, i64 %indvars.iv923
  store double %658, ptr %gep1739, align 8, !tbaa !9
  %gep1741 = getelementptr double, ptr %invariant.gep1740, i64 %indvars.iv921
  %659 = load double, ptr %gep1741, align 8, !tbaa !9
  %gep1743 = getelementptr double, ptr %invariant.gep1742, i64 %indvars.iv923
  store double %659, ptr %gep1743, align 8, !tbaa !9
  %indvars.iv932.3 = add i32 %indvars.iv932.in, 4
  %gep1745 = getelementptr double, ptr %invariant.gep1744, i64 %indvars.iv921
  %660 = load double, ptr %gep1745, align 8, !tbaa !9
  %gep1747 = getelementptr double, ptr %invariant.gep1746, i64 %indvars.iv923
  store double %660, ptr %gep1747, align 8, !tbaa !9
  %indvars.iv.next922.3 = add nsw i64 %indvars.iv921, 4
  %indvars.iv.next924.3 = add nuw nsw i64 %indvars.iv923, 4
  %exitcond931.not.3 = icmp eq i64 %indvars.iv.next924.3, %indvars.iv943
  br i1 %exitcond931.not.3, label %.loopexit1492, label %scalar.ph1455, !llvm.loop !75

.loopexit1492:                                    ; preds = %scalar.ph1455.prol.loopexit, %scalar.ph1455, %middle.block1454
  %indvars.iv932.lcssa = phi i32 [ %651, %middle.block1454 ], [ %indvars.iv932.lcssa1513.unr, %scalar.ph1455.prol.loopexit ], [ %indvars.iv932.3, %scalar.ph1455 ]
  %indvars.iv.next922.lcssa = phi i64 [ %ind.end1461, %middle.block1454 ], [ %indvars.iv.next922.lcssa1512.unr, %scalar.ph1455.prol.loopexit ], [ %indvars.iv.next922.3, %scalar.ph1455 ]
  %661 = add nuw nsw i64 %indvars.iv945, %620
  %.not422.not631 = icmp ult i64 %661, %619
  br i1 %.not422.not631, label %.lr.ph635.preheader, label %._crit_edge636

.lr.ph635.preheader:                              ; preds = %.loopexit1492
  %662 = sext i32 %indvars.iv932.lcssa to i64
  %invariant.gep1019 = getelementptr double, ptr %4, i64 %661
  %min.iters.check1436 = icmp ugt i64 %629, 5
  %or.cond1509 = select i1 %min.iters.check1436, i1 %ident.check1430.not, i1 false
  br i1 %or.cond1509, label %vector.memcheck1431, label %.lr.ph635.preheader1510

vector.memcheck1431:                              ; preds = %.lr.ph635.preheader
  %663 = add i64 %631, %633
  %664 = shl nsw i64 %662, 3
  %665 = sub i64 %663, %664
  %diff.check1432 = icmp ult i64 %665, 32
  br i1 %diff.check1432, label %.lr.ph635.preheader1510, label %vector.ph1437

vector.ph1437:                                    ; preds = %vector.memcheck1431
  %n.vec1439 = and i64 %629, -4
  %ind.end1440 = add i64 %n.vec1439, %634
  %ind.end1442 = add i64 %n.vec1439, %662
  %invariant.gep1748 = getelementptr double, ptr %3, i64 %662
  %invariant.gep1750 = getelementptr double, ptr %invariant.gep1019, i64 %634
  br label %vector.body1444

vector.body1444:                                  ; preds = %vector.body1444, %vector.ph1437
  %index1445 = phi i64 [ 0, %vector.ph1437 ], [ %index.next1450, %vector.body1444 ]
  %gep1749 = getelementptr double, ptr %invariant.gep1748, i64 %index1445
  %666 = getelementptr inbounds i8, ptr %gep1749, i64 16
  %wide.load1448 = load <2 x double>, ptr %gep1749, align 8, !tbaa !9
  %wide.load1449 = load <2 x double>, ptr %666, align 8, !tbaa !9
  %gep1751 = getelementptr double, ptr %invariant.gep1750, i64 %index1445
  %667 = getelementptr i8, ptr %gep1751, i64 16
  store <2 x double> %wide.load1448, ptr %gep1751, align 8, !tbaa !9
  store <2 x double> %wide.load1449, ptr %667, align 8, !tbaa !9
  %index.next1450 = add nuw i64 %index1445, 4
  %668 = icmp eq i64 %index.next1450, %n.vec1439
  br i1 %668, label %middle.block1434, label %vector.body1444, !llvm.loop !76

middle.block1434:                                 ; preds = %vector.body1444
  %cmp.n1451 = icmp eq i64 %629, %n.vec1439
  br i1 %cmp.n1451, label %._crit_edge636, label %.lr.ph635.preheader1510

.lr.ph635.preheader1510:                          ; preds = %middle.block1434, %vector.memcheck1431, %.lr.ph635.preheader
  %indvars.iv938.ph = phi i64 [ %634, %vector.memcheck1431 ], [ %634, %.lr.ph635.preheader ], [ %ind.end1440, %middle.block1434 ]
  %indvars.iv934.ph = phi i64 [ %662, %vector.memcheck1431 ], [ %662, %.lr.ph635.preheader ], [ %ind.end1442, %middle.block1434 ]
  br label %.lr.ph635

.lr.ph635:                                        ; preds = %.lr.ph635.preheader1510, %.lr.ph635
  %indvars.iv938 = phi i64 [ %indvars.iv.next939, %.lr.ph635 ], [ %indvars.iv938.ph, %.lr.ph635.preheader1510 ]
  %indvars.iv934 = phi i64 [ %indvars.iv.next935, %.lr.ph635 ], [ %indvars.iv934.ph, %.lr.ph635.preheader1510 ]
  %669 = getelementptr inbounds double, ptr %3, i64 %indvars.iv934
  %670 = load double, ptr %669, align 8, !tbaa !9
  %671 = mul nsw i64 %indvars.iv938, %618
  %gep1020 = getelementptr double, ptr %invariant.gep1019, i64 %671
  store double %670, ptr %gep1020, align 8, !tbaa !9
  %indvars.iv.next935 = add nsw i64 %indvars.iv934, 1
  %indvars.iv.next939 = add nuw nsw i64 %indvars.iv938, 1
  %.not422.not = icmp slt i64 %indvars.iv.next939, %619
  br i1 %.not422.not, label %.lr.ph635, label %._crit_edge636, !llvm.loop !77

._crit_edge636:                                   ; preds = %.lr.ph635, %middle.block1434, %.loopexit1492
  %.32.lcssa.in = phi i64 [ %indvars.iv.next922.lcssa, %.loopexit1492 ], [ %ind.end1442, %middle.block1434 ], [ %indvars.iv.next935, %.lr.ph635 ]
  %indvars.iv.next946 = add nuw nsw i64 %indvars.iv945, 1
  %indvars.iv.next944 = add nuw nsw i64 %indvars.iv943, 1
  %indvars.iv.next937 = add nuw i32 %indvars.iv936, 1
  %exitcond951.not = icmp eq i64 %indvars.iv.next946, %wide.trip.count950
  br i1 %exitcond951.not, label %._crit_edge641, label %.preheader, !llvm.loop !78

._crit_edge641:                                   ; preds = %._crit_edge636, %.split627.us
  %.11387.lcssa = phi i32 [ 0, %.split627.us ], [ %621, %._crit_edge636 ]
  %.30.lcssa = phi i64 [ %indvars.iv.next911.lcssa, %.split627.us ], [ %.32.lcssa.in, %._crit_edge636 ]
  %672 = mul nsw i32 %.11387.lcssa, %53
  %sext966 = shl i64 %.30.lcssa, 32
  %673 = ashr exact i64 %sext966, 32
  %674 = sext i32 %672 to i64
  %675 = add nsw i32 %.11387.lcssa, 1
  %wide.trip.count960 = zext i32 %675 to i64
  %invariant.gep1021 = getelementptr double, ptr %4, i64 %674
  %min.iters.check1478 = icmp ult i32 %.11387.lcssa, 11
  br i1 %min.iters.check1478, label %scalar.ph1477.preheader, label %vector.memcheck1474

vector.memcheck1474:                              ; preds = %._crit_edge641
  %676 = shl nsw i64 %674, 3
  %677 = add i64 %676, %9
  %678 = ashr exact i64 %sext966, 29
  %679 = add i64 %678, %8
  %680 = sub i64 %677, %679
  %diff.check1475 = icmp ult i64 %680, 32
  br i1 %diff.check1475, label %scalar.ph1477.preheader, label %vector.ph1479

vector.ph1479:                                    ; preds = %vector.memcheck1474
  %n.vec1481 = and i64 %wide.trip.count960, 2147483644
  %ind.end1483 = add nsw i64 %673, %n.vec1481
  %681 = getelementptr double, ptr %3, i64 %673
  br label %vector.body1485

vector.body1485:                                  ; preds = %vector.body1485, %vector.ph1479
  %index1486 = phi i64 [ 0, %vector.ph1479 ], [ %index.next1490, %vector.body1485 ]
  %682 = getelementptr double, ptr %681, i64 %index1486
  %683 = getelementptr inbounds i8, ptr %682, i64 16
  %wide.load1488 = load <2 x double>, ptr %682, align 8, !tbaa !9
  %wide.load1489 = load <2 x double>, ptr %683, align 8, !tbaa !9
  %684 = getelementptr double, ptr %invariant.gep1021, i64 %index1486
  %685 = getelementptr i8, ptr %684, i64 16
  store <2 x double> %wide.load1488, ptr %684, align 8, !tbaa !9
  store <2 x double> %wide.load1489, ptr %685, align 8, !tbaa !9
  %index.next1490 = add nuw i64 %index1486, 4
  %686 = icmp eq i64 %index.next1490, %n.vec1481
  br i1 %686, label %middle.block1476, label %vector.body1485, !llvm.loop !79

middle.block1476:                                 ; preds = %vector.body1485
  %cmp.n1491 = icmp eq i64 %n.vec1481, %wide.trip.count960
  br i1 %cmp.n1491, label %.loopexit, label %scalar.ph1477.preheader

scalar.ph1477.preheader:                          ; preds = %middle.block1476, %vector.memcheck1474, %._crit_edge641
  %indvars.iv955.ph = phi i64 [ 0, %vector.memcheck1474 ], [ 0, %._crit_edge641 ], [ %n.vec1481, %middle.block1476 ]
  %indvars.iv953.ph = phi i64 [ %673, %vector.memcheck1474 ], [ %673, %._crit_edge641 ], [ %ind.end1483, %middle.block1476 ]
  %xtraiter1587 = and i64 %wide.trip.count960, 3
  %lcmp.mod1588.not = icmp eq i64 %xtraiter1587, 0
  br i1 %lcmp.mod1588.not, label %scalar.ph1477.prol.loopexit, label %scalar.ph1477.prol

scalar.ph1477.prol:                               ; preds = %scalar.ph1477.preheader, %scalar.ph1477.prol
  %indvars.iv955.prol = phi i64 [ %indvars.iv.next956.prol, %scalar.ph1477.prol ], [ %indvars.iv955.ph, %scalar.ph1477.preheader ]
  %indvars.iv953.prol = phi i64 [ %indvars.iv.next954.prol, %scalar.ph1477.prol ], [ %indvars.iv953.ph, %scalar.ph1477.preheader ]
  %prol.iter1589 = phi i64 [ %prol.iter1589.next, %scalar.ph1477.prol ], [ 0, %scalar.ph1477.preheader ]
  %687 = getelementptr inbounds double, ptr %3, i64 %indvars.iv953.prol
  %688 = load double, ptr %687, align 8, !tbaa !9
  %gep1022.prol = getelementptr double, ptr %invariant.gep1021, i64 %indvars.iv955.prol
  store double %688, ptr %gep1022.prol, align 8, !tbaa !9
  %indvars.iv.next954.prol = add nsw i64 %indvars.iv953.prol, 1
  %indvars.iv.next956.prol = add nuw nsw i64 %indvars.iv955.prol, 1
  %prol.iter1589.next = add i64 %prol.iter1589, 1
  %prol.iter1589.cmp.not = icmp eq i64 %prol.iter1589.next, %xtraiter1587
  br i1 %prol.iter1589.cmp.not, label %scalar.ph1477.prol.loopexit, label %scalar.ph1477.prol, !llvm.loop !80

scalar.ph1477.prol.loopexit:                      ; preds = %scalar.ph1477.prol, %scalar.ph1477.preheader
  %indvars.iv955.unr = phi i64 [ %indvars.iv955.ph, %scalar.ph1477.preheader ], [ %indvars.iv.next956.prol, %scalar.ph1477.prol ]
  %indvars.iv953.unr = phi i64 [ %indvars.iv953.ph, %scalar.ph1477.preheader ], [ %indvars.iv.next954.prol, %scalar.ph1477.prol ]
  %689 = sub nsw i64 %indvars.iv955.ph, %wide.trip.count960
  %690 = icmp ugt i64 %689, -4
  br i1 %690, label %.loopexit, label %scalar.ph1477.preheader.new

scalar.ph1477.preheader.new:                      ; preds = %scalar.ph1477.prol.loopexit
  %invariant.gep1752 = getelementptr i8, ptr %3, i64 8
  %invariant.gep1754 = getelementptr i8, ptr %invariant.gep1021, i64 8
  %invariant.gep1756 = getelementptr i8, ptr %3, i64 16
  %invariant.gep1758 = getelementptr i8, ptr %invariant.gep1021, i64 16
  %invariant.gep1760 = getelementptr i8, ptr %3, i64 24
  %invariant.gep1762 = getelementptr i8, ptr %invariant.gep1021, i64 24
  br label %scalar.ph1477

scalar.ph1477:                                    ; preds = %scalar.ph1477, %scalar.ph1477.preheader.new
  %indvars.iv955 = phi i64 [ %indvars.iv955.unr, %scalar.ph1477.preheader.new ], [ %indvars.iv.next956.3, %scalar.ph1477 ]
  %indvars.iv953 = phi i64 [ %indvars.iv953.unr, %scalar.ph1477.preheader.new ], [ %indvars.iv.next954.3, %scalar.ph1477 ]
  %691 = getelementptr inbounds double, ptr %3, i64 %indvars.iv953
  %692 = load double, ptr %691, align 8, !tbaa !9
  %gep1022 = getelementptr double, ptr %invariant.gep1021, i64 %indvars.iv955
  store double %692, ptr %gep1022, align 8, !tbaa !9
  %gep1753 = getelementptr double, ptr %invariant.gep1752, i64 %indvars.iv953
  %693 = load double, ptr %gep1753, align 8, !tbaa !9
  %gep1755 = getelementptr double, ptr %invariant.gep1754, i64 %indvars.iv955
  store double %693, ptr %gep1755, align 8, !tbaa !9
  %gep1757 = getelementptr double, ptr %invariant.gep1756, i64 %indvars.iv953
  %694 = load double, ptr %gep1757, align 8, !tbaa !9
  %gep1759 = getelementptr double, ptr %invariant.gep1758, i64 %indvars.iv955
  store double %694, ptr %gep1759, align 8, !tbaa !9
  %gep1761 = getelementptr double, ptr %invariant.gep1760, i64 %indvars.iv953
  %695 = load double, ptr %gep1761, align 8, !tbaa !9
  %gep1763 = getelementptr double, ptr %invariant.gep1762, i64 %indvars.iv955
  store double %695, ptr %gep1763, align 8, !tbaa !9
  %indvars.iv.next954.3 = add nsw i64 %indvars.iv953, 4
  %indvars.iv.next956.3 = add nuw nsw i64 %indvars.iv955, 4
  %exitcond961.not.3 = icmp eq i64 %indvars.iv.next956.3, %wide.trip.count960
  br i1 %exitcond961.not.3, label %.loopexit, label %scalar.ph1477, !llvm.loop !81

.loopexit:                                        ; preds = %._crit_edge, %._crit_edge510, %._crit_edge535.us, %._crit_edge558, %._crit_edge569, %._crit_edge599.us, %._crit_edge611, %scalar.ph1477.prol.loopexit, %scalar.ph1477, %middle.block1476, %._crit_edge529, %._crit_edge549, %73, %75, %.thread
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %52) #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 i32 @llvm.umax.i32(i32, i32) #3

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

; 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 i32 @llvm.vector.reduce.add.v2i32(<2 x i32>) #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}
!12 = !{!"llvm.loop.unroll.disable"}
!13 = distinct !{!13, !14, !15, !16}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!"llvm.loop.isvectorized", i32 1}
!16 = !{!"llvm.loop.unroll.runtime.disable"}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !14, !15, !16}
!19 = distinct !{!19, !14, !15}
!20 = distinct !{!20, !14, !15}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14, !15, !16}
!23 = distinct !{!23, !12}
!24 = distinct !{!24, !14, !15}
!25 = distinct !{!25, !14, !15, !16}
!26 = distinct !{!26, !14, !15}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14, !15, !16}
!29 = distinct !{!29, !14, !15}
!30 = distinct !{!30, !14, !15, !16}
!31 = distinct !{!31, !14, !15}
!32 = distinct !{!32, !14}
!33 = distinct !{!33, !14, !15, !16}
!34 = distinct !{!34, !12}
!35 = distinct !{!35, !14, !15}
!36 = distinct !{!36, !14}
!37 = distinct !{!37, !14, !15, !16}
!38 = distinct !{!38, !12}
!39 = distinct !{!39, !14, !15}
!40 = distinct !{!40, !14}
!41 = distinct !{!41, !14, !15, !16}
!42 = distinct !{!42, !12}
!43 = distinct !{!43, !14, !15}
!44 = distinct !{!44, !14, !15, !16}
!45 = distinct !{!45, !14, !15}
!46 = distinct !{!46, !14}
!47 = distinct !{!47, !14, !15, !16}
!48 = distinct !{!48, !12}
!49 = distinct !{!49, !14, !15, !16}
!50 = distinct !{!50, !14, !15}
!51 = distinct !{!51, !14, !15}
!52 = distinct !{!52, !14}
!53 = distinct !{!53, !14, !15, !16}
!54 = distinct !{!54, !12}
!55 = distinct !{!55, !14, !15}
!56 = distinct !{!56, !14, !15, !16}
!57 = distinct !{!57, !14, !15}
!58 = distinct !{!58, !14}
!59 = distinct !{!59, !14, !15, !16}
!60 = distinct !{!60, !14, !15}
!61 = distinct !{!61, !14, !15, !16}
!62 = distinct !{!62, !14, !15}
!63 = distinct !{!63, !14, !15, !16}
!64 = distinct !{!64, !14, !15}
!65 = distinct !{!65, !14}
!66 = distinct !{!66, !14, !15, !16}
!67 = distinct !{!67, !12}
!68 = distinct !{!68, !14, !15}
!69 = distinct !{!69, !14}
!70 = distinct !{!70, !14, !15, !16}
!71 = distinct !{!71, !14, !15}
!72 = distinct !{!72, !14}
!73 = distinct !{!73, !14, !15, !16}
!74 = distinct !{!74, !12}
!75 = distinct !{!75, !14, !15}
!76 = distinct !{!76, !14, !15, !16}
!77 = distinct !{!77, !14, !15}
!78 = distinct !{!78, !14}
!79 = distinct !{!79, !14, !15, !16}
!80 = distinct !{!80, !12}
!81 = distinct !{!81, !14, !15}


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