; LLVM IR from niuyishuai/PDCABB :: LAPACK_BLAS/BLAS/SRC (dtrmm)

; 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 [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @f2c_dtrmm(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10) #0 {
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca double, align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i32, align 4
  store ptr %0, ptr %13, align 8, !tbaa !5
  store ptr %1, ptr %14, align 8, !tbaa !5
  store ptr %2, ptr %15, align 8, !tbaa !5
  store ptr %3, ptr %16, align 8, !tbaa !5
  store ptr %4, ptr %17, align 8, !tbaa !5
  store ptr %5, ptr %18, align 8, !tbaa !5
  store ptr %6, ptr %19, align 8, !tbaa !5
  store ptr %7, ptr %20, align 8, !tbaa !5
  store ptr %8, ptr %21, align 8, !tbaa !5
  store ptr %9, ptr %22, align 8, !tbaa !5
  store ptr %10, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #4
  %41 = load ptr, ptr %21, align 8, !tbaa !5
  %42 = load i64, ptr %41, align 8, !tbaa !9
  store i64 %42, ptr %24, align 8, !tbaa !9
  %43 = load i64, ptr %24, align 8, !tbaa !9
  %44 = add nsw i64 1, %43
  store i64 %44, ptr %25, align 8, !tbaa !9
  %45 = load i64, ptr %25, align 8, !tbaa !9
  %46 = load ptr, ptr %20, align 8, !tbaa !5
  %47 = sub i64 0, %45
  %48 = getelementptr inbounds double, ptr %46, i64 %47
  store ptr %48, ptr %20, align 8, !tbaa !5
  %49 = load ptr, ptr %23, align 8, !tbaa !5
  %50 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %50, ptr %26, align 8, !tbaa !9
  %51 = load i64, ptr %26, align 8, !tbaa !9
  %52 = add nsw i64 1, %51
  store i64 %52, ptr %27, align 8, !tbaa !9
  %53 = load i64, ptr %27, align 8, !tbaa !9
  %54 = load ptr, ptr %22, align 8, !tbaa !5
  %55 = sub i64 0, %53
  %56 = getelementptr inbounds double, ptr %54, i64 %55
  store ptr %56, ptr %22, align 8, !tbaa !5
  %57 = load ptr, ptr %13, align 8, !tbaa !5
  %58 = call i64 @lsame_(ptr noundef %57, ptr noundef @.str)
  store i64 %58, ptr %36, align 8, !tbaa !9
  %59 = load i64, ptr %36, align 8, !tbaa !9
  %60 = icmp ne i64 %59, 0
  br i1 %60, label %61, label %64

61:                                               ; preds = %11
  %62 = load ptr, ptr %17, align 8, !tbaa !5
  %63 = load i64, ptr %62, align 8, !tbaa !9
  store i64 %63, ptr %37, align 8, !tbaa !9
  br label %67

64:                                               ; preds = %11
  %65 = load ptr, ptr %18, align 8, !tbaa !5
  %66 = load i64, ptr %65, align 8, !tbaa !9
  store i64 %66, ptr %37, align 8, !tbaa !9
  br label %67

67:                                               ; preds = %64, %61
  %68 = load ptr, ptr %16, align 8, !tbaa !5
  %69 = call i64 @lsame_(ptr noundef %68, ptr noundef @.str.1)
  store i64 %69, ptr %39, align 8, !tbaa !9
  %70 = load ptr, ptr %14, align 8, !tbaa !5
  %71 = call i64 @lsame_(ptr noundef %70, ptr noundef @.str.2)
  store i64 %71, ptr %38, align 8, !tbaa !9
  store i64 0, ptr %34, align 8, !tbaa !9
  %72 = load i64, ptr %36, align 8, !tbaa !9
  %73 = icmp ne i64 %72, 0
  br i1 %73, label %79, label %74

74:                                               ; preds = %67
  %75 = load ptr, ptr %13, align 8, !tbaa !5
  %76 = call i64 @lsame_(ptr noundef %75, ptr noundef @.str.3)
  %77 = icmp ne i64 %76, 0
  br i1 %77, label %79, label %78

78:                                               ; preds = %74
  store i64 1, ptr %34, align 8, !tbaa !9
  br label %152

79:                                               ; preds = %74, %67
  %80 = load i64, ptr %38, align 8, !tbaa !9
  %81 = icmp ne i64 %80, 0
  br i1 %81, label %87, label %82

82:                                               ; preds = %79
  %83 = load ptr, ptr %14, align 8, !tbaa !5
  %84 = call i64 @lsame_(ptr noundef %83, ptr noundef @.str)
  %85 = icmp ne i64 %84, 0
  br i1 %85, label %87, label %86

86:                                               ; preds = %82
  store i64 2, ptr %34, align 8, !tbaa !9
  br label %151

87:                                               ; preds = %82, %79
  %88 = load ptr, ptr %15, align 8, !tbaa !5
  %89 = call i64 @lsame_(ptr noundef %88, ptr noundef @.str.1)
  %90 = icmp ne i64 %89, 0
  br i1 %90, label %100, label %91

91:                                               ; preds = %87
  %92 = load ptr, ptr %15, align 8, !tbaa !5
  %93 = call i64 @lsame_(ptr noundef %92, ptr noundef @.str.4)
  %94 = icmp ne i64 %93, 0
  br i1 %94, label %100, label %95

95:                                               ; preds = %91
  %96 = load ptr, ptr %15, align 8, !tbaa !5
  %97 = call i64 @lsame_(ptr noundef %96, ptr noundef @.str.5)
  %98 = icmp ne i64 %97, 0
  br i1 %98, label %100, label %99

99:                                               ; preds = %95
  store i64 3, ptr %34, align 8, !tbaa !9
  br label %150

100:                                              ; preds = %95, %91, %87
  %101 = load ptr, ptr %16, align 8, !tbaa !5
  %102 = call i64 @lsame_(ptr noundef %101, ptr noundef @.str.2)
  %103 = icmp ne i64 %102, 0
  br i1 %103, label %109, label %104

104:                                              ; preds = %100
  %105 = load ptr, ptr %16, align 8, !tbaa !5
  %106 = call i64 @lsame_(ptr noundef %105, ptr noundef @.str.1)
  %107 = icmp ne i64 %106, 0
  br i1 %107, label %109, label %108

108:                                              ; preds = %104
  store i64 4, ptr %34, align 8, !tbaa !9
  br label %149

109:                                              ; preds = %104, %100
  %110 = load ptr, ptr %17, align 8, !tbaa !5
  %111 = load i64, ptr %110, align 8, !tbaa !9
  %112 = icmp slt i64 %111, 0
  br i1 %112, label %113, label %114

113:                                              ; preds = %109
  store i64 5, ptr %34, align 8, !tbaa !9
  br label %148

114:                                              ; preds = %109
  %115 = load ptr, ptr %18, align 8, !tbaa !5
  %116 = load i64, ptr %115, align 8, !tbaa !9
  %117 = icmp slt i64 %116, 0
  br i1 %117, label %118, label %119

118:                                              ; preds = %114
  store i64 6, ptr %34, align 8, !tbaa !9
  br label %147

119:                                              ; preds = %114
  %120 = load ptr, ptr %21, align 8, !tbaa !5
  %121 = load i64, ptr %120, align 8, !tbaa !9
  %122 = load i64, ptr %37, align 8, !tbaa !9
  %123 = icmp sge i64 1, %122
  br i1 %123, label %124, label %125

124:                                              ; preds = %119
  br label %127

125:                                              ; preds = %119
  %126 = load i64, ptr %37, align 8, !tbaa !9
  br label %127

127:                                              ; preds = %125, %124
  %128 = phi i64 [ 1, %124 ], [ %126, %125 ]
  %129 = icmp slt i64 %121, %128
  br i1 %129, label %130, label %131

130:                                              ; preds = %127
  store i64 9, ptr %34, align 8, !tbaa !9
  br label %146

131:                                              ; preds = %127
  %132 = load ptr, ptr %23, align 8, !tbaa !5
  %133 = load i64, ptr %132, align 8, !tbaa !9
  %134 = load ptr, ptr %17, align 8, !tbaa !5
  %135 = load i64, ptr %134, align 8, !tbaa !9
  %136 = icmp sge i64 1, %135
  br i1 %136, label %137, label %138

137:                                              ; preds = %131
  br label %141

138:                                              ; preds = %131
  %139 = load ptr, ptr %17, align 8, !tbaa !5
  %140 = load i64, ptr %139, align 8, !tbaa !9
  br label %141

141:                                              ; preds = %138, %137
  %142 = phi i64 [ 1, %137 ], [ %140, %138 ]
  %143 = icmp slt i64 %133, %142
  br i1 %143, label %144, label %145

144:                                              ; preds = %141
  store i64 11, ptr %34, align 8, !tbaa !9
  br label %145

145:                                              ; preds = %144, %141
  br label %146

146:                                              ; preds = %145, %130
  br label %147

147:                                              ; preds = %146, %118
  br label %148

148:                                              ; preds = %147, %113
  br label %149

149:                                              ; preds = %148, %108
  br label %150

150:                                              ; preds = %149, %99
  br label %151

151:                                              ; preds = %150, %86
  br label %152

152:                                              ; preds = %151, %78
  %153 = load i64, ptr %34, align 8, !tbaa !9
  %154 = icmp ne i64 %153, 0
  br i1 %154, label %155, label %157

155:                                              ; preds = %152
  %156 = call i32 @xerbla_(ptr noundef @.str.6, ptr noundef %34)
  store i32 0, ptr %12, align 4
  store i32 1, ptr %40, align 4
  br label %1083

157:                                              ; preds = %152
  %158 = load ptr, ptr %17, align 8, !tbaa !5
  %159 = load i64, ptr %158, align 8, !tbaa !9
  %160 = icmp eq i64 %159, 0
  br i1 %160, label %165, label %161

161:                                              ; preds = %157
  %162 = load ptr, ptr %18, align 8, !tbaa !5
  %163 = load i64, ptr %162, align 8, !tbaa !9
  %164 = icmp eq i64 %163, 0
  br i1 %164, label %165, label %166

165:                                              ; preds = %161, %157
  store i32 0, ptr %12, align 4
  store i32 1, ptr %40, align 4
  br label %1083

166:                                              ; preds = %161
  %167 = load ptr, ptr %19, align 8, !tbaa !5
  %168 = load double, ptr %167, align 8, !tbaa !11
  %169 = fcmp oeq double %168, 0.000000e+00
  br i1 %169, label %170, label %200

170:                                              ; preds = %166
  %171 = load ptr, ptr %18, align 8, !tbaa !5
  %172 = load i64, ptr %171, align 8, !tbaa !9
  store i64 %172, ptr %28, align 8, !tbaa !9
  store i64 1, ptr %32, align 8, !tbaa !9
  br label %173

173:                                              ; preds = %196, %170
  %174 = load i64, ptr %32, align 8, !tbaa !9
  %175 = load i64, ptr %28, align 8, !tbaa !9
  %176 = icmp sle i64 %174, %175
  br i1 %176, label %177, label %199

177:                                              ; preds = %173
  %178 = load ptr, ptr %17, align 8, !tbaa !5
  %179 = load i64, ptr %178, align 8, !tbaa !9
  store i64 %179, ptr %29, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %180

180:                                              ; preds = %192, %177
  %181 = load i64, ptr %31, align 8, !tbaa !9
  %182 = load i64, ptr %29, align 8, !tbaa !9
  %183 = icmp sle i64 %181, %182
  br i1 %183, label %184, label %195

184:                                              ; preds = %180
  %185 = load ptr, ptr %22, align 8, !tbaa !5
  %186 = load i64, ptr %31, align 8, !tbaa !9
  %187 = load i64, ptr %32, align 8, !tbaa !9
  %188 = load i64, ptr %26, align 8, !tbaa !9
  %189 = mul nsw i64 %187, %188
  %190 = add nsw i64 %186, %189
  %191 = getelementptr inbounds double, ptr %185, i64 %190
  store double 0.000000e+00, ptr %191, align 8, !tbaa !11
  br label %192

192:                                              ; preds = %184
  %193 = load i64, ptr %31, align 8, !tbaa !9
  %194 = add nsw i64 %193, 1
  store i64 %194, ptr %31, align 8, !tbaa !9
  br label %180, !llvm.loop !13

195:                                              ; preds = %180
  br label %196

196:                                              ; preds = %195
  %197 = load i64, ptr %32, align 8, !tbaa !9
  %198 = add nsw i64 %197, 1
  store i64 %198, ptr %32, align 8, !tbaa !9
  br label %173, !llvm.loop !15

199:                                              ; preds = %173
  store i32 0, ptr %12, align 4
  store i32 1, ptr %40, align 4
  br label %1083

200:                                              ; preds = %166
  %201 = load i64, ptr %36, align 8, !tbaa !9
  %202 = icmp ne i64 %201, 0
  br i1 %202, label %203, label %587

203:                                              ; preds = %200
  %204 = load ptr, ptr %15, align 8, !tbaa !5
  %205 = call i64 @lsame_(ptr noundef %204, ptr noundef @.str.1)
  %206 = icmp ne i64 %205, 0
  br i1 %206, label %207, label %411

207:                                              ; preds = %203
  %208 = load i64, ptr %38, align 8, !tbaa !9
  %209 = icmp ne i64 %208, 0
  br i1 %209, label %210, label %306

210:                                              ; preds = %207
  %211 = load ptr, ptr %18, align 8, !tbaa !5
  %212 = load i64, ptr %211, align 8, !tbaa !9
  store i64 %212, ptr %28, align 8, !tbaa !9
  store i64 1, ptr %32, align 8, !tbaa !9
  br label %213

213:                                              ; preds = %302, %210
  %214 = load i64, ptr %32, align 8, !tbaa !9
  %215 = load i64, ptr %28, align 8, !tbaa !9
  %216 = icmp sle i64 %214, %215
  br i1 %216, label %217, label %305

217:                                              ; preds = %213
  %218 = load ptr, ptr %17, align 8, !tbaa !5
  %219 = load i64, ptr %218, align 8, !tbaa !9
  store i64 %219, ptr %29, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  br label %220

220:                                              ; preds = %298, %217
  %221 = load i64, ptr %33, align 8, !tbaa !9
  %222 = load i64, ptr %29, align 8, !tbaa !9
  %223 = icmp sle i64 %221, %222
  br i1 %223, label %224, label %301

224:                                              ; preds = %220
  %225 = load ptr, ptr %22, align 8, !tbaa !5
  %226 = load i64, ptr %33, align 8, !tbaa !9
  %227 = load i64, ptr %32, align 8, !tbaa !9
  %228 = load i64, ptr %26, align 8, !tbaa !9
  %229 = mul nsw i64 %227, %228
  %230 = add nsw i64 %226, %229
  %231 = getelementptr inbounds double, ptr %225, i64 %230
  %232 = load double, ptr %231, align 8, !tbaa !11
  %233 = fcmp une double %232, 0.000000e+00
  br i1 %233, label %234, label %297

234:                                              ; preds = %224
  %235 = load ptr, ptr %19, align 8, !tbaa !5
  %236 = load double, ptr %235, align 8, !tbaa !11
  %237 = load ptr, ptr %22, align 8, !tbaa !5
  %238 = load i64, ptr %33, align 8, !tbaa !9
  %239 = load i64, ptr %32, align 8, !tbaa !9
  %240 = load i64, ptr %26, align 8, !tbaa !9
  %241 = mul nsw i64 %239, %240
  %242 = add nsw i64 %238, %241
  %243 = getelementptr inbounds double, ptr %237, i64 %242
  %244 = load double, ptr %243, align 8, !tbaa !11
  %245 = fmul double %236, %244
  store double %245, ptr %35, align 8, !tbaa !11
  %246 = load i64, ptr %33, align 8, !tbaa !9
  %247 = sub nsw i64 %246, 1
  store i64 %247, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %248

248:                                              ; preds = %271, %234
  %249 = load i64, ptr %31, align 8, !tbaa !9
  %250 = load i64, ptr %30, align 8, !tbaa !9
  %251 = icmp sle i64 %249, %250
  br i1 %251, label %252, label %274

252:                                              ; preds = %248
  %253 = load double, ptr %35, align 8, !tbaa !11
  %254 = load ptr, ptr %20, align 8, !tbaa !5
  %255 = load i64, ptr %31, align 8, !tbaa !9
  %256 = load i64, ptr %33, align 8, !tbaa !9
  %257 = load i64, ptr %24, align 8, !tbaa !9
  %258 = mul nsw i64 %256, %257
  %259 = add nsw i64 %255, %258
  %260 = getelementptr inbounds double, ptr %254, i64 %259
  %261 = load double, ptr %260, align 8, !tbaa !11
  %262 = load ptr, ptr %22, align 8, !tbaa !5
  %263 = load i64, ptr %31, align 8, !tbaa !9
  %264 = load i64, ptr %32, align 8, !tbaa !9
  %265 = load i64, ptr %26, align 8, !tbaa !9
  %266 = mul nsw i64 %264, %265
  %267 = add nsw i64 %263, %266
  %268 = getelementptr inbounds double, ptr %262, i64 %267
  %269 = load double, ptr %268, align 8, !tbaa !11
  %270 = call double @llvm.fmuladd.f64(double %253, double %261, double %269)
  store double %270, ptr %268, align 8, !tbaa !11
  br label %271

271:                                              ; preds = %252
  %272 = load i64, ptr %31, align 8, !tbaa !9
  %273 = add nsw i64 %272, 1
  store i64 %273, ptr %31, align 8, !tbaa !9
  br label %248, !llvm.loop !16

274:                                              ; preds = %248
  %275 = load i64, ptr %39, align 8, !tbaa !9
  %276 = icmp ne i64 %275, 0
  br i1 %276, label %277, label %288

277:                                              ; preds = %274
  %278 = load ptr, ptr %20, align 8, !tbaa !5
  %279 = load i64, ptr %33, align 8, !tbaa !9
  %280 = load i64, ptr %33, align 8, !tbaa !9
  %281 = load i64, ptr %24, align 8, !tbaa !9
  %282 = mul nsw i64 %280, %281
  %283 = add nsw i64 %279, %282
  %284 = getelementptr inbounds double, ptr %278, i64 %283
  %285 = load double, ptr %284, align 8, !tbaa !11
  %286 = load double, ptr %35, align 8, !tbaa !11
  %287 = fmul double %286, %285
  store double %287, ptr %35, align 8, !tbaa !11
  br label %288

288:                                              ; preds = %277, %274
  %289 = load double, ptr %35, align 8, !tbaa !11
  %290 = load ptr, ptr %22, align 8, !tbaa !5
  %291 = load i64, ptr %33, align 8, !tbaa !9
  %292 = load i64, ptr %32, align 8, !tbaa !9
  %293 = load i64, ptr %26, align 8, !tbaa !9
  %294 = mul nsw i64 %292, %293
  %295 = add nsw i64 %291, %294
  %296 = getelementptr inbounds double, ptr %290, i64 %295
  store double %289, ptr %296, align 8, !tbaa !11
  br label %297

297:                                              ; preds = %288, %224
  br label %298

298:                                              ; preds = %297
  %299 = load i64, ptr %33, align 8, !tbaa !9
  %300 = add nsw i64 %299, 1
  store i64 %300, ptr %33, align 8, !tbaa !9
  br label %220, !llvm.loop !17

301:                                              ; preds = %220
  br label %302

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

305:                                              ; preds = %213
  br label %410

306:                                              ; preds = %207
  %307 = load ptr, ptr %18, align 8, !tbaa !5
  %308 = load i64, ptr %307, align 8, !tbaa !9
  store i64 %308, ptr %28, align 8, !tbaa !9
  store i64 1, ptr %32, align 8, !tbaa !9
  br label %309

309:                                              ; preds = %406, %306
  %310 = load i64, ptr %32, align 8, !tbaa !9
  %311 = load i64, ptr %28, align 8, !tbaa !9
  %312 = icmp sle i64 %310, %311
  br i1 %312, label %313, label %409

313:                                              ; preds = %309
  %314 = load ptr, ptr %17, align 8, !tbaa !5
  %315 = load i64, ptr %314, align 8, !tbaa !9
  store i64 %315, ptr %33, align 8, !tbaa !9
  br label %316

316:                                              ; preds = %402, %313
  %317 = load i64, ptr %33, align 8, !tbaa !9
  %318 = icmp sge i64 %317, 1
  br i1 %318, label %319, label %405

319:                                              ; preds = %316
  %320 = load ptr, ptr %22, align 8, !tbaa !5
  %321 = load i64, ptr %33, align 8, !tbaa !9
  %322 = load i64, ptr %32, align 8, !tbaa !9
  %323 = load i64, ptr %26, align 8, !tbaa !9
  %324 = mul nsw i64 %322, %323
  %325 = add nsw i64 %321, %324
  %326 = getelementptr inbounds double, ptr %320, i64 %325
  %327 = load double, ptr %326, align 8, !tbaa !11
  %328 = fcmp une double %327, 0.000000e+00
  br i1 %328, label %329, label %401

329:                                              ; preds = %319
  %330 = load ptr, ptr %19, align 8, !tbaa !5
  %331 = load double, ptr %330, align 8, !tbaa !11
  %332 = load ptr, ptr %22, align 8, !tbaa !5
  %333 = load i64, ptr %33, align 8, !tbaa !9
  %334 = load i64, ptr %32, align 8, !tbaa !9
  %335 = load i64, ptr %26, align 8, !tbaa !9
  %336 = mul nsw i64 %334, %335
  %337 = add nsw i64 %333, %336
  %338 = getelementptr inbounds double, ptr %332, i64 %337
  %339 = load double, ptr %338, align 8, !tbaa !11
  %340 = fmul double %331, %339
  store double %340, ptr %35, align 8, !tbaa !11
  %341 = load double, ptr %35, align 8, !tbaa !11
  %342 = load ptr, ptr %22, align 8, !tbaa !5
  %343 = load i64, ptr %33, align 8, !tbaa !9
  %344 = load i64, ptr %32, align 8, !tbaa !9
  %345 = load i64, ptr %26, align 8, !tbaa !9
  %346 = mul nsw i64 %344, %345
  %347 = add nsw i64 %343, %346
  %348 = getelementptr inbounds double, ptr %342, i64 %347
  store double %341, ptr %348, align 8, !tbaa !11
  %349 = load i64, ptr %39, align 8, !tbaa !9
  %350 = icmp ne i64 %349, 0
  br i1 %350, label %351, label %369

351:                                              ; preds = %329
  %352 = load ptr, ptr %20, align 8, !tbaa !5
  %353 = load i64, ptr %33, align 8, !tbaa !9
  %354 = load i64, ptr %33, align 8, !tbaa !9
  %355 = load i64, ptr %24, align 8, !tbaa !9
  %356 = mul nsw i64 %354, %355
  %357 = add nsw i64 %353, %356
  %358 = getelementptr inbounds double, ptr %352, i64 %357
  %359 = load double, ptr %358, align 8, !tbaa !11
  %360 = load ptr, ptr %22, align 8, !tbaa !5
  %361 = load i64, ptr %33, align 8, !tbaa !9
  %362 = load i64, ptr %32, align 8, !tbaa !9
  %363 = load i64, ptr %26, align 8, !tbaa !9
  %364 = mul nsw i64 %362, %363
  %365 = add nsw i64 %361, %364
  %366 = getelementptr inbounds double, ptr %360, i64 %365
  %367 = load double, ptr %366, align 8, !tbaa !11
  %368 = fmul double %367, %359
  store double %368, ptr %366, align 8, !tbaa !11
  br label %369

369:                                              ; preds = %351, %329
  %370 = load ptr, ptr %17, align 8, !tbaa !5
  %371 = load i64, ptr %370, align 8, !tbaa !9
  store i64 %371, ptr %29, align 8, !tbaa !9
  %372 = load i64, ptr %33, align 8, !tbaa !9
  %373 = add nsw i64 %372, 1
  store i64 %373, ptr %31, align 8, !tbaa !9
  br label %374

374:                                              ; preds = %397, %369
  %375 = load i64, ptr %31, align 8, !tbaa !9
  %376 = load i64, ptr %29, align 8, !tbaa !9
  %377 = icmp sle i64 %375, %376
  br i1 %377, label %378, label %400

378:                                              ; preds = %374
  %379 = load double, ptr %35, align 8, !tbaa !11
  %380 = load ptr, ptr %20, align 8, !tbaa !5
  %381 = load i64, ptr %31, align 8, !tbaa !9
  %382 = load i64, ptr %33, align 8, !tbaa !9
  %383 = load i64, ptr %24, align 8, !tbaa !9
  %384 = mul nsw i64 %382, %383
  %385 = add nsw i64 %381, %384
  %386 = getelementptr inbounds double, ptr %380, i64 %385
  %387 = load double, ptr %386, align 8, !tbaa !11
  %388 = load ptr, ptr %22, align 8, !tbaa !5
  %389 = load i64, ptr %31, align 8, !tbaa !9
  %390 = load i64, ptr %32, align 8, !tbaa !9
  %391 = load i64, ptr %26, align 8, !tbaa !9
  %392 = mul nsw i64 %390, %391
  %393 = add nsw i64 %389, %392
  %394 = getelementptr inbounds double, ptr %388, i64 %393
  %395 = load double, ptr %394, align 8, !tbaa !11
  %396 = call double @llvm.fmuladd.f64(double %379, double %387, double %395)
  store double %396, ptr %394, align 8, !tbaa !11
  br label %397

397:                                              ; preds = %378
  %398 = load i64, ptr %31, align 8, !tbaa !9
  %399 = add nsw i64 %398, 1
  store i64 %399, ptr %31, align 8, !tbaa !9
  br label %374, !llvm.loop !19

400:                                              ; preds = %374
  br label %401

401:                                              ; preds = %400, %319
  br label %402

402:                                              ; preds = %401
  %403 = load i64, ptr %33, align 8, !tbaa !9
  %404 = add nsw i64 %403, -1
  store i64 %404, ptr %33, align 8, !tbaa !9
  br label %316, !llvm.loop !20

405:                                              ; preds = %316
  br label %406

406:                                              ; preds = %405
  %407 = load i64, ptr %32, align 8, !tbaa !9
  %408 = add nsw i64 %407, 1
  store i64 %408, ptr %32, align 8, !tbaa !9
  br label %309, !llvm.loop !21

409:                                              ; preds = %309
  br label %410

410:                                              ; preds = %409, %305
  br label %586

411:                                              ; preds = %203
  %412 = load i64, ptr %38, align 8, !tbaa !9
  %413 = icmp ne i64 %412, 0
  br i1 %413, label %414, label %498

414:                                              ; preds = %411
  %415 = load ptr, ptr %18, align 8, !tbaa !5
  %416 = load i64, ptr %415, align 8, !tbaa !9
  store i64 %416, ptr %28, align 8, !tbaa !9
  store i64 1, ptr %32, align 8, !tbaa !9
  br label %417

417:                                              ; preds = %494, %414
  %418 = load i64, ptr %32, align 8, !tbaa !9
  %419 = load i64, ptr %28, align 8, !tbaa !9
  %420 = icmp sle i64 %418, %419
  br i1 %420, label %421, label %497

421:                                              ; preds = %417
  %422 = load ptr, ptr %17, align 8, !tbaa !5
  %423 = load i64, ptr %422, align 8, !tbaa !9
  store i64 %423, ptr %31, align 8, !tbaa !9
  br label %424

424:                                              ; preds = %490, %421
  %425 = load i64, ptr %31, align 8, !tbaa !9
  %426 = icmp sge i64 %425, 1
  br i1 %426, label %427, label %493

427:                                              ; preds = %424
  %428 = load ptr, ptr %22, align 8, !tbaa !5
  %429 = load i64, ptr %31, align 8, !tbaa !9
  %430 = load i64, ptr %32, align 8, !tbaa !9
  %431 = load i64, ptr %26, align 8, !tbaa !9
  %432 = mul nsw i64 %430, %431
  %433 = add nsw i64 %429, %432
  %434 = getelementptr inbounds double, ptr %428, i64 %433
  %435 = load double, ptr %434, align 8, !tbaa !11
  store double %435, ptr %35, align 8, !tbaa !11
  %436 = load i64, ptr %39, align 8, !tbaa !9
  %437 = icmp ne i64 %436, 0
  br i1 %437, label %438, label %449

438:                                              ; preds = %427
  %439 = load ptr, ptr %20, align 8, !tbaa !5
  %440 = load i64, ptr %31, align 8, !tbaa !9
  %441 = load i64, ptr %31, align 8, !tbaa !9
  %442 = load i64, ptr %24, align 8, !tbaa !9
  %443 = mul nsw i64 %441, %442
  %444 = add nsw i64 %440, %443
  %445 = getelementptr inbounds double, ptr %439, i64 %444
  %446 = load double, ptr %445, align 8, !tbaa !11
  %447 = load double, ptr %35, align 8, !tbaa !11
  %448 = fmul double %447, %446
  store double %448, ptr %35, align 8, !tbaa !11
  br label %449

449:                                              ; preds = %438, %427
  %450 = load i64, ptr %31, align 8, !tbaa !9
  %451 = sub nsw i64 %450, 1
  store i64 %451, ptr %29, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  br label %452

452:                                              ; preds = %475, %449
  %453 = load i64, ptr %33, align 8, !tbaa !9
  %454 = load i64, ptr %29, align 8, !tbaa !9
  %455 = icmp sle i64 %453, %454
  br i1 %455, label %456, label %478

456:                                              ; preds = %452
  %457 = load ptr, ptr %20, align 8, !tbaa !5
  %458 = load i64, ptr %33, align 8, !tbaa !9
  %459 = load i64, ptr %31, align 8, !tbaa !9
  %460 = load i64, ptr %24, align 8, !tbaa !9
  %461 = mul nsw i64 %459, %460
  %462 = add nsw i64 %458, %461
  %463 = getelementptr inbounds double, ptr %457, i64 %462
  %464 = load double, ptr %463, align 8, !tbaa !11
  %465 = load ptr, ptr %22, align 8, !tbaa !5
  %466 = load i64, ptr %33, align 8, !tbaa !9
  %467 = load i64, ptr %32, align 8, !tbaa !9
  %468 = load i64, ptr %26, align 8, !tbaa !9
  %469 = mul nsw i64 %467, %468
  %470 = add nsw i64 %466, %469
  %471 = getelementptr inbounds double, ptr %465, i64 %470
  %472 = load double, ptr %471, align 8, !tbaa !11
  %473 = load double, ptr %35, align 8, !tbaa !11
  %474 = call double @llvm.fmuladd.f64(double %464, double %472, double %473)
  store double %474, ptr %35, align 8, !tbaa !11
  br label %475

475:                                              ; preds = %456
  %476 = load i64, ptr %33, align 8, !tbaa !9
  %477 = add nsw i64 %476, 1
  store i64 %477, ptr %33, align 8, !tbaa !9
  br label %452, !llvm.loop !22

478:                                              ; preds = %452
  %479 = load ptr, ptr %19, align 8, !tbaa !5
  %480 = load double, ptr %479, align 8, !tbaa !11
  %481 = load double, ptr %35, align 8, !tbaa !11
  %482 = fmul double %480, %481
  %483 = load ptr, ptr %22, align 8, !tbaa !5
  %484 = load i64, ptr %31, align 8, !tbaa !9
  %485 = load i64, ptr %32, align 8, !tbaa !9
  %486 = load i64, ptr %26, align 8, !tbaa !9
  %487 = mul nsw i64 %485, %486
  %488 = add nsw i64 %484, %487
  %489 = getelementptr inbounds double, ptr %483, i64 %488
  store double %482, ptr %489, align 8, !tbaa !11
  br label %490

490:                                              ; preds = %478
  %491 = load i64, ptr %31, align 8, !tbaa !9
  %492 = add nsw i64 %491, -1
  store i64 %492, ptr %31, align 8, !tbaa !9
  br label %424, !llvm.loop !23

493:                                              ; preds = %424
  br label %494

494:                                              ; preds = %493
  %495 = load i64, ptr %32, align 8, !tbaa !9
  %496 = add nsw i64 %495, 1
  store i64 %496, ptr %32, align 8, !tbaa !9
  br label %417, !llvm.loop !24

497:                                              ; preds = %417
  br label %585

498:                                              ; preds = %411
  %499 = load ptr, ptr %18, align 8, !tbaa !5
  %500 = load i64, ptr %499, align 8, !tbaa !9
  store i64 %500, ptr %28, align 8, !tbaa !9
  store i64 1, ptr %32, align 8, !tbaa !9
  br label %501

501:                                              ; preds = %581, %498
  %502 = load i64, ptr %32, align 8, !tbaa !9
  %503 = load i64, ptr %28, align 8, !tbaa !9
  %504 = icmp sle i64 %502, %503
  br i1 %504, label %505, label %584

505:                                              ; preds = %501
  %506 = load ptr, ptr %17, align 8, !tbaa !5
  %507 = load i64, ptr %506, align 8, !tbaa !9
  store i64 %507, ptr %29, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %508

508:                                              ; preds = %577, %505
  %509 = load i64, ptr %31, align 8, !tbaa !9
  %510 = load i64, ptr %29, align 8, !tbaa !9
  %511 = icmp sle i64 %509, %510
  br i1 %511, label %512, label %580

512:                                              ; preds = %508
  %513 = load ptr, ptr %22, align 8, !tbaa !5
  %514 = load i64, ptr %31, align 8, !tbaa !9
  %515 = load i64, ptr %32, align 8, !tbaa !9
  %516 = load i64, ptr %26, align 8, !tbaa !9
  %517 = mul nsw i64 %515, %516
  %518 = add nsw i64 %514, %517
  %519 = getelementptr inbounds double, ptr %513, i64 %518
  %520 = load double, ptr %519, align 8, !tbaa !11
  store double %520, ptr %35, align 8, !tbaa !11
  %521 = load i64, ptr %39, align 8, !tbaa !9
  %522 = icmp ne i64 %521, 0
  br i1 %522, label %523, label %534

523:                                              ; preds = %512
  %524 = load ptr, ptr %20, align 8, !tbaa !5
  %525 = load i64, ptr %31, align 8, !tbaa !9
  %526 = load i64, ptr %31, align 8, !tbaa !9
  %527 = load i64, ptr %24, align 8, !tbaa !9
  %528 = mul nsw i64 %526, %527
  %529 = add nsw i64 %525, %528
  %530 = getelementptr inbounds double, ptr %524, i64 %529
  %531 = load double, ptr %530, align 8, !tbaa !11
  %532 = load double, ptr %35, align 8, !tbaa !11
  %533 = fmul double %532, %531
  store double %533, ptr %35, align 8, !tbaa !11
  br label %534

534:                                              ; preds = %523, %512
  %535 = load ptr, ptr %17, align 8, !tbaa !5
  %536 = load i64, ptr %535, align 8, !tbaa !9
  store i64 %536, ptr %30, align 8, !tbaa !9
  %537 = load i64, ptr %31, align 8, !tbaa !9
  %538 = add nsw i64 %537, 1
  store i64 %538, ptr %33, align 8, !tbaa !9
  br label %539

539:                                              ; preds = %562, %534
  %540 = load i64, ptr %33, align 8, !tbaa !9
  %541 = load i64, ptr %30, align 8, !tbaa !9
  %542 = icmp sle i64 %540, %541
  br i1 %542, label %543, label %565

543:                                              ; preds = %539
  %544 = load ptr, ptr %20, align 8, !tbaa !5
  %545 = load i64, ptr %33, align 8, !tbaa !9
  %546 = load i64, ptr %31, align 8, !tbaa !9
  %547 = load i64, ptr %24, align 8, !tbaa !9
  %548 = mul nsw i64 %546, %547
  %549 = add nsw i64 %545, %548
  %550 = getelementptr inbounds double, ptr %544, i64 %549
  %551 = load double, ptr %550, align 8, !tbaa !11
  %552 = load ptr, ptr %22, align 8, !tbaa !5
  %553 = load i64, ptr %33, align 8, !tbaa !9
  %554 = load i64, ptr %32, align 8, !tbaa !9
  %555 = load i64, ptr %26, align 8, !tbaa !9
  %556 = mul nsw i64 %554, %555
  %557 = add nsw i64 %553, %556
  %558 = getelementptr inbounds double, ptr %552, i64 %557
  %559 = load double, ptr %558, align 8, !tbaa !11
  %560 = load double, ptr %35, align 8, !tbaa !11
  %561 = call double @llvm.fmuladd.f64(double %551, double %559, double %560)
  store double %561, ptr %35, align 8, !tbaa !11
  br label %562

562:                                              ; preds = %543
  %563 = load i64, ptr %33, align 8, !tbaa !9
  %564 = add nsw i64 %563, 1
  store i64 %564, ptr %33, align 8, !tbaa !9
  br label %539, !llvm.loop !25

565:                                              ; preds = %539
  %566 = load ptr, ptr %19, align 8, !tbaa !5
  %567 = load double, ptr %566, align 8, !tbaa !11
  %568 = load double, ptr %35, align 8, !tbaa !11
  %569 = fmul double %567, %568
  %570 = load ptr, ptr %22, align 8, !tbaa !5
  %571 = load i64, ptr %31, align 8, !tbaa !9
  %572 = load i64, ptr %32, align 8, !tbaa !9
  %573 = load i64, ptr %26, align 8, !tbaa !9
  %574 = mul nsw i64 %572, %573
  %575 = add nsw i64 %571, %574
  %576 = getelementptr inbounds double, ptr %570, i64 %575
  store double %569, ptr %576, align 8, !tbaa !11
  br label %577

577:                                              ; preds = %565
  %578 = load i64, ptr %31, align 8, !tbaa !9
  %579 = add nsw i64 %578, 1
  store i64 %579, ptr %31, align 8, !tbaa !9
  br label %508, !llvm.loop !26

580:                                              ; preds = %508
  br label %581

581:                                              ; preds = %580
  %582 = load i64, ptr %32, align 8, !tbaa !9
  %583 = add nsw i64 %582, 1
  store i64 %583, ptr %32, align 8, !tbaa !9
  br label %501, !llvm.loop !27

584:                                              ; preds = %501
  br label %585

585:                                              ; preds = %584, %497
  br label %586

586:                                              ; preds = %585, %410
  br label %1082

587:                                              ; preds = %200
  %588 = load ptr, ptr %15, align 8, !tbaa !5
  %589 = call i64 @lsame_(ptr noundef %588, ptr noundef @.str.1)
  %590 = icmp ne i64 %589, 0
  br i1 %590, label %591, label %832

591:                                              ; preds = %587
  %592 = load i64, ptr %38, align 8, !tbaa !9
  %593 = icmp ne i64 %592, 0
  br i1 %593, label %594, label %711

594:                                              ; preds = %591
  %595 = load ptr, ptr %18, align 8, !tbaa !5
  %596 = load i64, ptr %595, align 8, !tbaa !9
  store i64 %596, ptr %32, align 8, !tbaa !9
  br label %597

597:                                              ; preds = %707, %594
  %598 = load i64, ptr %32, align 8, !tbaa !9
  %599 = icmp sge i64 %598, 1
  br i1 %599, label %600, label %710

600:                                              ; preds = %597
  %601 = load ptr, ptr %19, align 8, !tbaa !5
  %602 = load double, ptr %601, align 8, !tbaa !11
  store double %602, ptr %35, align 8, !tbaa !11
  %603 = load i64, ptr %39, align 8, !tbaa !9
  %604 = icmp ne i64 %603, 0
  br i1 %604, label %605, label %616

605:                                              ; preds = %600
  %606 = load ptr, ptr %20, align 8, !tbaa !5
  %607 = load i64, ptr %32, align 8, !tbaa !9
  %608 = load i64, ptr %32, align 8, !tbaa !9
  %609 = load i64, ptr %24, align 8, !tbaa !9
  %610 = mul nsw i64 %608, %609
  %611 = add nsw i64 %607, %610
  %612 = getelementptr inbounds double, ptr %606, i64 %611
  %613 = load double, ptr %612, align 8, !tbaa !11
  %614 = load double, ptr %35, align 8, !tbaa !11
  %615 = fmul double %614, %613
  store double %615, ptr %35, align 8, !tbaa !11
  br label %616

616:                                              ; preds = %605, %600
  %617 = load ptr, ptr %17, align 8, !tbaa !5
  %618 = load i64, ptr %617, align 8, !tbaa !9
  store i64 %618, ptr %28, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %619

619:                                              ; preds = %641, %616
  %620 = load i64, ptr %31, align 8, !tbaa !9
  %621 = load i64, ptr %28, align 8, !tbaa !9
  %622 = icmp sle i64 %620, %621
  br i1 %622, label %623, label %644

623:                                              ; preds = %619
  %624 = load double, ptr %35, align 8, !tbaa !11
  %625 = load ptr, ptr %22, align 8, !tbaa !5
  %626 = load i64, ptr %31, align 8, !tbaa !9
  %627 = load i64, ptr %32, align 8, !tbaa !9
  %628 = load i64, ptr %26, align 8, !tbaa !9
  %629 = mul nsw i64 %627, %628
  %630 = add nsw i64 %626, %629
  %631 = getelementptr inbounds double, ptr %625, i64 %630
  %632 = load double, ptr %631, align 8, !tbaa !11
  %633 = fmul double %624, %632
  %634 = load ptr, ptr %22, align 8, !tbaa !5
  %635 = load i64, ptr %31, align 8, !tbaa !9
  %636 = load i64, ptr %32, align 8, !tbaa !9
  %637 = load i64, ptr %26, align 8, !tbaa !9
  %638 = mul nsw i64 %636, %637
  %639 = add nsw i64 %635, %638
  %640 = getelementptr inbounds double, ptr %634, i64 %639
  store double %633, ptr %640, align 8, !tbaa !11
  br label %641

641:                                              ; preds = %623
  %642 = load i64, ptr %31, align 8, !tbaa !9
  %643 = add nsw i64 %642, 1
  store i64 %643, ptr %31, align 8, !tbaa !9
  br label %619, !llvm.loop !28

644:                                              ; preds = %619
  %645 = load i64, ptr %32, align 8, !tbaa !9
  %646 = sub nsw i64 %645, 1
  store i64 %646, ptr %28, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  br label %647

647:                                              ; preds = %703, %644
  %648 = load i64, ptr %33, align 8, !tbaa !9
  %649 = load i64, ptr %28, align 8, !tbaa !9
  %650 = icmp sle i64 %648, %649
  br i1 %650, label %651, label %706

651:                                              ; preds = %647
  %652 = load ptr, ptr %20, align 8, !tbaa !5
  %653 = load i64, ptr %33, align 8, !tbaa !9
  %654 = load i64, ptr %32, align 8, !tbaa !9
  %655 = load i64, ptr %24, align 8, !tbaa !9
  %656 = mul nsw i64 %654, %655
  %657 = add nsw i64 %653, %656
  %658 = getelementptr inbounds double, ptr %652, i64 %657
  %659 = load double, ptr %658, align 8, !tbaa !11
  %660 = fcmp une double %659, 0.000000e+00
  br i1 %660, label %661, label %702

661:                                              ; preds = %651
  %662 = load ptr, ptr %19, align 8, !tbaa !5
  %663 = load double, ptr %662, align 8, !tbaa !11
  %664 = load ptr, ptr %20, align 8, !tbaa !5
  %665 = load i64, ptr %33, align 8, !tbaa !9
  %666 = load i64, ptr %32, align 8, !tbaa !9
  %667 = load i64, ptr %24, align 8, !tbaa !9
  %668 = mul nsw i64 %666, %667
  %669 = add nsw i64 %665, %668
  %670 = getelementptr inbounds double, ptr %664, i64 %669
  %671 = load double, ptr %670, align 8, !tbaa !11
  %672 = fmul double %663, %671
  store double %672, ptr %35, align 8, !tbaa !11
  %673 = load ptr, ptr %17, align 8, !tbaa !5
  %674 = load i64, ptr %673, align 8, !tbaa !9
  store i64 %674, ptr %29, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %675

675:                                              ; preds = %698, %661
  %676 = load i64, ptr %31, align 8, !tbaa !9
  %677 = load i64, ptr %29, align 8, !tbaa !9
  %678 = icmp sle i64 %676, %677
  br i1 %678, label %679, label %701

679:                                              ; preds = %675
  %680 = load double, ptr %35, align 8, !tbaa !11
  %681 = load ptr, ptr %22, align 8, !tbaa !5
  %682 = load i64, ptr %31, align 8, !tbaa !9
  %683 = load i64, ptr %33, align 8, !tbaa !9
  %684 = load i64, ptr %26, align 8, !tbaa !9
  %685 = mul nsw i64 %683, %684
  %686 = add nsw i64 %682, %685
  %687 = getelementptr inbounds double, ptr %681, i64 %686
  %688 = load double, ptr %687, align 8, !tbaa !11
  %689 = load ptr, ptr %22, align 8, !tbaa !5
  %690 = load i64, ptr %31, align 8, !tbaa !9
  %691 = load i64, ptr %32, align 8, !tbaa !9
  %692 = load i64, ptr %26, align 8, !tbaa !9
  %693 = mul nsw i64 %691, %692
  %694 = add nsw i64 %690, %693
  %695 = getelementptr inbounds double, ptr %689, i64 %694
  %696 = load double, ptr %695, align 8, !tbaa !11
  %697 = call double @llvm.fmuladd.f64(double %680, double %688, double %696)
  store double %697, ptr %695, align 8, !tbaa !11
  br label %698

698:                                              ; preds = %679
  %699 = load i64, ptr %31, align 8, !tbaa !9
  %700 = add nsw i64 %699, 1
  store i64 %700, ptr %31, align 8, !tbaa !9
  br label %675, !llvm.loop !29

701:                                              ; preds = %675
  br label %702

702:                                              ; preds = %701, %651
  br label %703

703:                                              ; preds = %702
  %704 = load i64, ptr %33, align 8, !tbaa !9
  %705 = add nsw i64 %704, 1
  store i64 %705, ptr %33, align 8, !tbaa !9
  br label %647, !llvm.loop !30

706:                                              ; preds = %647
  br label %707

707:                                              ; preds = %706
  %708 = load i64, ptr %32, align 8, !tbaa !9
  %709 = add nsw i64 %708, -1
  store i64 %709, ptr %32, align 8, !tbaa !9
  br label %597, !llvm.loop !31

710:                                              ; preds = %597
  br label %831

711:                                              ; preds = %591
  %712 = load ptr, ptr %18, align 8, !tbaa !5
  %713 = load i64, ptr %712, align 8, !tbaa !9
  store i64 %713, ptr %28, align 8, !tbaa !9
  store i64 1, ptr %32, align 8, !tbaa !9
  br label %714

714:                                              ; preds = %827, %711
  %715 = load i64, ptr %32, align 8, !tbaa !9
  %716 = load i64, ptr %28, align 8, !tbaa !9
  %717 = icmp sle i64 %715, %716
  br i1 %717, label %718, label %830

718:                                              ; preds = %714
  %719 = load ptr, ptr %19, align 8, !tbaa !5
  %720 = load double, ptr %719, align 8, !tbaa !11
  store double %720, ptr %35, align 8, !tbaa !11
  %721 = load i64, ptr %39, align 8, !tbaa !9
  %722 = icmp ne i64 %721, 0
  br i1 %722, label %723, label %734

723:                                              ; preds = %718
  %724 = load ptr, ptr %20, align 8, !tbaa !5
  %725 = load i64, ptr %32, align 8, !tbaa !9
  %726 = load i64, ptr %32, align 8, !tbaa !9
  %727 = load i64, ptr %24, align 8, !tbaa !9
  %728 = mul nsw i64 %726, %727
  %729 = add nsw i64 %725, %728
  %730 = getelementptr inbounds double, ptr %724, i64 %729
  %731 = load double, ptr %730, align 8, !tbaa !11
  %732 = load double, ptr %35, align 8, !tbaa !11
  %733 = fmul double %732, %731
  store double %733, ptr %35, align 8, !tbaa !11
  br label %734

734:                                              ; preds = %723, %718
  %735 = load ptr, ptr %17, align 8, !tbaa !5
  %736 = load i64, ptr %735, align 8, !tbaa !9
  store i64 %736, ptr %29, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %737

737:                                              ; preds = %759, %734
  %738 = load i64, ptr %31, align 8, !tbaa !9
  %739 = load i64, ptr %29, align 8, !tbaa !9
  %740 = icmp sle i64 %738, %739
  br i1 %740, label %741, label %762

741:                                              ; preds = %737
  %742 = load double, ptr %35, align 8, !tbaa !11
  %743 = load ptr, ptr %22, align 8, !tbaa !5
  %744 = load i64, ptr %31, align 8, !tbaa !9
  %745 = load i64, ptr %32, align 8, !tbaa !9
  %746 = load i64, ptr %26, align 8, !tbaa !9
  %747 = mul nsw i64 %745, %746
  %748 = add nsw i64 %744, %747
  %749 = getelementptr inbounds double, ptr %743, i64 %748
  %750 = load double, ptr %749, align 8, !tbaa !11
  %751 = fmul double %742, %750
  %752 = load ptr, ptr %22, align 8, !tbaa !5
  %753 = load i64, ptr %31, align 8, !tbaa !9
  %754 = load i64, ptr %32, align 8, !tbaa !9
  %755 = load i64, ptr %26, align 8, !tbaa !9
  %756 = mul nsw i64 %754, %755
  %757 = add nsw i64 %753, %756
  %758 = getelementptr inbounds double, ptr %752, i64 %757
  store double %751, ptr %758, align 8, !tbaa !11
  br label %759

759:                                              ; preds = %741
  %760 = load i64, ptr %31, align 8, !tbaa !9
  %761 = add nsw i64 %760, 1
  store i64 %761, ptr %31, align 8, !tbaa !9
  br label %737, !llvm.loop !32

762:                                              ; preds = %737
  %763 = load ptr, ptr %18, align 8, !tbaa !5
  %764 = load i64, ptr %763, align 8, !tbaa !9
  store i64 %764, ptr %29, align 8, !tbaa !9
  %765 = load i64, ptr %32, align 8, !tbaa !9
  %766 = add nsw i64 %765, 1
  store i64 %766, ptr %33, align 8, !tbaa !9
  br label %767

767:                                              ; preds = %823, %762
  %768 = load i64, ptr %33, align 8, !tbaa !9
  %769 = load i64, ptr %29, align 8, !tbaa !9
  %770 = icmp sle i64 %768, %769
  br i1 %770, label %771, label %826

771:                                              ; preds = %767
  %772 = load ptr, ptr %20, align 8, !tbaa !5
  %773 = load i64, ptr %33, align 8, !tbaa !9
  %774 = load i64, ptr %32, align 8, !tbaa !9
  %775 = load i64, ptr %24, align 8, !tbaa !9
  %776 = mul nsw i64 %774, %775
  %777 = add nsw i64 %773, %776
  %778 = getelementptr inbounds double, ptr %772, i64 %777
  %779 = load double, ptr %778, align 8, !tbaa !11
  %780 = fcmp une double %779, 0.000000e+00
  br i1 %780, label %781, label %822

781:                                              ; preds = %771
  %782 = load ptr, ptr %19, align 8, !tbaa !5
  %783 = load double, ptr %782, align 8, !tbaa !11
  %784 = load ptr, ptr %20, align 8, !tbaa !5
  %785 = load i64, ptr %33, align 8, !tbaa !9
  %786 = load i64, ptr %32, align 8, !tbaa !9
  %787 = load i64, ptr %24, align 8, !tbaa !9
  %788 = mul nsw i64 %786, %787
  %789 = add nsw i64 %785, %788
  %790 = getelementptr inbounds double, ptr %784, i64 %789
  %791 = load double, ptr %790, align 8, !tbaa !11
  %792 = fmul double %783, %791
  store double %792, ptr %35, align 8, !tbaa !11
  %793 = load ptr, ptr %17, align 8, !tbaa !5
  %794 = load i64, ptr %793, align 8, !tbaa !9
  store i64 %794, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %795

795:                                              ; preds = %818, %781
  %796 = load i64, ptr %31, align 8, !tbaa !9
  %797 = load i64, ptr %30, align 8, !tbaa !9
  %798 = icmp sle i64 %796, %797
  br i1 %798, label %799, label %821

799:                                              ; preds = %795
  %800 = load double, ptr %35, align 8, !tbaa !11
  %801 = load ptr, ptr %22, align 8, !tbaa !5
  %802 = load i64, ptr %31, align 8, !tbaa !9
  %803 = load i64, ptr %33, align 8, !tbaa !9
  %804 = load i64, ptr %26, align 8, !tbaa !9
  %805 = mul nsw i64 %803, %804
  %806 = add nsw i64 %802, %805
  %807 = getelementptr inbounds double, ptr %801, i64 %806
  %808 = load double, ptr %807, align 8, !tbaa !11
  %809 = load ptr, ptr %22, align 8, !tbaa !5
  %810 = load i64, ptr %31, align 8, !tbaa !9
  %811 = load i64, ptr %32, align 8, !tbaa !9
  %812 = load i64, ptr %26, align 8, !tbaa !9
  %813 = mul nsw i64 %811, %812
  %814 = add nsw i64 %810, %813
  %815 = getelementptr inbounds double, ptr %809, i64 %814
  %816 = load double, ptr %815, align 8, !tbaa !11
  %817 = call double @llvm.fmuladd.f64(double %800, double %808, double %816)
  store double %817, ptr %815, align 8, !tbaa !11
  br label %818

818:                                              ; preds = %799
  %819 = load i64, ptr %31, align 8, !tbaa !9
  %820 = add nsw i64 %819, 1
  store i64 %820, ptr %31, align 8, !tbaa !9
  br label %795, !llvm.loop !33

821:                                              ; preds = %795
  br label %822

822:                                              ; preds = %821, %771
  br label %823

823:                                              ; preds = %822
  %824 = load i64, ptr %33, align 8, !tbaa !9
  %825 = add nsw i64 %824, 1
  store i64 %825, ptr %33, align 8, !tbaa !9
  br label %767, !llvm.loop !34

826:                                              ; preds = %767
  br label %827

827:                                              ; preds = %826
  %828 = load i64, ptr %32, align 8, !tbaa !9
  %829 = add nsw i64 %828, 1
  store i64 %829, ptr %32, align 8, !tbaa !9
  br label %714, !llvm.loop !35

830:                                              ; preds = %714
  br label %831

831:                                              ; preds = %830, %710
  br label %1081

832:                                              ; preds = %587
  %833 = load i64, ptr %38, align 8, !tbaa !9
  %834 = icmp ne i64 %833, 0
  br i1 %834, label %835, label %957

835:                                              ; preds = %832
  %836 = load ptr, ptr %18, align 8, !tbaa !5
  %837 = load i64, ptr %836, align 8, !tbaa !9
  store i64 %837, ptr %28, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  br label %838

838:                                              ; preds = %953, %835
  %839 = load i64, ptr %33, align 8, !tbaa !9
  %840 = load i64, ptr %28, align 8, !tbaa !9
  %841 = icmp sle i64 %839, %840
  br i1 %841, label %842, label %956

842:                                              ; preds = %838
  %843 = load i64, ptr %33, align 8, !tbaa !9
  %844 = sub nsw i64 %843, 1
  store i64 %844, ptr %29, align 8, !tbaa !9
  store i64 1, ptr %32, align 8, !tbaa !9
  br label %845

845:                                              ; preds = %901, %842
  %846 = load i64, ptr %32, align 8, !tbaa !9
  %847 = load i64, ptr %29, align 8, !tbaa !9
  %848 = icmp sle i64 %846, %847
  br i1 %848, label %849, label %904

849:                                              ; preds = %845
  %850 = load ptr, ptr %20, align 8, !tbaa !5
  %851 = load i64, ptr %32, align 8, !tbaa !9
  %852 = load i64, ptr %33, align 8, !tbaa !9
  %853 = load i64, ptr %24, align 8, !tbaa !9
  %854 = mul nsw i64 %852, %853
  %855 = add nsw i64 %851, %854
  %856 = getelementptr inbounds double, ptr %850, i64 %855
  %857 = load double, ptr %856, align 8, !tbaa !11
  %858 = fcmp une double %857, 0.000000e+00
  br i1 %858, label %859, label %900

859:                                              ; preds = %849
  %860 = load ptr, ptr %19, align 8, !tbaa !5
  %861 = load double, ptr %860, align 8, !tbaa !11
  %862 = load ptr, ptr %20, align 8, !tbaa !5
  %863 = load i64, ptr %32, align 8, !tbaa !9
  %864 = load i64, ptr %33, align 8, !tbaa !9
  %865 = load i64, ptr %24, align 8, !tbaa !9
  %866 = mul nsw i64 %864, %865
  %867 = add nsw i64 %863, %866
  %868 = getelementptr inbounds double, ptr %862, i64 %867
  %869 = load double, ptr %868, align 8, !tbaa !11
  %870 = fmul double %861, %869
  store double %870, ptr %35, align 8, !tbaa !11
  %871 = load ptr, ptr %17, align 8, !tbaa !5
  %872 = load i64, ptr %871, align 8, !tbaa !9
  store i64 %872, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %873

873:                                              ; preds = %896, %859
  %874 = load i64, ptr %31, align 8, !tbaa !9
  %875 = load i64, ptr %30, align 8, !tbaa !9
  %876 = icmp sle i64 %874, %875
  br i1 %876, label %877, label %899

877:                                              ; preds = %873
  %878 = load double, ptr %35, align 8, !tbaa !11
  %879 = load ptr, ptr %22, align 8, !tbaa !5
  %880 = load i64, ptr %31, align 8, !tbaa !9
  %881 = load i64, ptr %33, align 8, !tbaa !9
  %882 = load i64, ptr %26, align 8, !tbaa !9
  %883 = mul nsw i64 %881, %882
  %884 = add nsw i64 %880, %883
  %885 = getelementptr inbounds double, ptr %879, i64 %884
  %886 = load double, ptr %885, align 8, !tbaa !11
  %887 = load ptr, ptr %22, align 8, !tbaa !5
  %888 = load i64, ptr %31, align 8, !tbaa !9
  %889 = load i64, ptr %32, align 8, !tbaa !9
  %890 = load i64, ptr %26, align 8, !tbaa !9
  %891 = mul nsw i64 %889, %890
  %892 = add nsw i64 %888, %891
  %893 = getelementptr inbounds double, ptr %887, i64 %892
  %894 = load double, ptr %893, align 8, !tbaa !11
  %895 = call double @llvm.fmuladd.f64(double %878, double %886, double %894)
  store double %895, ptr %893, align 8, !tbaa !11
  br label %896

896:                                              ; preds = %877
  %897 = load i64, ptr %31, align 8, !tbaa !9
  %898 = add nsw i64 %897, 1
  store i64 %898, ptr %31, align 8, !tbaa !9
  br label %873, !llvm.loop !36

899:                                              ; preds = %873
  br label %900

900:                                              ; preds = %899, %849
  br label %901

901:                                              ; preds = %900
  %902 = load i64, ptr %32, align 8, !tbaa !9
  %903 = add nsw i64 %902, 1
  store i64 %903, ptr %32, align 8, !tbaa !9
  br label %845, !llvm.loop !37

904:                                              ; preds = %845
  %905 = load ptr, ptr %19, align 8, !tbaa !5
  %906 = load double, ptr %905, align 8, !tbaa !11
  store double %906, ptr %35, align 8, !tbaa !11
  %907 = load i64, ptr %39, align 8, !tbaa !9
  %908 = icmp ne i64 %907, 0
  br i1 %908, label %909, label %920

909:                                              ; preds = %904
  %910 = load ptr, ptr %20, align 8, !tbaa !5
  %911 = load i64, ptr %33, align 8, !tbaa !9
  %912 = load i64, ptr %33, align 8, !tbaa !9
  %913 = load i64, ptr %24, align 8, !tbaa !9
  %914 = mul nsw i64 %912, %913
  %915 = add nsw i64 %911, %914
  %916 = getelementptr inbounds double, ptr %910, i64 %915
  %917 = load double, ptr %916, align 8, !tbaa !11
  %918 = load double, ptr %35, align 8, !tbaa !11
  %919 = fmul double %918, %917
  store double %919, ptr %35, align 8, !tbaa !11
  br label %920

920:                                              ; preds = %909, %904
  %921 = load double, ptr %35, align 8, !tbaa !11
  %922 = fcmp une double %921, 1.000000e+00
  br i1 %922, label %923, label %952

923:                                              ; preds = %920
  %924 = load ptr, ptr %17, align 8, !tbaa !5
  %925 = load i64, ptr %924, align 8, !tbaa !9
  store i64 %925, ptr %29, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %926

926:                                              ; preds = %948, %923
  %927 = load i64, ptr %31, align 8, !tbaa !9
  %928 = load i64, ptr %29, align 8, !tbaa !9
  %929 = icmp sle i64 %927, %928
  br i1 %929, label %930, label %951

930:                                              ; preds = %926
  %931 = load double, ptr %35, align 8, !tbaa !11
  %932 = load ptr, ptr %22, align 8, !tbaa !5
  %933 = load i64, ptr %31, align 8, !tbaa !9
  %934 = load i64, ptr %33, align 8, !tbaa !9
  %935 = load i64, ptr %26, align 8, !tbaa !9
  %936 = mul nsw i64 %934, %935
  %937 = add nsw i64 %933, %936
  %938 = getelementptr inbounds double, ptr %932, i64 %937
  %939 = load double, ptr %938, align 8, !tbaa !11
  %940 = fmul double %931, %939
  %941 = load ptr, ptr %22, align 8, !tbaa !5
  %942 = load i64, ptr %31, align 8, !tbaa !9
  %943 = load i64, ptr %33, align 8, !tbaa !9
  %944 = load i64, ptr %26, align 8, !tbaa !9
  %945 = mul nsw i64 %943, %944
  %946 = add nsw i64 %942, %945
  %947 = getelementptr inbounds double, ptr %941, i64 %946
  store double %940, ptr %947, align 8, !tbaa !11
  br label %948

948:                                              ; preds = %930
  %949 = load i64, ptr %31, align 8, !tbaa !9
  %950 = add nsw i64 %949, 1
  store i64 %950, ptr %31, align 8, !tbaa !9
  br label %926, !llvm.loop !38

951:                                              ; preds = %926
  br label %952

952:                                              ; preds = %951, %920
  br label %953

953:                                              ; preds = %952
  %954 = load i64, ptr %33, align 8, !tbaa !9
  %955 = add nsw i64 %954, 1
  store i64 %955, ptr %33, align 8, !tbaa !9
  br label %838, !llvm.loop !39

956:                                              ; preds = %838
  br label %1080

957:                                              ; preds = %832
  %958 = load ptr, ptr %18, align 8, !tbaa !5
  %959 = load i64, ptr %958, align 8, !tbaa !9
  store i64 %959, ptr %33, align 8, !tbaa !9
  br label %960

960:                                              ; preds = %1076, %957
  %961 = load i64, ptr %33, align 8, !tbaa !9
  %962 = icmp sge i64 %961, 1
  br i1 %962, label %963, label %1079

963:                                              ; preds = %960
  %964 = load ptr, ptr %18, align 8, !tbaa !5
  %965 = load i64, ptr %964, align 8, !tbaa !9
  store i64 %965, ptr %28, align 8, !tbaa !9
  %966 = load i64, ptr %33, align 8, !tbaa !9
  %967 = add nsw i64 %966, 1
  store i64 %967, ptr %32, align 8, !tbaa !9
  br label %968

968:                                              ; preds = %1024, %963
  %969 = load i64, ptr %32, align 8, !tbaa !9
  %970 = load i64, ptr %28, align 8, !tbaa !9
  %971 = icmp sle i64 %969, %970
  br i1 %971, label %972, label %1027

972:                                              ; preds = %968
  %973 = load ptr, ptr %20, align 8, !tbaa !5
  %974 = load i64, ptr %32, align 8, !tbaa !9
  %975 = load i64, ptr %33, align 8, !tbaa !9
  %976 = load i64, ptr %24, align 8, !tbaa !9
  %977 = mul nsw i64 %975, %976
  %978 = add nsw i64 %974, %977
  %979 = getelementptr inbounds double, ptr %973, i64 %978
  %980 = load double, ptr %979, align 8, !tbaa !11
  %981 = fcmp une double %980, 0.000000e+00
  br i1 %981, label %982, label %1023

982:                                              ; preds = %972
  %983 = load ptr, ptr %19, align 8, !tbaa !5
  %984 = load double, ptr %983, align 8, !tbaa !11
  %985 = load ptr, ptr %20, align 8, !tbaa !5
  %986 = load i64, ptr %32, align 8, !tbaa !9
  %987 = load i64, ptr %33, align 8, !tbaa !9
  %988 = load i64, ptr %24, align 8, !tbaa !9
  %989 = mul nsw i64 %987, %988
  %990 = add nsw i64 %986, %989
  %991 = getelementptr inbounds double, ptr %985, i64 %990
  %992 = load double, ptr %991, align 8, !tbaa !11
  %993 = fmul double %984, %992
  store double %993, ptr %35, align 8, !tbaa !11
  %994 = load ptr, ptr %17, align 8, !tbaa !5
  %995 = load i64, ptr %994, align 8, !tbaa !9
  store i64 %995, ptr %29, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %996

996:                                              ; preds = %1019, %982
  %997 = load i64, ptr %31, align 8, !tbaa !9
  %998 = load i64, ptr %29, align 8, !tbaa !9
  %999 = icmp sle i64 %997, %998
  br i1 %999, label %1000, label %1022

1000:                                             ; preds = %996
  %1001 = load double, ptr %35, align 8, !tbaa !11
  %1002 = load ptr, ptr %22, align 8, !tbaa !5
  %1003 = load i64, ptr %31, align 8, !tbaa !9
  %1004 = load i64, ptr %33, align 8, !tbaa !9
  %1005 = load i64, ptr %26, align 8, !tbaa !9
  %1006 = mul nsw i64 %1004, %1005
  %1007 = add nsw i64 %1003, %1006
  %1008 = getelementptr inbounds double, ptr %1002, i64 %1007
  %1009 = load double, ptr %1008, align 8, !tbaa !11
  %1010 = load ptr, ptr %22, align 8, !tbaa !5
  %1011 = load i64, ptr %31, align 8, !tbaa !9
  %1012 = load i64, ptr %32, align 8, !tbaa !9
  %1013 = load i64, ptr %26, align 8, !tbaa !9
  %1014 = mul nsw i64 %1012, %1013
  %1015 = add nsw i64 %1011, %1014
  %1016 = getelementptr inbounds double, ptr %1010, i64 %1015
  %1017 = load double, ptr %1016, align 8, !tbaa !11
  %1018 = call double @llvm.fmuladd.f64(double %1001, double %1009, double %1017)
  store double %1018, ptr %1016, align 8, !tbaa !11
  br label %1019

1019:                                             ; preds = %1000
  %1020 = load i64, ptr %31, align 8, !tbaa !9
  %1021 = add nsw i64 %1020, 1
  store i64 %1021, ptr %31, align 8, !tbaa !9
  br label %996, !llvm.loop !40

1022:                                             ; preds = %996
  br label %1023

1023:                                             ; preds = %1022, %972
  br label %1024

1024:                                             ; preds = %1023
  %1025 = load i64, ptr %32, align 8, !tbaa !9
  %1026 = add nsw i64 %1025, 1
  store i64 %1026, ptr %32, align 8, !tbaa !9
  br label %968, !llvm.loop !41

1027:                                             ; preds = %968
  %1028 = load ptr, ptr %19, align 8, !tbaa !5
  %1029 = load double, ptr %1028, align 8, !tbaa !11
  store double %1029, ptr %35, align 8, !tbaa !11
  %1030 = load i64, ptr %39, align 8, !tbaa !9
  %1031 = icmp ne i64 %1030, 0
  br i1 %1031, label %1032, label %1043

1032:                                             ; preds = %1027
  %1033 = load ptr, ptr %20, align 8, !tbaa !5
  %1034 = load i64, ptr %33, align 8, !tbaa !9
  %1035 = load i64, ptr %33, align 8, !tbaa !9
  %1036 = load i64, ptr %24, align 8, !tbaa !9
  %1037 = mul nsw i64 %1035, %1036
  %1038 = add nsw i64 %1034, %1037
  %1039 = getelementptr inbounds double, ptr %1033, i64 %1038
  %1040 = load double, ptr %1039, align 8, !tbaa !11
  %1041 = load double, ptr %35, align 8, !tbaa !11
  %1042 = fmul double %1041, %1040
  store double %1042, ptr %35, align 8, !tbaa !11
  br label %1043

1043:                                             ; preds = %1032, %1027
  %1044 = load double, ptr %35, align 8, !tbaa !11
  %1045 = fcmp une double %1044, 1.000000e+00
  br i1 %1045, label %1046, label %1075

1046:                                             ; preds = %1043
  %1047 = load ptr, ptr %17, align 8, !tbaa !5
  %1048 = load i64, ptr %1047, align 8, !tbaa !9
  store i64 %1048, ptr %28, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %1049

1049:                                             ; preds = %1071, %1046
  %1050 = load i64, ptr %31, align 8, !tbaa !9
  %1051 = load i64, ptr %28, align 8, !tbaa !9
  %1052 = icmp sle i64 %1050, %1051
  br i1 %1052, label %1053, label %1074

1053:                                             ; preds = %1049
  %1054 = load double, ptr %35, align 8, !tbaa !11
  %1055 = load ptr, ptr %22, align 8, !tbaa !5
  %1056 = load i64, ptr %31, align 8, !tbaa !9
  %1057 = load i64, ptr %33, align 8, !tbaa !9
  %1058 = load i64, ptr %26, align 8, !tbaa !9
  %1059 = mul nsw i64 %1057, %1058
  %1060 = add nsw i64 %1056, %1059
  %1061 = getelementptr inbounds double, ptr %1055, i64 %1060
  %1062 = load double, ptr %1061, align 8, !tbaa !11
  %1063 = fmul double %1054, %1062
  %1064 = load ptr, ptr %22, align 8, !tbaa !5
  %1065 = load i64, ptr %31, align 8, !tbaa !9
  %1066 = load i64, ptr %33, align 8, !tbaa !9
  %1067 = load i64, ptr %26, align 8, !tbaa !9
  %1068 = mul nsw i64 %1066, %1067
  %1069 = add nsw i64 %1065, %1068
  %1070 = getelementptr inbounds double, ptr %1064, i64 %1069
  store double %1063, ptr %1070, align 8, !tbaa !11
  br label %1071

1071:                                             ; preds = %1053
  %1072 = load i64, ptr %31, align 8, !tbaa !9
  %1073 = add nsw i64 %1072, 1
  store i64 %1073, ptr %31, align 8, !tbaa !9
  br label %1049, !llvm.loop !42

1074:                                             ; preds = %1049
  br label %1075

1075:                                             ; preds = %1074, %1043
  br label %1076

1076:                                             ; preds = %1075
  %1077 = load i64, ptr %33, align 8, !tbaa !9
  %1078 = add nsw i64 %1077, -1
  store i64 %1078, ptr %33, align 8, !tbaa !9
  br label %960, !llvm.loop !43

1079:                                             ; preds = %960
  br label %1080

1080:                                             ; preds = %1079, %956
  br label %1081

1081:                                             ; preds = %1080, %831
  br label %1082

1082:                                             ; preds = %1081, %586
  store i32 0, ptr %12, align 4
  store i32 1, ptr %40, align 4
  br label %1083

1083:                                             ; preds = %1082, %199, %165, %155
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  %1084 = load i32, ptr %12, align 4
  ret i32 %1084
}

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

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

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

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

