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

; 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 [7 x i8], align 1

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

56:                                               ; preds = %10
  %57 = load ptr, ptr %14, align 8, !tbaa !5
  %58 = load i64, ptr %57, align 8, !tbaa !9
  store i64 %58, ptr %34, align 8, !tbaa !9
  br label %62

59:                                               ; preds = %10
  %60 = load ptr, ptr %15, align 8, !tbaa !5
  %61 = load i64, ptr %60, align 8, !tbaa !9
  store i64 %61, ptr %34, align 8, !tbaa !9
  br label %62

62:                                               ; preds = %59, %56
  %63 = load ptr, ptr %12, align 8, !tbaa !5
  %64 = call i64 @lsame_(ptr noundef %63, ptr noundef @.str.1)
  store i64 %64, ptr %35, align 8, !tbaa !9
  store i64 0, ptr %32, align 8, !tbaa !9
  %65 = load i64, ptr %35, align 8, !tbaa !9
  %66 = icmp ne i64 %65, 0
  br i1 %66, label %72, label %67

67:                                               ; preds = %62
  %68 = load ptr, ptr %12, align 8, !tbaa !5
  %69 = call i64 @lsame_(ptr noundef %68, ptr noundef @.str.2)
  %70 = icmp ne i64 %69, 0
  br i1 %70, label %72, label %71

71:                                               ; preds = %67
  store i64 1, ptr %32, align 8, !tbaa !9
  br label %126

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

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

80:                                               ; preds = %76
  %81 = load ptr, ptr %13, align 8, !tbaa !5
  %82 = call i64 @lsame_(ptr noundef %81, ptr noundef @.str.4)
  %83 = icmp ne i64 %82, 0
  br i1 %83, label %85, label %84

84:                                               ; preds = %80
  store i64 2, ptr %32, align 8, !tbaa !9
  br label %125

85:                                               ; preds = %80, %76, %72
  %86 = load ptr, ptr %14, align 8, !tbaa !5
  %87 = load i64, ptr %86, align 8, !tbaa !9
  %88 = icmp slt i64 %87, 0
  br i1 %88, label %89, label %90

89:                                               ; preds = %85
  store i64 3, ptr %32, align 8, !tbaa !9
  br label %124

90:                                               ; preds = %85
  %91 = load ptr, ptr %15, align 8, !tbaa !5
  %92 = load i64, ptr %91, align 8, !tbaa !9
  %93 = icmp slt i64 %92, 0
  br i1 %93, label %94, label %95

94:                                               ; preds = %90
  store i64 4, ptr %32, align 8, !tbaa !9
  br label %123

95:                                               ; preds = %90
  %96 = load ptr, ptr %18, align 8, !tbaa !5
  %97 = load i64, ptr %96, align 8, !tbaa !9
  %98 = load i64, ptr %34, align 8, !tbaa !9
  %99 = icmp sge i64 1, %98
  br i1 %99, label %100, label %101

100:                                              ; preds = %95
  br label %103

101:                                              ; preds = %95
  %102 = load i64, ptr %34, align 8, !tbaa !9
  br label %103

103:                                              ; preds = %101, %100
  %104 = phi i64 [ 1, %100 ], [ %102, %101 ]
  %105 = icmp slt i64 %97, %104
  br i1 %105, label %106, label %107

106:                                              ; preds = %103
  store i64 7, ptr %32, align 8, !tbaa !9
  br label %122

107:                                              ; preds = %103
  %108 = load ptr, ptr %21, align 8, !tbaa !5
  %109 = load i64, ptr %108, align 8, !tbaa !9
  %110 = load ptr, ptr %14, align 8, !tbaa !5
  %111 = load i64, ptr %110, align 8, !tbaa !9
  %112 = icmp sge i64 1, %111
  br i1 %112, label %113, label %114

113:                                              ; preds = %107
  br label %117

114:                                              ; preds = %107
  %115 = load ptr, ptr %14, align 8, !tbaa !5
  %116 = load i64, ptr %115, align 8, !tbaa !9
  br label %117

117:                                              ; preds = %114, %113
  %118 = phi i64 [ 1, %113 ], [ %116, %114 ]
  %119 = icmp slt i64 %109, %118
  br i1 %119, label %120, label %121

120:                                              ; preds = %117
  store i64 10, ptr %32, align 8, !tbaa !9
  br label %121

121:                                              ; preds = %120, %117
  br label %122

122:                                              ; preds = %121, %106
  br label %123

123:                                              ; preds = %122, %94
  br label %124

124:                                              ; preds = %123, %89
  br label %125

125:                                              ; preds = %124, %84
  br label %126

126:                                              ; preds = %125, %71
  %127 = load i64, ptr %32, align 8, !tbaa !9
  %128 = icmp ne i64 %127, 0
  br i1 %128, label %129, label %131

129:                                              ; preds = %126
  %130 = call i32 @xerbla_(ptr noundef @.str.5, ptr noundef %32)
  store i32 0, ptr %11, align 4
  store i32 1, ptr %36, align 4
  br label %767

131:                                              ; preds = %126
  %132 = load ptr, ptr %14, align 8, !tbaa !5
  %133 = load i64, ptr %132, align 8, !tbaa !9
  %134 = icmp eq i64 %133, 0
  br i1 %134, label %147, label %135

135:                                              ; preds = %131
  %136 = load ptr, ptr %16, align 8, !tbaa !5
  %137 = load double, ptr %136, align 8, !tbaa !11
  %138 = fcmp oeq double %137, 0.000000e+00
  br i1 %138, label %143, label %139

139:                                              ; preds = %135
  %140 = load ptr, ptr %15, align 8, !tbaa !5
  %141 = load i64, ptr %140, align 8, !tbaa !9
  %142 = icmp eq i64 %141, 0
  br i1 %142, label %143, label %148

143:                                              ; preds = %139, %135
  %144 = load ptr, ptr %19, align 8, !tbaa !5
  %145 = load double, ptr %144, align 8, !tbaa !11
  %146 = fcmp oeq double %145, 1.000000e+00
  br i1 %146, label %147, label %148

147:                                              ; preds = %143, %131
  store i32 0, ptr %11, align 4
  store i32 1, ptr %36, align 4
  br label %767

148:                                              ; preds = %143, %139
  %149 = load ptr, ptr %16, align 8, !tbaa !5
  %150 = load double, ptr %149, align 8, !tbaa !11
  %151 = fcmp oeq double %150, 0.000000e+00
  br i1 %151, label %152, label %308

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

155:                                              ; preds = %152
  %156 = load ptr, ptr %19, align 8, !tbaa !5
  %157 = load double, ptr %156, align 8, !tbaa !11
  %158 = fcmp oeq double %157, 0.000000e+00
  br i1 %158, label %159, label %188

159:                                              ; preds = %155
  %160 = load ptr, ptr %14, align 8, !tbaa !5
  %161 = load i64, ptr %160, align 8, !tbaa !9
  store i64 %161, ptr %26, align 8, !tbaa !9
  store i64 1, ptr %30, align 8, !tbaa !9
  br label %162

162:                                              ; preds = %184, %159
  %163 = load i64, ptr %30, align 8, !tbaa !9
  %164 = load i64, ptr %26, align 8, !tbaa !9
  %165 = icmp sle i64 %163, %164
  br i1 %165, label %166, label %187

166:                                              ; preds = %162
  %167 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %167, ptr %27, align 8, !tbaa !9
  store i64 1, ptr %29, align 8, !tbaa !9
  br label %168

168:                                              ; preds = %180, %166
  %169 = load i64, ptr %29, align 8, !tbaa !9
  %170 = load i64, ptr %27, align 8, !tbaa !9
  %171 = icmp sle i64 %169, %170
  br i1 %171, label %172, label %183

172:                                              ; preds = %168
  %173 = load ptr, ptr %20, align 8, !tbaa !5
  %174 = load i64, ptr %29, align 8, !tbaa !9
  %175 = load i64, ptr %30, align 8, !tbaa !9
  %176 = load i64, ptr %24, align 8, !tbaa !9
  %177 = mul nsw i64 %175, %176
  %178 = add nsw i64 %174, %177
  %179 = getelementptr inbounds double, ptr %173, i64 %178
  store double 0.000000e+00, ptr %179, align 8, !tbaa !11
  br label %180

180:                                              ; preds = %172
  %181 = load i64, ptr %29, align 8, !tbaa !9
  %182 = add nsw i64 %181, 1
  store i64 %182, ptr %29, align 8, !tbaa !9
  br label %168, !llvm.loop !13

183:                                              ; preds = %168
  br label %184

184:                                              ; preds = %183
  %185 = load i64, ptr %30, align 8, !tbaa !9
  %186 = add nsw i64 %185, 1
  store i64 %186, ptr %30, align 8, !tbaa !9
  br label %162, !llvm.loop !15

187:                                              ; preds = %162
  br label %228

188:                                              ; preds = %155
  %189 = load ptr, ptr %14, align 8, !tbaa !5
  %190 = load i64, ptr %189, align 8, !tbaa !9
  store i64 %190, ptr %26, align 8, !tbaa !9
  store i64 1, ptr %30, align 8, !tbaa !9
  br label %191

191:                                              ; preds = %224, %188
  %192 = load i64, ptr %30, align 8, !tbaa !9
  %193 = load i64, ptr %26, align 8, !tbaa !9
  %194 = icmp sle i64 %192, %193
  br i1 %194, label %195, label %227

195:                                              ; preds = %191
  %196 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %196, ptr %27, align 8, !tbaa !9
  store i64 1, ptr %29, align 8, !tbaa !9
  br label %197

197:                                              ; preds = %220, %195
  %198 = load i64, ptr %29, align 8, !tbaa !9
  %199 = load i64, ptr %27, align 8, !tbaa !9
  %200 = icmp sle i64 %198, %199
  br i1 %200, label %201, label %223

201:                                              ; preds = %197
  %202 = load ptr, ptr %19, align 8, !tbaa !5
  %203 = load double, ptr %202, align 8, !tbaa !11
  %204 = load ptr, ptr %20, align 8, !tbaa !5
  %205 = load i64, ptr %29, align 8, !tbaa !9
  %206 = load i64, ptr %30, align 8, !tbaa !9
  %207 = load i64, ptr %24, align 8, !tbaa !9
  %208 = mul nsw i64 %206, %207
  %209 = add nsw i64 %205, %208
  %210 = getelementptr inbounds double, ptr %204, i64 %209
  %211 = load double, ptr %210, align 8, !tbaa !11
  %212 = fmul double %203, %211
  %213 = load ptr, ptr %20, align 8, !tbaa !5
  %214 = load i64, ptr %29, align 8, !tbaa !9
  %215 = load i64, ptr %30, align 8, !tbaa !9
  %216 = load i64, ptr %24, align 8, !tbaa !9
  %217 = mul nsw i64 %215, %216
  %218 = add nsw i64 %214, %217
  %219 = getelementptr inbounds double, ptr %213, i64 %218
  store double %212, ptr %219, align 8, !tbaa !11
  br label %220

220:                                              ; preds = %201
  %221 = load i64, ptr %29, align 8, !tbaa !9
  %222 = add nsw i64 %221, 1
  store i64 %222, ptr %29, align 8, !tbaa !9
  br label %197, !llvm.loop !16

223:                                              ; preds = %197
  br label %224

224:                                              ; preds = %223
  %225 = load i64, ptr %30, align 8, !tbaa !9
  %226 = add nsw i64 %225, 1
  store i64 %226, ptr %30, align 8, !tbaa !9
  br label %191, !llvm.loop !17

227:                                              ; preds = %191
  br label %228

228:                                              ; preds = %227, %187
  br label %307

229:                                              ; preds = %152
  %230 = load ptr, ptr %19, align 8, !tbaa !5
  %231 = load double, ptr %230, align 8, !tbaa !11
  %232 = fcmp oeq double %231, 0.000000e+00
  br i1 %232, label %233, label %264

233:                                              ; preds = %229
  %234 = load ptr, ptr %14, align 8, !tbaa !5
  %235 = load i64, ptr %234, align 8, !tbaa !9
  store i64 %235, ptr %26, align 8, !tbaa !9
  store i64 1, ptr %30, align 8, !tbaa !9
  br label %236

236:                                              ; preds = %260, %233
  %237 = load i64, ptr %30, align 8, !tbaa !9
  %238 = load i64, ptr %26, align 8, !tbaa !9
  %239 = icmp sle i64 %237, %238
  br i1 %239, label %240, label %263

240:                                              ; preds = %236
  %241 = load ptr, ptr %14, align 8, !tbaa !5
  %242 = load i64, ptr %241, align 8, !tbaa !9
  store i64 %242, ptr %27, align 8, !tbaa !9
  %243 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %243, ptr %29, align 8, !tbaa !9
  br label %244

244:                                              ; preds = %256, %240
  %245 = load i64, ptr %29, align 8, !tbaa !9
  %246 = load i64, ptr %27, align 8, !tbaa !9
  %247 = icmp sle i64 %245, %246
  br i1 %247, label %248, label %259

248:                                              ; preds = %244
  %249 = load ptr, ptr %20, align 8, !tbaa !5
  %250 = load i64, ptr %29, align 8, !tbaa !9
  %251 = load i64, ptr %30, align 8, !tbaa !9
  %252 = load i64, ptr %24, align 8, !tbaa !9
  %253 = mul nsw i64 %251, %252
  %254 = add nsw i64 %250, %253
  %255 = getelementptr inbounds double, ptr %249, i64 %254
  store double 0.000000e+00, ptr %255, align 8, !tbaa !11
  br label %256

256:                                              ; preds = %248
  %257 = load i64, ptr %29, align 8, !tbaa !9
  %258 = add nsw i64 %257, 1
  store i64 %258, ptr %29, align 8, !tbaa !9
  br label %244, !llvm.loop !18

259:                                              ; preds = %244
  br label %260

260:                                              ; preds = %259
  %261 = load i64, ptr %30, align 8, !tbaa !9
  %262 = add nsw i64 %261, 1
  store i64 %262, ptr %30, align 8, !tbaa !9
  br label %236, !llvm.loop !19

263:                                              ; preds = %236
  br label %306

264:                                              ; preds = %229
  %265 = load ptr, ptr %14, align 8, !tbaa !5
  %266 = load i64, ptr %265, align 8, !tbaa !9
  store i64 %266, ptr %26, align 8, !tbaa !9
  store i64 1, ptr %30, align 8, !tbaa !9
  br label %267

267:                                              ; preds = %302, %264
  %268 = load i64, ptr %30, align 8, !tbaa !9
  %269 = load i64, ptr %26, align 8, !tbaa !9
  %270 = icmp sle i64 %268, %269
  br i1 %270, label %271, label %305

271:                                              ; preds = %267
  %272 = load ptr, ptr %14, align 8, !tbaa !5
  %273 = load i64, ptr %272, align 8, !tbaa !9
  store i64 %273, ptr %27, align 8, !tbaa !9
  %274 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %274, ptr %29, align 8, !tbaa !9
  br label %275

275:                                              ; preds = %298, %271
  %276 = load i64, ptr %29, align 8, !tbaa !9
  %277 = load i64, ptr %27, align 8, !tbaa !9
  %278 = icmp sle i64 %276, %277
  br i1 %278, label %279, label %301