; 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 = { 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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !14}
!31 = distinct !{!31, !14}
!32 = distinct !{!32, !14}
!33 = distinct !{!33, !14}
!34 = distinct !{!34, !14}
!35 = distinct !{!35, !14}
!36 = distinct !{!36, !14}
!37 = distinct !{!37, !14}
!38 = distinct !{!38, !14}
!39 = distinct !{!39, !14}
!40 = distinct !{!40, !14}
!41 = distinct !{!41, !14}
!42 = distinct !{!42, !14}
!43 = distinct !{!43, !14}


; 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 [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @f2c_dtrmm(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readonly %5, ptr nocapture noundef readonly %6, ptr nocapture noundef readonly %7, ptr nocapture noundef readonly %8, ptr nocapture noundef %9, ptr nocapture noundef readonly %10) local_unnamed_addr #0 {
  %12 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  %13 = load i64, ptr %8, align 8, !tbaa !5
  %14 = xor i64 %13, -1
  %15 = getelementptr inbounds double, ptr %7, i64 %14
  %16 = load i64, ptr %10, align 8, !tbaa !5
  %17 = xor i64 %16, -1
  %18 = getelementptr inbounds double, ptr %9, i64 %17
  %19 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #6
  %.not = icmp eq i64 %19, 0
  %. = select i1 %.not, ptr %5, ptr %4
  %.0414 = load i64, ptr %., align 8, !tbaa !5
  %20 = tail call i64 @lsame_(ptr noundef %3, ptr noundef nonnull @.str.1) #6
  %.fr = freeze i64 %20
  %21 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.2) #6
  store i64 0, ptr %12, align 8, !tbaa !5
  br i1 %.not, label %22, label %25