279:                                              ; preds = %275
  %280 = load ptr, ptr %19, align 8, !tbaa !5
  %281 = load double, ptr %280, align 8, !tbaa !11
  %282 = load ptr, ptr %20, align 8, !tbaa !5
  %283 = load i64, ptr %29, align 8, !tbaa !9
  %284 = load i64, ptr %30, align 8, !tbaa !9
  %285 = load i64, ptr %24, align 8, !tbaa !9
  %286 = mul nsw i64 %284, %285
  %287 = add nsw i64 %283, %286
  %288 = getelementptr inbounds double, ptr %282, i64 %287
  %289 = load double, ptr %288, align 8, !tbaa !11
  %290 = fmul double %281, %289
  %291 = load ptr, ptr %20, align 8, !tbaa !5
  %292 = load i64, ptr %29, align 8, !tbaa !9
  %293 = load i64, ptr %30, align 8, !tbaa !9
  %294 = load i64, ptr %24, align 8, !tbaa !9
  %295 = mul nsw i64 %293, %294
  %296 = add nsw i64 %292, %295
  %297 = getelementptr inbounds double, ptr %291, i64 %296
  store double %290, ptr %297, align 8, !tbaa !11
  br label %298

298:                                              ; preds = %279
  %299 = load i64, ptr %29, align 8, !tbaa !9
  %300 = add nsw i64 %299, 1
  store i64 %300, ptr %29, align 8, !tbaa !9
  br label %275, !llvm.loop !20

301:                                              ; preds = %275
  br label %302

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

305:                                              ; preds = %267
  br label %306

306:                                              ; preds = %305, %263
  br label %307

307:                                              ; preds = %306, %228
  store i32 0, ptr %11, align 4
  store i32 1, ptr %36, align 4
  br label %767

308:                                              ; preds = %148
  %309 = load ptr, ptr %13, align 8, !tbaa !5
  %310 = call i64 @lsame_(ptr noundef %309, ptr noundef @.str)
  %311 = icmp ne i64 %310, 0
  br i1 %311, label %312, label %580

312:                                              ; preds = %308
  %313 = load i64, ptr %35, align 8, !tbaa !9
  %314 = icmp ne i64 %313, 0
  br i1 %314, label %315, label %444

315:                                              ; preds = %312
  %316 = load ptr, ptr %14, align 8, !tbaa !5
  %317 = load i64, ptr %316, align 8, !tbaa !9
  store i64 %317, ptr %26, align 8, !tbaa !9
  store i64 1, ptr %30, align 8, !tbaa !9
  br label %318

318:                                              ; preds = %440, %315
  %319 = load i64, ptr %30, align 8, !tbaa !9
  %320 = load i64, ptr %26, align 8, !tbaa !9
  %321 = icmp sle i64 %319, %320
  br i1 %321, label %322, label %443

322:                                              ; preds = %318
  %323 = load ptr, ptr %19, align 8, !tbaa !5
  %324 = load double, ptr %323, align 8, !tbaa !11
  %325 = fcmp oeq double %324, 0.000000e+00
  br i1 %325, label %326, label %344

326:                                              ; preds = %322
  %327 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %327, ptr %27, align 8, !tbaa !9
  store i64 1, ptr %29, align 8, !tbaa !9
  br label %328

328:                                              ; preds = %340, %326
  %329 = load i64, ptr %29, align 8, !tbaa !9
  %330 = load i64, ptr %27, align 8, !tbaa !9
  %331 = icmp sle i64 %329, %330
  br i1 %331, label %332, label %343

332:                                              ; preds = %328
  %333 = load ptr, ptr %20, align 8, !tbaa !5
  %334 = load i64, ptr %29, align 8, !tbaa !9
  %335 = load i64, ptr %30, align 8, !tbaa !9
  %336 = load i64, ptr %24, align 8, !tbaa !9
  %337 = mul nsw i64 %335, %336
  %338 = add nsw i64 %334, %337
  %339 = getelementptr inbounds double, ptr %333, i64 %338
  store double 0.000000e+00, ptr %339, align 8, !tbaa !11
  br label %340

340:                                              ; preds = %332
  %341 = load i64, ptr %29, align 8, !tbaa !9
  %342 = add nsw i64 %341, 1
  store i64 %342, ptr %29, align 8, !tbaa !9
  br label %328, !llvm.loop !22

343:                                              ; preds = %328
  br label %378

344:                                              ; preds = %322
  %345 = load ptr, ptr %19, align 8, !tbaa !5
  %346 = load double, ptr %345, align 8, !tbaa !11
  %347 = fcmp une double %346, 1.000000e+00
  br i1 %347, label %348, label %377

348:                                              ; preds = %344
  %349 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %349, ptr %27, align 8, !tbaa !9
  store i64 1, ptr %29, align 8, !tbaa !9
  br label %350

350:                                              ; preds = %373, %348
  %351 = load i64, ptr %29, align 8, !tbaa !9
  %352 = load i64, ptr %27, align 8, !tbaa !9
  %353 = icmp sle i64 %351, %352
  br i1 %353, label %354, label %376

354:                                              ; preds = %350
  %355 = load ptr, ptr %19, align 8, !tbaa !5
  %356 = load double, ptr %355, align 8, !tbaa !11
  %357 = load ptr, ptr %20, align 8, !tbaa !5
  %358 = load i64, ptr %29, align 8, !tbaa !9
  %359 = load i64, ptr %30, align 8, !tbaa !9
  %360 = load i64, ptr %24, align 8, !tbaa !9
  %361 = mul nsw i64 %359, %360
  %362 = add nsw i64 %358, %361
  %363 = getelementptr inbounds double, ptr %357, i64 %362
  %364 = load double, ptr %363, align 8, !tbaa !11
  %365 = fmul double %356, %364
  %366 = load ptr, ptr %20, align 8, !tbaa !5
  %367 = load i64, ptr %29, align 8, !tbaa !9
  %368 = load i64, ptr %30, align 8, !tbaa !9
  %369 = load i64, ptr %24, align 8, !tbaa !9
  %370 = mul nsw i64 %368, %369
  %371 = add nsw i64 %367, %370
  %372 = getelementptr inbounds double, ptr %366, i64 %371
  store double %365, ptr %372, align 8, !tbaa !11
  br label %373

373:                                              ; preds = %354
  %374 = load i64, ptr %29, align 8, !tbaa !9
  %375 = add nsw i64 %374, 1
  store i64 %375, ptr %29, align 8, !tbaa !9
  br label %350, !llvm.loop !23

376:                                              ; preds = %350
  br label %377

377:                                              ; preds = %376, %344
  br label %378

378:                                              ; preds = %377, %343
  %379 = load ptr, ptr %15, align 8, !tbaa !5
  %380 = load i64, ptr %379, align 8, !tbaa !9
  store i64 %380, ptr %27, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %381

381:                                              ; preds = %436, %378
  %382 = load i64, ptr %31, align 8, !tbaa !9
  %383 = load i64, ptr %27, align 8, !tbaa !9
  %384 = icmp sle i64 %382, %383
  br i1 %384, label %385, label %439

385:                                              ; preds = %381
  %386 = load ptr, ptr %17, align 8, !tbaa !5
  %387 = load i64, ptr %30, align 8, !tbaa !9
  %388 = load i64, ptr %31, align 8, !tbaa !9
  %389 = load i64, ptr %22, align 8, !tbaa !9
  %390 = mul nsw i64 %388, %389
  %391 = add nsw i64 %387, %390
  %392 = getelementptr inbounds double, ptr %386, i64 %391
  %393 = load double, ptr %392, align 8, !tbaa !11
  %394 = fcmp une double %393, 0.000000e+00
  br i1 %394, label %395, label %435

395:                                              ; preds = %385
  %396 = load ptr, ptr %16, align 8, !tbaa !5
  %397 = load double, ptr %396, align 8, !tbaa !11
  %398 = load ptr, ptr %17, align 8, !tbaa !5
  %399 = load i64, ptr %30, align 8, !tbaa !9
  %400 = load i64, ptr %31, align 8, !tbaa !9
  %401 = load i64, ptr %22, align 8, !tbaa !9
  %402 = mul nsw i64 %400, %401
  %403 = add nsw i64 %399, %402
  %404 = getelementptr inbounds double, ptr %398, i64 %403
  %405 = load double, ptr %404, align 8, !tbaa !11
  %406 = fmul double %397, %405
  store double %406, ptr %33, align 8, !tbaa !11
  %407 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %407, ptr %28, align 8, !tbaa !9
  store i64 1, ptr %29, align 8, !tbaa !9
  br label %408

408:                                              ; preds = %431, %395
  %409 = load i64, ptr %29, align 8, !tbaa !9
  %410 = load i64, ptr %28, align 8, !tbaa !9
  %411 = icmp sle i64 %409, %410
  br i1 %411, label %412, label %434

412:                                              ; preds = %408
  %413 = load double, ptr %33, align 8, !tbaa !11
  %414 = load ptr, ptr %17, align 8, !tbaa !5
  %415 = load i64, ptr %29, align 8, !tbaa !9
  %416 = load i64, ptr %31, align 8, !tbaa !9
  %417 = load i64, ptr %22, align 8, !tbaa !9
  %418 = mul nsw i64 %416, %417
  %419 = add nsw i64 %415, %418
  %420 = getelementptr inbounds double, ptr %414, i64 %419
  %421 = load double, ptr %420, align 8, !tbaa !11
  %422 = load ptr, ptr %20, align 8, !tbaa !5
  %423 = load i64, ptr %29, align 8, !tbaa !9
  %424 = load i64, ptr %30, align 8, !tbaa !9
  %425 = load i64, ptr %24, align 8, !tbaa !9
  %426 = mul nsw i64 %424, %425
  %427 = add nsw i64 %423, %426
  %428 = getelementptr inbounds double, ptr %422, i64 %427
  %429 = load double, ptr %428, align 8, !tbaa !11
  %430 = call double @llvm.fmuladd.f64(double %413, double %421, double %429)
  store double %430, ptr %428, align 8, !tbaa !11
  br label %431

431:                                              ; preds = %412
  %432 = load i64, ptr %29, align 8, !tbaa !9
  %433 = add nsw i64 %432, 1
  store i64 %433, ptr %29, align 8, !tbaa !9
  br label %408, !llvm.loop !24

434:                                              ; preds = %408
  br label %435

435:                                              ; preds = %434, %385
  br label %436

436:                                              ; preds = %435
  %437 = load i64, ptr %31, align 8, !tbaa !9
  %438 = add nsw i64 %437, 1
  store i64 %438, ptr %31, align 8, !tbaa !9
  br label %381, !llvm.loop !25

439:                                              ; preds = %381
  br label %440

440:                                              ; preds = %439
  %441 = load i64, ptr %30, align 8, !tbaa !9
  %442 = add nsw i64 %441, 1
  store i64 %442, ptr %30, align 8, !tbaa !9
  br label %318, !llvm.loop !26

443:                                              ; preds = %318
  br label %579

444:                                              ; preds = %312
  %445 = load ptr, ptr %14, align 8, !tbaa !5
  %446 = load i64, ptr %445, align 8, !tbaa !9
  store i64 %446, ptr %26, align 8, !tbaa !9
  store i64 1, ptr %30, align 8, !tbaa !9
  br label %447

447:                                              ; preds = %575, %444
  %448 = load i64, ptr %30, align 8, !tbaa !9
  %449 = load i64, ptr %26, align 8, !tbaa !9
  %450 = icmp sle i64 %448, %449
  br i1 %450, label %451, label %578

451:                                              ; preds = %447
  %452 = load ptr, ptr %19, align 8, !tbaa !5
  %453 = load double, ptr %452, align 8, !tbaa !11
  %454 = fcmp oeq double %453, 0.000000e+00
  br i1 %454, label %455, label %475

455:                                              ; preds = %451
  %456 = load ptr, ptr %14, align 8, !tbaa !5
  %457 = load i64, ptr %456, align 8, !tbaa !9
  store i64 %457, ptr %27, align 8, !tbaa !9
  %458 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %458, ptr %29, align 8, !tbaa !9
  br label %459

459:                                              ; preds = %471, %455
  %460 = load i64, ptr %29, align 8, !tbaa !9
  %461 = load i64, ptr %27, align 8, !tbaa !9
  %462 = icmp sle i64 %460, %461
  br i1 %462, label %463, label %474

463:                                              ; preds = %459
  %464 = load ptr, ptr %20, align 8, !tbaa !5
  %465 = load i64, ptr %29, align 8, !tbaa !9
  %466 = load i64, ptr %30, align 8, !tbaa !9
  %467 = load i64, ptr %24, align 8, !tbaa !9
  %468 = mul nsw i64 %466, %467
  %469 = add nsw i64 %465, %468
  %470 = getelementptr inbounds double, ptr %464, i64 %469
  store double 0.000000e+00, ptr %470, align 8, !tbaa !11
  br label %471

471:                                              ; preds = %463
  %472 = load i64, ptr %29, align 8, !tbaa !9
  %473 = add nsw i64 %472, 1
  store i64 %473, ptr %29, align 8, !tbaa !9
  br label %459, !llvm.loop !27

474:                                              ; preds = %459
  br label %511

475:                                              ; preds = %451
  %476 = load ptr, ptr %19, align 8, !tbaa !5
  %477 = load double, ptr %476, align 8, !tbaa !11
  %478 = fcmp une double %477, 1.000000e+00
  br i1 %478, label %479, label %510

479:                                              ; preds = %475
  %480 = load ptr, ptr %14, align 8, !tbaa !5
  %481 = load i64, ptr %480, align 8, !tbaa !9
  store i64 %481, ptr %27, align 8, !tbaa !9
  %482 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %482, ptr %29, align 8, !tbaa !9
  br label %483

483:                                              ; preds = %506, %479
  %484 = load i64, ptr %29, align 8, !tbaa !9
  %485 = load i64, ptr %27, align 8, !tbaa !9
  %486 = icmp sle i64 %484, %485
  br i1 %486, label %487, label %509

487:                                              ; preds = %483
  %488 = load ptr, ptr %19, align 8, !tbaa !5
  %489 = load double, ptr %488, align 8, !tbaa !11
  %490 = load ptr, ptr %20, align 8, !tbaa !5
  %491 = load i64, ptr %29, align 8, !tbaa !9
  %492 = load i64, ptr %30, align 8, !tbaa !9
  %493 = load i64, ptr %24, align 8, !tbaa !9
  %494 = mul nsw i64 %492, %493
  %495 = add nsw i64 %491, %494
  %496 = getelementptr inbounds double, ptr %490, i64 %495
  %497 = load double, ptr %496, align 8, !tbaa !11
  %498 = fmul double %489, %497
  %499 = load ptr, ptr %20, align 8, !tbaa !5
  %500 = load i64, ptr %29, align 8, !tbaa !9
  %501 = load i64, ptr %30, align 8, !tbaa !9
  %502 = load i64, ptr %24, align 8, !tbaa !9
  %503 = mul nsw i64 %501, %502
  %504 = add nsw i64 %500, %503
  %505 = getelementptr inbounds double, ptr %499, i64 %504
  store double %498, ptr %505, align 8, !tbaa !11
  br label %506

506:                                              ; preds = %487
  %507 = load i64, ptr %29, align 8, !tbaa !9
  %508 = add nsw i64 %507, 1
  store i64 %508, ptr %29, align 8, !tbaa !9
  br label %483, !llvm.loop !28

509:                                              ; preds = %483
  br label %510

510:                                              ; preds = %509, %475
  br label %511

511:                                              ; preds = %510, %474
  %512 = load ptr, ptr %15, align 8, !tbaa !5
  %513 = load i64, ptr %512, align 8, !tbaa !9
  store i64 %513, ptr %27, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %514

514:                                              ; preds = %571, %511
  %515 = load i64, ptr %31, align 8, !tbaa !9
  %516 = load i64, ptr %27, align 8, !tbaa !9
  %517 = icmp sle i64 %515, %516
  br i1 %517, label %518, label %574

518:                                              ; preds = %514
  %519 = load ptr, ptr %17, align 8, !tbaa !5
  %520 = load i64, ptr %30, align 8, !tbaa !9
  %521 = load i64, ptr %31, align 8, !tbaa !9
  %522 = load i64, ptr %22, align 8, !tbaa !9
  %523 = mul nsw i64 %521, %522
  %524 = add nsw i64 %520, %523
  %525 = getelementptr inbounds double, ptr %519, i64 %524
  %526 = load double, ptr %525, align 8, !tbaa !11
  %527 = fcmp une double %526, 0.000000e+00
  br i1 %527, label %528, label %570

528:                                              ; preds = %518
  %529 = load ptr, ptr %16, align 8, !tbaa !5
  %530 = load double, ptr %529, align 8, !tbaa !11
  %531 = load ptr, ptr %17, align 8, !tbaa !5
  %532 = load i64, ptr %30, align 8, !tbaa !9
  %533 = load i64, ptr %31, align 8, !tbaa !9
  %534 = load i64, ptr %22, align 8, !tbaa !9
  %535 = mul nsw i64 %533, %534
  %536 = add nsw i64 %532, %535
  %537 = getelementptr inbounds double, ptr %531, i64 %536
  %538 = load double, ptr %537, align 8, !tbaa !11
  %539 = fmul double %530, %538
  store double %539, ptr %33, align 8, !tbaa !11
  %540 = load ptr, ptr %14, align 8, !tbaa !5
  %541 = load i64, ptr %540, align 8, !tbaa !9
  store i64 %541, ptr %28, align 8, !tbaa !9
  %542 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %542, ptr %29, align 8, !tbaa !9
  br label %543

543:                                              ; preds = %566, %528
  %544 = load i64, ptr %29, align 8, !tbaa !9
  %545 = load i64, ptr %28, align 8, !tbaa !9
  %546 = icmp sle i64 %544, %545
  br i1 %546, label %547, label %569

547:                                              ; preds = %543
  %548 = load double, ptr %33, align 8, !tbaa !11
  %549 = load ptr, ptr %17, align 8, !tbaa !5
  %550 = load i64, ptr %29, align 8, !tbaa !9
  %551 = load i64, ptr %31, align 8, !tbaa !9
  %552 = load i64, ptr %22, align 8, !tbaa !9
  %553 = mul nsw i64 %551, %552
  %554 = add nsw i64 %550, %553
  %555 = getelementptr inbounds double, ptr %549, i64 %554
  %556 = load double, ptr %555, align 8, !tbaa !11
  %557 = load ptr, ptr %20, align 8, !tbaa !5
  %558 = load i64, ptr %29, align 8, !tbaa !9
  %559 = load i64, ptr %30, align 8, !tbaa !9
  %560 = load i64, ptr %24, align 8, !tbaa !9
  %561 = mul nsw i64 %559, %560
  %562 = add nsw i64 %558, %561
  %563 = getelementptr inbounds double, ptr %557, i64 %562
  %564 = load double, ptr %563, align 8, !tbaa !11
  %565 = call double @llvm.fmuladd.f64(double %548, double %556, double %564)
  store double %565, ptr %563, align 8, !tbaa !11
  br label %566

566:                                              ; preds = %547
  %567 = load i64, ptr %29, align 8, !tbaa !9
  %568 = add nsw i64 %567, 1
  store i64 %568, ptr %29, align 8, !tbaa !9
  br label %543, !llvm.loop !29

569:                                              ; preds = %543
  br label %570

570:                                              ; preds = %569, %518
  br label %571

571:                                              ; preds = %570
  %572 = load i64, ptr %31, align 8, !tbaa !9
  %573 = add nsw i64 %572, 1
  store i64 %573, ptr %31, align 8, !tbaa !9
  br label %514, !llvm.loop !30

574:                                              ; preds = %514
  br label %575

575:                                              ; preds = %574
  %576 = load i64, ptr %30, align 8, !tbaa !9
  %577 = add nsw i64 %576, 1
  store i64 %577, ptr %30, align 8, !tbaa !9
  br label %447, !llvm.loop !31

578:                                              ; preds = %447
  br label %579

579:                                              ; preds = %578, %443
  br label %766

580:                                              ; preds = %308
  %581 = load i64, ptr %35, align 8, !tbaa !9
  %582 = icmp ne i64 %581, 0
  br i1 %582, label %583, label %673

583:                                              ; preds = %580
  %584 = load ptr, ptr %14, align 8, !tbaa !5
  %585 = load i64, ptr %584, align 8, !tbaa !9
  store i64 %585, ptr %26, align 8, !tbaa !9
  store i64 1, ptr %30, align 8, !tbaa !9
  br label %586

586:                                              ; preds = %669, %583
  %587 = load i64, ptr %30, align 8, !tbaa !9
  %588 = load i64, ptr %26, align 8, !tbaa !9
  %589 = icmp sle i64 %587, %588
  br i1 %589, label %590, label %672

590:                                              ; preds = %586
  %591 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %591, ptr %27, align 8, !tbaa !9
  store i64 1, ptr %29, align 8, !tbaa !9
  br label %592

592:                                              ; preds = %665, %590
  %593 = load i64, ptr %29, align 8, !tbaa !9
  %594 = load i64, ptr %27, align 8, !tbaa !9
  %595 = icmp sle i64 %593, %594
  br i1 %595, label %596, label %668

596:                                              ; preds = %592
  store double 0.000000e+00, ptr %33, align 8, !tbaa !11
  %597 = load ptr, ptr %15, align 8, !tbaa !5
  %598 = load i64, ptr %597, align 8, !tbaa !9
  store i64 %598, ptr %28, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %599

599:                                              ; preds = %622, %596
  %600 = load i64, ptr %31, align 8, !tbaa !9
  %601 = load i64, ptr %28, align 8, !tbaa !9
  %602 = icmp sle i64 %600, %601
  br i1 %602, label %603, label %625

603:                                              ; preds = %599
  %604 = load ptr, ptr %17, align 8, !tbaa !5
  %605 = load i64, ptr %31, align 8, !tbaa !9
  %606 = load i64, ptr %29, align 8, !tbaa !9
  %607 = load i64, ptr %22, align 8, !tbaa !9
  %608 = mul nsw i64 %606, %607
  %609 = add nsw i64 %605, %608
  %610 = getelementptr inbounds double, ptr %604, i64 %609
  %611 = load double, ptr %610, align 8, !tbaa !11
  %612 = load ptr, ptr %17, align 8, !tbaa !5
  %613 = load i64, ptr %31, align 8, !tbaa !9
  %614 = load i64, ptr %30, align 8, !tbaa !9
  %615 = load i64, ptr %22, align 8, !tbaa !9
  %616 = mul nsw i64 %614, %615
  %617 = add nsw i64 %613, %616
  %618 = getelementptr inbounds double, ptr %612, i64 %617
  %619 = load double, ptr %618, align 8, !tbaa !11
  %620 = load double, ptr %33, align 8, !tbaa !11
  %621 = call double @llvm.fmuladd.f64(double %611, double %619, double %620)
  store double %621, ptr %33, align 8, !tbaa !11
  br label %622

622:                                              ; preds = %603
  %623 = load i64, ptr %31, align 8, !tbaa !9
  %624 = add nsw i64 %623, 1
  store i64 %624, ptr %31, align 8, !tbaa !9
  br label %599, !llvm.loop !32

625:                                              ; preds = %599
  %626 = load ptr, ptr %19, align 8, !tbaa !5
  %627 = load double, ptr %626, align 8, !tbaa !11
  %628 = fcmp oeq double %627, 0.000000e+00
  br i1 %628, label %629, label %641

629:                                              ; preds = %625
  %630 = load ptr, ptr %16, align 8, !tbaa !5
  %631 = load double, ptr %630, align 8, !tbaa !11
  %632 = load double, ptr %33, align 8, !tbaa !11
  %633 = fmul double %631, %632
  %634 = load ptr, ptr %20, align 8, !tbaa !5
  %635 = load i64, ptr %29, align 8, !tbaa !9
  %636 = load i64, ptr %30, align 8, !tbaa !9
  %637 = load i64, ptr %24, 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 %664

641:                                              ; preds = %625
  %642 = load ptr, ptr %16, align 8, !tbaa !5
  %643 = load double, ptr %642, align 8, !tbaa !11
  %644 = load double, ptr %33, align 8, !tbaa !11
  %645 = load ptr, ptr %19, align 8, !tbaa !5
  %646 = load double, ptr %645, align 8, !tbaa !11
  %647 = load ptr, ptr %20, align 8, !tbaa !5
  %648 = load i64, ptr %29, align 8, !tbaa !9
  %649 = load i64, ptr %30, align 8, !tbaa !9
  %650 = load i64, ptr %24, align 8, !tbaa !9
  %651 = mul nsw i64 %649, %650
  %652 = add nsw i64 %648, %651
  %653 = getelementptr inbounds double, ptr %647, i64 %652
  %654 = load double, ptr %653, align 8, !tbaa !11
  %655 = fmul double %646, %654
  %656 = call double @llvm.fmuladd.f64(double %643, double %644, double %655)
  %657 = load ptr, ptr %20, align 8, !tbaa !5
  %658 = load i64, ptr %29, align 8, !tbaa !9
  %659 = load i64, ptr %30, align 8, !tbaa !9
  %660 = load i64, ptr %24, align 8, !tbaa !9
  %661 = mul nsw i64 %659, %660
  %662 = add nsw i64 %658, %661
  %663 = getelementptr inbounds double, ptr %657, i64 %662
  store double %656, ptr %663, align 8, !tbaa !11
  br label %664

664:                                              ; preds = %641, %629
  br label %665

665:                                              ; preds = %664
  %666 = load i64, ptr %29, align 8, !tbaa !9
  %667 = add nsw i64 %666, 1
  store i64 %667, ptr %29, align 8, !tbaa !9
  br label %592, !llvm.loop !33

668:                                              ; preds = %592
  br label %669

669:                                              ; preds = %668
  %670 = load i64, ptr %30, align 8, !tbaa !9
  %671 = add nsw i64 %670, 1
  store i64 %671, ptr %30, align 8, !tbaa !9
  br label %586, !llvm.loop !34

672:                                              ; preds = %586
  br label %765

673:                                              ; preds = %580
  %674 = load ptr, ptr %14, align 8, !tbaa !5
  %675 = load i64, ptr %674, align 8, !tbaa !9
  store i64 %675, ptr %26, align 8, !tbaa !9
  store i64 1, ptr %30, align 8, !tbaa !9
  br label %676

676:                                              ; preds = %761, %673
  %677 = load i64, ptr %30, align 8, !tbaa !9
  %678 = load i64, ptr %26, align 8, !tbaa !9
  %679 = icmp sle i64 %677, %678
  br i1 %679, label %680, label %764

680:                                              ; preds = %676
  %681 = load ptr, ptr %14, align 8, !tbaa !5
  %682 = load i64, ptr %681, align 8, !tbaa !9
  store i64 %682, ptr %27, align 8, !tbaa !9
  %683 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %683, ptr %29, align 8, !tbaa !9
  br label %684

684:                                              ; preds = %757, %680
  %685 = load i64, ptr %29, align 8, !tbaa !9
  %686 = load i64, ptr %27, align 8, !tbaa !9
  %687 = icmp sle i64 %685, %686
  br i1 %687, label %688, label %760

688:                                              ; preds = %684
  store double 0.000000e+00, ptr %33, align 8, !tbaa !11
  %689 = load ptr, ptr %15, align 8, !tbaa !5
  %690 = load i64, ptr %689, align 8, !tbaa !9
  store i64 %690, ptr %28, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  br label %691

691:                                              ; preds = %714, %688
  %692 = load i64, ptr %31, align 8, !tbaa !9
  %693 = load i64, ptr %28, align 8, !tbaa !9
  %694 = icmp sle i64 %692, %693
  br i1 %694, label %695, label %717

695:                                              ; preds = %691
  %696 = load ptr, ptr %17, align 8, !tbaa !5
  %697 = load i64, ptr %31, align 8, !tbaa !9
  %698 = load i64, ptr %29, align 8, !tbaa !9
  %699 = load i64, ptr %22, align 8, !tbaa !9
  %700 = mul nsw i64 %698, %699
  %701 = add nsw i64 %697, %700
  %702 = getelementptr inbounds double, ptr %696, i64 %701
  %703 = load double, ptr %702, align 8, !tbaa !11
  %704 = load ptr, ptr %17, align 8, !tbaa !5
  %705 = load i64, ptr %31, align 8, !tbaa !9
  %706 = load i64, ptr %30, align 8, !tbaa !9
  %707 = load i64, ptr %22, align 8, !tbaa !9
  %708 = mul nsw i64 %706, %707
  %709 = add nsw i64 %705, %708
  %710 = getelementptr inbounds double, ptr %704, i64 %709
  %711 = load double, ptr %710, align 8, !tbaa !11
  %712 = load double, ptr %33, align 8, !tbaa !11
  %713 = call double @llvm.fmuladd.f64(double %703, double %711, double %712)
  store double %713, ptr %33, align 8, !tbaa !11
  br label %714

714:                                              ; preds = %695
  %715 = load i64, ptr %31, align 8, !tbaa !9
  %716 = add nsw i64 %715, 1
  store i64 %716, ptr %31, align 8, !tbaa !9
  br label %691, !llvm.loop !35

717:                                              ; preds = %691
  %718 = load ptr, ptr %19, align 8, !tbaa !5
  %719 = load double, ptr %718, align 8, !tbaa !11
  %720 = fcmp oeq double %719, 0.000000e+00
  br i1 %720, label %721, label %733

721:                                              ; preds = %717
  %722 = load ptr, ptr %16, align 8, !tbaa !5
  %723 = load double, ptr %722, align 8, !tbaa !11
  %724 = load double, ptr %33, align 8, !tbaa !11
  %725 = fmul double %723, %724
  %726 = load ptr, ptr %20, align 8, !tbaa !5
  %727 = load i64, ptr %29, align 8, !tbaa !9
  %728 = load i64, ptr %30, align 8, !tbaa !9
  %729 = load i64, ptr %24, align 8, !tbaa !9
  %730 = mul nsw i64 %728, %729
  %731 = add nsw i64 %727, %730
  %732 = getelementptr inbounds double, ptr %726, i64 %731
  store double %725, ptr %732, align 8, !tbaa !11
  br label %756