22:                                               ; preds = %11
  %23 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.3) #6
  %.not449 = icmp eq i64 %23, 0
  br i1 %.not449, label %24, label %25

24:                                               ; preds = %22
  store i64 1, ptr %12, align 8, !tbaa !5
  br label %.thread

25:                                               ; preds = %22, %11
  %.not450 = icmp eq i64 %21, 0
  br i1 %.not450, label %26, label %29

26:                                               ; preds = %25
  %27 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str) #6
  %.not451 = icmp eq i64 %27, 0
  br i1 %.not451, label %28, label %29

28:                                               ; preds = %26
  store i64 2, ptr %12, align 8, !tbaa !5
  br label %.thread

29:                                               ; preds = %26, %25
  %30 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.1) #6
  %.not452 = icmp eq i64 %30, 0
  br i1 %.not452, label %31, label %36

31:                                               ; preds = %29
  %32 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #6
  %.not453 = icmp eq i64 %32, 0
  br i1 %.not453, label %33, label %36

33:                                               ; preds = %31
  %34 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #6
  %.not454 = icmp eq i64 %34, 0
  br i1 %.not454, label %35, label %36

35:                                               ; preds = %33
  store i64 3, ptr %12, align 8, !tbaa !5
  br label %.thread

36:                                               ; preds = %33, %31, %29
  %37 = tail call i64 @lsame_(ptr noundef %3, ptr noundef nonnull @.str.2) #6
  %.not455 = icmp eq i64 %37, 0
  br i1 %.not455, label %38, label %41