733:                                              ; preds = %717
  %734 = load ptr, ptr %16, align 8, !tbaa !5
  %735 = load double, ptr %734, align 8, !tbaa !11
  %736 = load double, ptr %33, align 8, !tbaa !11
  %737 = load ptr, ptr %19, align 8, !tbaa !5
  %738 = load double, ptr %737, align 8, !tbaa !11
  %739 = load ptr, ptr %20, align 8, !tbaa !5
  %740 = load i64, ptr %29, align 8, !tbaa !9
  %741 = load i64, ptr %30, align 8, !tbaa !9
  %742 = load i64, ptr %24, align 8, !tbaa !9
  %743 = mul nsw i64 %741, %742
  %744 = add nsw i64 %740, %743
  %745 = getelementptr inbounds double, ptr %739, i64 %744
  %746 = load double, ptr %745, align 8, !tbaa !11
  %747 = fmul double %738, %746
  %748 = call double @llvm.fmuladd.f64(double %735, double %736, double %747)
  %749 = load ptr, ptr %20, align 8, !tbaa !5
  %750 = load i64, ptr %29, align 8, !tbaa !9
  %751 = load i64, ptr %30, align 8, !tbaa !9
  %752 = load i64, ptr %24, align 8, !tbaa !9
  %753 = mul nsw i64 %751, %752
  %754 = add nsw i64 %750, %753
  %755 = getelementptr inbounds double, ptr %749, i64 %754
  store double %748, ptr %755, align 8, !tbaa !11
  br label %756

756:                                              ; preds = %733, %721
  br label %757

757:                                              ; preds = %756
  %758 = load i64, ptr %29, align 8, !tbaa !9
  %759 = add nsw i64 %758, 1
  store i64 %759, ptr %29, align 8, !tbaa !9
  br label %684, !llvm.loop !36

760:                                              ; preds = %684
  br label %761

761:                                              ; preds = %760
  %762 = load i64, ptr %30, align 8, !tbaa !9
  %763 = add nsw i64 %762, 1
  store i64 %763, ptr %30, align 8, !tbaa !9
  br label %676, !llvm.loop !37

764:                                              ; preds = %676
  br label %765

765:                                              ; preds = %764, %672
  br label %766

766:                                              ; preds = %765, %579
  store i32 0, ptr %11, align 4
  store i32 1, ptr %36, align 4
  br label %767

767:                                              ; preds = %766, %307, %147, %129
  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
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  %768 = load i32, ptr %11, align 4
  ret i32 %768
}

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


; 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 [7 x i8], align 1

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

20:                                               ; preds = %10
  %21 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #6
  %.not307 = icmp eq i64 %21, 0
  br i1 %.not307, label %22, label %23

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

23:                                               ; preds = %20, %10
  %24 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str) #6
  %.not308 = icmp eq i64 %24, 0
  br i1 %.not308, label %25, label %30

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

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

29:                                               ; preds = %27
  store i64 2, ptr %11, align 8, !tbaa !5
  br label %.thread

30:                                               ; preds = %27, %25, %23
  %31 = load i64, ptr %2, align 8, !tbaa !5
  %32 = icmp slt i64 %31, 0
  br i1 %32, label %33, label %34

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

34:                                               ; preds = %30
  %35 = load i64, ptr %3, align 8, !tbaa !5
  %36 = icmp slt i64 %35, 0
  br i1 %36, label %37, label %38

37:                                               ; preds = %34
  store i64 4, ptr %11, align 8, !tbaa !5
  br label %.thread

38:                                               ; preds = %34
  %39 = load i64, ptr %6, align 8, !tbaa !5
  %40 = tail call i64 @llvm.smax.i64(i64 %.0284, i64 1)
  %41 = icmp slt i64 %39, %40
  br i1 %41, label %42, label %43

42:                                               ; preds = %38
  store i64 7, ptr %11, align 8, !tbaa !5
  br label %.thread

43:                                               ; preds = %38
  %44 = load i64, ptr %9, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %31, i64 1)
  %45 = icmp slt i64 %44, %spec.select
  br i1 %45, label %46, label %48

46:                                               ; preds = %43
  store i64 10, ptr %11, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %22, %33, %42, %46, %37, %29
  %47 = call i32 @xerbla_(ptr noundef nonnull @.str.5, ptr noundef nonnull %11) #6
  br label %.loopexit

48:                                               ; preds = %43
  %49 = icmp eq i64 %31, 0
  br i1 %49, label %.loopexit, label %50

50:                                               ; preds = %48
  %51 = load double, ptr %4, align 8, !tbaa !9
  %52 = fcmp oeq double %51, 0.000000e+00
  br i1 %52, label %55, label %53

53:                                               ; preds = %50
  %54 = icmp eq i64 %35, 0
  br i1 %54, label %.thread339, label %.thread338

55:                                               ; preds = %50
  %56 = load double, ptr %7, align 8, !tbaa !9
  %57 = fcmp oeq double %56, 1.000000e+00
  br i1 %57, label %.loopexit, label %60

.thread339:                                       ; preds = %53
  %58 = load double, ptr %7, align 8, !tbaa !9
  %59 = fcmp oeq double %58, 1.000000e+00
  br i1 %59, label %.loopexit, label %.thread338

60:                                               ; preds = %55
  %61 = fcmp oeq double %56, 0.000000e+00
  br i1 %.not306, label %110, label %62

62:                                               ; preds = %60
  br i1 %61, label %.preheader345.preheader, label %.preheader348.preheader

.preheader348.preheader:                          ; preds = %62
  %63 = add nuw i64 %31, 1
  %64 = shl i64 %15, 3
  %65 = add i64 %64, 8
  %scevgep623 = getelementptr i8, ptr %7, i64 8
  %invariant.gep759 = getelementptr i8, ptr %8, i64 8
  br label %.preheader348

.preheader345.preheader:                          ; preds = %62
  %66 = shl i64 %15, 3
  %xtraiter706 = and i64 %31, 3
  %67 = icmp ult i64 %31, 4
  br i1 %67, label %.loopexit.loopexit681.unr-lcssa, label %.preheader345.preheader.new

.preheader345.preheader.new:                      ; preds = %.preheader345.preheader
  %unroll_iter709 = and i64 %31, 9223372036854775804
  br label %.preheader345

.preheader345:                                    ; preds = %.preheader345, %.preheader345.preheader.new
  %indvar496 = phi i64 [ 0, %.preheader345.preheader.new ], [ %indvar.next497.3, %.preheader345 ]
  %niter710 = phi i64 [ 0, %.preheader345.preheader.new ], [ %niter710.next.3, %.preheader345 ]
  %68 = mul i64 %66, %indvar496
  %scevgep498 = getelementptr i8, ptr %8, i64 %68
  %69 = shl i64 %indvar496, 3
  %70 = or disjoint i64 %69, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep498, i8 0, i64 %70, i1 false), !tbaa !9
  %indvar.next497 = or disjoint i64 %indvar496, 1
  %71 = mul i64 %66, %indvar.next497
  %scevgep498.1 = getelementptr i8, ptr %8, i64 %71
  %72 = shl i64 %indvar.next497, 3
  %73 = add nuw nsw i64 %72, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep498.1, i8 0, i64 %73, i1 false), !tbaa !9
  %indvar.next497.1 = or disjoint i64 %indvar496, 2
  %74 = mul i64 %66, %indvar.next497.1
  %scevgep498.2 = getelementptr i8, ptr %8, i64 %74
  %75 = shl i64 %indvar.next497.1, 3
  %76 = or disjoint i64 %75, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep498.2, i8 0, i64 %76, i1 false), !tbaa !9
  %indvar.next497.2 = or disjoint i64 %indvar496, 3
  %77 = mul i64 %66, %indvar.next497.2
  %scevgep498.3 = getelementptr i8, ptr %8, i64 %77
  %78 = shl i64 %indvar.next497.2, 3
  %79 = add nuw i64 %78, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep498.3, i8 0, i64 %79, i1 false), !tbaa !9
  %indvar.next497.3 = add nuw nsw i64 %indvar496, 4
  %niter710.next.3 = add i64 %niter710, 4
  %niter710.ncmp.3 = icmp eq i64 %niter710.next.3, %unroll_iter709
  br i1 %niter710.ncmp.3, label %.loopexit.loopexit681.unr-lcssa, label %.preheader345, !llvm.loop !11

.preheader348:                                    ; preds = %.preheader348.preheader, %.loopexit678
  %indvar619 = phi i64 [ 0, %.preheader348.preheader ], [ %indvar.next620, %.loopexit678 ]
  %indvars.iv492 = phi i64 [ 2, %.preheader348.preheader ], [ %indvars.iv.next493, %.loopexit678 ]
  %.1289443 = phi i64 [ 1, %.preheader348.preheader ], [ %109, %.loopexit678 ]
  %80 = mul nsw i64 %.1289443, %15
  %invariant.gep439 = getelementptr double, ptr %17, i64 %80
  %min.iters.check629 = icmp ult i64 %.1289443, 4
  br i1 %min.iters.check629, label %scalar.ph628.preheader, label %vector.memcheck618

vector.memcheck618:                               ; preds = %.preheader348
  %81 = mul i64 %65, %indvar619
  %gep760 = getelementptr i8, ptr %invariant.gep759, i64 %81
  %82 = mul i64 %64, %indvar619
  %scevgep621 = getelementptr i8, ptr %8, i64 %82
  %bound0624 = icmp ult ptr %scevgep621, %scevgep623
  %bound1625 = icmp ugt ptr %gep760, %7
  %found.conflict626 = and i1 %bound0624, %bound1625
  br i1 %found.conflict626, label %scalar.ph628.preheader, label %vector.ph630

vector.ph630:                                     ; preds = %vector.memcheck618
  %n.vec632 = and i64 %.1289443, 9223372036854775804
  %ind.end633 = or disjoint i64 %n.vec632, 1
  %83 = load double, ptr %7, align 8, !tbaa !9, !alias.scope !13
  %broadcast.splatinsert642 = insertelement <2 x double> poison, double %83, i64 0
  %broadcast.splat643 = shufflevector <2 x double> %broadcast.splatinsert642, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body635

vector.body635:                                   ; preds = %vector.body635, %vector.ph630
  %index636 = phi i64 [ 0, %vector.ph630 ], [ %index.next644, %vector.body635 ]
  %offset.idx637 = or disjoint i64 %index636, 1
  %84 = getelementptr double, ptr %invariant.gep439, i64 %offset.idx637
  %85 = getelementptr i8, ptr %84, i64 16
  %wide.load638 = load <2 x double>, ptr %84, align 8, !tbaa !9, !alias.scope !16, !noalias !13
  %wide.load639 = load <2 x double>, ptr %85, align 8, !tbaa !9, !alias.scope !16, !noalias !13
  %86 = fmul <2 x double> %broadcast.splat643, %wide.load638
  %87 = fmul <2 x double> %broadcast.splat643, %wide.load639
  store <2 x double> %86, ptr %84, align 8, !tbaa !9, !alias.scope !16, !noalias !13
  store <2 x double> %87, ptr %85, align 8, !tbaa !9, !alias.scope !16, !noalias !13
  %index.next644 = add nuw i64 %index636, 4
  %88 = icmp eq i64 %index.next644, %n.vec632
  br i1 %88, label %middle.block627, label %vector.body635, !llvm.loop !18

middle.block627:                                  ; preds = %vector.body635
  %cmp.n645 = icmp eq i64 %.1289443, %n.vec632
  br i1 %cmp.n645, label %.loopexit678, label %scalar.ph628.preheader

scalar.ph628.preheader:                           ; preds = %middle.block627, %vector.memcheck618, %.preheader348
  %.1293441.ph = phi i64 [ 1, %vector.memcheck618 ], [ 1, %.preheader348 ], [ %ind.end633, %middle.block627 ]
  %89 = sub i64 %indvars.iv492, %.1293441.ph
  %90 = sub i64 %.1289443, %.1293441.ph
  %xtraiter703 = and i64 %89, 3
  %lcmp.mod704.not = icmp eq i64 %xtraiter703, 0
  br i1 %lcmp.mod704.not, label %scalar.ph628.prol.loopexit, label %scalar.ph628.prol

scalar.ph628.prol:                                ; preds = %scalar.ph628.preheader, %scalar.ph628.prol
  %.1293441.prol = phi i64 [ %94, %scalar.ph628.prol ], [ %.1293441.ph, %scalar.ph628.preheader ]
  %prol.iter705 = phi i64 [ %prol.iter705.next, %scalar.ph628.prol ], [ 0, %scalar.ph628.preheader ]
  %91 = load double, ptr %7, align 8, !tbaa !9
  %gep440.prol = getelementptr double, ptr %invariant.gep439, i64 %.1293441.prol
  %92 = load double, ptr %gep440.prol, align 8, !tbaa !9
  %93 = fmul double %91, %92
  store double %93, ptr %gep440.prol, align 8, !tbaa !9
  %94 = add nuw i64 %.1293441.prol, 1
  %prol.iter705.next = add i64 %prol.iter705, 1
  %prol.iter705.cmp.not = icmp eq i64 %prol.iter705.next, %xtraiter703
  br i1 %prol.iter705.cmp.not, label %scalar.ph628.prol.loopexit, label %scalar.ph628.prol, !llvm.loop !21

scalar.ph628.prol.loopexit:                       ; preds = %scalar.ph628.prol, %scalar.ph628.preheader
  %.1293441.unr = phi i64 [ %.1293441.ph, %scalar.ph628.preheader ], [ %94, %scalar.ph628.prol ]
  %95 = icmp ult i64 %90, 3
  br i1 %95, label %.loopexit678, label %scalar.ph628.preheader.new

scalar.ph628.preheader.new:                       ; preds = %scalar.ph628.prol.loopexit
  %invariant.gep753 = getelementptr i8, ptr %invariant.gep439, i64 8
  %invariant.gep755 = getelementptr i8, ptr %invariant.gep439, i64 16
  %invariant.gep757 = getelementptr i8, ptr %invariant.gep439, i64 24
  br label %scalar.ph628

scalar.ph628:                                     ; preds = %scalar.ph628, %scalar.ph628.preheader.new
  %.1293441 = phi i64 [ %.1293441.unr, %scalar.ph628.preheader.new ], [ %108, %scalar.ph628 ]
  %96 = load double, ptr %7, align 8, !tbaa !9
  %gep440 = getelementptr double, ptr %invariant.gep439, i64 %.1293441
  %97 = load double, ptr %gep440, align 8, !tbaa !9
  %98 = fmul double %96, %97
  store double %98, ptr %gep440, align 8, !tbaa !9
  %99 = load double, ptr %7, align 8, !tbaa !9
  %gep754 = getelementptr double, ptr %invariant.gep753, i64 %.1293441
  %100 = load double, ptr %gep754, align 8, !tbaa !9
  %101 = fmul double %99, %100
  store double %101, ptr %gep754, align 8, !tbaa !9
  %102 = load double, ptr %7, align 8, !tbaa !9
  %gep756 = getelementptr double, ptr %invariant.gep755, i64 %.1293441
  %103 = load double, ptr %gep756, align 8, !tbaa !9
  %104 = fmul double %102, %103
  store double %104, ptr %gep756, align 8, !tbaa !9
  %105 = load double, ptr %7, align 8, !tbaa !9
  %gep758 = getelementptr double, ptr %invariant.gep757, i64 %.1293441
  %106 = load double, ptr %gep758, align 8, !tbaa !9
  %107 = fmul double %105, %106
  store double %107, ptr %gep758, align 8, !tbaa !9
  %108 = add nuw i64 %.1293441, 4
  %exitcond494.not.3 = icmp eq i64 %108, %indvars.iv492
  br i1 %exitcond494.not.3, label %.loopexit678, label %scalar.ph628, !llvm.loop !23

.loopexit678:                                     ; preds = %scalar.ph628.prol.loopexit, %scalar.ph628, %middle.block627
  %109 = add nuw nsw i64 %.1289443, 1
  %indvars.iv.next493 = add nuw i64 %indvars.iv492, 1
  %exitcond495.not = icmp eq i64 %indvars.iv492, %63
  %indvar.next620 = add i64 %indvar619, 1
  br i1 %exitcond495.not, label %.loopexit, label %.preheader348, !llvm.loop !24

110:                                              ; preds = %60
  %111 = shl i64 %15, 3
  %112 = add i64 %111, 8
  br i1 %61, label %.preheader.preheader, label %.preheader342.preheader

.preheader.preheader:                             ; preds = %110
  %xtraiter711 = and i64 %31, 1
  %113 = icmp eq i64 %31, 1
  br i1 %113, label %.loopexit.loopexit.unr-lcssa, label %.preheader.preheader.new

.preheader.preheader.new:                         ; preds = %.preheader.preheader
  %unroll_iter714 = and i64 %31, 9223372036854775806
  br label %.preheader

.preheader342.preheader:                          ; preds = %110
  %scevgep653 = getelementptr i8, ptr %7, i64 8
  %invariant.gep761 = getelementptr i8, ptr %8, i64 8
  br label %.preheader342

.preheader:                                       ; preds = %.preheader, %.preheader.preheader.new
  %indvar501 = phi i64 [ 0, %.preheader.preheader.new ], [ %indvar.next502.1, %.preheader ]
  %.2290458 = phi i64 [ 1, %.preheader.preheader.new ], [ %121, %.preheader ]
  %niter715 = phi i64 [ 0, %.preheader.preheader.new ], [ %niter715.next.1, %.preheader ]
  %114 = mul i64 %112, %indvar501
  %scevgep503 = getelementptr i8, ptr %8, i64 %114
  %smax = tail call i64 @llvm.smax.i64(i64 %31, i64 %.2290458)
  %115 = sub nsw i64 %smax, %indvar501
  %116 = shl nuw i64 %115, 3
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep503, i8 0, i64 %116, i1 false), !tbaa !9
  %117 = add nuw nsw i64 %.2290458, 1
  %indvar.next502 = or disjoint i64 %indvar501, 1
  %118 = mul i64 %112, %indvar.next502
  %scevgep503.1 = getelementptr i8, ptr %8, i64 %118
  %smax.1 = tail call i64 @llvm.smax.i64(i64 %31, i64 %117)
  %119 = sub nsw i64 %smax.1, %indvar.next502
  %120 = shl nuw i64 %119, 3
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep503.1, i8 0, i64 %120, i1 false), !tbaa !9
  %121 = add nuw nsw i64 %.2290458, 2
  %indvar.next502.1 = add nuw nsw i64 %indvar501, 2
  %niter715.next.1 = add i64 %niter715, 2
  %niter715.ncmp.1 = icmp eq i64 %niter715.next.1, %unroll_iter714
  br i1 %niter715.ncmp.1, label %.loopexit.loopexit.unr-lcssa, label %.preheader, !llvm.loop !25

.preheader342:                                    ; preds = %.preheader342.preheader, %.loopexit677
  %indvar647 = phi i64 [ 0, %.preheader342.preheader ], [ %indvar.next648, %.loopexit677 ]
  %.3291453 = phi i64 [ 1, %.preheader342.preheader ], [ %139, %.loopexit677 ]
  %smax657 = tail call i64 @llvm.smax.i64(i64 %31, i64 %.3291453)
  %122 = sub i64 %smax657, %indvar647
  %123 = mul nsw i64 %.3291453, %15
  %invariant.gep450 = getelementptr double, ptr %17, i64 %123
  %min.iters.check660 = icmp ult i64 %122, 4
  br i1 %min.iters.check660, label %scalar.ph659.preheader, label %vector.memcheck646

vector.memcheck646:                               ; preds = %.preheader342
  %124 = mul i64 %112, %indvar647
  %gep762 = getelementptr i8, ptr %invariant.gep761, i64 %124
  %smax651 = tail call i64 @llvm.smax.i64(i64 %31, i64 %.3291453)
  %125 = xor i64 %indvar647, -1
  %126 = add i64 %smax651, %125
  %127 = shl i64 %126, 3
  %scevgep652 = getelementptr i8, ptr %gep762, i64 %127
  %scevgep649 = getelementptr i8, ptr %8, i64 %124
  %bound0654 = icmp ult ptr %scevgep649, %scevgep653
  %bound1655 = icmp ugt ptr %scevgep652, %7
  %found.conflict656 = and i1 %bound0654, %bound1655
  br i1 %found.conflict656, label %scalar.ph659.preheader, label %vector.ph661

vector.ph661:                                     ; preds = %vector.memcheck646
  %n.vec663 = and i64 %122, -4
  %ind.end664 = add i64 %.3291453, %n.vec663
  %128 = load double, ptr %7, align 8, !tbaa !9, !alias.scope !26
  %broadcast.splatinsert673 = insertelement <2 x double> poison, double %128, i64 0
  %broadcast.splat674 = shufflevector <2 x double> %broadcast.splatinsert673, <2 x double> poison, <2 x i32> zeroinitializer
  %129 = getelementptr double, ptr %invariant.gep450, i64 %.3291453
  br label %vector.body666

vector.body666:                                   ; preds = %vector.body666, %vector.ph661
  %index667 = phi i64 [ 0, %vector.ph661 ], [ %index.next675, %vector.body666 ]
  %130 = getelementptr double, ptr %129, i64 %index667
  %131 = getelementptr i8, ptr %130, i64 16
  %wide.load669 = load <2 x double>, ptr %130, align 8, !tbaa !9, !alias.scope !29, !noalias !26
  %wide.load670 = load <2 x double>, ptr %131, align 8, !tbaa !9, !alias.scope !29, !noalias !26
  %132 = fmul <2 x double> %broadcast.splat674, %wide.load669
  %133 = fmul <2 x double> %broadcast.splat674, %wide.load670
  store <2 x double> %132, ptr %130, align 8, !tbaa !9, !alias.scope !29, !noalias !26
  store <2 x double> %133, ptr %131, align 8, !tbaa !9, !alias.scope !29, !noalias !26
  %index.next675 = add nuw i64 %index667, 4
  %134 = icmp eq i64 %index.next675, %n.vec663
  br i1 %134, label %middle.block658, label %vector.body666, !llvm.loop !31

middle.block658:                                  ; preds = %vector.body666
  %cmp.n676 = icmp eq i64 %122, %n.vec663
  br i1 %cmp.n676, label %.loopexit677, label %scalar.ph659.preheader

scalar.ph659.preheader:                           ; preds = %middle.block658, %vector.memcheck646, %.preheader342
  %.3295449.ph = phi i64 [ %.3291453, %vector.memcheck646 ], [ %.3291453, %.preheader342 ], [ %ind.end664, %middle.block658 ]
  br label %scalar.ph659

scalar.ph659:                                     ; preds = %scalar.ph659.preheader, %scalar.ph659
  %.3295449 = phi i64 [ %138, %scalar.ph659 ], [ %.3295449.ph, %scalar.ph659.preheader ]
  %135 = load double, ptr %7, align 8, !tbaa !9
  %gep451 = getelementptr double, ptr %invariant.gep450, i64 %.3295449
  %136 = load double, ptr %gep451, align 8, !tbaa !9
  %137 = fmul double %135, %136
  store double %137, ptr %gep451, align 8, !tbaa !9
  %138 = add nuw nsw i64 %.3295449, 1
  %.not330.not = icmp slt i64 %.3295449, %31
  br i1 %.not330.not, label %scalar.ph659, label %.loopexit677, !llvm.loop !32

.loopexit677:                                     ; preds = %scalar.ph659, %middle.block658
  %139 = add nuw i64 %.3291453, 1
  %exitcond500.not = icmp eq i64 %.3291453, %31
  %indvar.next648 = add i64 %indvar647, 1
  br i1 %exitcond500.not, label %.loopexit, label %.preheader342, !llvm.loop !33

.thread338:                                       ; preds = %.thread339, %53
  %140 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str) #6
  %.not312 = icmp eq i64 %140, 0
  %141 = load i64, ptr %2, align 8, !tbaa !5
  %.not313437 = icmp slt i64 %141, 1
  br i1 %.not312, label %291, label %142

142:                                              ; preds = %.thread338
  br i1 %.not306, label %227, label %143

143:                                              ; preds = %142
  br i1 %.not313437, label %.loopexit, label %.lr.ph381

.lr.ph381:                                        ; preds = %143
  %144 = load i64, ptr %3, align 8, !tbaa !5
  %.not327376 = icmp slt i64 %144, 1
  %145 = shl i64 %15, 3
  %146 = shl i64 %15, 3
  %147 = add i64 %146, 8
  %148 = add i64 %144, 2305843009213693951
  %149 = mul i64 %12, %148
  %150 = shl i64 %15, 3
  %151 = add i64 %150, 8
  %scevgep534 = getelementptr i8, ptr %7, i64 8
  %invariant.gep731 = getelementptr i8, ptr %8, i64 8
  %invariant.gep733 = getelementptr i8, ptr %8, i64 8
  %invariant.gep735 = getelementptr i8, ptr %5, i64 8
  %.mask = and i64 %12, 1152921504606846976
  %stride.check = icmp ne i64 %.mask, 0
  br label %152

152:                                              ; preds = %.lr.ph381, %._crit_edge
  %indvar = phi i64 [ 0, %.lr.ph381 ], [ %indvar.next, %._crit_edge ]
  %indvars.iv = phi i64 [ 2, %.lr.ph381 ], [ %indvars.iv.next, %._crit_edge ]
  %.4379 = phi i64 [ 1, %.lr.ph381 ], [ %226, %._crit_edge ]
  %153 = mul i64 %150, %indvar
  %scevgep532 = getelementptr i8, ptr %8, i64 %153
  %154 = mul i64 %151, %indvar
  %gep732 = getelementptr i8, ptr %invariant.gep731, i64 %154
  %155 = mul i64 %146, %indvar
  %scevgep525 = getelementptr i8, ptr %8, i64 %155
  %156 = mul i64 %147, %indvar
  %gep734 = getelementptr i8, ptr %invariant.gep733, i64 %156
  %157 = add i64 %149, %indvar
  %158 = shl i64 %157, 3
  %gep736 = getelementptr i8, ptr %invariant.gep735, i64 %158
  %159 = load double, ptr %7, align 8, !tbaa !9
  %160 = fcmp oeq double %159, 0.000000e+00
  br i1 %160, label %.preheader362, label %164

.preheader362:                                    ; preds = %152
  %161 = shl i64 %indvar, 3
  %162 = add nuw i64 %161, 8
  %163 = mul i64 %145, %indvar
  %scevgep = getelementptr i8, ptr %8, i64 %163
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep, i8 0, i64 %162, i1 false), !tbaa !9
  br label %.loopexit363

164:                                              ; preds = %152
  %165 = fcmp une double %159, 1.000000e+00
  br i1 %165, label %.preheader364, label %.loopexit363

.preheader364:                                    ; preds = %164
  %166 = mul nsw i64 %.4379, %15
  %invariant.gep = getelementptr double, ptr %17, i64 %166
  %min.iters.check540 = icmp ult i64 %.4379, 4
  br i1 %min.iters.check540, label %scalar.ph539.preheader, label %vector.memcheck531

vector.memcheck531:                               ; preds = %.preheader364
  %bound0535 = icmp ult ptr %scevgep532, %scevgep534
  %bound1536 = icmp ugt ptr %gep732, %7
  %found.conflict537 = and i1 %bound0535, %bound1536
  br i1 %found.conflict537, label %scalar.ph539.preheader, label %vector.ph541

vector.ph541:                                     ; preds = %vector.memcheck531
  %n.vec543 = and i64 %.4379, -4
  %ind.end544 = or disjoint i64 %n.vec543, 1
  %167 = load double, ptr %7, align 8, !tbaa !9, !alias.scope !34
  %broadcast.splatinsert553 = insertelement <2 x double> poison, double %167, i64 0
  %broadcast.splat554 = shufflevector <2 x double> %broadcast.splatinsert553, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body546

vector.body546:                                   ; preds = %vector.body546, %vector.ph541
  %index547 = phi i64 [ 0, %vector.ph541 ], [ %index.next555, %vector.body546 ]
  %offset.idx548 = or disjoint i64 %index547, 1
  %168 = getelementptr double, ptr %invariant.gep, i64 %offset.idx548
  %169 = getelementptr i8, ptr %168, i64 16
  %wide.load549 = load <2 x double>, ptr %168, align 8, !tbaa !9, !alias.scope !37, !noalias !34
  %wide.load550 = load <2 x double>, ptr %169, align 8, !tbaa !9, !alias.scope !37, !noalias !34
  %170 = fmul <2 x double> %broadcast.splat554, %wide.load549
  %171 = fmul <2 x double> %broadcast.splat554, %wide.load550
  store <2 x double> %170, ptr %168, align 8, !tbaa !9, !alias.scope !37, !noalias !34
  store <2 x double> %171, ptr %169, align 8, !tbaa !9, !alias.scope !37, !noalias !34
  %index.next555 = add nuw i64 %index547, 4
  %172 = icmp eq i64 %index.next555, %n.vec543
  br i1 %172, label %middle.block538, label %vector.body546, !llvm.loop !39

middle.block538:                                  ; preds = %vector.body546
  %cmp.n556 = icmp eq i64 %.4379, %n.vec543
  br i1 %cmp.n556, label %.loopexit363, label %scalar.ph539.preheader

scalar.ph539.preheader:                           ; preds = %middle.block538, %vector.memcheck531, %.preheader364
  %.5297367.ph = phi i64 [ 1, %vector.memcheck531 ], [ 1, %.preheader364 ], [ %ind.end544, %middle.block538 ]
  %173 = sub i64 %indvars.iv, %.5297367.ph
  %174 = sub i64 %.4379, %.5297367.ph
  %xtraiter = and i64 %173, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph539.prol.loopexit, label %scalar.ph539.prol

scalar.ph539.prol:                                ; preds = %scalar.ph539.preheader, %scalar.ph539.prol
  %.5297367.prol = phi i64 [ %178, %scalar.ph539.prol ], [ %.5297367.ph, %scalar.ph539.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph539.prol ], [ 0, %scalar.ph539.preheader ]
  %175 = load double, ptr %7, align 8, !tbaa !9
  %gep.prol = getelementptr double, ptr %invariant.gep, i64 %.5297367.prol
  %176 = load double, ptr %gep.prol, align 8, !tbaa !9
  %177 = fmul double %175, %176
  store double %177, ptr %gep.prol, align 8, !tbaa !9
  %178 = add nuw i64 %.5297367.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %scalar.ph539.prol.loopexit, label %scalar.ph539.prol, !llvm.loop !40

scalar.ph539.prol.loopexit:                       ; preds = %scalar.ph539.prol, %scalar.ph539.preheader
  %.5297367.unr = phi i64 [ %.5297367.ph, %scalar.ph539.preheader ], [ %178, %scalar.ph539.prol ]
  %179 = icmp ult i64 %174, 3
  br i1 %179, label %.loopexit363, label %scalar.ph539.preheader.new