38:                                               ; preds = %36
  %39 = tail call i64 @lsame_(ptr noundef %3, ptr noundef nonnull @.str.1) #6
  %.not456 = icmp eq i64 %39, 0
  br i1 %.not456, label %40, label %41

40:                                               ; preds = %38
  store i64 4, ptr %12, align 8, !tbaa !5
  br label %.thread

41:                                               ; preds = %38, %36
  %42 = load i64, ptr %4, align 8, !tbaa !5
  %43 = icmp slt i64 %42, 0
  br i1 %43, label %44, label %45

44:                                               ; preds = %41
  store i64 5, ptr %12, align 8, !tbaa !5
  br label %.thread

45:                                               ; preds = %41
  %46 = load i64, ptr %5, align 8, !tbaa !5
  %47 = icmp slt i64 %46, 0
  br i1 %47, label %48, label %49

48:                                               ; preds = %45
  store i64 6, ptr %12, align 8, !tbaa !5
  br label %.thread

49:                                               ; preds = %45
  %50 = load i64, ptr %8, align 8, !tbaa !5
  %51 = tail call i64 @llvm.smax.i64(i64 %.0414, i64 1)
  %52 = icmp slt i64 %50, %51
  br i1 %52, label %53, label %54

53:                                               ; preds = %49
  store i64 9, ptr %12, align 8, !tbaa !5
  br label %.thread

54:                                               ; preds = %49
  %55 = load i64, ptr %10, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %42, i64 1)
  %56 = icmp slt i64 %55, %spec.select
  br i1 %56, label %57, label %59

57:                                               ; preds = %54
  store i64 11, ptr %12, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %24, %35, %44, %53, %57, %48, %40, %28
  %58 = call i32 @xerbla_(ptr noundef nonnull @.str.6, ptr noundef nonnull %12) #6
  br label %.loopexit

59:                                               ; preds = %54
  %60 = icmp eq i64 %42, 0
  %61 = icmp eq i64 %46, 0
  %or.cond = or i1 %60, %61
  br i1 %or.cond, label %.loopexit, label %62

62:                                               ; preds = %59
  %63 = load double, ptr %6, align 8, !tbaa !9
  %64 = fcmp oeq double %63, 0.000000e+00
  br i1 %64, label %.preheader.preheader, label %77

.preheader.preheader:                             ; preds = %62
  %65 = shl i64 %16, 3
  %66 = shl nuw i64 %42, 3
  %67 = add nsw i64 %46, -1
  %xtraiter1149 = and i64 %46, 7
  %68 = icmp ult i64 %67, 7
  br i1 %68, label %.loopexit.loopexit.unr-lcssa, label %.preheader.preheader.new

.preheader.preheader.new:                         ; preds = %.preheader.preheader
  %unroll_iter = and i64 %46, 9223372036854775800
  br label %.preheader

.preheader:                                       ; preds = %.preheader, %.preheader.preheader.new
  %indvar = phi i64 [ 0, %.preheader.preheader.new ], [ %indvar.next.7, %.preheader ]
  %niter = phi i64 [ 0, %.preheader.preheader.new ], [ %niter.next.7, %.preheader ]
  %69 = mul i64 %65, %indvar
  %scevgep = getelementptr i8, ptr %9, i64 %69
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %66, i1 false), !tbaa !9
  %indvar.next = or disjoint i64 %indvar, 1
  %70 = mul i64 %65, %indvar.next
  %scevgep.1 = getelementptr i8, ptr %9, i64 %70
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.1, i8 0, i64 %66, i1 false), !tbaa !9
  %indvar.next.1 = or disjoint i64 %indvar, 2
  %71 = mul i64 %65, %indvar.next.1
  %scevgep.2 = getelementptr i8, ptr %9, i64 %71
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.2, i8 0, i64 %66, i1 false), !tbaa !9
  %indvar.next.2 = or disjoint i64 %indvar, 3
  %72 = mul i64 %65, %indvar.next.2
  %scevgep.3 = getelementptr i8, ptr %9, i64 %72
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.3, i8 0, i64 %66, i1 false), !tbaa !9
  %indvar.next.3 = or disjoint i64 %indvar, 4
  %73 = mul i64 %65, %indvar.next.3
  %scevgep.4 = getelementptr i8, ptr %9, i64 %73
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.4, i8 0, i64 %66, i1 false), !tbaa !9
  %indvar.next.4 = or disjoint i64 %indvar, 5
  %74 = mul i64 %65, %indvar.next.4
  %scevgep.5 = getelementptr i8, ptr %9, i64 %74
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.5, i8 0, i64 %66, i1 false), !tbaa !9
  %indvar.next.5 = or disjoint i64 %indvar, 6
  %75 = mul i64 %65, %indvar.next.5
  %scevgep.6 = getelementptr i8, ptr %9, i64 %75
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.6, i8 0, i64 %66, i1 false), !tbaa !9
  %indvar.next.6 = or disjoint i64 %indvar, 7
  %76 = mul i64 %65, %indvar.next.6
  %scevgep.7 = getelementptr i8, ptr %9, i64 %76
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.7, i8 0, i64 %66, i1 false), !tbaa !9
  %indvar.next.7 = add nuw nsw i64 %indvar, 8
  %niter.next.7 = add i64 %niter, 8
  %niter.ncmp.7 = icmp eq i64 %niter.next.7, %unroll_iter
  br i1 %niter.ncmp.7, label %.loopexit.loopexit.unr-lcssa, label %.preheader, !llvm.loop !11

77:                                               ; preds = %62
  %78 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.1) #6
  %.not458 = icmp eq i64 %78, 0
  %79 = load i64, ptr %5, align 8, !tbaa !5
  br i1 %.not, label %330, label %80

80:                                               ; preds = %77
  %.not481622 = icmp slt i64 %79, 1
  br i1 %.not458, label %258, label %81

81:                                               ; preds = %80
  br i1 %.not450, label %166, label %82

82:                                               ; preds = %81
  br i1 %.not481622, label %.loopexit, label %.lr.ph534

.lr.ph534:                                        ; preds = %82
  %83 = load i64, ptr %4, align 8, !tbaa !5
  %.not493523 = icmp slt i64 %83, 1
  %84 = add i64 %13, 1
  br i1 %.not493523, label %.loopexit, label %.lr.ph534.split

.lr.ph534.split:                                  ; preds = %.lr.ph534
  %.not495 = icmp eq i64 %.fr, 0
  %85 = shl i64 %16, 3
  %86 = shl i64 %13, 3
  %87 = add i64 %86, 8
  br i1 %.not495, label %.lr.ph527.us, label %.lr.ph527

.lr.ph527.us:                                     ; preds = %.lr.ph534.split, %._crit_edge528.split.us.us
  %indvar835 = phi i64 [ %indvar.next836, %._crit_edge528.split.us.us ], [ 0, %.lr.ph534.split ]
  %.1425532.us535 = phi i64 [ %124, %._crit_edge528.split.us.us ], [ 1, %.lr.ph534.split ]
  %88 = mul i64 %85, %indvar835
  %scevgep837 = getelementptr i8, ptr %9, i64 %88
  %89 = mul nsw i64 %.1425532.us535, %16
  %invariant.gep529.us = getelementptr double, ptr %18, i64 %89
  %90 = getelementptr i8, ptr %9, i64 %88
  br label %91

91:                                               ; preds = %100, %.lr.ph527.us
  %indvar838 = phi i64 [ %indvar.next839, %100 ], [ 0, %.lr.ph527.us ]
  %.0416524.us.us = phi i64 [ %101, %100 ], [ 1, %.lr.ph527.us ]
  %92 = shl i64 %indvar838, 3
  %scevgep840 = getelementptr i8, ptr %90, i64 %92
  %93 = mul i64 %86, %indvar838
  %scevgep841 = getelementptr i8, ptr %7, i64 %93
  %94 = mul i64 %87, %indvar838
  %scevgep842 = getelementptr i8, ptr %7, i64 %94
  %gep530.us.us = getelementptr double, ptr %invariant.gep529.us, i64 %.0416524.us.us
  %95 = load double, ptr %gep530.us.us, align 8, !tbaa !9
  %96 = fcmp une double %95, 0.000000e+00
  br i1 %96, label %97, label %100

97:                                               ; preds = %91
  %98 = load double, ptr %6, align 8, !tbaa !9
  %99 = fmul double %95, %98
  %.not494.not519.us.us = icmp ugt i64 %.0416524.us.us, 1
  br i1 %.not494.not519.us.us, label %.lr.ph.us.us, label %._crit_edge.us.us

._crit_edge.us.us:                                ; preds = %scalar.ph847.prol.loopexit, %scalar.ph847, %middle.block846, %97
  store double %99, ptr %gep530.us.us, align 8, !tbaa !9
  br label %100

100:                                              ; preds = %._crit_edge.us.us, %91
  %101 = add nuw i64 %.0416524.us.us, 1
  %exitcond745.not = icmp eq i64 %.0416524.us.us, %83
  %indvar.next839 = add i64 %indvar838, 1
  br i1 %exitcond745.not, label %._crit_edge528.split.us.us, label %91, !llvm.loop !13

scalar.ph847:                                     ; preds = %scalar.ph847.prol.loopexit, %scalar.ph847
  %.1434520.us.us = phi i64 [ %109, %scalar.ph847 ], [ %.1434520.us.us.unr, %scalar.ph847.prol.loopexit ]
  %gep522.us.us = getelementptr double, ptr %invariant.gep521.us.us, i64 %.1434520.us.us
  %102 = load double, ptr %gep522.us.us, align 8, !tbaa !9
  %gep.us.us = getelementptr double, ptr %invariant.gep529.us, i64 %.1434520.us.us
  %103 = load double, ptr %gep.us.us, align 8, !tbaa !9
  %104 = tail call double @llvm.fmuladd.f64(double %99, double %102, double %103)
  store double %104, ptr %gep.us.us, align 8, !tbaa !9
  %105 = add nuw nsw i64 %.1434520.us.us, 1
  %gep522.us.us.1 = getelementptr double, ptr %invariant.gep521.us.us, i64 %105
  %106 = load double, ptr %gep522.us.us.1, align 8, !tbaa !9
  %gep.us.us.1 = getelementptr double, ptr %invariant.gep529.us, i64 %105
  %107 = load double, ptr %gep.us.us.1, align 8, !tbaa !9
  %108 = tail call double @llvm.fmuladd.f64(double %99, double %106, double %107)
  store double %108, ptr %gep.us.us.1, align 8, !tbaa !9
  %109 = add nuw nsw i64 %.1434520.us.us, 2
  %exitcond744.not.1 = icmp eq i64 %109, %.0416524.us.us
  br i1 %exitcond744.not.1, label %._crit_edge.us.us, label %scalar.ph847, !llvm.loop !14

.lr.ph.us.us:                                     ; preds = %97
  %110 = mul nsw i64 %.0416524.us.us, %13
  %invariant.gep521.us.us = getelementptr double, ptr %15, i64 %110
  %min.iters.check848 = icmp ult i64 %indvar838, 4
  br i1 %min.iters.check848, label %scalar.ph847.preheader, label %vector.memcheck834

scalar.ph847.preheader:                           ; preds = %middle.block846, %vector.memcheck834, %.lr.ph.us.us
  %.1434520.us.us.ph = phi i64 [ 1, %vector.memcheck834 ], [ 1, %.lr.ph.us.us ], [ %ind.end852, %middle.block846 ]
  %111 = and i64 %.0416524.us.us, 1
  %lcmp.mod1136.not.not = icmp eq i64 %111, 0
  br i1 %lcmp.mod1136.not.not, label %scalar.ph847.prol, label %scalar.ph847.prol.loopexit

scalar.ph847.prol:                                ; preds = %scalar.ph847.preheader
  %gep522.us.us.prol = getelementptr double, ptr %invariant.gep521.us.us, i64 %.1434520.us.us.ph
  %112 = load double, ptr %gep522.us.us.prol, align 8, !tbaa !9
  %gep.us.us.prol = getelementptr double, ptr %invariant.gep529.us, i64 %.1434520.us.us.ph
  %113 = load double, ptr %gep.us.us.prol, align 8, !tbaa !9
  %114 = tail call double @llvm.fmuladd.f64(double %99, double %112, double %113)
  store double %114, ptr %gep.us.us.prol, align 8, !tbaa !9
  %115 = add nuw nsw i64 %.1434520.us.us.ph, 1
  br label %scalar.ph847.prol.loopexit

scalar.ph847.prol.loopexit:                       ; preds = %scalar.ph847.prol, %scalar.ph847.preheader
  %.1434520.us.us.unr = phi i64 [ %.1434520.us.us.ph, %scalar.ph847.preheader ], [ %115, %scalar.ph847.prol ]
  %116 = icmp eq i64 %indvar838, %.1434520.us.us.ph
  br i1 %116, label %._crit_edge.us.us, label %scalar.ph847

vector.memcheck834:                               ; preds = %.lr.ph.us.us
  %bound0843 = icmp ult ptr %scevgep837, %scevgep842
  %bound1844 = icmp ult ptr %scevgep841, %scevgep840
  %found.conflict845 = and i1 %bound0843, %bound1844
  br i1 %found.conflict845, label %scalar.ph847.preheader, label %vector.ph849

vector.ph849:                                     ; preds = %vector.memcheck834
  %n.vec851 = and i64 %indvar838, -4
  %ind.end852 = or disjoint i64 %n.vec851, 1
  %broadcast.splatinsert861 = insertelement <2 x double> poison, double %99, i64 0
  %broadcast.splat862 = shufflevector <2 x double> %broadcast.splatinsert861, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body854

vector.body854:                                   ; preds = %vector.body854, %vector.ph849
  %index855 = phi i64 [ 0, %vector.ph849 ], [ %index.next863, %vector.body854 ]
  %offset.idx856 = or disjoint i64 %index855, 1
  %117 = getelementptr double, ptr %invariant.gep521.us.us, i64 %offset.idx856
  %118 = getelementptr i8, ptr %117, i64 16
  %wide.load857 = load <2 x double>, ptr %117, align 8, !tbaa !9, !alias.scope !16
  %wide.load858 = load <2 x double>, ptr %118, align 8, !tbaa !9, !alias.scope !16
  %119 = getelementptr double, ptr %invariant.gep529.us, i64 %offset.idx856
  %120 = getelementptr i8, ptr %119, i64 16
  %wide.load859 = load <2 x double>, ptr %119, align 8, !tbaa !9, !alias.scope !19, !noalias !16
  %wide.load860 = load <2 x double>, ptr %120, align 8, !tbaa !9, !alias.scope !19, !noalias !16
  %121 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat862, <2 x double> %wide.load857, <2 x double> %wide.load859)
  %122 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat862, <2 x double> %wide.load858, <2 x double> %wide.load860)
  store <2 x double> %121, ptr %119, align 8, !tbaa !9, !alias.scope !19, !noalias !16
  store <2 x double> %122, ptr %120, align 8, !tbaa !9, !alias.scope !19, !noalias !16
  %index.next863 = add nuw i64 %index855, 4
  %123 = icmp eq i64 %index.next863, %n.vec851
  br i1 %123, label %middle.block846, label %vector.body854, !llvm.loop !21

middle.block846:                                  ; preds = %vector.body854
  %cmp.n864 = icmp eq i64 %indvar838, %n.vec851
  br i1 %cmp.n864, label %._crit_edge.us.us, label %scalar.ph847.preheader

._crit_edge528.split.us.us:                       ; preds = %100
  %124 = add nuw i64 %.1425532.us535, 1
  %exitcond746.not = icmp eq i64 %.1425532.us535, %79
  %indvar.next836 = add i64 %indvar835, 1
  br i1 %exitcond746.not, label %.loopexit, label %.lr.ph527.us, !llvm.loop !23

.lr.ph527:                                        ; preds = %.lr.ph534.split, %._crit_edge528.split
  %indvar823 = phi i64 [ %indvar.next824, %._crit_edge528.split ], [ 0, %.lr.ph534.split ]
  %.1425532 = phi i64 [ %165, %._crit_edge528.split ], [ 1, %.lr.ph534.split ]
  %125 = mul i64 %85, %indvar823
  %scevgep825 = getelementptr i8, ptr %9, i64 %125
  %126 = mul nsw i64 %.1425532, %16
  %invariant.gep529 = getelementptr double, ptr %18, i64 %126
  %127 = getelementptr i8, ptr %9, i64 %125
  br label %128

128:                                              ; preds = %.lr.ph527, %163
  %indvar826 = phi i64 [ 0, %.lr.ph527 ], [ %indvar.next827, %163 ]
  %.0416524 = phi i64 [ 1, %.lr.ph527 ], [ %164, %163 ]
  %129 = shl i64 %indvar826, 3
  %scevgep828 = getelementptr i8, ptr %127, i64 %129
  %130 = mul i64 %86, %indvar826
  %scevgep829 = getelementptr i8, ptr %7, i64 %130
  %131 = mul i64 %87, %indvar826
  %scevgep830 = getelementptr i8, ptr %7, i64 %131
  %gep530 = getelementptr double, ptr %invariant.gep529, i64 %.0416524
  %132 = load double, ptr %gep530, align 8, !tbaa !9
  %133 = fcmp une double %132, 0.000000e+00
  br i1 %133, label %134, label %163