scalar.ph539.preheader.new:                       ; preds = %scalar.ph539.prol.loopexit
  %invariant.gep725 = getelementptr i8, ptr %invariant.gep, i64 8
  %invariant.gep727 = getelementptr i8, ptr %invariant.gep, i64 16
  %invariant.gep729 = getelementptr i8, ptr %invariant.gep, i64 24
  br label %scalar.ph539

scalar.ph539:                                     ; preds = %scalar.ph539, %scalar.ph539.preheader.new
  %.5297367 = phi i64 [ %.5297367.unr, %scalar.ph539.preheader.new ], [ %192, %scalar.ph539 ]
  %180 = load double, ptr %7, align 8, !tbaa !9
  %gep = getelementptr double, ptr %invariant.gep, i64 %.5297367
  %181 = load double, ptr %gep, align 8, !tbaa !9
  %182 = fmul double %180, %181
  store double %182, ptr %gep, align 8, !tbaa !9
  %183 = load double, ptr %7, align 8, !tbaa !9
  %gep726 = getelementptr double, ptr %invariant.gep725, i64 %.5297367
  %184 = load double, ptr %gep726, align 8, !tbaa !9
  %185 = fmul double %183, %184
  store double %185, ptr %gep726, align 8, !tbaa !9
  %186 = load double, ptr %7, align 8, !tbaa !9
  %gep728 = getelementptr double, ptr %invariant.gep727, i64 %.5297367
  %187 = load double, ptr %gep728, align 8, !tbaa !9
  %188 = fmul double %186, %187
  store double %188, ptr %gep728, align 8, !tbaa !9
  %189 = load double, ptr %7, align 8, !tbaa !9
  %gep730 = getelementptr double, ptr %invariant.gep729, i64 %.5297367
  %190 = load double, ptr %gep730, align 8, !tbaa !9
  %191 = fmul double %189, %190
  store double %191, ptr %gep730, align 8, !tbaa !9
  %192 = add nuw i64 %.5297367, 4
  %exitcond.not.3 = icmp eq i64 %192, %indvars.iv
  br i1 %exitcond.not.3, label %.loopexit363, label %scalar.ph539, !llvm.loop !41

.loopexit363:                                     ; preds = %scalar.ph539.prol.loopexit, %scalar.ph539, %middle.block538, %.preheader362, %164
  br i1 %.not327376, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.loopexit363
  %193 = getelementptr double, ptr %14, i64 %.4379
  %194 = mul nsw i64 %.4379, %15
  %invariant.gep373 = getelementptr double, ptr %17, i64 %194
  %min.iters.check = icmp ult i64 %.4379, 4
  %bound0 = icmp ult ptr %scevgep525, %gep736
  %bound1 = icmp ugt ptr %gep734, %5
  %found.conflict = and i1 %bound0, %bound1
  %195 = or i1 %found.conflict, %stride.check
  %n.vec = and i64 %.4379, -4
  %ind.end = or disjoint i64 %n.vec, 1
  %cmp.n = icmp eq i64 %.4379, %n.vec
  %196 = and i64 %indvars.iv, 1
  %lcmp.mod691.not.not = icmp eq i64 %196, 0
  br label %197

197:                                              ; preds = %.lr.ph, %.loopexit361
  %.0286377 = phi i64 [ 1, %.lr.ph ], [ %225, %.loopexit361 ]
  %198 = mul nsw i64 %.0286377, %12
  %199 = getelementptr double, ptr %193, i64 %198
  %200 = load double, ptr %199, align 8, !tbaa !9
  %201 = fcmp une double %200, 0.000000e+00
  br i1 %201, label %202, label %.loopexit361

202:                                              ; preds = %197
  %203 = load double, ptr %4, align 8, !tbaa !9
  %204 = fmul double %200, %203
  %invariant.gep371 = getelementptr double, ptr %14, i64 %198
  %brmerge = select i1 %min.iters.check, i1 true, i1 %195
  br i1 %brmerge, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %202
  %broadcast.splatinsert = insertelement <2 x double> poison, double %204, 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
  %205 = getelementptr double, ptr %invariant.gep371, i64 %offset.idx
  %206 = getelementptr i8, ptr %205, i64 16
  %wide.load = load <2 x double>, ptr %205, align 8, !tbaa !9, !alias.scope !42
  %wide.load528 = load <2 x double>, ptr %206, align 8, !tbaa !9, !alias.scope !42
  %207 = getelementptr double, ptr %invariant.gep373, i64 %offset.idx
  %208 = getelementptr i8, ptr %207, i64 16
  %wide.load529 = load <2 x double>, ptr %207, align 8, !tbaa !9, !alias.scope !45, !noalias !42
  %wide.load530 = load <2 x double>, ptr %208, align 8, !tbaa !9, !alias.scope !45, !noalias !42
  %209 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load, <2 x double> %wide.load529)
  %210 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load528, <2 x double> %wide.load530)
  store <2 x double> %209, ptr %207, align 8, !tbaa !9, !alias.scope !45, !noalias !42
  store <2 x double> %210, ptr %208, align 8, !tbaa !9, !alias.scope !45, !noalias !42
  %index.next = add nuw i64 %index, 4
  %211 = icmp eq i64 %index.next, %n.vec
  br i1 %211, label %middle.block, label %vector.body, !llvm.loop !47

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %.loopexit361, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %202, %middle.block
  %.6298375.ph = phi i64 [ 1, %202 ], [ %ind.end, %middle.block ]
  br i1 %lcmp.mod691.not.not, label %scalar.ph.prol, label %scalar.ph.prol.loopexit

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %gep372.prol = getelementptr double, ptr %invariant.gep371, i64 %.6298375.ph
  %212 = load double, ptr %gep372.prol, align 8, !tbaa !9
  %gep374.prol = getelementptr double, ptr %invariant.gep373, i64 %.6298375.ph
  %213 = load double, ptr %gep374.prol, align 8, !tbaa !9
  %214 = tail call double @llvm.fmuladd.f64(double %204, double %212, double %213)
  store double %214, ptr %gep374.prol, align 8, !tbaa !9
  %215 = add nuw i64 %.6298375.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.6298375.unr = phi i64 [ %.6298375.ph, %scalar.ph.preheader ], [ %215, %scalar.ph.prol ]
  %216 = icmp eq i64 %.4379, %.6298375.ph
  br i1 %216, label %.loopexit361, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.6298375 = phi i64 [ %224, %scalar.ph ], [ %.6298375.unr, %scalar.ph.prol.loopexit ]
  %gep372 = getelementptr double, ptr %invariant.gep371, i64 %.6298375
  %217 = load double, ptr %gep372, align 8, !tbaa !9
  %gep374 = getelementptr double, ptr %invariant.gep373, i64 %.6298375
  %218 = load double, ptr %gep374, align 8, !tbaa !9
  %219 = tail call double @llvm.fmuladd.f64(double %204, double %217, double %218)
  store double %219, ptr %gep374, align 8, !tbaa !9
  %220 = add nuw i64 %.6298375, 1
  %gep372.1 = getelementptr double, ptr %invariant.gep371, i64 %220
  %221 = load double, ptr %gep372.1, align 8, !tbaa !9
  %gep374.1 = getelementptr double, ptr %invariant.gep373, i64 %220
  %222 = load double, ptr %gep374.1, align 8, !tbaa !9
  %223 = tail call double @llvm.fmuladd.f64(double %204, double %221, double %222)
  store double %223, ptr %gep374.1, align 8, !tbaa !9
  %224 = add nuw i64 %.6298375, 2
  %exitcond472.not.1 = icmp eq i64 %224, %indvars.iv
  br i1 %exitcond472.not.1, label %.loopexit361, label %scalar.ph, !llvm.loop !48

.loopexit361:                                     ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %197
  %225 = add nuw i64 %.0286377, 1
  %exitcond473.not = icmp eq i64 %.0286377, %144
  br i1 %exitcond473.not, label %._crit_edge, label %197, !llvm.loop !49

._crit_edge:                                      ; preds = %.loopexit361, %.loopexit363
  %226 = add nuw i64 %.4379, 1
  %indvars.iv.next = add nuw i64 %indvars.iv, 1
  %indvar.next = add nuw nsw i64 %indvar, 1
  %exitcond474.not = icmp eq i64 %indvar.next, %141
  br i1 %exitcond474.not, label %.loopexit, label %152, !llvm.loop !50

227:                                              ; preds = %142
  br i1 %.not313437, label %.loopexit, label %.lr.ph409

.lr.ph409:                                        ; preds = %227
  %228 = load i64, ptr %3, align 8, !tbaa !5
  %.not322400 = icmp slt i64 %228, 1
  %229 = shl i64 %15, 3
  %230 = add i64 %229, 8
  %231 = add i64 %228, 2305843009213693951
  %232 = mul i64 %12, %231
  %233 = shl i64 %232, 3
  %234 = shl i64 %15, 3
  %235 = add i64 %234, 8
  %scevgep594 = getelementptr i8, ptr %7, i64 8
  %invariant.gep737 = getelementptr i8, ptr %8, i64 8
  %invariant.gep739 = getelementptr i8, ptr %8, i64 8
  %236 = getelementptr i8, ptr %5, i64 %233
  %237 = getelementptr i8, ptr %236, i64 8
  %.mask679 = and i64 %12, 1152921504606846976
  %stride.check568 = icmp ne i64 %.mask679, 0
  br label %238

238:                                              ; preds = %.lr.ph409, %._crit_edge404
  %indvar475 = phi i64 [ 0, %.lr.ph409 ], [ %indvar.next476, %._crit_edge404 ]
  %.5406 = phi i64 [ 1, %.lr.ph409 ], [ %290, %._crit_edge404 ]
  %smax598 = tail call i64 @llvm.smax.i64(i64 %141, i64 %.5406)
  %239 = sub nsw i64 %smax598, %indvar475
  %240 = mul i64 %235, %indvar475
  %scevgep590 = getelementptr i8, ptr %8, i64 %240
  %gep738 = getelementptr i8, ptr %invariant.gep737, i64 %240
  %smax592 = tail call i64 @llvm.smax.i64(i64 %141, i64 %.5406)
  %241 = xor i64 %indvar475, -1
  %242 = add nsw i64 %smax592, %241
  %243 = shl i64 %242, 3
  %scevgep593 = getelementptr i8, ptr %gep738, i64 %243
  %smax569 = tail call i64 @llvm.smax.i64(i64 %141, i64 %.5406)
  %244 = sub nsw i64 %smax569, %indvar475
  %245 = mul i64 %230, %indvar475
  %scevgep558 = getelementptr i8, ptr %8, i64 %245
  %gep740 = getelementptr i8, ptr %invariant.gep739, i64 %245
  %smax560 = tail call i64 @llvm.smax.i64(i64 %141, i64 %.5406)
  %246 = xor i64 %indvar475, -1
  %247 = add nsw i64 %smax560, %246
  %248 = shl i64 %247, 3
  %scevgep561 = getelementptr i8, ptr %gep740, i64 %248
  %249 = shl i64 %indvar475, 3
  %scevgep562 = getelementptr i8, ptr %5, i64 %249
  %scevgep563 = getelementptr i8, ptr %237, i64 %249
  %scevgep564 = getelementptr i8, ptr %scevgep563, i64 %248
  %250 = load double, ptr %7, align 8, !tbaa !9
  %251 = fcmp oeq double %250, 0.000000e+00
  br i1 %251, label %.lr.ph389, label %255

.lr.ph389:                                        ; preds = %238
  %252 = sub nsw i64 %141, %indvar475
  %253 = shl i64 %252, 3
  %254 = mul i64 %230, %indvar475
  %scevgep477 = getelementptr i8, ptr %8, i64 %254
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep477, i8 0, i64 %253, i1 false), !tbaa !9
  br label %.loopexit357

255:                                              ; preds = %238
  %256 = fcmp oeq double %250, 1.000000e+00
  br i1 %256, label %.loopexit357, label %.lr.ph384

.lr.ph384:                                        ; preds = %255
  %257 = mul nsw i64 %.5406, %15
  %invariant.gep385 = getelementptr double, ptr %17, i64 %257
  %min.iters.check601 = icmp ult i64 %239, 4
  br i1 %min.iters.check601, label %scalar.ph600.preheader, label %vector.memcheck589

vector.memcheck589:                               ; preds = %.lr.ph384
  %bound0595 = icmp ult ptr %scevgep590, %scevgep594
  %bound1596 = icmp ugt ptr %scevgep593, %7
  %found.conflict597 = and i1 %bound0595, %bound1596
  br i1 %found.conflict597, label %scalar.ph600.preheader, label %vector.ph602

vector.ph602:                                     ; preds = %vector.memcheck589
  %n.vec604 = and i64 %239, -4
  %ind.end605 = add i64 %.5406, %n.vec604
  %258 = load double, ptr %7, align 8, !tbaa !9, !alias.scope !51
  %broadcast.splatinsert614 = insertelement <2 x double> poison, double %258, i64 0
  %broadcast.splat615 = shufflevector <2 x double> %broadcast.splatinsert614, <2 x double> poison, <2 x i32> zeroinitializer
  %259 = getelementptr double, ptr %invariant.gep385, i64 %.5406
  br label %vector.body607

vector.body607:                                   ; preds = %vector.body607, %vector.ph602
  %index608 = phi i64 [ 0, %vector.ph602 ], [ %index.next616, %vector.body607 ]
  %260 = getelementptr double, ptr %259, i64 %index608
  %261 = getelementptr i8, ptr %260, i64 16
  %wide.load610 = load <2 x double>, ptr %260, align 8, !tbaa !9, !alias.scope !54, !noalias !51
  %wide.load611 = load <2 x double>, ptr %261, align 8, !tbaa !9, !alias.scope !54, !noalias !51
  %262 = fmul <2 x double> %broadcast.splat615, %wide.load610
  %263 = fmul <2 x double> %broadcast.splat615, %wide.load611
  store <2 x double> %262, ptr %260, align 8, !tbaa !9, !alias.scope !54, !noalias !51
  store <2 x double> %263, ptr %261, align 8, !tbaa !9, !alias.scope !54, !noalias !51
  %index.next616 = add nuw i64 %index608, 4
  %264 = icmp eq i64 %index.next616, %n.vec604
  br i1 %264, label %middle.block599, label %vector.body607, !llvm.loop !56

middle.block599:                                  ; preds = %vector.body607
  %cmp.n617 = icmp eq i64 %239, %n.vec604
  br i1 %cmp.n617, label %.loopexit357, label %scalar.ph600.preheader

scalar.ph600.preheader:                           ; preds = %middle.block599, %vector.memcheck589, %.lr.ph384
  %.8383.ph = phi i64 [ %.5406, %vector.memcheck589 ], [ %.5406, %.lr.ph384 ], [ %ind.end605, %middle.block599 ]
  br label %scalar.ph600

scalar.ph600:                                     ; preds = %scalar.ph600.preheader, %scalar.ph600
  %.8383 = phi i64 [ %268, %scalar.ph600 ], [ %.8383.ph, %scalar.ph600.preheader ]
  %265 = load double, ptr %7, align 8, !tbaa !9
  %gep386 = getelementptr double, ptr %invariant.gep385, i64 %.8383
  %266 = load double, ptr %gep386, align 8, !tbaa !9
  %267 = fmul double %265, %266
  store double %267, ptr %gep386, align 8, !tbaa !9
  %268 = add nuw nsw i64 %.8383, 1
  %.not320.not = icmp slt i64 %.8383, %141
  br i1 %.not320.not, label %scalar.ph600, label %.loopexit357, !llvm.loop !57

.loopexit357:                                     ; preds = %scalar.ph600, %middle.block599, %.lr.ph389, %255
  br i1 %.not322400, label %._crit_edge404, label %.lr.ph403.split.preheader

.lr.ph403.split.preheader:                        ; preds = %.loopexit357
  %269 = getelementptr double, ptr %14, i64 %.5406
  %270 = mul nsw i64 %.5406, %15
  %invariant.gep398 = getelementptr double, ptr %17, i64 %270
  %min.iters.check572 = icmp ult i64 %244, 4
  %bound0565 = icmp ult ptr %scevgep558, %scevgep564
  %bound1566 = icmp ult ptr %scevgep562, %scevgep561
  %found.conflict567 = and i1 %bound0565, %bound1566
  %271 = or i1 %found.conflict567, %stride.check568
  %n.vec575 = and i64 %244, -4
  %ind.end576 = add i64 %.5406, %n.vec575
  %cmp.n588 = icmp eq i64 %244, %n.vec575
  br label %.lr.ph403.split

.lr.ph403.split:                                  ; preds = %.lr.ph403.split.preheader, %..loopexit355_crit_edge
  %.1287401 = phi i64 [ %289, %..loopexit355_crit_edge ], [ 1, %.lr.ph403.split.preheader ]
  %272 = mul nsw i64 %.1287401, %12
  %273 = getelementptr double, ptr %269, i64 %272
  %274 = load double, ptr %273, align 8, !tbaa !9
  %275 = fcmp une double %274, 0.000000e+00
  br i1 %275, label %.lr.ph397, label %..loopexit355_crit_edge

.lr.ph397:                                        ; preds = %.lr.ph403.split
  %276 = load double, ptr %4, align 8, !tbaa !9
  %277 = fmul double %274, %276
  %invariant.gep392 = getelementptr double, ptr %14, i64 %272
  %brmerge763 = select i1 %min.iters.check572, i1 true, i1 %271
  br i1 %brmerge763, label %scalar.ph571.preheader, label %vector.ph573

vector.ph573:                                     ; preds = %.lr.ph397
  %broadcast.splatinsert585 = insertelement <2 x double> poison, double %277, i64 0
  %broadcast.splat586 = shufflevector <2 x double> %broadcast.splatinsert585, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body578

vector.body578:                                   ; preds = %vector.body578, %vector.ph573
  %index579 = phi i64 [ 0, %vector.ph573 ], [ %index.next587, %vector.body578 ]
  %offset.idx580 = add i64 %.5406, %index579
  %278 = getelementptr double, ptr %invariant.gep392, i64 %offset.idx580
  %279 = getelementptr i8, ptr %278, i64 16
  %wide.load581 = load <2 x double>, ptr %278, align 8, !tbaa !9, !alias.scope !58
  %wide.load582 = load <2 x double>, ptr %279, align 8, !tbaa !9, !alias.scope !58
  %280 = getelementptr double, ptr %invariant.gep398, i64 %offset.idx580
  %281 = getelementptr i8, ptr %280, i64 16
  %wide.load583 = load <2 x double>, ptr %280, align 8, !tbaa !9, !alias.scope !61, !noalias !58
  %wide.load584 = load <2 x double>, ptr %281, align 8, !tbaa !9, !alias.scope !61, !noalias !58
  %282 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat586, <2 x double> %wide.load581, <2 x double> %wide.load583)
  %283 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat586, <2 x double> %wide.load582, <2 x double> %wide.load584)
  store <2 x double> %282, ptr %280, align 8, !tbaa !9, !alias.scope !61, !noalias !58
  store <2 x double> %283, ptr %281, align 8, !tbaa !9, !alias.scope !61, !noalias !58
  %index.next587 = add nuw i64 %index579, 4
  %284 = icmp eq i64 %index.next587, %n.vec575
  br i1 %284, label %middle.block570, label %vector.body578, !llvm.loop !63

middle.block570:                                  ; preds = %vector.body578
  br i1 %cmp.n588, label %..loopexit355_crit_edge, label %scalar.ph571.preheader

scalar.ph571.preheader:                           ; preds = %.lr.ph397, %middle.block570
  %.9395.ph = phi i64 [ %.5406, %.lr.ph397 ], [ %ind.end576, %middle.block570 ]
  br label %scalar.ph571

scalar.ph571:                                     ; preds = %scalar.ph571.preheader, %scalar.ph571
  %.9395 = phi i64 [ %288, %scalar.ph571 ], [ %.9395.ph, %scalar.ph571.preheader ]
  %gep393 = getelementptr double, ptr %invariant.gep392, i64 %.9395
  %285 = load double, ptr %gep393, align 8, !tbaa !9
  %gep399 = getelementptr double, ptr %invariant.gep398, i64 %.9395
  %286 = load double, ptr %gep399, align 8, !tbaa !9
  %287 = tail call double @llvm.fmuladd.f64(double %277, double %285, double %286)
  store double %287, ptr %gep399, align 8, !tbaa !9
  %288 = add nuw nsw i64 %.9395, 1
  %.not323.not = icmp slt i64 %.9395, %141
  br i1 %.not323.not, label %scalar.ph571, label %..loopexit355_crit_edge, !llvm.loop !64

..loopexit355_crit_edge:                          ; preds = %scalar.ph571, %middle.block570, %.lr.ph403.split
  %289 = add nuw i64 %.1287401, 1
  %exitcond478.not = icmp eq i64 %.1287401, %228
  br i1 %exitcond478.not, label %._crit_edge404, label %.lr.ph403.split, !llvm.loop !65

._crit_edge404:                                   ; preds = %..loopexit355_crit_edge, %.loopexit357
  %290 = add nuw i64 %.5406, 1
  %indvar.next476 = add nuw nsw i64 %indvar475, 1
  %exitcond479.not = icmp eq i64 %indvar.next476, %141
  br i1 %exitcond479.not, label %.loopexit, label %238, !llvm.loop !66

291:                                              ; preds = %.thread338
  br i1 %.not306, label %354, label %292

292:                                              ; preds = %291
  br i1 %.not313437, label %.loopexit, label %.preheader353.lr.ph

.preheader353.lr.ph:                              ; preds = %292
  %293 = load i64, ptr %3, align 8, !tbaa !5
  %.not318410 = icmp slt i64 %293, 1
  %294 = add nuw i64 %141, 1
  br i1 %.not318410, label %.preheader353.us, label %.preheader353.preheader

.preheader353.preheader:                          ; preds = %.preheader353.lr.ph
  %xtraiter693 = and i64 %293, 3
  %295 = icmp ult i64 %293, 4
  %unroll_iter = and i64 %293, 9223372036854775804
  %invariant.gep741 = getelementptr i8, ptr %14, i64 8
  %invariant.gep743 = getelementptr i8, ptr %14, i64 16
  %invariant.gep745 = getelementptr i8, ptr %14, i64 24
  %lcmp.mod694.not = icmp eq i64 %xtraiter693, 0
  br label %.preheader353

.preheader353.us:                                 ; preds = %.preheader353.lr.ph, %.split.us.us
  %indvars.iv485 = phi i64 [ %indvars.iv.next486, %.split.us.us ], [ 2, %.preheader353.lr.ph ]
  %.6422.us = phi i64 [ %309, %.split.us.us ], [ 1, %.preheader353.lr.ph ]
  %296 = mul nsw i64 %.6422.us, %15
  %invariant.gep417.us = getelementptr double, ptr %17, i64 %296
  br label %297

297:                                              ; preds = %307, %.preheader353.us
  %.10416.us.us = phi i64 [ 1, %.preheader353.us ], [ %308, %307 ]
  %298 = load double, ptr %7, align 8, !tbaa !9
  %299 = fcmp oeq double %298, 0.000000e+00
  %300 = load double, ptr %4, align 8, !tbaa !9
  br i1 %299, label %305, label %301

301:                                              ; preds = %297
  %gep418.us.us = getelementptr double, ptr %invariant.gep417.us, i64 %.10416.us.us
  %302 = load double, ptr %gep418.us.us, align 8, !tbaa !9
  %303 = fmul double %298, %302
  %304 = tail call double @llvm.fmuladd.f64(double %300, double 0.000000e+00, double %303)
  store double %304, ptr %gep418.us.us, align 8, !tbaa !9
  br label %307

305:                                              ; preds = %297
  %306 = fmul double %300, 0.000000e+00
  %gep420.us.us = getelementptr double, ptr %invariant.gep417.us, i64 %.10416.us.us
  store double %306, ptr %gep420.us.us, align 8, !tbaa !9
  br label %307

307:                                              ; preds = %305, %301
  %308 = add nuw i64 %.10416.us.us, 1
  %exitcond487.not = icmp eq i64 %308, %indvars.iv485
  br i1 %exitcond487.not, label %.split.us.us, label %297, !llvm.loop !67

.split.us.us:                                     ; preds = %307
  %309 = add nuw nsw i64 %.6422.us, 1
  %indvars.iv.next486 = add nuw i64 %indvars.iv485, 1
  %exitcond488.not = icmp eq i64 %indvars.iv485, %294
  br i1 %exitcond488.not, label %.loopexit, label %.preheader353.us, !llvm.loop !68

.preheader353:                                    ; preds = %.preheader353.preheader, %.split
  %indvars.iv481 = phi i64 [ %indvars.iv.next482, %.split ], [ 2, %.preheader353.preheader ]
  %.6422 = phi i64 [ %353, %.split ], [ 1, %.preheader353.preheader ]
  %310 = mul nsw i64 %.6422, %12
  %311 = mul nsw i64 %.6422, %15
  %invariant.gep417 = getelementptr double, ptr %17, i64 %311
  br label %.lr.ph414

.lr.ph414:                                        ; preds = %.preheader353, %351
  %.10416 = phi i64 [ 1, %.preheader353 ], [ %352, %351 ]
  %312 = mul nsw i64 %.10416, %12
  br i1 %295, label %._crit_edge415.unr-lcssa, label %.lr.ph414.new

.lr.ph414.new:                                    ; preds = %.lr.ph414, %.lr.ph414.new
  %.0285412 = phi double [ %333, %.lr.ph414.new ], [ 0.000000e+00, %.lr.ph414 ]
  %.2411 = phi i64 [ %334, %.lr.ph414.new ], [ 1, %.lr.ph414 ]
  %niter = phi i64 [ %niter.next.3, %.lr.ph414.new ], [ 0, %.lr.ph414 ]
  %313 = getelementptr double, ptr %14, i64 %.2411
  %314 = getelementptr double, ptr %313, i64 %312
  %315 = load double, ptr %314, align 8, !tbaa !9
  %316 = getelementptr double, ptr %313, i64 %310
  %317 = load double, ptr %316, align 8, !tbaa !9
  %318 = tail call double @llvm.fmuladd.f64(double %315, double %317, double %.0285412)
  %gep742 = getelementptr double, ptr %invariant.gep741, i64 %.2411
  %319 = getelementptr double, ptr %gep742, i64 %312
  %320 = load double, ptr %319, align 8, !tbaa !9
  %321 = getelementptr double, ptr %gep742, i64 %310
  %322 = load double, ptr %321, align 8, !tbaa !9
  %323 = tail call double @llvm.fmuladd.f64(double %320, double %322, double %318)
  %gep744 = getelementptr double, ptr %invariant.gep743, i64 %.2411
  %324 = getelementptr double, ptr %gep744, i64 %312
  %325 = load double, ptr %324, align 8, !tbaa !9
  %326 = getelementptr double, ptr %gep744, i64 %310
  %327 = load double, ptr %326, align 8, !tbaa !9
  %328 = tail call double @llvm.fmuladd.f64(double %325, double %327, double %323)
  %gep746 = getelementptr double, ptr %invariant.gep745, i64 %.2411
  %329 = getelementptr double, ptr %gep746, i64 %312
  %330 = load double, ptr %329, align 8, !tbaa !9
  %331 = getelementptr double, ptr %gep746, i64 %310
  %332 = load double, ptr %331, align 8, !tbaa !9
  %333 = tail call double @llvm.fmuladd.f64(double %330, double %332, double %328)
  %334 = add nuw i64 %.2411, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge415.unr-lcssa, label %.lr.ph414.new, !llvm.loop !69

._crit_edge415.unr-lcssa:                         ; preds = %.lr.ph414.new, %.lr.ph414
  %.lcssa687.ph = phi double [ poison, %.lr.ph414 ], [ %333, %.lr.ph414.new ]
  %.0285412.unr = phi double [ 0.000000e+00, %.lr.ph414 ], [ %333, %.lr.ph414.new ]
  %.2411.unr = phi i64 [ 1, %.lr.ph414 ], [ %334, %.lr.ph414.new ]
  br i1 %lcmp.mod694.not, label %._crit_edge415, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge415.unr-lcssa, %.epil.preheader
  %.0285412.epil = phi double [ %340, %.epil.preheader ], [ %.0285412.unr, %._crit_edge415.unr-lcssa ]
  %.2411.epil = phi i64 [ %341, %.epil.preheader ], [ %.2411.unr, %._crit_edge415.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge415.unr-lcssa ]
  %335 = getelementptr double, ptr %14, i64 %.2411.epil
  %336 = getelementptr double, ptr %335, i64 %312
  %337 = load double, ptr %336, align 8, !tbaa !9
  %338 = getelementptr double, ptr %335, i64 %310
  %339 = load double, ptr %338, align 8, !tbaa !9
  %340 = tail call double @llvm.fmuladd.f64(double %337, double %339, double %.0285412.epil)
  %341 = add nuw i64 %.2411.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter693
  br i1 %epil.iter.cmp.not, label %._crit_edge415, label %.epil.preheader, !llvm.loop !70

._crit_edge415:                                   ; preds = %.epil.preheader, %._crit_edge415.unr-lcssa
  %.lcssa687 = phi double [ %.lcssa687.ph, %._crit_edge415.unr-lcssa ], [ %340, %.epil.preheader ]
  %342 = load double, ptr %7, align 8, !tbaa !9
  %343 = fcmp oeq double %342, 0.000000e+00
  %344 = load double, ptr %4, align 8, !tbaa !9
  br i1 %343, label %345, label %347

345:                                              ; preds = %._crit_edge415
  %346 = fmul double %.lcssa687, %344
  %gep420 = getelementptr double, ptr %invariant.gep417, i64 %.10416
  store double %346, ptr %gep420, align 8, !tbaa !9
  br label %351

347:                                              ; preds = %._crit_edge415
  %gep418 = getelementptr double, ptr %invariant.gep417, i64 %.10416
  %348 = load double, ptr %gep418, align 8, !tbaa !9
  %349 = fmul double %342, %348
  %350 = tail call double @llvm.fmuladd.f64(double %344, double %.lcssa687, double %349)
  store double %350, ptr %gep418, align 8, !tbaa !9
  br label %351

351:                                              ; preds = %345, %347
  %352 = add nuw i64 %.10416, 1
  %exitcond483.not = icmp eq i64 %352, %indvars.iv481
  br i1 %exitcond483.not, label %.split, label %.lr.ph414, !llvm.loop !67