134:                                              ; preds = %128
  %135 = load double, ptr %6, align 8, !tbaa !9
  %136 = fmul double %132, %135
  %.not494.not519 = icmp ugt i64 %.0416524, 1
  br i1 %.not494.not519, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %134
  %137 = mul nsw i64 %.0416524, %13
  %invariant.gep521 = getelementptr double, ptr %15, i64 %137
  %min.iters.check = icmp ult i64 %indvar826, 4
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph
  %bound0 = icmp ult ptr %scevgep825, %scevgep830
  %bound1 = icmp ult ptr %scevgep829, %scevgep828
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %indvar826, -4
  %ind.end = or disjoint i64 %n.vec, 1
  %broadcast.splatinsert = insertelement <2 x double> poison, double %136, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = or disjoint i64 %index, 1
  %138 = getelementptr double, ptr %invariant.gep521, i64 %offset.idx
  %139 = getelementptr i8, ptr %138, i64 16
  %wide.load = load <2 x double>, ptr %138, align 8, !tbaa !9, !alias.scope !24
  %wide.load831 = load <2 x double>, ptr %139, align 8, !tbaa !9, !alias.scope !24
  %140 = getelementptr double, ptr %invariant.gep529, i64 %offset.idx
  %141 = getelementptr i8, ptr %140, i64 16
  %wide.load832 = load <2 x double>, ptr %140, align 8, !tbaa !9, !alias.scope !27, !noalias !24
  %wide.load833 = load <2 x double>, ptr %141, align 8, !tbaa !9, !alias.scope !27, !noalias !24
  %142 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load, <2 x double> %wide.load832)
  %143 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load831, <2 x double> %wide.load833)
  store <2 x double> %142, ptr %140, align 8, !tbaa !9, !alias.scope !27, !noalias !24
  store <2 x double> %143, ptr %141, align 8, !tbaa !9, !alias.scope !27, !noalias !24
  %index.next = add nuw i64 %index, 4
  %144 = icmp eq i64 %index.next, %n.vec
  br i1 %144, label %middle.block, label %vector.body, !llvm.loop !29

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

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph
  %.1434520.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph ], [ %ind.end, %middle.block ]
  %145 = and i64 %.0416524, 1
  %lcmp.mod.not.not = icmp eq i64 %145, 0
  br i1 %lcmp.mod.not.not, label %scalar.ph.prol, label %scalar.ph.prol.loopexit

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %gep522.prol = getelementptr double, ptr %invariant.gep521, i64 %.1434520.ph
  %146 = load double, ptr %gep522.prol, align 8, !tbaa !9
  %gep.prol = getelementptr double, ptr %invariant.gep529, i64 %.1434520.ph
  %147 = load double, ptr %gep.prol, align 8, !tbaa !9
  %148 = tail call double @llvm.fmuladd.f64(double %136, double %146, double %147)
  store double %148, ptr %gep.prol, align 8, !tbaa !9
  %149 = add nuw nsw i64 %.1434520.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.1434520.unr = phi i64 [ %.1434520.ph, %scalar.ph.preheader ], [ %149, %scalar.ph.prol ]
  %150 = icmp eq i64 %indvar826, %.1434520.ph
  br i1 %150, label %._crit_edge, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.1434520 = phi i64 [ %158, %scalar.ph ], [ %.1434520.unr, %scalar.ph.prol.loopexit ]
  %gep522 = getelementptr double, ptr %invariant.gep521, i64 %.1434520
  %151 = load double, ptr %gep522, align 8, !tbaa !9
  %gep = getelementptr double, ptr %invariant.gep529, i64 %.1434520
  %152 = load double, ptr %gep, align 8, !tbaa !9
  %153 = tail call double @llvm.fmuladd.f64(double %136, double %151, double %152)
  store double %153, ptr %gep, align 8, !tbaa !9
  %154 = add nuw nsw i64 %.1434520, 1
  %gep522.1 = getelementptr double, ptr %invariant.gep521, i64 %154
  %155 = load double, ptr %gep522.1, align 8, !tbaa !9
  %gep.1 = getelementptr double, ptr %invariant.gep529, i64 %154
  %156 = load double, ptr %gep.1, align 8, !tbaa !9
  %157 = tail call double @llvm.fmuladd.f64(double %136, double %155, double %156)
  store double %157, ptr %gep.1, align 8, !tbaa !9
  %158 = add nuw nsw i64 %.1434520, 2
  %exitcond.not.1 = icmp eq i64 %158, %.0416524
  br i1 %exitcond.not.1, label %._crit_edge, label %scalar.ph, !llvm.loop !30

._crit_edge:                                      ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %134
  %159 = mul i64 %.0416524, %84
  %160 = getelementptr inbounds double, ptr %15, i64 %159
  %161 = load double, ptr %160, align 8, !tbaa !9
  %162 = fmul double %136, %161
  store double %162, ptr %gep530, align 8, !tbaa !9
  br label %163

163:                                              ; preds = %128, %._crit_edge
  %164 = add nuw i64 %.0416524, 1
  %exitcond742.not = icmp eq i64 %.0416524, %83
  %indvar.next827 = add i64 %indvar826, 1
  br i1 %exitcond742.not, label %._crit_edge528.split, label %128, !llvm.loop !13

._crit_edge528.split:                             ; preds = %163
  %165 = add nuw i64 %.1425532, 1
  %exitcond743.not = icmp eq i64 %.1425532, %79
  %indvar.next824 = add i64 %indvar823, 1
  br i1 %exitcond743.not, label %.loopexit, label %.lr.ph527, !llvm.loop !23

166:                                              ; preds = %81
  br i1 %.not481622, label %.loopexit, label %.lr.ph555

.lr.ph555:                                        ; preds = %166
  %167 = load i64, ptr %4, align 8, !tbaa !5
  %168 = icmp sgt i64 %167, 0
  %169 = add i64 %13, 1
  br i1 %168, label %.lr.ph555.split.us, label %.loopexit

.lr.ph555.split.us:                               ; preds = %.lr.ph555
  %.not490 = icmp eq i64 %.fr, 0
  %170 = shl i64 %167, 3
  %171 = shl i64 %16, 3
  %172 = add i64 %170, -8
  %173 = mul i64 %13, %172
  %174 = add i64 %173, %170
  %175 = shl i64 %13, 3
  %176 = sub nuw nsw i64 -8, %175
  %177 = mul i64 %13, -8
  br i1 %.not490, label %.lr.ph548.us.us.preheader, label %.lr.ph548.us.preheader

.lr.ph548.us.preheader:                           ; preds = %.lr.ph555.split.us
  %178 = getelementptr i8, ptr %7, i64 %174
  %179 = getelementptr i8, ptr %7, i64 %174
  br label %.lr.ph548.us

.lr.ph548.us.us.preheader:                        ; preds = %.lr.ph555.split.us
  %180 = getelementptr i8, ptr %7, i64 %174
  %181 = getelementptr i8, ptr %7, i64 %174
  br label %.lr.ph548.us.us

.lr.ph548.us.us:                                  ; preds = %.lr.ph548.us.us.preheader, %._crit_edge549.split.us.us.us
  %indvar897 = phi i64 [ %indvar.next898, %._crit_edge549.split.us.us.us ], [ 0, %.lr.ph548.us.us.preheader ]
  %.2426553.us.us = phi i64 [ %217, %._crit_edge549.split.us.us.us ], [ 1, %.lr.ph548.us.us.preheader ]
  %182 = mul i64 %171, %indvar897
  %183 = add i64 %170, %182
  %scevgep902 = getelementptr i8, ptr %9, i64 %183
  %184 = mul nsw i64 %.2426553.us.us, %16
  %invariant.gep550.us.us = getelementptr double, ptr %18, i64 %184
  br label %185

185:                                              ; preds = %.loopexit516.us.us.us, %.lr.ph548.us.us
  %indvar899 = phi i64 [ %indvar.next900, %.loopexit516.us.us.us ], [ 0, %.lr.ph548.us.us ]
  %.1417545.us.us.us = phi i64 [ %195, %.loopexit516.us.us.us ], [ %167, %.lr.ph548.us.us ]
  %186 = shl i64 %indvar899, 3
  %187 = sub i64 %183, %186
  %scevgep901 = getelementptr i8, ptr %9, i64 %187
  %188 = mul i64 %176, %indvar899
  %scevgep903 = getelementptr i8, ptr %180, i64 %188
  %189 = mul i64 %177, %indvar899
  %scevgep904 = getelementptr i8, ptr %181, i64 %189
  %gep551.us.us.us = getelementptr double, ptr %invariant.gep550.us.us, i64 %.1417545.us.us.us
  %190 = load double, ptr %gep551.us.us.us, align 8, !tbaa !9
  %191 = fcmp une double %190, 0.000000e+00
  br i1 %191, label %192, label %.loopexit516.us.us.us

192:                                              ; preds = %185
  %193 = load double, ptr %6, align 8, !tbaa !9
  %194 = fmul double %190, %193
  store double %194, ptr %gep551.us.us.us, align 8, !tbaa !9
  %.not491.not539.us.us.us = icmp slt i64 %.1417545.us.us.us, %167
  br i1 %.not491.not539.us.us.us, label %.lr.ph542.us.us.us, label %.loopexit516.us.us.us

.loopexit516.us.us.us:                            ; preds = %scalar.ph909.prol.loopexit, %scalar.ph909, %middle.block908, %192, %185
  %195 = add nsw i64 %.1417545.us.us.us, -1
  %196 = icmp sgt i64 %.1417545.us.us.us, 1
  %indvar.next900 = add i64 %indvar899, 1
  br i1 %196, label %185, label %._crit_edge549.split.us.us.us, !llvm.loop !31

scalar.ph909:                                     ; preds = %scalar.ph909.prol.loopexit, %scalar.ph909
  %.2435.in540.us.us.us = phi i64 [ %.2435.us.us.us.1, %scalar.ph909 ], [ %.2435.in540.us.us.us.unr, %scalar.ph909.prol.loopexit ]
  %.2435.us.us.us = add nuw nsw i64 %.2435.in540.us.us.us, 1
  %gep544.us.us.us = getelementptr double, ptr %invariant.gep543.us.us.us, i64 %.2435.us.us.us
  %197 = load double, ptr %gep544.us.us.us, align 8, !tbaa !9
  %gep538.us.us.us = getelementptr double, ptr %invariant.gep550.us.us, i64 %.2435.us.us.us
  %198 = load double, ptr %gep538.us.us.us, align 8, !tbaa !9
  %199 = tail call double @llvm.fmuladd.f64(double %194, double %197, double %198)
  store double %199, ptr %gep538.us.us.us, align 8, !tbaa !9
  %.2435.us.us.us.1 = add nuw nsw i64 %.2435.in540.us.us.us, 2
  %gep544.us.us.us.1 = getelementptr double, ptr %invariant.gep543.us.us.us, i64 %.2435.us.us.us.1
  %200 = load double, ptr %gep544.us.us.us.1, align 8, !tbaa !9
  %gep538.us.us.us.1 = getelementptr double, ptr %invariant.gep550.us.us, i64 %.2435.us.us.us.1
  %201 = load double, ptr %gep538.us.us.us.1, align 8, !tbaa !9
  %202 = tail call double @llvm.fmuladd.f64(double %194, double %200, double %201)
  store double %202, ptr %gep538.us.us.us.1, align 8, !tbaa !9
  %exitcond749.not.1 = icmp eq i64 %.2435.us.us.us.1, %167
  br i1 %exitcond749.not.1, label %.loopexit516.us.us.us, label %scalar.ph909, !llvm.loop !32

.lr.ph542.us.us.us:                               ; preds = %192
  %203 = mul nsw i64 %.1417545.us.us.us, %13
  %invariant.gep543.us.us.us = getelementptr double, ptr %15, i64 %203
  %min.iters.check910 = icmp ult i64 %indvar899, 4
  br i1 %min.iters.check910, label %scalar.ph909.preheader, label %vector.memcheck896

scalar.ph909.preheader:                           ; preds = %middle.block908, %vector.memcheck896, %.lr.ph542.us.us.us
  %.2435.in540.us.us.us.ph = phi i64 [ %.1417545.us.us.us, %vector.memcheck896 ], [ %.1417545.us.us.us, %.lr.ph542.us.us.us ], [ %ind.end914, %middle.block908 ]
  %204 = sub i64 %167, %.2435.in540.us.us.us.ph
  %.neg1151 = add i64 %.2435.in540.us.us.us.ph, 1
  %xtraiter1139 = and i64 %204, 1
  %lcmp.mod1140.not = icmp eq i64 %xtraiter1139, 0
  br i1 %lcmp.mod1140.not, label %scalar.ph909.prol.loopexit, label %scalar.ph909.prol

scalar.ph909.prol:                                ; preds = %scalar.ph909.preheader
  %.2435.us.us.us.prol = add nuw nsw i64 %.2435.in540.us.us.us.ph, 1
  %gep544.us.us.us.prol = getelementptr double, ptr %invariant.gep543.us.us.us, i64 %.2435.us.us.us.prol
  %205 = load double, ptr %gep544.us.us.us.prol, align 8, !tbaa !9
  %gep538.us.us.us.prol = getelementptr double, ptr %invariant.gep550.us.us, i64 %.2435.us.us.us.prol
  %206 = load double, ptr %gep538.us.us.us.prol, align 8, !tbaa !9
  %207 = tail call double @llvm.fmuladd.f64(double %194, double %205, double %206)
  store double %207, ptr %gep538.us.us.us.prol, align 8, !tbaa !9
  br label %scalar.ph909.prol.loopexit

scalar.ph909.prol.loopexit:                       ; preds = %scalar.ph909.prol, %scalar.ph909.preheader
  %.2435.in540.us.us.us.unr = phi i64 [ %.2435.in540.us.us.us.ph, %scalar.ph909.preheader ], [ %.2435.us.us.us.prol, %scalar.ph909.prol ]
  %208 = icmp eq i64 %167, %.neg1151
  br i1 %208, label %.loopexit516.us.us.us, label %scalar.ph909

vector.memcheck896:                               ; preds = %.lr.ph542.us.us.us
  %bound0905 = icmp ult ptr %scevgep901, %scevgep904
  %bound1906 = icmp ult ptr %scevgep903, %scevgep902
  %found.conflict907 = and i1 %bound0905, %bound1906
  br i1 %found.conflict907, label %scalar.ph909.preheader, label %vector.ph911

vector.ph911:                                     ; preds = %vector.memcheck896
  %n.vec913 = and i64 %indvar899, -4
  %ind.end914 = add i64 %.1417545.us.us.us, %n.vec913
  %broadcast.splatinsert923 = insertelement <2 x double> poison, double %194, i64 0
  %broadcast.splat924 = shufflevector <2 x double> %broadcast.splatinsert923, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body916

vector.body916:                                   ; preds = %vector.body916, %vector.ph911
  %index917 = phi i64 [ 0, %vector.ph911 ], [ %index.next925, %vector.body916 ]
  %offset.idx918 = add i64 %.1417545.us.us.us, %index917
  %209 = add nuw nsw i64 %offset.idx918, 1
  %210 = getelementptr double, ptr %invariant.gep543.us.us.us, i64 %209
  %211 = getelementptr i8, ptr %210, i64 16
  %wide.load919 = load <2 x double>, ptr %210, align 8, !tbaa !9, !alias.scope !33
  %wide.load920 = load <2 x double>, ptr %211, align 8, !tbaa !9, !alias.scope !33
  %212 = getelementptr double, ptr %invariant.gep550.us.us, i64 %209
  %213 = getelementptr i8, ptr %212, i64 16
  %wide.load921 = load <2 x double>, ptr %212, align 8, !tbaa !9, !alias.scope !36, !noalias !33
  %wide.load922 = load <2 x double>, ptr %213, align 8, !tbaa !9, !alias.scope !36, !noalias !33
  %214 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat924, <2 x double> %wide.load919, <2 x double> %wide.load921)
  %215 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat924, <2 x double> %wide.load920, <2 x double> %wide.load922)
  store <2 x double> %214, ptr %212, align 8, !tbaa !9, !alias.scope !36, !noalias !33
  store <2 x double> %215, ptr %213, align 8, !tbaa !9, !alias.scope !36, !noalias !33
  %index.next925 = add nuw i64 %index917, 4
  %216 = icmp eq i64 %index.next925, %n.vec913
  br i1 %216, label %middle.block908, label %vector.body916, !llvm.loop !38

middle.block908:                                  ; preds = %vector.body916
  %cmp.n926 = icmp eq i64 %indvar899, %n.vec913
  br i1 %cmp.n926, label %.loopexit516.us.us.us, label %scalar.ph909.preheader

._crit_edge549.split.us.us.us:                    ; preds = %.loopexit516.us.us.us
  %217 = add nuw i64 %.2426553.us.us, 1
  %exitcond750.not = icmp eq i64 %.2426553.us.us, %79
  %indvar.next898 = add i64 %indvar897, 1
  br i1 %exitcond750.not, label %.loopexit, label %.lr.ph548.us.us, !llvm.loop !39

.lr.ph548.us:                                     ; preds = %.lr.ph548.us.preheader, %._crit_edge549.split.us568
  %indvar866 = phi i64 [ %indvar.next867, %._crit_edge549.split.us568 ], [ 0, %.lr.ph548.us.preheader ]
  %.2426553.us = phi i64 [ %257, %._crit_edge549.split.us568 ], [ 1, %.lr.ph548.us.preheader ]
  %218 = mul i64 %171, %indvar866
  %219 = add i64 %170, %218
  %scevgep871 = getelementptr i8, ptr %9, i64 %219
  %220 = mul nsw i64 %.2426553.us, %16
  %invariant.gep550.us = getelementptr double, ptr %18, i64 %220
  br label %221

221:                                              ; preds = %.lr.ph548.us, %.loopexit516.us564
  %indvar868 = phi i64 [ 0, %.lr.ph548.us ], [ %indvar.next869, %.loopexit516.us564 ]
  %.1417545.us556 = phi i64 [ %167, %.lr.ph548.us ], [ %235, %.loopexit516.us564 ]
  %222 = shl i64 %indvar868, 3
  %223 = sub i64 %219, %222
  %scevgep870 = getelementptr i8, ptr %9, i64 %223
  %224 = mul i64 %176, %indvar868
  %scevgep872 = getelementptr i8, ptr %178, i64 %224
  %225 = mul i64 %177, %indvar868
  %scevgep873 = getelementptr i8, ptr %179, i64 %225
  %gep551.us557 = getelementptr double, ptr %invariant.gep550.us, i64 %.1417545.us556
  %226 = load double, ptr %gep551.us557, align 8, !tbaa !9
  %227 = fcmp une double %226, 0.000000e+00
  br i1 %227, label %228, label %.loopexit516.us564

228:                                              ; preds = %221
  %229 = load double, ptr %6, align 8, !tbaa !9
  %230 = fmul double %226, %229
  store double %230, ptr %gep551.us557, align 8, !tbaa !9
  %231 = mul i64 %.1417545.us556, %169
  %232 = getelementptr inbounds double, ptr %15, i64 %231
  %233 = load double, ptr %232, align 8, !tbaa !9
  %234 = fmul double %230, %233
  store double %234, ptr %gep551.us557, align 8, !tbaa !9
  %.not491.not539.us558 = icmp slt i64 %.1417545.us556, %167
  br i1 %.not491.not539.us558, label %.lr.ph542.us565, label %.loopexit516.us564

.loopexit516.us564:                               ; preds = %scalar.ph878.prol.loopexit, %scalar.ph878, %middle.block877, %228, %221
  %235 = add nsw i64 %.1417545.us556, -1
  %236 = icmp sgt i64 %.1417545.us556, 1
  %indvar.next869 = add i64 %indvar868, 1
  br i1 %236, label %221, label %._crit_edge549.split.us568, !llvm.loop !31

scalar.ph878:                                     ; preds = %scalar.ph878.prol.loopexit, %scalar.ph878
  %.2435.in540.us559 = phi i64 [ %.2435.us560.1, %scalar.ph878 ], [ %.2435.in540.us559.unr, %scalar.ph878.prol.loopexit ]
  %.2435.us560 = add nuw nsw i64 %.2435.in540.us559, 1
  %gep544.us561 = getelementptr double, ptr %invariant.gep543.us566, i64 %.2435.us560
  %237 = load double, ptr %gep544.us561, align 8, !tbaa !9
  %gep538.us562 = getelementptr double, ptr %invariant.gep550.us, i64 %.2435.us560
  %238 = load double, ptr %gep538.us562, align 8, !tbaa !9
  %239 = tail call double @llvm.fmuladd.f64(double %230, double %237, double %238)
  store double %239, ptr %gep538.us562, align 8, !tbaa !9
  %.2435.us560.1 = add nuw nsw i64 %.2435.in540.us559, 2
  %gep544.us561.1 = getelementptr double, ptr %invariant.gep543.us566, i64 %.2435.us560.1
  %240 = load double, ptr %gep544.us561.1, align 8, !tbaa !9
  %gep538.us562.1 = getelementptr double, ptr %invariant.gep550.us, i64 %.2435.us560.1
  %241 = load double, ptr %gep538.us562.1, align 8, !tbaa !9
  %242 = tail call double @llvm.fmuladd.f64(double %230, double %240, double %241)
  store double %242, ptr %gep538.us562.1, align 8, !tbaa !9
  %exitcond747.not.1 = icmp eq i64 %.2435.us560.1, %167
  br i1 %exitcond747.not.1, label %.loopexit516.us564, label %scalar.ph878, !llvm.loop !40

.lr.ph542.us565:                                  ; preds = %228
  %243 = mul nsw i64 %.1417545.us556, %13
  %invariant.gep543.us566 = getelementptr double, ptr %15, i64 %243
  %min.iters.check879 = icmp ult i64 %indvar868, 4
  br i1 %min.iters.check879, label %scalar.ph878.preheader, label %vector.memcheck865

scalar.ph878.preheader:                           ; preds = %middle.block877, %vector.memcheck865, %.lr.ph542.us565
  %.2435.in540.us559.ph = phi i64 [ %.1417545.us556, %vector.memcheck865 ], [ %.1417545.us556, %.lr.ph542.us565 ], [ %ind.end883, %middle.block877 ]
  %244 = sub i64 %167, %.2435.in540.us559.ph
  %.neg = add i64 %.2435.in540.us559.ph, 1
  %xtraiter1137 = and i64 %244, 1
  %lcmp.mod1138.not = icmp eq i64 %xtraiter1137, 0
  br i1 %lcmp.mod1138.not, label %scalar.ph878.prol.loopexit, label %scalar.ph878.prol

scalar.ph878.prol:                                ; preds = %scalar.ph878.preheader
  %.2435.us560.prol = add nuw nsw i64 %.2435.in540.us559.ph, 1
  %gep544.us561.prol = getelementptr double, ptr %invariant.gep543.us566, i64 %.2435.us560.prol
  %245 = load double, ptr %gep544.us561.prol, align 8, !tbaa !9
  %gep538.us562.prol = getelementptr double, ptr %invariant.gep550.us, i64 %.2435.us560.prol
  %246 = load double, ptr %gep538.us562.prol, align 8, !tbaa !9
  %247 = tail call double @llvm.fmuladd.f64(double %230, double %245, double %246)
  store double %247, ptr %gep538.us562.prol, align 8, !tbaa !9
  br label %scalar.ph878.prol.loopexit

scalar.ph878.prol.loopexit:                       ; preds = %scalar.ph878.prol, %scalar.ph878.preheader
  %.2435.in540.us559.unr = phi i64 [ %.2435.in540.us559.ph, %scalar.ph878.preheader ], [ %.2435.us560.prol, %scalar.ph878.prol ]
  %248 = icmp eq i64 %167, %.neg
  br i1 %248, label %.loopexit516.us564, label %scalar.ph878

vector.memcheck865:                               ; preds = %.lr.ph542.us565
  %bound0874 = icmp ult ptr %scevgep870, %scevgep873
  %bound1875 = icmp ult ptr %scevgep872, %scevgep871
  %found.conflict876 = and i1 %bound0874, %bound1875
  br i1 %found.conflict876, label %scalar.ph878.preheader, label %vector.ph880

vector.ph880:                                     ; preds = %vector.memcheck865
  %n.vec882 = and i64 %indvar868, -4
  %ind.end883 = add i64 %.1417545.us556, %n.vec882
  %broadcast.splatinsert892 = insertelement <2 x double> poison, double %230, i64 0
  %broadcast.splat893 = shufflevector <2 x double> %broadcast.splatinsert892, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body885