.split:                                           ; preds = %351
  %353 = add nuw nsw i64 %.6422, 1
  %indvars.iv.next482 = add nuw i64 %indvars.iv481, 1
  %exitcond484.not = icmp eq i64 %indvars.iv481, %294
  br i1 %exitcond484.not, label %.loopexit, label %.preheader353, !llvm.loop !68

354:                                              ; preds = %291
  br i1 %.not313437, label %.loopexit, label %.preheader351.lr.ph

.preheader351.lr.ph:                              ; preds = %354
  %355 = load i64, ptr %3, align 8, !tbaa !5
  %.not315423 = icmp slt i64 %355, 1
  br i1 %.not315423, label %.preheader351.us, label %.preheader351.preheader

.preheader351.preheader:                          ; preds = %.preheader351.lr.ph
  %xtraiter697 = and i64 %355, 3
  %356 = icmp ult i64 %355, 4
  %unroll_iter701 = and i64 %355, 9223372036854775804
  %invariant.gep747 = getelementptr i8, ptr %14, i64 8
  %invariant.gep749 = getelementptr i8, ptr %14, i64 16
  %invariant.gep751 = getelementptr i8, ptr %14, i64 24
  %lcmp.mod699.not = icmp eq i64 %xtraiter697, 0
  br label %.preheader351

.preheader351.us:                                 ; preds = %.preheader351.lr.ph, %.split436.us.us
  %.7438.us = phi i64 [ %370, %.split436.us.us ], [ 1, %.preheader351.lr.ph ]
  %357 = mul nsw i64 %.7438.us, %15
  %invariant.gep431.us = getelementptr double, ptr %17, i64 %357
  br label %358

358:                                              ; preds = %368, %.preheader351.us
  %.11430.us.us = phi i64 [ %.7438.us, %.preheader351.us ], [ %369, %368 ]
  %359 = load double, ptr %7, align 8, !tbaa !9
  %360 = fcmp oeq double %359, 0.000000e+00
  %361 = load double, ptr %4, align 8, !tbaa !9
  br i1 %360, label %366, label %362

362:                                              ; preds = %358
  %gep432.us.us = getelementptr double, ptr %invariant.gep431.us, i64 %.11430.us.us
  %363 = load double, ptr %gep432.us.us, align 8, !tbaa !9
  %364 = fmul double %359, %363
  %365 = tail call double @llvm.fmuladd.f64(double %361, double 0.000000e+00, double %364)
  store double %365, ptr %gep432.us.us, align 8, !tbaa !9
  br label %368

366:                                              ; preds = %358
  %367 = fmul double %361, 0.000000e+00
  %gep434.us.us = getelementptr double, ptr %invariant.gep431.us, i64 %.11430.us.us
  store double %367, ptr %gep434.us.us, align 8, !tbaa !9
  br label %368

368:                                              ; preds = %366, %362
  %369 = add nuw nsw i64 %.11430.us.us, 1
  %.not314.us.us.not = icmp slt i64 %.11430.us.us, %141
  br i1 %.not314.us.us.not, label %358, label %.split436.us.us, !llvm.loop !71

.split436.us.us:                                  ; preds = %368
  %370 = add nuw i64 %.7438.us, 1
  %exitcond491.not = icmp eq i64 %.7438.us, %141
  br i1 %exitcond491.not, label %.loopexit, label %.preheader351.us, !llvm.loop !72

.preheader351:                                    ; preds = %.preheader351.preheader, %.split436
  %.7438 = phi i64 [ %414, %.split436 ], [ 1, %.preheader351.preheader ]
  %371 = mul nsw i64 %.7438, %12
  %372 = mul nsw i64 %.7438, %15
  %invariant.gep431 = getelementptr double, ptr %17, i64 %372
  br label %.lr.ph427

.lr.ph427:                                        ; preds = %.preheader351, %412
  %.11430 = phi i64 [ %.7438, %.preheader351 ], [ %413, %412 ]
  %373 = mul nsw i64 %.11430, %12
  br i1 %356, label %._crit_edge428.unr-lcssa, label %.lr.ph427.new

.lr.ph427.new:                                    ; preds = %.lr.ph427, %.lr.ph427.new
  %.1425 = phi double [ %394, %.lr.ph427.new ], [ 0.000000e+00, %.lr.ph427 ]
  %.3424 = phi i64 [ %395, %.lr.ph427.new ], [ 1, %.lr.ph427 ]
  %niter702 = phi i64 [ %niter702.next.3, %.lr.ph427.new ], [ 0, %.lr.ph427 ]
  %374 = getelementptr double, ptr %14, i64 %.3424
  %375 = getelementptr double, ptr %374, i64 %373
  %376 = load double, ptr %375, align 8, !tbaa !9
  %377 = getelementptr double, ptr %374, i64 %371
  %378 = load double, ptr %377, align 8, !tbaa !9
  %379 = tail call double @llvm.fmuladd.f64(double %376, double %378, double %.1425)
  %gep748 = getelementptr double, ptr %invariant.gep747, i64 %.3424
  %380 = getelementptr double, ptr %gep748, i64 %373
  %381 = load double, ptr %380, align 8, !tbaa !9
  %382 = getelementptr double, ptr %gep748, i64 %371
  %383 = load double, ptr %382, align 8, !tbaa !9
  %384 = tail call double @llvm.fmuladd.f64(double %381, double %383, double %379)
  %gep750 = getelementptr double, ptr %invariant.gep749, i64 %.3424
  %385 = getelementptr double, ptr %gep750, i64 %373
  %386 = load double, ptr %385, align 8, !tbaa !9
  %387 = getelementptr double, ptr %gep750, i64 %371
  %388 = load double, ptr %387, align 8, !tbaa !9
  %389 = tail call double @llvm.fmuladd.f64(double %386, double %388, double %384)
  %gep752 = getelementptr double, ptr %invariant.gep751, i64 %.3424
  %390 = getelementptr double, ptr %gep752, i64 %373
  %391 = load double, ptr %390, align 8, !tbaa !9
  %392 = getelementptr double, ptr %gep752, i64 %371
  %393 = load double, ptr %392, align 8, !tbaa !9
  %394 = tail call double @llvm.fmuladd.f64(double %391, double %393, double %389)
  %395 = add nuw i64 %.3424, 4
  %niter702.next.3 = add i64 %niter702, 4
  %niter702.ncmp.3 = icmp eq i64 %niter702.next.3, %unroll_iter701
  br i1 %niter702.ncmp.3, label %._crit_edge428.unr-lcssa, label %.lr.ph427.new, !llvm.loop !73

._crit_edge428.unr-lcssa:                         ; preds = %.lr.ph427.new, %.lr.ph427
  %.lcssa.ph = phi double [ poison, %.lr.ph427 ], [ %394, %.lr.ph427.new ]
  %.1425.unr = phi double [ 0.000000e+00, %.lr.ph427 ], [ %394, %.lr.ph427.new ]
  %.3424.unr = phi i64 [ 1, %.lr.ph427 ], [ %395, %.lr.ph427.new ]
  br i1 %lcmp.mod699.not, label %._crit_edge428, label %.epil.preheader696

.epil.preheader696:                               ; preds = %._crit_edge428.unr-lcssa, %.epil.preheader696
  %.1425.epil = phi double [ %401, %.epil.preheader696 ], [ %.1425.unr, %._crit_edge428.unr-lcssa ]
  %.3424.epil = phi i64 [ %402, %.epil.preheader696 ], [ %.3424.unr, %._crit_edge428.unr-lcssa ]
  %epil.iter698 = phi i64 [ %epil.iter698.next, %.epil.preheader696 ], [ 0, %._crit_edge428.unr-lcssa ]
  %396 = getelementptr double, ptr %14, i64 %.3424.epil
  %397 = getelementptr double, ptr %396, i64 %373
  %398 = load double, ptr %397, align 8, !tbaa !9
  %399 = getelementptr double, ptr %396, i64 %371
  %400 = load double, ptr %399, align 8, !tbaa !9
  %401 = tail call double @llvm.fmuladd.f64(double %398, double %400, double %.1425.epil)
  %402 = add nuw i64 %.3424.epil, 1
  %epil.iter698.next = add i64 %epil.iter698, 1
  %epil.iter698.cmp.not = icmp eq i64 %epil.iter698.next, %xtraiter697
  br i1 %epil.iter698.cmp.not, label %._crit_edge428, label %.epil.preheader696, !llvm.loop !74

._crit_edge428:                                   ; preds = %.epil.preheader696, %._crit_edge428.unr-lcssa
  %.lcssa = phi double [ %.lcssa.ph, %._crit_edge428.unr-lcssa ], [ %401, %.epil.preheader696 ]
  %403 = load double, ptr %7, align 8, !tbaa !9
  %404 = fcmp oeq double %403, 0.000000e+00
  %405 = load double, ptr %4, align 8, !tbaa !9
  br i1 %404, label %406, label %408

406:                                              ; preds = %._crit_edge428
  %407 = fmul double %.lcssa, %405
  %gep434 = getelementptr double, ptr %invariant.gep431, i64 %.11430
  store double %407, ptr %gep434, align 8, !tbaa !9
  br label %412

408:                                              ; preds = %._crit_edge428
  %gep432 = getelementptr double, ptr %invariant.gep431, i64 %.11430
  %409 = load double, ptr %gep432, align 8, !tbaa !9
  %410 = fmul double %403, %409
  %411 = tail call double @llvm.fmuladd.f64(double %405, double %.lcssa, double %410)
  store double %411, ptr %gep432, align 8, !tbaa !9
  br label %412

412:                                              ; preds = %406, %408
  %413 = add nuw nsw i64 %.11430, 1
  %.not314.not = icmp slt i64 %.11430, %141
  br i1 %.not314.not, label %.lr.ph427, label %.split436, !llvm.loop !71

.split436:                                        ; preds = %412
  %414 = add nuw i64 %.7438, 1
  %exitcond490.not = icmp eq i64 %.7438, %141
  br i1 %exitcond490.not, label %.loopexit, label %.preheader351, !llvm.loop !72

.loopexit.loopexit.unr-lcssa:                     ; preds = %.preheader, %.preheader.preheader
  %indvar501.unr = phi i64 [ 0, %.preheader.preheader ], [ %indvar.next502.1, %.preheader ]
  %.2290458.unr = phi i64 [ 1, %.preheader.preheader ], [ %121, %.preheader ]
  %lcmp.mod713.not = icmp eq i64 %xtraiter711, 0
  br i1 %lcmp.mod713.not, label %.loopexit, label %.preheader.epil

.preheader.epil:                                  ; preds = %.loopexit.loopexit.unr-lcssa
  %415 = mul i64 %112, %indvar501.unr
  %scevgep503.epil = getelementptr i8, ptr %8, i64 %415
  %smax.epil = tail call i64 @llvm.smax.i64(i64 %31, i64 %.2290458.unr)
  %416 = sub nsw i64 %smax.epil, %indvar501.unr
  %417 = shl nuw i64 %416, 3
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep503.epil, i8 0, i64 %417, i1 false), !tbaa !9
  br label %.loopexit

.loopexit.loopexit681.unr-lcssa:                  ; preds = %.preheader345, %.preheader345.preheader
  %indvar496.unr = phi i64 [ 0, %.preheader345.preheader ], [ %indvar.next497.3, %.preheader345 ]
  %lcmp.mod708.not = icmp eq i64 %xtraiter706, 0
  br i1 %lcmp.mod708.not, label %.loopexit, label %.preheader345.epil

.preheader345.epil:                               ; preds = %.loopexit.loopexit681.unr-lcssa, %.preheader345.epil
  %indvar496.epil = phi i64 [ %indvar.next497.epil, %.preheader345.epil ], [ %indvar496.unr, %.loopexit.loopexit681.unr-lcssa ]
  %epil.iter707 = phi i64 [ %epil.iter707.next, %.preheader345.epil ], [ 0, %.loopexit.loopexit681.unr-lcssa ]
  %418 = mul i64 %66, %indvar496.epil
  %scevgep498.epil = getelementptr i8, ptr %8, i64 %418
  %419 = shl i64 %indvar496.epil, 3
  %420 = add nuw i64 %419, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep498.epil, i8 0, i64 %420, i1 false), !tbaa !9
  %indvar.next497.epil = add nuw nsw i64 %indvar496.epil, 1
  %epil.iter707.next = add i64 %epil.iter707, 1
  %epil.iter707.cmp.not = icmp eq i64 %epil.iter707.next, %xtraiter706
  br i1 %epil.iter707.cmp.not, label %.loopexit, label %.preheader345.epil, !llvm.loop !75

.loopexit:                                        ; preds = %._crit_edge, %._crit_edge404, %.split, %.split.us.us, %.split436, %.split436.us.us, %.loopexit678, %.loopexit.loopexit681.unr-lcssa, %.preheader345.epil, %.loopexit677, %.preheader.epil, %.loopexit.loopexit.unr-lcssa, %143, %227, %292, %354, %.thread339, %48, %55, %.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #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 = !{!14}
!14 = distinct !{!14, !15}
!15 = distinct !{!15, !"LVerDomain"}
!16 = !{!17}
!17 = distinct !{!17, !15}
!18 = distinct !{!18, !12, !19, !20}
!19 = !{!"llvm.loop.isvectorized", i32 1}
!20 = !{!"llvm.loop.unroll.runtime.disable"}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.unroll.disable"}
!23 = distinct !{!23, !12, !19}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}
!26 = !{!27}
!27 = distinct !{!27, !28}
!28 = distinct !{!28, !"LVerDomain"}
!29 = !{!30}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !12, !19, !20}
!32 = distinct !{!32, !12, !19}
!33 = distinct !{!33, !12}
!34 = !{!35}
!35 = distinct !{!35, !36}
!36 = distinct !{!36, !"LVerDomain"}
!37 = !{!38}
!38 = distinct !{!38, !36}
!39 = distinct !{!39, !12, !19, !20}
!40 = distinct !{!40, !22}
!41 = distinct !{!41, !12, !19}
!42 = !{!43}
!43 = distinct !{!43, !44}
!44 = distinct !{!44, !"LVerDomain"}
!45 = !{!46}
!46 = distinct !{!46, !44}
!47 = distinct !{!47, !12, !19, !20}
!48 = distinct !{!48, !12, !19}
!49 = distinct !{!49, !12}
!50 = distinct !{!50, !12}
!51 = !{!52}
!52 = distinct !{!52, !53}
!53 = distinct !{!53, !"LVerDomain"}
!54 = !{!55}
!55 = distinct !{!55, !53}
!56 = distinct !{!56, !12, !19, !20}
!57 = distinct !{!57, !12, !19}
!58 = !{!59}
!59 = distinct !{!59, !60}
!60 = distinct !{!60, !"LVerDomain"}
!61 = !{!62}
!62 = distinct !{!62, !60}
!63 = distinct !{!63, !12, !19, !20}
!64 = distinct !{!64, !12, !19}
!65 = distinct !{!65, !12}
!66 = distinct !{!66, !12}
!67 = distinct !{!67, !12}
!68 = distinct !{!68, !12}
!69 = distinct !{!69, !12}
!70 = distinct !{!70, !22}
!71 = distinct !{!71, !12}
!72 = distinct !{!72, !12}
!73 = distinct !{!73, !12}
!74 = distinct !{!74, !22}
!75 = distinct !{!75, !22}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,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