vector.body885:                                   ; preds = %vector.body885, %vector.ph880
  %index886 = phi i64 [ 0, %vector.ph880 ], [ %index.next894, %vector.body885 ]
  %offset.idx887 = add i64 %.1417545.us556, %index886
  %249 = add nuw nsw i64 %offset.idx887, 1
  %250 = getelementptr double, ptr %invariant.gep543.us566, i64 %249
  %251 = getelementptr i8, ptr %250, i64 16
  %wide.load888 = load <2 x double>, ptr %250, align 8, !tbaa !9, !alias.scope !41
  %wide.load889 = load <2 x double>, ptr %251, align 8, !tbaa !9, !alias.scope !41
  %252 = getelementptr double, ptr %invariant.gep550.us, i64 %249
  %253 = getelementptr i8, ptr %252, i64 16
  %wide.load890 = load <2 x double>, ptr %252, align 8, !tbaa !9, !alias.scope !44, !noalias !41
  %wide.load891 = load <2 x double>, ptr %253, align 8, !tbaa !9, !alias.scope !44, !noalias !41
  %254 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat893, <2 x double> %wide.load888, <2 x double> %wide.load890)
  %255 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat893, <2 x double> %wide.load889, <2 x double> %wide.load891)
  store <2 x double> %254, ptr %252, align 8, !tbaa !9, !alias.scope !44, !noalias !41
  store <2 x double> %255, ptr %253, align 8, !tbaa !9, !alias.scope !44, !noalias !41
  %index.next894 = add nuw i64 %index886, 4
  %256 = icmp eq i64 %index.next894, %n.vec882
  br i1 %256, label %middle.block877, label %vector.body885, !llvm.loop !46

middle.block877:                                  ; preds = %vector.body885
  %cmp.n895 = icmp eq i64 %indvar868, %n.vec882
  br i1 %cmp.n895, label %.loopexit516.us564, label %scalar.ph878.preheader

._crit_edge549.split.us568:                       ; preds = %.loopexit516.us564
  %257 = add nuw i64 %.2426553.us, 1
  %exitcond748.not = icmp eq i64 %.2426553.us, %79
  %indvar.next867 = add i64 %indvar866, 1
  br i1 %exitcond748.not, label %.loopexit, label %.lr.ph548.us, !llvm.loop !39

258:                                              ; preds = %80
  br i1 %.not450, label %297, label %259

259:                                              ; preds = %258
  br i1 %.not481622, label %.loopexit, label %.lr.ph589

.lr.ph589:                                        ; preds = %259
  %260 = load i64, ptr %4, align 8, !tbaa !5
  %261 = icmp sgt i64 %260, 0
  %262 = add i64 %13, 1
  br i1 %261, label %.lr.ph589.split.us, label %.loopexit

.lr.ph589.split.us:                               ; preds = %.lr.ph589
  %.not486 = icmp eq i64 %.fr, 0
  br i1 %.not486, label %.lr.ph582.us.us, label %.lr.ph582.us

.lr.ph582.us.us:                                  ; preds = %.lr.ph589.split.us, %._crit_edge583.split.us.us.us
  %.3427587.us.us = phi i64 [ %277, %._crit_edge583.split.us.us.us ], [ 1, %.lr.ph589.split.us ]
  %263 = mul nsw i64 %.3427587.us.us, %16
  %invariant.gep584.us.us = getelementptr double, ptr %18, i64 %263
  br label %264

264:                                              ; preds = %._crit_edge577.us.us.us, %.lr.ph582.us.us
  %.3436580.us.us.us = phi i64 [ %260, %.lr.ph582.us.us ], [ %270, %._crit_edge577.us.us.us ]
  %gep585.us.us.us = getelementptr double, ptr %invariant.gep584.us.us, i64 %.3436580.us.us.us
  %265 = load double, ptr %gep585.us.us.us, align 8, !tbaa !9
  %.not487.not572.us.us.us = icmp sgt i64 %.3436580.us.us.us, 1
  br i1 %.not487.not572.us.us.us, label %.lr.ph576.us.us.us, label %._crit_edge577.us.us.us.thread

._crit_edge577.us.us.us.thread:                   ; preds = %264
  %266 = load double, ptr %6, align 8, !tbaa !9
  %267 = fmul double %265, %266
  store double %267, ptr %gep585.us.us.us, align 8, !tbaa !9
  br label %._crit_edge583.split.us.us.us

._crit_edge577.us.us.us:                          ; preds = %271
  %268 = load double, ptr %6, align 8, !tbaa !9
  %269 = fmul double %274, %268
  store double %269, ptr %gep585.us.us.us, align 8, !tbaa !9
  %270 = add nsw i64 %.3436580.us.us.us, -1
  br i1 %.not487.not572.us.us.us, label %264, label %._crit_edge583.split.us.us.us, !llvm.loop !47

271:                                              ; preds = %.lr.ph576.us.us.us, %271
  %.2574.us.us.us = phi double [ %265, %.lr.ph576.us.us.us ], [ %274, %271 ]
  %.2418573.us.us.us = phi i64 [ 1, %.lr.ph576.us.us.us ], [ %275, %271 ]
  %gep579.us.us.us = getelementptr double, ptr %invariant.gep578.us.us.us, i64 %.2418573.us.us.us
  %272 = load double, ptr %gep579.us.us.us, align 8, !tbaa !9
  %gep571.us.us.us = getelementptr double, ptr %invariant.gep584.us.us, i64 %.2418573.us.us.us
  %273 = load double, ptr %gep571.us.us.us, align 8, !tbaa !9
  %274 = tail call double @llvm.fmuladd.f64(double %272, double %273, double %.2574.us.us.us)
  %275 = add nuw nsw i64 %.2418573.us.us.us, 1
  %.not487.not.us.us.us = icmp slt i64 %275, %.3436580.us.us.us
  br i1 %.not487.not.us.us.us, label %271, label %._crit_edge577.us.us.us, !llvm.loop !48

.lr.ph576.us.us.us:                               ; preds = %264
  %276 = mul nsw i64 %.3436580.us.us.us, %13
  %invariant.gep578.us.us.us = getelementptr double, ptr %15, i64 %276
  br label %271

._crit_edge583.split.us.us.us:                    ; preds = %._crit_edge577.us.us.us, %._crit_edge577.us.us.us.thread
  %277 = add nuw i64 %.3427587.us.us, 1
  %exitcond752.not = icmp eq i64 %.3427587.us.us, %79
  br i1 %exitcond752.not, label %.loopexit, label %.lr.ph582.us.us, !llvm.loop !49

.lr.ph582.us:                                     ; preds = %.lr.ph589.split.us, %._crit_edge583.split.us603
  %.3427587.us = phi i64 [ %296, %._crit_edge583.split.us603 ], [ 1, %.lr.ph589.split.us ]
  %278 = mul nsw i64 %.3427587.us, %16
  %invariant.gep584.us = getelementptr double, ptr %18, i64 %278
  br label %279

279:                                              ; preds = %.lr.ph582.us, %._crit_edge577.us601
  %.3436580.us590 = phi i64 [ %260, %.lr.ph582.us ], [ %289, %._crit_edge577.us601 ]
  %gep585.us591 = getelementptr double, ptr %invariant.gep584.us, i64 %.3436580.us590
  %280 = load double, ptr %gep585.us591, align 8, !tbaa !9
  %281 = mul i64 %.3436580.us590, %262
  %282 = getelementptr inbounds double, ptr %15, i64 %281
  %283 = load double, ptr %282, align 8, !tbaa !9
  %284 = fmul double %280, %283
  %.not487.not572.us592 = icmp sgt i64 %.3436580.us590, 1
  br i1 %.not487.not572.us592, label %.lr.ph576.us599, label %._crit_edge577.us601.thread

._crit_edge577.us601.thread:                      ; preds = %279
  %285 = load double, ptr %6, align 8, !tbaa !9
  %286 = fmul double %284, %285
  store double %286, ptr %gep585.us591, align 8, !tbaa !9
  br label %._crit_edge583.split.us603

._crit_edge577.us601:                             ; preds = %290
  %287 = load double, ptr %6, align 8, !tbaa !9
  %288 = fmul double %293, %287
  store double %288, ptr %gep585.us591, align 8, !tbaa !9
  %289 = add nsw i64 %.3436580.us590, -1
  br i1 %.not487.not572.us592, label %279, label %._crit_edge583.split.us603, !llvm.loop !47

290:                                              ; preds = %.lr.ph576.us599, %290
  %.2574.us594 = phi double [ %284, %.lr.ph576.us599 ], [ %293, %290 ]
  %.2418573.us595 = phi i64 [ 1, %.lr.ph576.us599 ], [ %294, %290 ]
  %gep579.us596 = getelementptr double, ptr %invariant.gep578.us600, i64 %.2418573.us595
  %291 = load double, ptr %gep579.us596, align 8, !tbaa !9
  %gep571.us597 = getelementptr double, ptr %invariant.gep584.us, i64 %.2418573.us595
  %292 = load double, ptr %gep571.us597, align 8, !tbaa !9
  %293 = tail call double @llvm.fmuladd.f64(double %291, double %292, double %.2574.us594)
  %294 = add nuw nsw i64 %.2418573.us595, 1
  %.not487.not.us598 = icmp slt i64 %294, %.3436580.us590
  br i1 %.not487.not.us598, label %290, label %._crit_edge577.us601, !llvm.loop !48

.lr.ph576.us599:                                  ; preds = %279
  %295 = mul nsw i64 %.3436580.us590, %13
  %invariant.gep578.us600 = getelementptr double, ptr %15, i64 %295
  br label %290

._crit_edge583.split.us603:                       ; preds = %._crit_edge577.us601, %._crit_edge577.us601.thread
  %296 = add nuw i64 %.3427587.us, 1
  %exitcond751.not = icmp eq i64 %.3427587.us, %79
  br i1 %exitcond751.not, label %.loopexit, label %.lr.ph582.us, !llvm.loop !49

297:                                              ; preds = %258
  br i1 %.not481622, label %.loopexit, label %.lr.ph625

.lr.ph625:                                        ; preds = %297
  %298 = load i64, ptr %4, align 8, !tbaa !5
  %.not482615 = icmp slt i64 %298, 1
  %299 = add i64 %13, 1
  br i1 %.not482615, label %.loopexit, label %.lr.ph625.split

.lr.ph625.split:                                  ; preds = %.lr.ph625
  %.not483 = icmp eq i64 %.fr, 0
  br i1 %.not483, label %.lr.ph618.us, label %.lr.ph618

.lr.ph618.us:                                     ; preds = %.lr.ph625.split, %._crit_edge619.split.us.us
  %.4428623.us626 = phi i64 [ %312, %._crit_edge619.split.us.us ], [ 1, %.lr.ph625.split ]
  %300 = mul nsw i64 %.4428623.us626, %16
  %invariant.gep620.us = getelementptr double, ptr %18, i64 %300
  br label %301

301:                                              ; preds = %._crit_edge612.us.us, %.lr.ph618.us
  %.4437616.us.us = phi i64 [ 1, %.lr.ph618.us ], [ %303, %._crit_edge612.us.us ]
  %gep621.us.us = getelementptr double, ptr %invariant.gep620.us, i64 %.4437616.us.us
  %302 = load double, ptr %gep621.us.us, align 8, !tbaa !9
  %303 = add nuw i64 %.4437616.us.us, 1
  %.not484607.us.us.not = icmp slt i64 %.4437616.us.us, %298
  br i1 %.not484607.us.us.not, label %.lr.ph611.us.us, label %._crit_edge612.us.us

304:                                              ; preds = %.lr.ph611.us.us, %304
  %.4609.us.us = phi double [ %302, %.lr.ph611.us.us ], [ %307, %304 ]
  %.3419608.us.us = phi i64 [ %303, %.lr.ph611.us.us ], [ %308, %304 ]
  %gep614.us.us = getelementptr double, ptr %invariant.gep613.us.us, i64 %.3419608.us.us
  %305 = load double, ptr %gep614.us.us, align 8, !tbaa !9
  %gep606.us.us = getelementptr double, ptr %invariant.gep620.us, i64 %.3419608.us.us
  %306 = load double, ptr %gep606.us.us, align 8, !tbaa !9
  %307 = tail call double @llvm.fmuladd.f64(double %305, double %306, double %.4609.us.us)
  %308 = add nuw nsw i64 %.3419608.us.us, 1
  %.not484.us.us.not = icmp slt i64 %.3419608.us.us, %298
  br i1 %.not484.us.us.not, label %304, label %._crit_edge612.us.us, !llvm.loop !50

._crit_edge612.us.us:                             ; preds = %304, %301
  %.4.lcssa.us.us = phi double [ %302, %301 ], [ %307, %304 ]
  %309 = load double, ptr %6, align 8, !tbaa !9
  %310 = fmul double %.4.lcssa.us.us, %309
  store double %310, ptr %gep621.us.us, align 8, !tbaa !9
  %exitcond755.not = icmp eq i64 %.4437616.us.us, %298
  br i1 %exitcond755.not, label %._crit_edge619.split.us.us, label %301, !llvm.loop !51

.lr.ph611.us.us:                                  ; preds = %301
  %311 = mul nsw i64 %.4437616.us.us, %13
  %invariant.gep613.us.us = getelementptr double, ptr %15, i64 %311
  br label %304

._crit_edge619.split.us.us:                       ; preds = %._crit_edge612.us.us
  %312 = add nuw i64 %.4428623.us626, 1
  %exitcond756.not = icmp eq i64 %.4428623.us626, %79
  br i1 %exitcond756.not, label %.loopexit, label %.lr.ph618.us, !llvm.loop !52

.lr.ph618:                                        ; preds = %.lr.ph625.split, %._crit_edge619.split
  %.4428623 = phi i64 [ %329, %._crit_edge619.split ], [ 1, %.lr.ph625.split ]
  %313 = mul nsw i64 %.4428623, %16
  %invariant.gep620 = getelementptr double, ptr %18, i64 %313
  br label %314

314:                                              ; preds = %.lr.ph618, %._crit_edge612
  %.4437616 = phi i64 [ 1, %.lr.ph618 ], [ %320, %._crit_edge612 ]
  %gep621 = getelementptr double, ptr %invariant.gep620, i64 %.4437616
  %315 = load double, ptr %gep621, align 8, !tbaa !9
  %316 = mul i64 %.4437616, %299
  %317 = getelementptr inbounds double, ptr %15, i64 %316
  %318 = load double, ptr %317, align 8, !tbaa !9
  %319 = fmul double %315, %318
  %320 = add nuw i64 %.4437616, 1
  %.not484607.not = icmp slt i64 %.4437616, %298
  br i1 %.not484607.not, label %.lr.ph611, label %._crit_edge612

.lr.ph611:                                        ; preds = %314
  %321 = mul nsw i64 %.4437616, %13
  %invariant.gep613 = getelementptr double, ptr %15, i64 %321
  br label %322

322:                                              ; preds = %.lr.ph611, %322
  %.4609 = phi double [ %319, %.lr.ph611 ], [ %325, %322 ]
  %.3419608 = phi i64 [ %320, %.lr.ph611 ], [ %326, %322 ]
  %gep614 = getelementptr double, ptr %invariant.gep613, i64 %.3419608
  %323 = load double, ptr %gep614, align 8, !tbaa !9
  %gep606 = getelementptr double, ptr %invariant.gep620, i64 %.3419608
  %324 = load double, ptr %gep606, align 8, !tbaa !9
  %325 = tail call double @llvm.fmuladd.f64(double %323, double %324, double %.4609)
  %326 = add nuw nsw i64 %.3419608, 1
  %.not484.not = icmp slt i64 %.3419608, %298
  br i1 %.not484.not, label %322, label %._crit_edge612, !llvm.loop !50

._crit_edge612:                                   ; preds = %322, %314
  %.4.lcssa = phi double [ %319, %314 ], [ %325, %322 ]
  %327 = load double, ptr %6, align 8, !tbaa !9
  %328 = fmul double %.4.lcssa, %327
  store double %328, ptr %gep621, align 8, !tbaa !9
  %exitcond753.not = icmp eq i64 %.4437616, %298
  br i1 %exitcond753.not, label %._crit_edge619.split, label %314, !llvm.loop !51

._crit_edge619.split:                             ; preds = %._crit_edge612
  %329 = add nuw i64 %.4428623, 1
  %exitcond754.not = icmp eq i64 %.4428623, %79
  br i1 %exitcond754.not, label %.loopexit, label %.lr.ph618, !llvm.loop !52

330:                                              ; preds = %77
  br i1 %.not458, label %479, label %331

331:                                              ; preds = %330
  br i1 %.not450, label %407, label %332

332:                                              ; preds = %331
  %333 = icmp sgt i64 %79, 0
  br i1 %333, label %.lr.ph648, label %.loopexit

.lr.ph648:                                        ; preds = %332
  %.not475 = icmp eq i64 %.fr, 0
  %334 = add i64 %13, 1
  %335 = load i64, ptr %4, align 8, !tbaa !5
  %.fr718 = freeze i64 %335
  %.not476628 = icmp slt i64 %.fr718, 1
  %336 = shl i64 %79, 3
  %337 = add i64 %336, -8
  %338 = mul i64 %16, %337
  %339 = mul i64 %16, -8
  %340 = shl i64 %.fr718, 3
  %341 = add nuw i64 %79, 2305843009213693950
  %342 = mul i64 %16, %341
  %343 = add i64 %342, %.fr718
  %344 = shl i64 %343, 3
  %345 = getelementptr i8, ptr %9, i64 %338
  %346 = getelementptr i8, ptr %9, i64 %338
  %347 = getelementptr i8, ptr %346, i64 %340
  %348 = getelementptr i8, ptr %9, i64 %344
  %min.iters.check957 = icmp ult i64 %.fr718, 4
  %n.vec960 = and i64 %.fr718, 9223372036854775804
  %ind.end961 = or disjoint i64 %n.vec960, 1
  %cmp.n971 = icmp eq i64 %.fr718, %n.vec960
  %min.iters.check938 = icmp ult i64 %.fr718, 4
  %bound0933 = icmp ult ptr %345, %348
  %.mask = and i64 %16, 1152921504606846976
  %stride.check = icmp ne i64 %.mask, 0
  %n.vec941 = and i64 %.fr718, 9223372036854775804
  %ind.end942 = or disjoint i64 %n.vec941, 1
  %cmp.n954 = icmp eq i64 %.fr718, %n.vec941
  %xtraiter1141 = and i64 %.fr718, 1
  %lcmp.mod1142.not = icmp eq i64 %xtraiter1141, 0
  br label %349

349:                                              ; preds = %.backedge, %.lr.ph648
  %indvar928 = phi i64 [ %indvar.next929, %.backedge ], [ 0, %.lr.ph648 ]
  %.5429645 = phi i64 [ %406, %.backedge ], [ %79, %.lr.ph648 ]
  %350 = mul i64 %339, %indvar928
  %scevgep931 = getelementptr i8, ptr %347, i64 %350
  %351 = load double, ptr %6, align 8, !tbaa !9
  br i1 %.not475, label %357, label %352

352:                                              ; preds = %349
  %353 = mul i64 %.5429645, %334
  %354 = getelementptr inbounds double, ptr %15, i64 %353
  %355 = load double, ptr %354, align 8, !tbaa !9
  %356 = fmul double %351, %355
  br label %357

357:                                              ; preds = %352, %349
  %.5 = phi double [ %356, %352 ], [ %351, %349 ]
  br i1 %.not476628, label %.preheader512.thread, label %.lr.ph631

.lr.ph631:                                        ; preds = %357
  %358 = mul nsw i64 %.5429645, %16
  %invariant.gep632 = getelementptr double, ptr %18, i64 %358
  br i1 %min.iters.check957, label %scalar.ph956.preheader, label %vector.ph958

scalar.ph956.preheader:                           ; preds = %middle.block955, %.lr.ph631
  %.5438629.ph = phi i64 [ 1, %.lr.ph631 ], [ %ind.end961, %middle.block955 ]
  br label %scalar.ph956

vector.ph958:                                     ; preds = %.lr.ph631
  %broadcast.splatinsert968 = insertelement <2 x double> poison, double %.5, i64 0
  %broadcast.splat969 = shufflevector <2 x double> %broadcast.splatinsert968, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body963

vector.body963:                                   ; preds = %vector.body963, %vector.ph958
  %index964 = phi i64 [ 0, %vector.ph958 ], [ %index.next970, %vector.body963 ]
  %offset.idx965 = or disjoint i64 %index964, 1
  %359 = getelementptr double, ptr %invariant.gep632, i64 %offset.idx965
  %360 = getelementptr i8, ptr %359, i64 16
  %wide.load966 = load <2 x double>, ptr %359, align 8, !tbaa !9
  %wide.load967 = load <2 x double>, ptr %360, align 8, !tbaa !9
  %361 = fmul <2 x double> %broadcast.splat969, %wide.load966
  %362 = fmul <2 x double> %broadcast.splat969, %wide.load967
  store <2 x double> %361, ptr %359, align 8, !tbaa !9
  store <2 x double> %362, ptr %360, align 8, !tbaa !9
  %index.next970 = add nuw i64 %index964, 4
  %363 = icmp eq i64 %index.next970, %n.vec960
  br i1 %363, label %middle.block955, label %vector.body963, !llvm.loop !53

middle.block955:                                  ; preds = %vector.body963
  br i1 %cmp.n971, label %.preheader512, label %scalar.ph956.preheader

.preheader512:                                    ; preds = %scalar.ph956, %middle.block955
  %.not477.not638 = icmp sgt i64 %.5429645, 1
  br i1 %.not477.not638, label %.lr.ph641, label %.loopexit

.preheader512.thread:                             ; preds = %357
  %.not477.not638772 = icmp ugt i64 %.5429645, 1
  br i1 %.not477.not638772, label %.backedge, label %.loopexit

.lr.ph641:                                        ; preds = %.preheader512
  %364 = mul nsw i64 %.5429645, %13
  %invariant.gep643 = getelementptr double, ptr %15, i64 %364
  %365 = mul nsw i64 %.5429645, %16
  br i1 %.not476628, label %.backedge, label %.lr.ph641.split.preheader

.lr.ph641.split.preheader:                        ; preds = %.lr.ph641
  %bound1934 = icmp ugt ptr %scevgep931, %9
  %found.conflict935 = and i1 %bound0933, %bound1934
  %366 = or i1 %found.conflict935, %stride.check
  br label %.lr.ph641.split

scalar.ph956:                                     ; preds = %scalar.ph956.preheader, %scalar.ph956
  %.5438629 = phi i64 [ %369, %scalar.ph956 ], [ %.5438629.ph, %scalar.ph956.preheader ]
  %gep633 = getelementptr double, ptr %invariant.gep632, i64 %.5438629
  %367 = load double, ptr %gep633, align 8, !tbaa !9
  %368 = fmul double %.5, %367
  store double %368, ptr %gep633, align 8, !tbaa !9
  %369 = add nuw i64 %.5438629, 1
  %exitcond757.not = icmp eq i64 %.5438629, %.fr718
  br i1 %exitcond757.not, label %.preheader512, label %scalar.ph956, !llvm.loop !54

.lr.ph641.split:                                  ; preds = %.lr.ph641.split.preheader, %..loopexit511_crit_edge
  %.4420639 = phi i64 [ %405, %..loopexit511_crit_edge ], [ 1, %.lr.ph641.split.preheader ]
  %gep644 = getelementptr double, ptr %invariant.gep643, i64 %.4420639
  %370 = load double, ptr %gep644, align 8, !tbaa !9
  %371 = fcmp une double %370, 0.000000e+00
  br i1 %371, label %.lr.ph637, label %..loopexit511_crit_edge

.lr.ph637:                                        ; preds = %.lr.ph641.split
  %372 = load double, ptr %6, align 8, !tbaa !9
  %373 = fmul double %370, %372
  %374 = mul nsw i64 %.4420639, %16
  %brmerge = select i1 %min.iters.check938, i1 true, i1 %366
  br i1 %brmerge, label %scalar.ph937.preheader, label %vector.ph939

vector.ph939:                                     ; preds = %.lr.ph637
  %broadcast.splatinsert951 = insertelement <2 x double> poison, double %373, i64 0
  %broadcast.splat952 = shufflevector <2 x double> %broadcast.splatinsert951, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body944

vector.body944:                                   ; preds = %vector.body944, %vector.ph939
  %index945 = phi i64 [ 0, %vector.ph939 ], [ %index.next953, %vector.body944 ]
  %offset.idx946 = or disjoint i64 %index945, 1
  %375 = getelementptr double, ptr %18, i64 %offset.idx946
  %376 = getelementptr double, ptr %375, i64 %374
  %377 = getelementptr i8, ptr %376, i64 16
  %wide.load947 = load <2 x double>, ptr %376, align 8, !tbaa !9, !alias.scope !55
  %wide.load948 = load <2 x double>, ptr %377, align 8, !tbaa !9, !alias.scope !55
  %378 = getelementptr double, ptr %375, i64 %365
  %379 = getelementptr i8, ptr %378, i64 16
  %wide.load949 = load <2 x double>, ptr %378, align 8, !tbaa !9, !alias.scope !58, !noalias !55
  %wide.load950 = load <2 x double>, ptr %379, align 8, !tbaa !9, !alias.scope !58, !noalias !55
  %380 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat952, <2 x double> %wide.load947, <2 x double> %wide.load949)
  %381 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat952, <2 x double> %wide.load948, <2 x double> %wide.load950)
  store <2 x double> %380, ptr %378, align 8, !tbaa !9, !alias.scope !58, !noalias !55
  store <2 x double> %381, ptr %379, align 8, !tbaa !9, !alias.scope !58, !noalias !55
  %index.next953 = add nuw i64 %index945, 4
  %382 = icmp eq i64 %index.next953, %n.vec941
  br i1 %382, label %middle.block936, label %vector.body944, !llvm.loop !60

middle.block936:                                  ; preds = %vector.body944
  br i1 %cmp.n954, label %..loopexit511_crit_edge, label %scalar.ph937.preheader

scalar.ph937.preheader:                           ; preds = %.lr.ph637, %middle.block936
  %.6439635.ph = phi i64 [ 1, %.lr.ph637 ], [ %ind.end942, %middle.block936 ]
  br i1 %lcmp.mod1142.not, label %scalar.ph937.prol.loopexit, label %scalar.ph937.prol

scalar.ph937.prol:                                ; preds = %scalar.ph937.preheader
  %383 = getelementptr double, ptr %18, i64 %.6439635.ph
  %384 = getelementptr double, ptr %383, i64 %374
  %385 = load double, ptr %384, align 8, !tbaa !9
  %386 = getelementptr double, ptr %383, i64 %365
  %387 = load double, ptr %386, align 8, !tbaa !9
  %388 = tail call double @llvm.fmuladd.f64(double %373, double %385, double %387)
  store double %388, ptr %386, align 8, !tbaa !9
  %389 = add nuw i64 %.6439635.ph, 1
  br label %scalar.ph937.prol.loopexit

scalar.ph937.prol.loopexit:                       ; preds = %scalar.ph937.prol, %scalar.ph937.preheader
  %.6439635.unr = phi i64 [ %.6439635.ph, %scalar.ph937.preheader ], [ %389, %scalar.ph937.prol ]
  %390 = icmp eq i64 %.fr718, %.6439635.ph
  br i1 %390, label %..loopexit511_crit_edge, label %scalar.ph937

scalar.ph937:                                     ; preds = %scalar.ph937.prol.loopexit, %scalar.ph937
  %.6439635 = phi i64 [ %404, %scalar.ph937 ], [ %.6439635.unr, %scalar.ph937.prol.loopexit ]
  %391 = getelementptr double, ptr %18, i64 %.6439635
  %392 = getelementptr double, ptr %391, i64 %374
  %393 = load double, ptr %392, align 8, !tbaa !9
  %394 = getelementptr double, ptr %391, i64 %365
  %395 = load double, ptr %394, align 8, !tbaa !9
  %396 = tail call double @llvm.fmuladd.f64(double %373, double %393, double %395)
  store double %396, ptr %394, align 8, !tbaa !9
  %397 = add nuw i64 %.6439635, 1
  %398 = getelementptr double, ptr %18, i64 %397
  %399 = getelementptr double, ptr %398, i64 %374
  %400 = load double, ptr %399, align 8, !tbaa !9
  %401 = getelementptr double, ptr %398, i64 %365
  %402 = load double, ptr %401, align 8, !tbaa !9
  %403 = tail call double @llvm.fmuladd.f64(double %373, double %400, double %402)
  store double %403, ptr %401, align 8, !tbaa !9
  %404 = add nuw i64 %.6439635, 2
  %exitcond758.not.1 = icmp eq i64 %397, %.fr718
  br i1 %exitcond758.not.1, label %..loopexit511_crit_edge, label %scalar.ph937, !llvm.loop !61

..loopexit511_crit_edge:                          ; preds = %scalar.ph937.prol.loopexit, %scalar.ph937, %middle.block936, %.lr.ph641.split
  %405 = add nuw nsw i64 %.4420639, 1
  %.not477.not = icmp slt i64 %405, %.5429645
  br i1 %.not477.not, label %.lr.ph641.split, label %.backedge, !llvm.loop !62

.backedge:                                        ; preds = %..loopexit511_crit_edge, %.lr.ph641, %.preheader512.thread
  %406 = add nsw i64 %.5429645, -1
  %indvar.next929 = add i64 %indvar928, 1
  br label %349, !llvm.loop !63

407:                                              ; preds = %331
  %.not470667 = icmp slt i64 %79, 1
  br i1 %.not470667, label %.loopexit, label %.lr.ph670

.lr.ph670:                                        ; preds = %407
  %.not471 = icmp eq i64 %.fr, 0
  %408 = add i64 %13, 1
  %409 = load i64, ptr %4, align 8, !tbaa !5
  %.fr719 = freeze i64 %409
  %.not472649 = icmp slt i64 %.fr719, 1
  %410 = shl i64 %.fr719, 3
  %scevgep974 = getelementptr i8, ptr %9, i64 %410
  %411 = shl i64 %16, 3
  %412 = shl i64 %79, 3
  %413 = add i64 %412, -8
  %414 = mul i64 %16, %413
  %415 = getelementptr i8, ptr %9, i64 %414
  %scevgep977 = getelementptr i8, ptr %415, i64 %410
  %min.iters.check1003 = icmp ult i64 %.fr719, 4
  %n.vec1006 = and i64 %.fr719, 9223372036854775804
  %ind.end1007 = or disjoint i64 %n.vec1006, 1
  %cmp.n1017 = icmp eq i64 %.fr719, %n.vec1006
  %min.iters.check984 = icmp ult i64 %.fr719, 4
  %stride.check981 = icmp slt i64 %411, 0
  %n.vec987 = and i64 %.fr719, 9223372036854775804
  %ind.end988 = or disjoint i64 %n.vec987, 1
  %cmp.n1000 = icmp eq i64 %.fr719, %n.vec987
  %xtraiter1143 = and i64 %.fr719, 1
  %lcmp.mod1144.not = icmp eq i64 %xtraiter1143, 0
  br label %417

.loopexit509:                                     ; preds = %..loopexit508_crit_edge, %._crit_edge653.thread, %.lr.ph664, %._crit_edge653
  %416 = phi i64 [ %434, %._crit_edge653 ], [ %434, %.lr.ph664 ], [ %435, %._crit_edge653.thread ], [ %434, %..loopexit508_crit_edge ]
  %exitcond761.not = icmp eq i64 %.6430668, %79
  br i1 %exitcond761.not, label %.loopexit, label %417, !llvm.loop !64

417:                                              ; preds = %.lr.ph670, %.loopexit509
  %.6430668 = phi i64 [ 1, %.lr.ph670 ], [ %416, %.loopexit509 ]
  %418 = load double, ptr %6, align 8, !tbaa !9
  br i1 %.not471, label %424, label %419

419:                                              ; preds = %417
  %420 = mul i64 %.6430668, %408
  %421 = getelementptr inbounds double, ptr %15, i64 %420
  %422 = load double, ptr %421, align 8, !tbaa !9
  %423 = fmul double %418, %422
  br label %424

424:                                              ; preds = %419, %417
  %.6 = phi double [ %423, %419 ], [ %418, %417 ]
  br i1 %.not472649, label %._crit_edge653.thread, label %.lr.ph652

.lr.ph652:                                        ; preds = %424
  %425 = mul nsw i64 %.6430668, %16
  %invariant.gep654 = getelementptr double, ptr %18, i64 %425
  br i1 %min.iters.check1003, label %scalar.ph1002.preheader, label %vector.ph1004

vector.ph1004:                                    ; preds = %.lr.ph652
  %broadcast.splatinsert1014 = insertelement <2 x double> poison, double %.6, i64 0
  %broadcast.splat1015 = shufflevector <2 x double> %broadcast.splatinsert1014, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1009

vector.body1009:                                  ; preds = %vector.body1009, %vector.ph1004
  %index1010 = phi i64 [ 0, %vector.ph1004 ], [ %index.next1016, %vector.body1009 ]
  %offset.idx1011 = or disjoint i64 %index1010, 1
  %426 = getelementptr double, ptr %invariant.gep654, i64 %offset.idx1011
  %427 = getelementptr i8, ptr %426, i64 16
  %wide.load1012 = load <2 x double>, ptr %426, align 8, !tbaa !9
  %wide.load1013 = load <2 x double>, ptr %427, align 8, !tbaa !9
  %428 = fmul <2 x double> %broadcast.splat1015, %wide.load1012
  %429 = fmul <2 x double> %broadcast.splat1015, %wide.load1013
  store <2 x double> %428, ptr %426, align 8, !tbaa !9
  store <2 x double> %429, ptr %427, align 8, !tbaa !9
  %index.next1016 = add nuw i64 %index1010, 4
  %430 = icmp eq i64 %index.next1016, %n.vec1006
  br i1 %430, label %middle.block1001, label %vector.body1009, !llvm.loop !65

middle.block1001:                                 ; preds = %vector.body1009
  br i1 %cmp.n1017, label %._crit_edge653, label %scalar.ph1002.preheader

scalar.ph1002.preheader:                          ; preds = %middle.block1001, %.lr.ph652
  %.7440650.ph = phi i64 [ 1, %.lr.ph652 ], [ %ind.end1007, %middle.block1001 ]
  br label %scalar.ph1002

scalar.ph1002:                                    ; preds = %scalar.ph1002.preheader, %scalar.ph1002
  %.7440650 = phi i64 [ %433, %scalar.ph1002 ], [ %.7440650.ph, %scalar.ph1002.preheader ]
  %gep655 = getelementptr double, ptr %invariant.gep654, i64 %.7440650
  %431 = load double, ptr %gep655, align 8, !tbaa !9
  %432 = fmul double %.6, %431
  store double %432, ptr %gep655, align 8, !tbaa !9
  %433 = add nuw i64 %.7440650, 1
  %exitcond759.not = icmp eq i64 %.7440650, %.fr719
  br i1 %exitcond759.not, label %._crit_edge653, label %scalar.ph1002, !llvm.loop !66

._crit_edge653:                                   ; preds = %scalar.ph1002, %middle.block1001
  %434 = add nuw i64 %.6430668, 1
  %.not473660.not = icmp slt i64 %.6430668, %79
  br i1 %.not473660.not, label %.lr.ph664, label %.loopexit509

._crit_edge653.thread:                            ; preds = %424
  %435 = add nuw i64 %.6430668, 1
  br label %.loopexit509

.lr.ph664:                                        ; preds = %._crit_edge653
  %436 = mul nsw i64 %.6430668, %13
  %invariant.gep665 = getelementptr double, ptr %15, i64 %436
  %437 = mul nsw i64 %.6430668, %16
  br i1 %.not472649, label %.loopexit509, label %.lr.ph664.split.preheader

.lr.ph664.split.preheader:                        ; preds = %.lr.ph664
  %438 = shl i64 %.6430668, 3
  %439 = add i64 %438, -8
  %440 = mul i64 %16, %439
  %scevgep973 = getelementptr i8, ptr %9, i64 %440
  %scevgep975 = getelementptr i8, ptr %scevgep974, i64 %440
  %441 = mul i64 %411, %.6430668
  %scevgep976 = getelementptr i8, ptr %9, i64 %441
  %bound0978 = icmp ult ptr %scevgep973, %scevgep977
  %bound1979 = icmp ult ptr %scevgep976, %scevgep975
  %found.conflict980 = and i1 %bound0978, %bound1979
  %442 = or i1 %found.conflict980, %stride.check981
  br label %.lr.ph664.split

.lr.ph664.split:                                  ; preds = %.lr.ph664.split.preheader, %..loopexit508_crit_edge
  %.5421661 = phi i64 [ %478, %..loopexit508_crit_edge ], [ %434, %.lr.ph664.split.preheader ]
  %gep666 = getelementptr double, ptr %invariant.gep665, i64 %.5421661
  %443 = load double, ptr %gep666, align 8, !tbaa !9
  %444 = fcmp une double %443, 0.000000e+00
  br i1 %444, label %.lr.ph659, label %..loopexit508_crit_edge

.lr.ph659:                                        ; preds = %.lr.ph664.split
  %445 = load double, ptr %6, align 8, !tbaa !9
  %446 = fmul double %443, %445
  %447 = mul nsw i64 %.5421661, %16
  %brmerge1161 = select i1 %min.iters.check984, i1 true, i1 %442
  br i1 %brmerge1161, label %scalar.ph983.preheader, label %vector.ph985

vector.ph985:                                     ; preds = %.lr.ph659
  %broadcast.splatinsert997 = insertelement <2 x double> poison, double %446, i64 0
  %broadcast.splat998 = shufflevector <2 x double> %broadcast.splatinsert997, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body990

vector.body990:                                   ; preds = %vector.body990, %vector.ph985
  %index991 = phi i64 [ 0, %vector.ph985 ], [ %index.next999, %vector.body990 ]
  %offset.idx992 = or disjoint i64 %index991, 1
  %448 = getelementptr double, ptr %18, i64 %offset.idx992
  %449 = getelementptr double, ptr %448, i64 %447
  %450 = getelementptr i8, ptr %449, i64 16
  %wide.load993 = load <2 x double>, ptr %449, align 8, !tbaa !9, !alias.scope !67
  %wide.load994 = load <2 x double>, ptr %450, align 8, !tbaa !9, !alias.scope !67
  %451 = getelementptr double, ptr %448, i64 %437
  %452 = getelementptr i8, ptr %451, i64 16
  %wide.load995 = load <2 x double>, ptr %451, align 8, !tbaa !9, !alias.scope !70, !noalias !67
  %wide.load996 = load <2 x double>, ptr %452, align 8, !tbaa !9, !alias.scope !70, !noalias !67
  %453 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat998, <2 x double> %wide.load993, <2 x double> %wide.load995)
  %454 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat998, <2 x double> %wide.load994, <2 x double> %wide.load996)
  store <2 x double> %453, ptr %451, align 8, !tbaa !9, !alias.scope !70, !noalias !67
  store <2 x double> %454, ptr %452, align 8, !tbaa !9, !alias.scope !70, !noalias !67
  %index.next999 = add nuw i64 %index991, 4
  %455 = icmp eq i64 %index.next999, %n.vec987
  br i1 %455, label %middle.block982, label %vector.body990, !llvm.loop !72

middle.block982:                                  ; preds = %vector.body990
  br i1 %cmp.n1000, label %..loopexit508_crit_edge, label %scalar.ph983.preheader

scalar.ph983.preheader:                           ; preds = %.lr.ph659, %middle.block982
  %.8441657.ph = phi i64 [ 1, %.lr.ph659 ], [ %ind.end988, %middle.block982 ]
  br i1 %lcmp.mod1144.not, label %scalar.ph983.prol.loopexit, label %scalar.ph983.prol

scalar.ph983.prol:                                ; preds = %scalar.ph983.preheader
  %456 = getelementptr double, ptr %18, i64 %.8441657.ph
  %457 = getelementptr double, ptr %456, i64 %447
  %458 = load double, ptr %457, align 8, !tbaa !9
  %459 = getelementptr double, ptr %456, i64 %437
  %460 = load double, ptr %459, align 8, !tbaa !9
  %461 = tail call double @llvm.fmuladd.f64(double %446, double %458, double %460)
  store double %461, ptr %459, align 8, !tbaa !9
  %462 = add nuw i64 %.8441657.ph, 1
  br label %scalar.ph983.prol.loopexit

scalar.ph983.prol.loopexit:                       ; preds = %scalar.ph983.prol, %scalar.ph983.preheader
  %.8441657.unr = phi i64 [ %.8441657.ph, %scalar.ph983.preheader ], [ %462, %scalar.ph983.prol ]
  %463 = icmp eq i64 %.fr719, %.8441657.ph
  br i1 %463, label %..loopexit508_crit_edge, label %scalar.ph983

scalar.ph983:                                     ; preds = %scalar.ph983.prol.loopexit, %scalar.ph983
  %.8441657 = phi i64 [ %477, %scalar.ph983 ], [ %.8441657.unr, %scalar.ph983.prol.loopexit ]
  %464 = getelementptr double, ptr %18, i64 %.8441657
  %465 = getelementptr double, ptr %464, i64 %447
  %466 = load double, ptr %465, align 8, !tbaa !9
  %467 = getelementptr double, ptr %464, i64 %437
  %468 = load double, ptr %467, align 8, !tbaa !9
  %469 = tail call double @llvm.fmuladd.f64(double %446, double %466, double %468)
  store double %469, ptr %467, align 8, !tbaa !9
  %470 = add nuw i64 %.8441657, 1
  %471 = getelementptr double, ptr %18, i64 %470
  %472 = getelementptr double, ptr %471, i64 %447
  %473 = load double, ptr %472, align 8, !tbaa !9
  %474 = getelementptr double, ptr %471, i64 %437
  %475 = load double, ptr %474, align 8, !tbaa !9
  %476 = tail call double @llvm.fmuladd.f64(double %446, double %473, double %475)
  store double %476, ptr %474, align 8, !tbaa !9
  %477 = add nuw i64 %.8441657, 2
  %exitcond760.not.1 = icmp eq i64 %470, %.fr719
  br i1 %exitcond760.not.1, label %..loopexit508_crit_edge, label %scalar.ph983, !llvm.loop !73

..loopexit508_crit_edge:                          ; preds = %scalar.ph983.prol.loopexit, %scalar.ph983, %middle.block982, %.lr.ph664.split
  %478 = add nuw nsw i64 %.5421661, 1
  %.not473.not = icmp slt i64 %.5421661, %79
  br i1 %.not473.not, label %.lr.ph664.split, label %.loopexit509, !llvm.loop !74

479:                                              ; preds = %330
  br i1 %.not450, label %548, label %480

480:                                              ; preds = %479
  %.not464688 = icmp slt i64 %79, 1
  br i1 %.not464688, label %.loopexit, label %.preheader506.lr.ph

.preheader506.lr.ph:                              ; preds = %480
  %.not466 = icmp eq i64 %.fr, 0
  %481 = add i64 %13, 1
  %482 = shl i64 %16, 3
  %483 = shl i64 %16, 3
  br label %.preheader506

.preheader506:                                    ; preds = %.preheader506.lr.ph, %.loopexit505
  %indvar1040 = phi i64 [ 0, %.preheader506.lr.ph ], [ %indvar.next1041, %.loopexit505 ]
  %.6422689 = phi i64 [ 1, %.preheader506.lr.ph ], [ %547, %.loopexit505 ]
  %484 = mul i64 %483, %indvar1040
  %scevgep1042 = getelementptr i8, ptr %9, i64 %484
  %.not465.not675 = icmp ugt i64 %.6422689, 1
  br i1 %.not465.not675, label %.lr.ph678, label %._crit_edge679

.lr.ph678:                                        ; preds = %.preheader506
  %485 = mul nsw i64 %.6422689, %13
  %invariant.gep680 = getelementptr double, ptr %15, i64 %485
  %486 = mul nsw i64 %.6422689, %16
  br label %487

487:                                              ; preds = %.lr.ph678, %.loopexit504
  %indvar1036 = phi i64 [ 0, %.lr.ph678 ], [ %indvar.next1037, %.loopexit504 ]
  %.7431676 = phi i64 [ 1, %.lr.ph678 ], [ %527, %.loopexit504 ]
  %488 = mul i64 %482, %indvar1036
  %scevgep1038 = getelementptr i8, ptr %9, i64 %488
  %gep681 = getelementptr double, ptr %invariant.gep680, i64 %.7431676
  %489 = load double, ptr %gep681, align 8, !tbaa !9
  %490 = fcmp une double %489, 0.000000e+00
  br i1 %490, label %491, label %.loopexit504

491:                                              ; preds = %487
  %492 = load double, ptr %6, align 8, !tbaa !9
  %493 = fmul double %489, %492
  %494 = load i64, ptr %4, align 8, !tbaa !5
  %.not468671 = icmp slt i64 %494, 1
  br i1 %.not468671, label %.loopexit504, label %.lr.ph674

.lr.ph674:                                        ; preds = %491
  %495 = mul nsw i64 %.7431676, %16
  %min.iters.check1049 = icmp ult i64 %494, 4
  br i1 %min.iters.check1049, label %scalar.ph1048.preheader, label %vector.memcheck1035

vector.memcheck1035:                              ; preds = %.lr.ph674
  %496 = shl i64 %494, 3
  %scevgep1039 = getelementptr i8, ptr %scevgep1038, i64 %496
  %scevgep1043 = getelementptr i8, ptr %scevgep1042, i64 %496
  %bound01044 = icmp ult ptr %scevgep1038, %scevgep1043
  %bound11045 = icmp ult ptr %scevgep1042, %scevgep1039
  %found.conflict1046 = and i1 %bound01044, %bound11045
  br i1 %found.conflict1046, label %scalar.ph1048.preheader, label %vector.ph1050

vector.ph1050:                                    ; preds = %vector.memcheck1035
  %n.vec1052 = and i64 %494, 9223372036854775804
  %ind.end1053 = or disjoint i64 %n.vec1052, 1
  %broadcast.splatinsert1062 = insertelement <2 x double> poison, double %493, i64 0
  %broadcast.splat1063 = shufflevector <2 x double> %broadcast.splatinsert1062, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1055

vector.body1055:                                  ; preds = %vector.body1055, %vector.ph1050
  %index1056 = phi i64 [ 0, %vector.ph1050 ], [ %index.next1064, %vector.body1055 ]
  %offset.idx1057 = or disjoint i64 %index1056, 1
  %497 = getelementptr double, ptr %18, i64 %offset.idx1057
  %498 = getelementptr double, ptr %497, i64 %486
  %499 = getelementptr i8, ptr %498, i64 16
  %wide.load1058 = load <2 x double>, ptr %498, align 8, !tbaa !9, !alias.scope !75
  %wide.load1059 = load <2 x double>, ptr %499, align 8, !tbaa !9, !alias.scope !75
  %500 = getelementptr double, ptr %497, i64 %495
  %501 = getelementptr i8, ptr %500, i64 16
  %wide.load1060 = load <2 x double>, ptr %500, align 8, !tbaa !9, !alias.scope !78, !noalias !75
  %wide.load1061 = load <2 x double>, ptr %501, align 8, !tbaa !9, !alias.scope !78, !noalias !75
  %502 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1063, <2 x double> %wide.load1058, <2 x double> %wide.load1060)
  %503 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1063, <2 x double> %wide.load1059, <2 x double> %wide.load1061)
  store <2 x double> %502, ptr %500, align 8, !tbaa !9, !alias.scope !78, !noalias !75
  store <2 x double> %503, ptr %501, align 8, !tbaa !9, !alias.scope !78, !noalias !75
  %index.next1064 = add nuw i64 %index1056, 4
  %504 = icmp eq i64 %index.next1064, %n.vec1052
  br i1 %504, label %middle.block1047, label %vector.body1055, !llvm.loop !80

middle.block1047:                                 ; preds = %vector.body1055
  %cmp.n1065 = icmp eq i64 %494, %n.vec1052
  br i1 %cmp.n1065, label %.loopexit504, label %scalar.ph1048.preheader

scalar.ph1048.preheader:                          ; preds = %middle.block1047, %vector.memcheck1035, %.lr.ph674
  %.9672.ph = phi i64 [ 1, %vector.memcheck1035 ], [ 1, %.lr.ph674 ], [ %ind.end1053, %middle.block1047 ]
  %xtraiter1145 = and i64 %494, 1
  %lcmp.mod1146.not = icmp eq i64 %xtraiter1145, 0
  br i1 %lcmp.mod1146.not, label %scalar.ph1048.prol.loopexit, label %scalar.ph1048.prol

scalar.ph1048.prol:                               ; preds = %scalar.ph1048.preheader
  %505 = getelementptr double, ptr %18, i64 %.9672.ph
  %506 = getelementptr double, ptr %505, i64 %486
  %507 = load double, ptr %506, align 8, !tbaa !9
  %508 = getelementptr double, ptr %505, i64 %495
  %509 = load double, ptr %508, align 8, !tbaa !9
  %510 = tail call double @llvm.fmuladd.f64(double %493, double %507, double %509)
  store double %510, ptr %508, align 8, !tbaa !9
  %511 = add nuw i64 %.9672.ph, 1
  br label %scalar.ph1048.prol.loopexit

scalar.ph1048.prol.loopexit:                      ; preds = %scalar.ph1048.prol, %scalar.ph1048.preheader
  %.9672.unr = phi i64 [ %.9672.ph, %scalar.ph1048.preheader ], [ %511, %scalar.ph1048.prol ]
  %512 = icmp eq i64 %494, %.9672.ph
  br i1 %512, label %.loopexit504, label %scalar.ph1048

scalar.ph1048:                                    ; preds = %scalar.ph1048.prol.loopexit, %scalar.ph1048
  %.9672 = phi i64 [ %526, %scalar.ph1048 ], [ %.9672.unr, %scalar.ph1048.prol.loopexit ]
  %513 = getelementptr double, ptr %18, i64 %.9672
  %514 = getelementptr double, ptr %513, i64 %486
  %515 = load double, ptr %514, align 8, !tbaa !9
  %516 = getelementptr double, ptr %513, i64 %495
  %517 = load double, ptr %516, align 8, !tbaa !9
  %518 = tail call double @llvm.fmuladd.f64(double %493, double %515, double %517)
  store double %518, ptr %516, align 8, !tbaa !9
  %519 = add nuw i64 %.9672, 1
  %520 = getelementptr double, ptr %18, i64 %519
  %521 = getelementptr double, ptr %520, i64 %486
  %522 = load double, ptr %521, align 8, !tbaa !9
  %523 = getelementptr double, ptr %520, i64 %495
  %524 = load double, ptr %523, align 8, !tbaa !9
  %525 = tail call double @llvm.fmuladd.f64(double %493, double %522, double %524)
  store double %525, ptr %523, align 8, !tbaa !9
  %526 = add nuw i64 %.9672, 2
  %exitcond762.not.1 = icmp eq i64 %519, %494
  br i1 %exitcond762.not.1, label %.loopexit504, label %scalar.ph1048, !llvm.loop !81

.loopexit504:                                     ; preds = %scalar.ph1048.prol.loopexit, %scalar.ph1048, %middle.block1047, %491, %487
  %527 = add nuw nsw i64 %.7431676, 1
  %exitcond763.not = icmp eq i64 %527, %.6422689
  %indvar.next1037 = add i64 %indvar1036, 1
  br i1 %exitcond763.not, label %._crit_edge679, label %487, !llvm.loop !82

._crit_edge679:                                   ; preds = %.loopexit504, %.preheader506
  %528 = load double, ptr %6, align 8, !tbaa !9
  br i1 %.not466, label %534, label %529

529:                                              ; preds = %._crit_edge679
  %530 = mul i64 %.6422689, %481
  %531 = getelementptr inbounds double, ptr %15, i64 %530
  %532 = load double, ptr %531, align 8, !tbaa !9
  %533 = fmul double %528, %532
  br label %534

534:                                              ; preds = %529, %._crit_edge679
  %.7 = phi double [ %533, %529 ], [ %528, %._crit_edge679 ]
  %535 = fcmp une double %.7, 1.000000e+00
  br i1 %535, label %536, label %.loopexit505

536:                                              ; preds = %534
  %537 = load i64, ptr %4, align 8, !tbaa !5
  %.not467682 = icmp slt i64 %537, 1
  br i1 %.not467682, label %.loopexit505, label %.lr.ph685

.lr.ph685:                                        ; preds = %536
  %538 = mul nsw i64 %.6422689, %16
  %invariant.gep686 = getelementptr double, ptr %18, i64 %538
  %min.iters.check1020 = icmp ult i64 %537, 4
  br i1 %min.iters.check1020, label %scalar.ph1019.preheader, label %vector.ph1021

vector.ph1021:                                    ; preds = %.lr.ph685
  %n.vec1023 = and i64 %537, 9223372036854775804
  %ind.end1024 = or disjoint i64 %n.vec1023, 1
  %broadcast.splatinsert1031 = insertelement <2 x double> poison, double %.7, i64 0
  %broadcast.splat1032 = shufflevector <2 x double> %broadcast.splatinsert1031, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1026

vector.body1026:                                  ; preds = %vector.body1026, %vector.ph1021
  %index1027 = phi i64 [ 0, %vector.ph1021 ], [ %index.next1033, %vector.body1026 ]
  %offset.idx1028 = or disjoint i64 %index1027, 1
  %539 = getelementptr double, ptr %invariant.gep686, i64 %offset.idx1028
  %540 = getelementptr i8, ptr %539, i64 16
  %wide.load1029 = load <2 x double>, ptr %539, align 8, !tbaa !9
  %wide.load1030 = load <2 x double>, ptr %540, align 8, !tbaa !9
  %541 = fmul <2 x double> %broadcast.splat1032, %wide.load1029
  %542 = fmul <2 x double> %broadcast.splat1032, %wide.load1030
  store <2 x double> %541, ptr %539, align 8, !tbaa !9
  store <2 x double> %542, ptr %540, align 8, !tbaa !9
  %index.next1033 = add nuw i64 %index1027, 4
  %543 = icmp eq i64 %index.next1033, %n.vec1023
  br i1 %543, label %middle.block1018, label %vector.body1026, !llvm.loop !83

middle.block1018:                                 ; preds = %vector.body1026
  %cmp.n1034 = icmp eq i64 %537, %n.vec1023
  br i1 %cmp.n1034, label %.loopexit505, label %scalar.ph1019.preheader

scalar.ph1019.preheader:                          ; preds = %middle.block1018, %.lr.ph685
  %.10683.ph = phi i64 [ 1, %.lr.ph685 ], [ %ind.end1024, %middle.block1018 ]
  br label %scalar.ph1019

scalar.ph1019:                                    ; preds = %scalar.ph1019.preheader, %scalar.ph1019
  %.10683 = phi i64 [ %546, %scalar.ph1019 ], [ %.10683.ph, %scalar.ph1019.preheader ]
  %gep687 = getelementptr double, ptr %invariant.gep686, i64 %.10683
  %544 = load double, ptr %gep687, align 8, !tbaa !9
  %545 = fmul double %.7, %544
  store double %545, ptr %gep687, align 8, !tbaa !9
  %546 = add nuw i64 %.10683, 1
  %exitcond764.not = icmp eq i64 %.10683, %537
  br i1 %exitcond764.not, label %.loopexit505, label %scalar.ph1019, !llvm.loop !84

.loopexit505:                                     ; preds = %scalar.ph1019, %middle.block1018, %536, %534
  %547 = add nuw i64 %.6422689, 1
  %exitcond765.not = icmp eq i64 %.6422689, %79
  %indvar.next1041 = add i64 %indvar1040, 1
  br i1 %exitcond765.not, label %.loopexit, label %.preheader506, !llvm.loop !85

548:                                              ; preds = %479
  %549 = icmp sgt i64 %79, 0
  br i1 %549, label %.preheader502.lr.ph, label %.loopexit

.preheader502.lr.ph:                              ; preds = %548
  %.not461 = icmp eq i64 %.fr, 0
  %550 = add i64 %13, 1
  %551 = mul i64 %16, %79
  %552 = shl i64 %551, 3
  %553 = mul i64 %16, -8
  %554 = shl i64 %16, 3
  %555 = shl i64 %79, 3
  %556 = add i64 %555, -8
  %557 = mul i64 %16, %556
  %558 = getelementptr i8, ptr %9, i64 %557
  %559 = getelementptr i8, ptr %9, i64 %552
  br label %.preheader502

.preheader502:                                    ; preds = %.preheader502.lr.ph, %.loopexit501
  %indvar1084 = phi i64 [ 0, %.preheader502.lr.ph ], [ %indvar.next1085, %.loopexit501 ]
  %.7423708 = phi i64 [ %79, %.preheader502.lr.ph ], [ %623, %.loopexit501 ]
  %560 = mul i64 %553, %indvar1084
  %scevgep1090 = getelementptr i8, ptr %558, i64 %560
  %.not460.not696 = icmp slt i64 %.7423708, %79
  br i1 %.not460.not696, label %.lr.ph698, label %._crit_edge699

.lr.ph698:                                        ; preds = %.preheader502
  %561 = mul nsw i64 %.7423708, %13
  %invariant.gep700 = getelementptr double, ptr %15, i64 %561
  %562 = mul nsw i64 %.7423708, %16
  %563 = getelementptr i8, ptr %559, i64 %560
  br label %564

564:                                              ; preds = %.lr.ph698, %.loopexit500
  %indvar1086 = phi i64 [ 0, %.lr.ph698 ], [ %indvar.next1087, %.loopexit500 ]
  %.8432697.in = phi i64 [ %.7423708, %.lr.ph698 ], [ %.8432697, %.loopexit500 ]
  %565 = mul i64 %554, %indvar1086
  %scevgep1088 = getelementptr i8, ptr %563, i64 %565
  %.8432697 = add nuw nsw i64 %.8432697.in, 1
  %gep701 = getelementptr double, ptr %invariant.gep700, i64 %.8432697
  %566 = load double, ptr %gep701, align 8, !tbaa !9
  %567 = fcmp une double %566, 0.000000e+00
  br i1 %567, label %568, label %.loopexit500

568:                                              ; preds = %564
  %569 = load double, ptr %6, align 8, !tbaa !9
  %570 = fmul double %566, %569
  %571 = load i64, ptr %4, align 8, !tbaa !5
  %.not463691 = icmp slt i64 %571, 1
  br i1 %.not463691, label %.loopexit500, label %.lr.ph694

.lr.ph694:                                        ; preds = %568
  %572 = mul nsw i64 %.8432697, %16
  %min.iters.check1097 = icmp ult i64 %571, 4
  br i1 %min.iters.check1097, label %scalar.ph1096.preheader, label %vector.memcheck1083

vector.memcheck1083:                              ; preds = %.lr.ph694
  %573 = shl i64 %571, 3
  %scevgep1089 = getelementptr i8, ptr %scevgep1088, i64 %573
  %scevgep1091 = getelementptr i8, ptr %scevgep1090, i64 %573
  %bound01092 = icmp ult ptr %scevgep1088, %scevgep1091
  %bound11093 = icmp ult ptr %scevgep1090, %scevgep1089
  %found.conflict1094 = and i1 %bound01092, %bound11093
  br i1 %found.conflict1094, label %scalar.ph1096.preheader, label %vector.ph1098

vector.ph1098:                                    ; preds = %vector.memcheck1083
  %n.vec1100 = and i64 %571, 9223372036854775804
  %ind.end1101 = or disjoint i64 %n.vec1100, 1
  %broadcast.splatinsert1110 = insertelement <2 x double> poison, double %570, i64 0
  %broadcast.splat1111 = shufflevector <2 x double> %broadcast.splatinsert1110, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1103

vector.body1103:                                  ; preds = %vector.body1103, %vector.ph1098
  %index1104 = phi i64 [ 0, %vector.ph1098 ], [ %index.next1112, %vector.body1103 ]
  %offset.idx1105 = or disjoint i64 %index1104, 1
  %574 = getelementptr double, ptr %18, i64 %offset.idx1105
  %575 = getelementptr double, ptr %574, i64 %562
  %576 = getelementptr i8, ptr %575, i64 16
  %wide.load1106 = load <2 x double>, ptr %575, align 8, !tbaa !9, !alias.scope !86
  %wide.load1107 = load <2 x double>, ptr %576, align 8, !tbaa !9, !alias.scope !86
  %577 = getelementptr double, ptr %574, i64 %572
  %578 = getelementptr i8, ptr %577, i64 16
  %wide.load1108 = load <2 x double>, ptr %577, align 8, !tbaa !9, !alias.scope !89, !noalias !86
  %wide.load1109 = load <2 x double>, ptr %578, align 8, !tbaa !9, !alias.scope !89, !noalias !86
  %579 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1111, <2 x double> %wide.load1106, <2 x double> %wide.load1108)
  %580 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1111, <2 x double> %wide.load1107, <2 x double> %wide.load1109)
  store <2 x double> %579, ptr %577, align 8, !tbaa !9, !alias.scope !89, !noalias !86
  store <2 x double> %580, ptr %578, align 8, !tbaa !9, !alias.scope !89, !noalias !86
  %index.next1112 = add nuw i64 %index1104, 4
  %581 = icmp eq i64 %index.next1112, %n.vec1100
  br i1 %581, label %middle.block1095, label %vector.body1103, !llvm.loop !91

middle.block1095:                                 ; preds = %vector.body1103
  %cmp.n1113 = icmp eq i64 %571, %n.vec1100
  br i1 %cmp.n1113, label %.loopexit500, label %scalar.ph1096.preheader

scalar.ph1096.preheader:                          ; preds = %middle.block1095, %vector.memcheck1083, %.lr.ph694
  %.11692.ph = phi i64 [ 1, %vector.memcheck1083 ], [ 1, %.lr.ph694 ], [ %ind.end1101, %middle.block1095 ]
  %xtraiter1147 = and i64 %571, 1
  %lcmp.mod1148.not = icmp eq i64 %xtraiter1147, 0
  br i1 %lcmp.mod1148.not, label %scalar.ph1096.prol.loopexit, label %scalar.ph1096.prol

scalar.ph1096.prol:                               ; preds = %scalar.ph1096.preheader
  %582 = getelementptr double, ptr %18, i64 %.11692.ph
  %583 = getelementptr double, ptr %582, i64 %562
  %584 = load double, ptr %583, align 8, !tbaa !9
  %585 = getelementptr double, ptr %582, i64 %572
  %586 = load double, ptr %585, align 8, !tbaa !9
  %587 = tail call double @llvm.fmuladd.f64(double %570, double %584, double %586)
  store double %587, ptr %585, align 8, !tbaa !9
  %588 = add nuw i64 %.11692.ph, 1
  br label %scalar.ph1096.prol.loopexit

scalar.ph1096.prol.loopexit:                      ; preds = %scalar.ph1096.prol, %scalar.ph1096.preheader
  %.11692.unr = phi i64 [ %.11692.ph, %scalar.ph1096.preheader ], [ %588, %scalar.ph1096.prol ]
  %589 = icmp eq i64 %571, %.11692.ph
  br i1 %589, label %.loopexit500, label %scalar.ph1096

scalar.ph1096:                                    ; preds = %scalar.ph1096.prol.loopexit, %scalar.ph1096
  %.11692 = phi i64 [ %603, %scalar.ph1096 ], [ %.11692.unr, %scalar.ph1096.prol.loopexit ]
  %590 = getelementptr double, ptr %18, i64 %.11692
  %591 = getelementptr double, ptr %590, i64 %562
  %592 = load double, ptr %591, align 8, !tbaa !9
  %593 = getelementptr double, ptr %590, i64 %572
  %594 = load double, ptr %593, align 8, !tbaa !9
  %595 = tail call double @llvm.fmuladd.f64(double %570, double %592, double %594)
  store double %595, ptr %593, align 8, !tbaa !9
  %596 = add nuw i64 %.11692, 1
  %597 = getelementptr double, ptr %18, i64 %596
  %598 = getelementptr double, ptr %597, i64 %562
  %599 = load double, ptr %598, align 8, !tbaa !9
  %600 = getelementptr double, ptr %597, i64 %572
  %601 = load double, ptr %600, align 8, !tbaa !9
  %602 = tail call double @llvm.fmuladd.f64(double %570, double %599, double %601)
  store double %602, ptr %600, align 8, !tbaa !9
  %603 = add nuw i64 %.11692, 2
  %exitcond766.not.1 = icmp eq i64 %596, %571
  br i1 %exitcond766.not.1, label %.loopexit500, label %scalar.ph1096, !llvm.loop !92

.loopexit500:                                     ; preds = %scalar.ph1096.prol.loopexit, %scalar.ph1096, %middle.block1095, %568, %564
  %exitcond767.not = icmp eq i64 %.8432697, %79
  %indvar.next1087 = add i64 %indvar1086, 1
  br i1 %exitcond767.not, label %._crit_edge699, label %564, !llvm.loop !93

._crit_edge699:                                   ; preds = %.loopexit500, %.preheader502
  %604 = load double, ptr %6, align 8, !tbaa !9
  br i1 %.not461, label %610, label %605

605:                                              ; preds = %._crit_edge699
  %606 = mul i64 %.7423708, %550
  %607 = getelementptr inbounds double, ptr %15, i64 %606
  %608 = load double, ptr %607, align 8, !tbaa !9
  %609 = fmul double %604, %608
  br label %610

610:                                              ; preds = %605, %._crit_edge699
  %.8 = phi double [ %609, %605 ], [ %604, %._crit_edge699 ]
  %611 = fcmp une double %.8, 1.000000e+00
  br i1 %611, label %612, label %.loopexit501

612:                                              ; preds = %610
  %613 = load i64, ptr %4, align 8, !tbaa !5
  %.not462702 = icmp slt i64 %613, 1
  br i1 %.not462702, label %.loopexit501, label %.lr.ph705

.lr.ph705:                                        ; preds = %612
  %614 = mul nsw i64 %.7423708, %16
  %invariant.gep706 = getelementptr double, ptr %18, i64 %614
  %min.iters.check1068 = icmp ult i64 %613, 4
  br i1 %min.iters.check1068, label %scalar.ph1067.preheader, label %vector.ph1069

vector.ph1069:                                    ; preds = %.lr.ph705
  %n.vec1071 = and i64 %613, 9223372036854775804
  %ind.end1072 = or disjoint i64 %n.vec1071, 1
  %broadcast.splatinsert1079 = insertelement <2 x double> poison, double %.8, i64 0
  %broadcast.splat1080 = shufflevector <2 x double> %broadcast.splatinsert1079, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1074

vector.body1074:                                  ; preds = %vector.body1074, %vector.ph1069
  %index1075 = phi i64 [ 0, %vector.ph1069 ], [ %index.next1081, %vector.body1074 ]
  %offset.idx1076 = or disjoint i64 %index1075, 1
  %615 = getelementptr double, ptr %invariant.gep706, i64 %offset.idx1076
  %616 = getelementptr i8, ptr %615, i64 16
  %wide.load1077 = load <2 x double>, ptr %615, align 8, !tbaa !9
  %wide.load1078 = load <2 x double>, ptr %616, align 8, !tbaa !9
  %617 = fmul <2 x double> %broadcast.splat1080, %wide.load1077
  %618 = fmul <2 x double> %broadcast.splat1080, %wide.load1078
  store <2 x double> %617, ptr %615, align 8, !tbaa !9
  store <2 x double> %618, ptr %616, align 8, !tbaa !9
  %index.next1081 = add nuw i64 %index1075, 4
  %619 = icmp eq i64 %index.next1081, %n.vec1071
  br i1 %619, label %middle.block1066, label %vector.body1074, !llvm.loop !94

middle.block1066:                                 ; preds = %vector.body1074
  %cmp.n1082 = icmp eq i64 %613, %n.vec1071
  br i1 %cmp.n1082, label %.loopexit501, label %scalar.ph1067.preheader

scalar.ph1067.preheader:                          ; preds = %middle.block1066, %.lr.ph705
  %.12703.ph = phi i64 [ 1, %.lr.ph705 ], [ %ind.end1072, %middle.block1066 ]
  br label %scalar.ph1067

scalar.ph1067:                                    ; preds = %scalar.ph1067.preheader, %scalar.ph1067
  %.12703 = phi i64 [ %622, %scalar.ph1067 ], [ %.12703.ph, %scalar.ph1067.preheader ]
  %gep707 = getelementptr double, ptr %invariant.gep706, i64 %.12703
  %620 = load double, ptr %gep707, align 8, !tbaa !9
  %621 = fmul double %.8, %620
  store double %621, ptr %gep707, align 8, !tbaa !9
  %622 = add nuw i64 %.12703, 1
  %exitcond768.not = icmp eq i64 %.12703, %613
  br i1 %exitcond768.not, label %.loopexit501, label %scalar.ph1067, !llvm.loop !95

.loopexit501:                                     ; preds = %scalar.ph1067, %middle.block1066, %612, %610
  %623 = add nsw i64 %.7423708, -1
  %624 = icmp sgt i64 %.7423708, 1
  %indvar.next1085 = add i64 %indvar1084, 1
  br i1 %624, label %.preheader502, label %.loopexit, !llvm.loop !96

.loopexit.loopexit.unr-lcssa:                     ; preds = %.preheader, %.preheader.preheader
  %indvar.unr = phi i64 [ 0, %.preheader.preheader ], [ %indvar.next.7, %.preheader ]
  %lcmp.mod1150.not = icmp eq i64 %xtraiter1149, 0
  br i1 %lcmp.mod1150.not, label %.loopexit, label %.preheader.epil

.preheader.epil:                                  ; preds = %.loopexit.loopexit.unr-lcssa, %.preheader.epil
  %indvar.epil = phi i64 [ %indvar.next.epil, %.preheader.epil ], [ %indvar.unr, %.loopexit.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.preheader.epil ], [ 0, %.loopexit.loopexit.unr-lcssa ]
  %625 = mul i64 %65, %indvar.epil
  %scevgep.epil = getelementptr i8, ptr %9, i64 %625
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.epil, i8 0, i64 %66, i1 false), !tbaa !9
  %indvar.next.epil = add nuw nsw i64 %indvar.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter1149
  br i1 %epil.iter.cmp.not, label %.loopexit, label %.preheader.epil, !llvm.loop !97

.loopexit:                                        ; preds = %._crit_edge528.split, %._crit_edge528.split.us.us, %._crit_edge549.split.us568, %._crit_edge549.split.us.us.us, %._crit_edge583.split.us603, %._crit_edge583.split.us.us.us, %._crit_edge619.split, %._crit_edge619.split.us.us, %.preheader512, %.preheader512.thread, %.loopexit509, %.loopexit505, %.loopexit501, %.loopexit.loopexit.unr-lcssa, %.preheader.epil, %.lr.ph625, %.lr.ph589, %.lr.ph555, %.lr.ph534, %82, %166, %259, %297, %332, %407, %480, %548, %59, %.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  ret i32 0
}

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

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

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

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

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

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

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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nounwind }

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

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


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