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

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

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

71:                                               ; preds = %12
  %72 = load ptr, ptr %16, align 8, !tbaa !5
  %73 = load i64, ptr %72, align 8, !tbaa !9
  store i64 %73, ptr %41, align 8, !tbaa !9
  br label %77

74:                                               ; preds = %12
  %75 = load ptr, ptr %17, align 8, !tbaa !5
  %76 = load i64, ptr %75, align 8, !tbaa !9
  store i64 %76, ptr %41, align 8, !tbaa !9
  br label %77

77:                                               ; preds = %74, %71
  %78 = load ptr, ptr %15, align 8, !tbaa !5
  %79 = call i64 @lsame_(ptr noundef %78, ptr noundef @.str.1)
  store i64 %79, ptr %42, align 8, !tbaa !9
  store i64 0, ptr %38, align 8, !tbaa !9
  %80 = load ptr, ptr %14, align 8, !tbaa !5
  %81 = call i64 @lsame_(ptr noundef %80, ptr noundef @.str)
  %82 = icmp ne i64 %81, 0
  br i1 %82, label %88, label %83

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

87:                                               ; preds = %83
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %152

88:                                               ; preds = %83, %77
  %89 = load i64, ptr %42, align 8, !tbaa !9
  %90 = icmp ne i64 %89, 0
  br i1 %90, label %96, label %91

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

95:                                               ; preds = %91
  store i64 2, ptr %38, align 8, !tbaa !9
  br label %151

96:                                               ; preds = %91, %88
  %97 = load ptr, ptr %16, align 8, !tbaa !5
  %98 = load i64, ptr %97, align 8, !tbaa !9
  %99 = icmp slt i64 %98, 0
  br i1 %99, label %100, label %101

100:                                              ; preds = %96
  store i64 3, ptr %38, align 8, !tbaa !9
  br label %150

101:                                              ; preds = %96
  %102 = load ptr, ptr %17, align 8, !tbaa !5
  %103 = load i64, ptr %102, align 8, !tbaa !9
  %104 = icmp slt i64 %103, 0
  br i1 %104, label %105, label %106

105:                                              ; preds = %101
  store i64 4, ptr %38, align 8, !tbaa !9
  br label %149

106:                                              ; preds = %101
  %107 = load ptr, ptr %20, align 8, !tbaa !5
  %108 = load i64, ptr %107, align 8, !tbaa !9
  %109 = load i64, ptr %41, align 8, !tbaa !9
  %110 = icmp sge i64 1, %109
  br i1 %110, label %111, label %112

111:                                              ; preds = %106
  br label %114

112:                                              ; preds = %106
  %113 = load i64, ptr %41, align 8, !tbaa !9
  br label %114

114:                                              ; preds = %112, %111
  %115 = phi i64 [ 1, %111 ], [ %113, %112 ]
  %116 = icmp slt i64 %108, %115
  br i1 %116, label %117, label %118

117:                                              ; preds = %114
  store i64 7, ptr %38, align 8, !tbaa !9
  br label %148

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

124:                                              ; preds = %118
  br label %128

125:                                              ; preds = %118
  %126 = load ptr, ptr %16, align 8, !tbaa !5
  %127 = load i64, ptr %126, align 8, !tbaa !9
  br label %128

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

131:                                              ; preds = %128
  store i64 9, ptr %38, align 8, !tbaa !9
  br label %147

132:                                              ; preds = %128
  %133 = load ptr, ptr %25, align 8, !tbaa !5
  %134 = load i64, ptr %133, align 8, !tbaa !9
  %135 = load ptr, ptr %16, align 8, !tbaa !5
  %136 = load i64, ptr %135, align 8, !tbaa !9
  %137 = icmp sge i64 1, %136
  br i1 %137, label %138, label %139

138:                                              ; preds = %132
  br label %142

139:                                              ; preds = %132
  %140 = load ptr, ptr %16, align 8, !tbaa !5
  %141 = load i64, ptr %140, align 8, !tbaa !9
  br label %142

142:                                              ; preds = %139, %138
  %143 = phi i64 [ 1, %138 ], [ %141, %139 ]
  %144 = icmp slt i64 %134, %143
  br i1 %144, label %145, label %146

145:                                              ; preds = %142
  store i64 12, ptr %38, align 8, !tbaa !9
  br label %146

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

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

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

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

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

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

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

155:                                              ; preds = %152
  %156 = call i32 @xerbla_(ptr noundef @.str.3, ptr noundef %38)
  store i32 0, ptr %13, align 4
  store i32 1, ptr %43, align 4
  br label %776

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

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

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

169:                                              ; preds = %165
  %170 = load ptr, ptr %23, align 8, !tbaa !5
  %171 = load double, ptr %170, align 8, !tbaa !11
  %172 = fcmp oeq double %171, 1.000000e+00
  br i1 %172, label %173, label %174

173:                                              ; preds = %169, %161, %157
  store i32 0, ptr %13, align 4
  store i32 1, ptr %43, align 4
  br label %776

174:                                              ; preds = %169, %165
  %175 = load ptr, ptr %18, align 8, !tbaa !5
  %176 = load double, ptr %175, align 8, !tbaa !11
  %177 = fcmp oeq double %176, 0.000000e+00
  br i1 %177, label %178, label %254

178:                                              ; preds = %174
  %179 = load ptr, ptr %23, align 8, !tbaa !5
  %180 = load double, ptr %179, align 8, !tbaa !11
  %181 = fcmp oeq double %180, 0.000000e+00
  br i1 %181, label %182, label %212

182:                                              ; preds = %178
  %183 = load ptr, ptr %17, align 8, !tbaa !5
  %184 = load i64, ptr %183, align 8, !tbaa !9
  store i64 %184, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %185

185:                                              ; preds = %208, %182
  %186 = load i64, ptr %36, align 8, !tbaa !9
  %187 = load i64, ptr %32, align 8, !tbaa !9
  %188 = icmp sle i64 %186, %187
  br i1 %188, label %189, label %211

189:                                              ; preds = %185
  %190 = load ptr, ptr %16, align 8, !tbaa !5
  %191 = load i64, ptr %190, align 8, !tbaa !9
  store i64 %191, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %35, align 8, !tbaa !9
  br label %192

192:                                              ; preds = %204, %189
  %193 = load i64, ptr %35, align 8, !tbaa !9
  %194 = load i64, ptr %33, align 8, !tbaa !9
  %195 = icmp sle i64 %193, %194
  br i1 %195, label %196, label %207

196:                                              ; preds = %192
  %197 = load ptr, ptr %24, align 8, !tbaa !5
  %198 = load i64, ptr %35, align 8, !tbaa !9
  %199 = load i64, ptr %36, align 8, !tbaa !9
  %200 = load i64, ptr %30, align 8, !tbaa !9
  %201 = mul nsw i64 %199, %200
  %202 = add nsw i64 %198, %201
  %203 = getelementptr inbounds double, ptr %197, i64 %202
  store double 0.000000e+00, ptr %203, align 8, !tbaa !11
  br label %204

204:                                              ; preds = %196
  %205 = load i64, ptr %35, align 8, !tbaa !9
  %206 = add nsw i64 %205, 1
  store i64 %206, ptr %35, align 8, !tbaa !9
  br label %192, !llvm.loop !13

207:                                              ; preds = %192
  br label %208

208:                                              ; preds = %207
  %209 = load i64, ptr %36, align 8, !tbaa !9
  %210 = add nsw i64 %209, 1
  store i64 %210, ptr %36, align 8, !tbaa !9
  br label %185, !llvm.loop !15

211:                                              ; preds = %185
  br label %253

212:                                              ; preds = %178
  %213 = load ptr, ptr %17, align 8, !tbaa !5
  %214 = load i64, ptr %213, align 8, !tbaa !9
  store i64 %214, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %215

215:                                              ; preds = %249, %212
  %216 = load i64, ptr %36, align 8, !tbaa !9
  %217 = load i64, ptr %32, align 8, !tbaa !9
  %218 = icmp sle i64 %216, %217
  br i1 %218, label %219, label %252

219:                                              ; preds = %215
  %220 = load ptr, ptr %16, align 8, !tbaa !5
  %221 = load i64, ptr %220, align 8, !tbaa !9
  store i64 %221, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %35, align 8, !tbaa !9
  br label %222

222:                                              ; preds = %245, %219
  %223 = load i64, ptr %35, align 8, !tbaa !9
  %224 = load i64, ptr %33, align 8, !tbaa !9
  %225 = icmp sle i64 %223, %224
  br i1 %225, label %226, label %248

226:                                              ; preds = %222
  %227 = load ptr, ptr %23, align 8, !tbaa !5
  %228 = load double, ptr %227, align 8, !tbaa !11
  %229 = load ptr, ptr %24, align 8, !tbaa !5
  %230 = load i64, ptr %35, align 8, !tbaa !9
  %231 = load i64, ptr %36, align 8, !tbaa !9
  %232 = load i64, ptr %30, align 8, !tbaa !9
  %233 = mul nsw i64 %231, %232
  %234 = add nsw i64 %230, %233
  %235 = getelementptr inbounds double, ptr %229, i64 %234
  %236 = load double, ptr %235, align 8, !tbaa !11
  %237 = fmul double %228, %236
  %238 = load ptr, ptr %24, align 8, !tbaa !5
  %239 = load i64, ptr %35, align 8, !tbaa !9
  %240 = load i64, ptr %36, align 8, !tbaa !9
  %241 = load i64, ptr %30, align 8, !tbaa !9
  %242 = mul nsw i64 %240, %241
  %243 = add nsw i64 %239, %242
  %244 = getelementptr inbounds double, ptr %238, i64 %243
  store double %237, ptr %244, align 8, !tbaa !11
  br label %245

245:                                              ; preds = %226
  %246 = load i64, ptr %35, align 8, !tbaa !9
  %247 = add nsw i64 %246, 1
  store i64 %247, ptr %35, align 8, !tbaa !9
  br label %222, !llvm.loop !16

248:                                              ; preds = %222
  br label %249

249:                                              ; preds = %248
  %250 = load i64, ptr %36, align 8, !tbaa !9
  %251 = add nsw i64 %250, 1
  store i64 %251, ptr %36, align 8, !tbaa !9
  br label %215, !llvm.loop !17

252:                                              ; preds = %215
  br label %253

253:                                              ; preds = %252, %211
  store i32 0, ptr %13, align 4
  store i32 1, ptr %43, align 4
  br label %776

254:                                              ; preds = %174
  %255 = load ptr, ptr %14, align 8, !tbaa !5
  %256 = call i64 @lsame_(ptr noundef %255, ptr noundef @.str)
  %257 = icmp ne i64 %256, 0
  br i1 %257, label %258, label %543

258:                                              ; preds = %254
  %259 = load i64, ptr %42, align 8, !tbaa !9
  %260 = icmp ne i64 %259, 0
  br i1 %260, label %261, label %401

261:                                              ; preds = %258
  %262 = load ptr, ptr %17, align 8, !tbaa !5
  %263 = load i64, ptr %262, align 8, !tbaa !9
  store i64 %263, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %264

264:                                              ; preds = %397, %261
  %265 = load i64, ptr %36, align 8, !tbaa !9
  %266 = load i64, ptr %32, align 8, !tbaa !9
  %267 = icmp sle i64 %265, %266
  br i1 %267, label %268, label %400

268:                                              ; preds = %264
  %269 = load ptr, ptr %16, align 8, !tbaa !5
  %270 = load i64, ptr %269, align 8, !tbaa !9
  store i64 %270, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %35, align 8, !tbaa !9
  br label %271

271:                                              ; preds = %393, %268
  %272 = load i64, ptr %35, align 8, !tbaa !9
  %273 = load i64, ptr %33, align 8, !tbaa !9
  %274 = icmp sle i64 %272, %273
  br i1 %274, label %275, label %396

275:                                              ; preds = %271
  %276 = load ptr, ptr %18, align 8, !tbaa !5
  %277 = load double, ptr %276, align 8, !tbaa !11
  %278 = load ptr, ptr %21, align 8, !tbaa !5
  %279 = load i64, ptr %35, align 8, !tbaa !9
  %280 = load i64, ptr %36, align 8, !tbaa !9
  %281 = load i64, ptr %28, align 8, !tbaa !9
  %282 = mul nsw i64 %280, %281
  %283 = add nsw i64 %279, %282
  %284 = getelementptr inbounds double, ptr %278, i64 %283
  %285 = load double, ptr %284, align 8, !tbaa !11
  %286 = fmul double %277, %285
  store double %286, ptr %39, align 8, !tbaa !11
  store double 0.000000e+00, ptr %40, align 8, !tbaa !11
  %287 = load i64, ptr %35, align 8, !tbaa !9
  %288 = sub nsw i64 %287, 1
  store i64 %288, ptr %34, align 8, !tbaa !9
  store i64 1, ptr %37, align 8, !tbaa !9
  br label %289

289:                                              ; preds = %330, %275
  %290 = load i64, ptr %37, align 8, !tbaa !9
  %291 = load i64, ptr %34, align 8, !tbaa !9
  %292 = icmp sle i64 %290, %291
  br i1 %292, label %293, label %333

293:                                              ; preds = %289
  %294 = load double, ptr %39, align 8, !tbaa !11
  %295 = load ptr, ptr %19, align 8, !tbaa !5
  %296 = load i64, ptr %37, align 8, !tbaa !9
  %297 = load i64, ptr %35, align 8, !tbaa !9
  %298 = load i64, ptr %26, align 8, !tbaa !9
  %299 = mul nsw i64 %297, %298
  %300 = add nsw i64 %296, %299
  %301 = getelementptr inbounds double, ptr %295, i64 %300
  %302 = load double, ptr %301, align 8, !tbaa !11
  %303 = load ptr, ptr %24, align 8, !tbaa !5
  %304 = load i64, ptr %37, align 8, !tbaa !9
  %305 = load i64, ptr %36, align 8, !tbaa !9
  %306 = load i64, ptr %30, align 8, !tbaa !9
  %307 = mul nsw i64 %305, %306
  %308 = add nsw i64 %304, %307
  %309 = getelementptr inbounds double, ptr %303, i64 %308
  %310 = load double, ptr %309, align 8, !tbaa !11
  %311 = call double @llvm.fmuladd.f64(double %294, double %302, double %310)
  store double %311, ptr %309, align 8, !tbaa !11
  %312 = load ptr, ptr %21, align 8, !tbaa !5
  %313 = load i64, ptr %37, align 8, !tbaa !9
  %314 = load i64, ptr %36, align 8, !tbaa !9
  %315 = load i64, ptr %28, align 8, !tbaa !9
  %316 = mul nsw i64 %314, %315
  %317 = add nsw i64 %313, %316
  %318 = getelementptr inbounds double, ptr %312, i64 %317
  %319 = load double, ptr %318, align 8, !tbaa !11
  %320 = load ptr, ptr %19, align 8, !tbaa !5
  %321 = load i64, ptr %37, align 8, !tbaa !9
  %322 = load i64, ptr %35, align 8, !tbaa !9
  %323 = load i64, ptr %26, align 8, !tbaa !9
  %324 = mul nsw i64 %322, %323
  %325 = add nsw i64 %321, %324
  %326 = getelementptr inbounds double, ptr %320, i64 %325
  %327 = load double, ptr %326, align 8, !tbaa !11
  %328 = load double, ptr %40, align 8, !tbaa !11
  %329 = call double @llvm.fmuladd.f64(double %319, double %327, double %328)
  store double %329, ptr %40, align 8, !tbaa !11
  br label %330

330:                                              ; preds = %293
  %331 = load i64, ptr %37, align 8, !tbaa !9
  %332 = add nsw i64 %331, 1
  store i64 %332, ptr %37, align 8, !tbaa !9
  br label %289, !llvm.loop !18

333:                                              ; preds = %289
  %334 = load ptr, ptr %23, align 8, !tbaa !5
  %335 = load double, ptr %334, align 8, !tbaa !11
  %336 = fcmp oeq double %335, 0.000000e+00
  br i1 %336, label %337, label %359

337:                                              ; preds = %333
  %338 = load double, ptr %39, align 8, !tbaa !11
  %339 = load ptr, ptr %19, align 8, !tbaa !5
  %340 = load i64, ptr %35, align 8, !tbaa !9
  %341 = load i64, ptr %35, align 8, !tbaa !9
  %342 = load i64, ptr %26, align 8, !tbaa !9
  %343 = mul nsw i64 %341, %342
  %344 = add nsw i64 %340, %343
  %345 = getelementptr inbounds double, ptr %339, i64 %344
  %346 = load double, ptr %345, align 8, !tbaa !11
  %347 = load ptr, ptr %18, align 8, !tbaa !5
  %348 = load double, ptr %347, align 8, !tbaa !11
  %349 = load double, ptr %40, align 8, !tbaa !11
  %350 = fmul double %348, %349
  %351 = call double @llvm.fmuladd.f64(double %338, double %346, double %350)
  %352 = load ptr, ptr %24, align 8, !tbaa !5
  %353 = load i64, ptr %35, align 8, !tbaa !9
  %354 = load i64, ptr %36, align 8, !tbaa !9
  %355 = load i64, ptr %30, align 8, !tbaa !9
  %356 = mul nsw i64 %354, %355
  %357 = add nsw i64 %353, %356
  %358 = getelementptr inbounds double, ptr %352, i64 %357
  store double %351, ptr %358, align 8, !tbaa !11
  br label %392

359:                                              ; preds = %333
  %360 = load ptr, ptr %23, align 8, !tbaa !5
  %361 = load double, ptr %360, align 8, !tbaa !11
  %362 = load ptr, ptr %24, align 8, !tbaa !5
  %363 = load i64, ptr %35, align 8, !tbaa !9
  %364 = load i64, ptr %36, align 8, !tbaa !9
  %365 = load i64, ptr %30, align 8, !tbaa !9
  %366 = mul nsw i64 %364, %365
  %367 = add nsw i64 %363, %366
  %368 = getelementptr inbounds double, ptr %362, i64 %367
  %369 = load double, ptr %368, align 8, !tbaa !11
  %370 = load double, ptr %39, align 8, !tbaa !11
  %371 = load ptr, ptr %19, align 8, !tbaa !5
  %372 = load i64, ptr %35, align 8, !tbaa !9
  %373 = load i64, ptr %35, align 8, !tbaa !9
  %374 = load i64, ptr %26, align 8, !tbaa !9
  %375 = mul nsw i64 %373, %374
  %376 = add nsw i64 %372, %375
  %377 = getelementptr inbounds double, ptr %371, i64 %376
  %378 = load double, ptr %377, align 8, !tbaa !11
  %379 = fmul double %370, %378
  %380 = call double @llvm.fmuladd.f64(double %361, double %369, double %379)
  %381 = load ptr, ptr %18, align 8, !tbaa !5
  %382 = load double, ptr %381, align 8, !tbaa !11
  %383 = load double, ptr %40, align 8, !tbaa !11
  %384 = call double @llvm.fmuladd.f64(double %382, double %383, double %380)
  %385 = load ptr, ptr %24, align 8, !tbaa !5
  %386 = load i64, ptr %35, align 8, !tbaa !9
  %387 = load i64, ptr %36, align 8, !tbaa !9
  %388 = load i64, ptr %30, align 8, !tbaa !9
  %389 = mul nsw i64 %387, %388
  %390 = add nsw i64 %386, %389
  %391 = getelementptr inbounds double, ptr %385, i64 %390
  store double %384, ptr %391, align 8, !tbaa !11
  br label %392

392:                                              ; preds = %359, %337
  br label %393

393:                                              ; preds = %392
  %394 = load i64, ptr %35, align 8, !tbaa !9
  %395 = add nsw i64 %394, 1
  store i64 %395, ptr %35, align 8, !tbaa !9
  br label %271, !llvm.loop !19

396:                                              ; preds = %271
  br label %397

397:                                              ; preds = %396
  %398 = load i64, ptr %36, align 8, !tbaa !9
  %399 = add nsw i64 %398, 1
  store i64 %399, ptr %36, align 8, !tbaa !9
  br label %264, !llvm.loop !20

400:                                              ; preds = %264
  br label %542

401:                                              ; preds = %258
  %402 = load ptr, ptr %17, align 8, !tbaa !5
  %403 = load i64, ptr %402, align 8, !tbaa !9
  store i64 %403, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %404

404:                                              ; preds = %538, %401
  %405 = load i64, ptr %36, align 8, !tbaa !9
  %406 = load i64, ptr %32, align 8, !tbaa !9
  %407 = icmp sle i64 %405, %406
  br i1 %407, label %408, label %541

408:                                              ; preds = %404
  %409 = load ptr, ptr %16, align 8, !tbaa !5
  %410 = load i64, ptr %409, align 8, !tbaa !9
  store i64 %410, ptr %35, align 8, !tbaa !9
  br label %411

411:                                              ; preds = %534, %408
  %412 = load i64, ptr %35, align 8, !tbaa !9
  %413 = icmp sge i64 %412, 1
  br i1 %413, label %414, label %537

414:                                              ; preds = %411
  %415 = load ptr, ptr %18, align 8, !tbaa !5
  %416 = load double, ptr %415, align 8, !tbaa !11
  %417 = load ptr, ptr %21, align 8, !tbaa !5
  %418 = load i64, ptr %35, align 8, !tbaa !9
  %419 = load i64, ptr %36, align 8, !tbaa !9
  %420 = load i64, ptr %28, align 8, !tbaa !9
  %421 = mul nsw i64 %419, %420
  %422 = add nsw i64 %418, %421
  %423 = getelementptr inbounds double, ptr %417, i64 %422
  %424 = load double, ptr %423, align 8, !tbaa !11
  %425 = fmul double %416, %424
  store double %425, ptr %39, align 8, !tbaa !11
  store double 0.000000e+00, ptr %40, align 8, !tbaa !11
  %426 = load ptr, ptr %16, align 8, !tbaa !5
  %427 = load i64, ptr %426, align 8, !tbaa !9
  store i64 %427, ptr %33, align 8, !tbaa !9
  %428 = load i64, ptr %35, align 8, !tbaa !9
  %429 = add nsw i64 %428, 1
  store i64 %429, ptr %37, align 8, !tbaa !9
  br label %430

430:                                              ; preds = %471, %414
  %431 = load i64, ptr %37, align 8, !tbaa !9
  %432 = load i64, ptr %33, align 8, !tbaa !9
  %433 = icmp sle i64 %431, %432
  br i1 %433, label %434, label %474

434:                                              ; preds = %430
  %435 = load double, ptr %39, align 8, !tbaa !11
  %436 = load ptr, ptr %19, align 8, !tbaa !5
  %437 = load i64, ptr %37, align 8, !tbaa !9
  %438 = load i64, ptr %35, align 8, !tbaa !9
  %439 = load i64, ptr %26, align 8, !tbaa !9
  %440 = mul nsw i64 %438, %439
  %441 = add nsw i64 %437, %440
  %442 = getelementptr inbounds double, ptr %436, i64 %441
  %443 = load double, ptr %442, align 8, !tbaa !11
  %444 = load ptr, ptr %24, align 8, !tbaa !5
  %445 = load i64, ptr %37, align 8, !tbaa !9
  %446 = load i64, ptr %36, align 8, !tbaa !9
  %447 = load i64, ptr %30, align 8, !tbaa !9
  %448 = mul nsw i64 %446, %447
  %449 = add nsw i64 %445, %448
  %450 = getelementptr inbounds double, ptr %444, i64 %449
  %451 = load double, ptr %450, align 8, !tbaa !11
  %452 = call double @llvm.fmuladd.f64(double %435, double %443, double %451)
  store double %452, ptr %450, align 8, !tbaa !11
  %453 = load ptr, ptr %21, align 8, !tbaa !5
  %454 = load i64, ptr %37, align 8, !tbaa !9
  %455 = load i64, ptr %36, align 8, !tbaa !9
  %456 = load i64, ptr %28, align 8, !tbaa !9
  %457 = mul nsw i64 %455, %456
  %458 = add nsw i64 %454, %457
  %459 = getelementptr inbounds double, ptr %453, i64 %458
  %460 = load double, ptr %459, align 8, !tbaa !11
  %461 = load ptr, ptr %19, align 8, !tbaa !5
  %462 = load i64, ptr %37, align 8, !tbaa !9
  %463 = load i64, ptr %35, align 8, !tbaa !9
  %464 = load i64, ptr %26, align 8, !tbaa !9
  %465 = mul nsw i64 %463, %464
  %466 = add nsw i64 %462, %465
  %467 = getelementptr inbounds double, ptr %461, i64 %466
  %468 = load double, ptr %467, align 8, !tbaa !11
  %469 = load double, ptr %40, align 8, !tbaa !11
  %470 = call double @llvm.fmuladd.f64(double %460, double %468, double %469)
  store double %470, ptr %40, align 8, !tbaa !11
  br label %471

471:                                              ; preds = %434
  %472 = load i64, ptr %37, align 8, !tbaa !9
  %473 = add nsw i64 %472, 1
  store i64 %473, ptr %37, align 8, !tbaa !9
  br label %430, !llvm.loop !21

474:                                              ; preds = %430
  %475 = load ptr, ptr %23, align 8, !tbaa !5
  %476 = load double, ptr %475, align 8, !tbaa !11
  %477 = fcmp oeq double %476, 0.000000e+00
  br i1 %477, label %478, label %500

478:                                              ; preds = %474
  %479 = load double, ptr %39, align 8, !tbaa !11
  %480 = load ptr, ptr %19, align 8, !tbaa !5
  %481 = load i64, ptr %35, align 8, !tbaa !9
  %482 = load i64, ptr %35, align 8, !tbaa !9
  %483 = load i64, ptr %26, align 8, !tbaa !9
  %484 = mul nsw i64 %482, %483
  %485 = add nsw i64 %481, %484
  %486 = getelementptr inbounds double, ptr %480, i64 %485
  %487 = load double, ptr %486, align 8, !tbaa !11
  %488 = load ptr, ptr %18, align 8, !tbaa !5
  %489 = load double, ptr %488, align 8, !tbaa !11
  %490 = load double, ptr %40, align 8, !tbaa !11
  %491 = fmul double %489, %490
  %492 = call double @llvm.fmuladd.f64(double %479, double %487, double %491)
  %493 = load ptr, ptr %24, align 8, !tbaa !5
  %494 = load i64, ptr %35, align 8, !tbaa !9
  %495 = load i64, ptr %36, align 8, !tbaa !9
  %496 = load i64, ptr %30, align 8, !tbaa !9
  %497 = mul nsw i64 %495, %496
  %498 = add nsw i64 %494, %497
  %499 = getelementptr inbounds double, ptr %493, i64 %498
  store double %492, ptr %499, align 8, !tbaa !11
  br label %533

500:                                              ; preds = %474
  %501 = load ptr, ptr %23, align 8, !tbaa !5
  %502 = load double, ptr %501, align 8, !tbaa !11
  %503 = load ptr, ptr %24, align 8, !tbaa !5
  %504 = load i64, ptr %35, align 8, !tbaa !9
  %505 = load i64, ptr %36, align 8, !tbaa !9
  %506 = load i64, ptr %30, align 8, !tbaa !9
  %507 = mul nsw i64 %505, %506
  %508 = add nsw i64 %504, %507
  %509 = getelementptr inbounds double, ptr %503, i64 %508
  %510 = load double, ptr %509, align 8, !tbaa !11
  %511 = load double, ptr %39, align 8, !tbaa !11
  %512 = load ptr, ptr %19, align 8, !tbaa !5
  %513 = load i64, ptr %35, align 8, !tbaa !9
  %514 = load i64, ptr %35, align 8, !tbaa !9
  %515 = load i64, ptr %26, align 8, !tbaa !9
  %516 = mul nsw i64 %514, %515
  %517 = add nsw i64 %513, %516
  %518 = getelementptr inbounds double, ptr %512, i64 %517
  %519 = load double, ptr %518, align 8, !tbaa !11
  %520 = fmul double %511, %519
  %521 = call double @llvm.fmuladd.f64(double %502, double %510, double %520)
  %522 = load ptr, ptr %18, align 8, !tbaa !5
  %523 = load double, ptr %522, align 8, !tbaa !11
  %524 = load double, ptr %40, align 8, !tbaa !11
  %525 = call double @llvm.fmuladd.f64(double %523, double %524, double %521)
  %526 = load ptr, ptr %24, align 8, !tbaa !5
  %527 = load i64, ptr %35, align 8, !tbaa !9
  %528 = load i64, ptr %36, align 8, !tbaa !9
  %529 = load i64, ptr %30, align 8, !tbaa !9
  %530 = mul nsw i64 %528, %529
  %531 = add nsw i64 %527, %530
  %532 = getelementptr inbounds double, ptr %526, i64 %531
  store double %525, ptr %532, align 8, !tbaa !11
  br label %533

533:                                              ; preds = %500, %478
  br label %534

534:                                              ; preds = %533
  %535 = load i64, ptr %35, align 8, !tbaa !9
  %536 = add nsw i64 %535, -1
  store i64 %536, ptr %35, align 8, !tbaa !9
  br label %411, !llvm.loop !22

537:                                              ; preds = %411
  br label %538

538:                                              ; preds = %537
  %539 = load i64, ptr %36, align 8, !tbaa !9
  %540 = add nsw i64 %539, 1
  store i64 %540, ptr %36, align 8, !tbaa !9
  br label %404, !llvm.loop !23

541:                                              ; preds = %404
  br label %542

542:                                              ; preds = %541, %400
  br label %775

543:                                              ; preds = %254
  %544 = load ptr, ptr %17, align 8, !tbaa !5
  %545 = load i64, ptr %544, align 8, !tbaa !9
  store i64 %545, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %546

546:                                              ; preds = %771, %543
  %547 = load i64, ptr %36, align 8, !tbaa !9
  %548 = load i64, ptr %32, align 8, !tbaa !9
  %549 = icmp sle i64 %547, %548
  br i1 %549, label %550, label %774

550:                                              ; preds = %546
  %551 = load ptr, ptr %18, align 8, !tbaa !5
  %552 = load double, ptr %551, align 8, !tbaa !11
  %553 = load ptr, ptr %19, align 8, !tbaa !5
  %554 = load i64, ptr %36, align 8, !tbaa !9
  %555 = load i64, ptr %36, align 8, !tbaa !9
  %556 = load i64, ptr %26, align 8, !tbaa !9
  %557 = mul nsw i64 %555, %556
  %558 = add nsw i64 %554, %557
  %559 = getelementptr inbounds double, ptr %553, i64 %558
  %560 = load double, ptr %559, align 8, !tbaa !11
  %561 = fmul double %552, %560
  store double %561, ptr %39, align 8, !tbaa !11
  %562 = load ptr, ptr %23, align 8, !tbaa !5
  %563 = load double, ptr %562, align 8, !tbaa !11
  %564 = fcmp oeq double %563, 0.000000e+00
  br i1 %564, label %565, label %594

565:                                              ; preds = %550
  %566 = load ptr, ptr %16, align 8, !tbaa !5
  %567 = load i64, ptr %566, align 8, !tbaa !9
  store i64 %567, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %35, align 8, !tbaa !9
  br label %568

568:                                              ; preds = %590, %565
  %569 = load i64, ptr %35, align 8, !tbaa !9
  %570 = load i64, ptr %33, align 8, !tbaa !9
  %571 = icmp sle i64 %569, %570
  br i1 %571, label %572, label %593

572:                                              ; preds = %568
  %573 = load double, ptr %39, align 8, !tbaa !11
  %574 = load ptr, ptr %21, align 8, !tbaa !5
  %575 = load i64, ptr %35, align 8, !tbaa !9
  %576 = load i64, ptr %36, align 8, !tbaa !9
  %577 = load i64, ptr %28, align 8, !tbaa !9
  %578 = mul nsw i64 %576, %577
  %579 = add nsw i64 %575, %578
  %580 = getelementptr inbounds double, ptr %574, i64 %579
  %581 = load double, ptr %580, align 8, !tbaa !11
  %582 = fmul double %573, %581
  %583 = load ptr, ptr %24, align 8, !tbaa !5
  %584 = load i64, ptr %35, align 8, !tbaa !9
  %585 = load i64, ptr %36, align 8, !tbaa !9
  %586 = load i64, ptr %30, align 8, !tbaa !9
  %587 = mul nsw i64 %585, %586
  %588 = add nsw i64 %584, %587
  %589 = getelementptr inbounds double, ptr %583, i64 %588
  store double %582, ptr %589, align 8, !tbaa !11
  br label %590

590:                                              ; preds = %572
  %591 = load i64, ptr %35, align 8, !tbaa !9
  %592 = add nsw i64 %591, 1
  store i64 %592, ptr %35, align 8, !tbaa !9
  br label %568, !llvm.loop !24

593:                                              ; preds = %568
  br label %634

594:                                              ; preds = %550
  %595 = load ptr, ptr %16, align 8, !tbaa !5
  %596 = load i64, ptr %595, align 8, !tbaa !9
  store i64 %596, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %35, align 8, !tbaa !9
  br label %597

597:                                              ; preds = %630, %594
  %598 = load i64, ptr %35, align 8, !tbaa !9
  %599 = load i64, ptr %33, align 8, !tbaa !9
  %600 = icmp sle i64 %598, %599
  br i1 %600, label %601, label %633

601:                                              ; preds = %597
  %602 = load ptr, ptr %23, align 8, !tbaa !5
  %603 = load double, ptr %602, align 8, !tbaa !11
  %604 = load ptr, ptr %24, align 8, !tbaa !5
  %605 = load i64, ptr %35, align 8, !tbaa !9
  %606 = load i64, ptr %36, align 8, !tbaa !9
  %607 = load i64, ptr %30, 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 double, ptr %39, align 8, !tbaa !11
  %613 = load ptr, ptr %21, align 8, !tbaa !5
  %614 = load i64, ptr %35, align 8, !tbaa !9
  %615 = load i64, ptr %36, align 8, !tbaa !9
  %616 = load i64, ptr %28, align 8, !tbaa !9
  %617 = mul nsw i64 %615, %616
  %618 = add nsw i64 %614, %617
  %619 = getelementptr inbounds double, ptr %613, i64 %618
  %620 = load double, ptr %619, align 8, !tbaa !11
  %621 = fmul double %612, %620
  %622 = call double @llvm.fmuladd.f64(double %603, double %611, double %621)
  %623 = load ptr, ptr %24, align 8, !tbaa !5
  %624 = load i64, ptr %35, align 8, !tbaa !9
  %625 = load i64, ptr %36, align 8, !tbaa !9
  %626 = load i64, ptr %30, align 8, !tbaa !9
  %627 = mul nsw i64 %625, %626
  %628 = add nsw i64 %624, %627
  %629 = getelementptr inbounds double, ptr %623, i64 %628
  store double %622, ptr %629, align 8, !tbaa !11
  br label %630

630:                                              ; preds = %601
  %631 = load i64, ptr %35, align 8, !tbaa !9
  %632 = add nsw i64 %631, 1
  store i64 %632, ptr %35, align 8, !tbaa !9
  br label %597, !llvm.loop !25

633:                                              ; preds = %597
  br label %634

634:                                              ; preds = %633, %593
  %635 = load i64, ptr %36, align 8, !tbaa !9
  %636 = sub nsw i64 %635, 1
  store i64 %636, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %37, align 8, !tbaa !9
  br label %637

637:                                              ; preds = %698, %634
  %638 = load i64, ptr %37, align 8, !tbaa !9
  %639 = load i64, ptr %33, align 8, !tbaa !9
  %640 = icmp sle i64 %638, %639
  br i1 %640, label %641, label %701

641:                                              ; preds = %637
  %642 = load i64, ptr %42, align 8, !tbaa !9
  %643 = icmp ne i64 %642, 0
  br i1 %643, label %644, label %656

644:                                              ; preds = %641
  %645 = load ptr, ptr %18, align 8, !tbaa !5
  %646 = load double, ptr %645, align 8, !tbaa !11
  %647 = load ptr, ptr %19, align 8, !tbaa !5
  %648 = load i64, ptr %37, align 8, !tbaa !9
  %649 = load i64, ptr %36, align 8, !tbaa !9
  %650 = load i64, ptr %26, 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
  store double %655, ptr %39, align 8, !tbaa !11
  br label %668

656:                                              ; preds = %641
  %657 = load ptr, ptr %18, align 8, !tbaa !5
  %658 = load double, ptr %657, align 8, !tbaa !11
  %659 = load ptr, ptr %19, align 8, !tbaa !5
  %660 = load i64, ptr %36, align 8, !tbaa !9
  %661 = load i64, ptr %37, align 8, !tbaa !9
  %662 = load i64, ptr %26, align 8, !tbaa !9
  %663 = mul nsw i64 %661, %662
  %664 = add nsw i64 %660, %663
  %665 = getelementptr inbounds double, ptr %659, i64 %664
  %666 = load double, ptr %665, align 8, !tbaa !11
  %667 = fmul double %658, %666
  store double %667, ptr %39, align 8, !tbaa !11
  br label %668

668:                                              ; preds = %656, %644
  %669 = load ptr, ptr %16, align 8, !tbaa !5
  %670 = load i64, ptr %669, align 8, !tbaa !9
  store i64 %670, ptr %34, align 8, !tbaa !9
  store i64 1, ptr %35, align 8, !tbaa !9
  br label %671

671:                                              ; preds = %694, %668
  %672 = load i64, ptr %35, align 8, !tbaa !9
  %673 = load i64, ptr %34, align 8, !tbaa !9
  %674 = icmp sle i64 %672, %673
  br i1 %674, label %675, label %697

675:                                              ; preds = %671
  %676 = load double, ptr %39, align 8, !tbaa !11
  %677 = load ptr, ptr %21, align 8, !tbaa !5
  %678 = load i64, ptr %35, align 8, !tbaa !9
  %679 = load i64, ptr %37, align 8, !tbaa !9
  %680 = load i64, ptr %28, align 8, !tbaa !9
  %681 = mul nsw i64 %679, %680
  %682 = add nsw i64 %678, %681
  %683 = getelementptr inbounds double, ptr %677, i64 %682
  %684 = load double, ptr %683, align 8, !tbaa !11
  %685 = load ptr, ptr %24, align 8, !tbaa !5
  %686 = load i64, ptr %35, align 8, !tbaa !9
  %687 = load i64, ptr %36, align 8, !tbaa !9
  %688 = load i64, ptr %30, align 8, !tbaa !9
  %689 = mul nsw i64 %687, %688
  %690 = add nsw i64 %686, %689
  %691 = getelementptr inbounds double, ptr %685, i64 %690
  %692 = load double, ptr %691, align 8, !tbaa !11
  %693 = call double @llvm.fmuladd.f64(double %676, double %684, double %692)
  store double %693, ptr %691, align 8, !tbaa !11
  br label %694

694:                                              ; preds = %675
  %695 = load i64, ptr %35, align 8, !tbaa !9
  %696 = add nsw i64 %695, 1
  store i64 %696, ptr %35, align 8, !tbaa !9
  br label %671, !llvm.loop !26

697:                                              ; preds = %671
  br label %698

698:                                              ; preds = %697
  %699 = load i64, ptr %37, align 8, !tbaa !9
  %700 = add nsw i64 %699, 1
  store i64 %700, ptr %37, align 8, !tbaa !9
  br label %637, !llvm.loop !27

701:                                              ; preds = %637
  %702 = load ptr, ptr %17, align 8, !tbaa !5
  %703 = load i64, ptr %702, align 8, !tbaa !9
  store i64 %703, ptr %33, align 8, !tbaa !9
  %704 = load i64, ptr %36, align 8, !tbaa !9
  %705 = add nsw i64 %704, 1
  store i64 %705, ptr %37, align 8, !tbaa !9
  br label %706

706:                                              ; preds = %767, %701
  %707 = load i64, ptr %37, align 8, !tbaa !9
  %708 = load i64, ptr %33, align 8, !tbaa !9
  %709 = icmp sle i64 %707, %708
  br i1 %709, label %710, label %770

710:                                              ; preds = %706
  %711 = load i64, ptr %42, align 8, !tbaa !9
  %712 = icmp ne i64 %711, 0
  br i1 %712, label %713, label %725

713:                                              ; preds = %710
  %714 = load ptr, ptr %18, align 8, !tbaa !5
  %715 = load double, ptr %714, align 8, !tbaa !11
  %716 = load ptr, ptr %19, align 8, !tbaa !5
  %717 = load i64, ptr %36, align 8, !tbaa !9
  %718 = load i64, ptr %37, align 8, !tbaa !9
  %719 = load i64, ptr %26, align 8, !tbaa !9
  %720 = mul nsw i64 %718, %719
  %721 = add nsw i64 %717, %720
  %722 = getelementptr inbounds double, ptr %716, i64 %721
  %723 = load double, ptr %722, align 8, !tbaa !11
  %724 = fmul double %715, %723
  store double %724, ptr %39, align 8, !tbaa !11
  br label %737

725:                                              ; preds = %710
  %726 = load ptr, ptr %18, align 8, !tbaa !5
  %727 = load double, ptr %726, align 8, !tbaa !11
  %728 = load ptr, ptr %19, align 8, !tbaa !5
  %729 = load i64, ptr %37, align 8, !tbaa !9
  %730 = load i64, ptr %36, align 8, !tbaa !9
  %731 = load i64, ptr %26, align 8, !tbaa !9
  %732 = mul nsw i64 %730, %731
  %733 = add nsw i64 %729, %732
  %734 = getelementptr inbounds double, ptr %728, i64 %733
  %735 = load double, ptr %734, align 8, !tbaa !11
  %736 = fmul double %727, %735
  store double %736, ptr %39, align 8, !tbaa !11
  br label %737

737:                                              ; preds = %725, %713
  %738 = load ptr, ptr %16, align 8, !tbaa !5
  %739 = load i64, ptr %738, align 8, !tbaa !9
  store i64 %739, ptr %34, align 8, !tbaa !9
  store i64 1, ptr %35, align 8, !tbaa !9
  br label %740

740:                                              ; preds = %763, %737
  %741 = load i64, ptr %35, align 8, !tbaa !9
  %742 = load i64, ptr %34, align 8, !tbaa !9
  %743 = icmp sle i64 %741, %742
  br i1 %743, label %744, label %766

744:                                              ; preds = %740
  %745 = load double, ptr %39, align 8, !tbaa !11
  %746 = load ptr, ptr %21, align 8, !tbaa !5
  %747 = load i64, ptr %35, align 8, !tbaa !9
  %748 = load i64, ptr %37, align 8, !tbaa !9
  %749 = load i64, ptr %28, align 8, !tbaa !9
  %750 = mul nsw i64 %748, %749
  %751 = add nsw i64 %747, %750
  %752 = getelementptr inbounds double, ptr %746, i64 %751
  %753 = load double, ptr %752, align 8, !tbaa !11
  %754 = load ptr, ptr %24, align 8, !tbaa !5
  %755 = load i64, ptr %35, align 8, !tbaa !9
  %756 = load i64, ptr %36, align 8, !tbaa !9
  %757 = load i64, ptr %30, align 8, !tbaa !9
  %758 = mul nsw i64 %756, %757
  %759 = add nsw i64 %755, %758
  %760 = getelementptr inbounds double, ptr %754, i64 %759
  %761 = load double, ptr %760, align 8, !tbaa !11
  %762 = call double @llvm.fmuladd.f64(double %745, double %753, double %761)
  store double %762, ptr %760, align 8, !tbaa !11
  br label %763

763:                                              ; preds = %744
  %764 = load i64, ptr %35, align 8, !tbaa !9
  %765 = add nsw i64 %764, 1
  store i64 %765, ptr %35, align 8, !tbaa !9
  br label %740, !llvm.loop !28

766:                                              ; preds = %740
  br label %767

767:                                              ; preds = %766
  %768 = load i64, ptr %37, align 8, !tbaa !9
  %769 = add nsw i64 %768, 1
  store i64 %769, ptr %37, align 8, !tbaa !9
  br label %706, !llvm.loop !29

770:                                              ; preds = %706
  br label %771

771:                                              ; preds = %770
  %772 = load i64, ptr %36, align 8, !tbaa !9
  %773 = add nsw i64 %772, 1
  store i64 %773, ptr %36, align 8, !tbaa !9
  br label %546, !llvm.loop !30

774:                                              ; preds = %546
  br label %775

775:                                              ; preds = %774, %542
  store i32 0, ptr %13, align 4
  store i32 1, ptr %43, align 4
  br label %776

776:                                              ; preds = %775, %253, %173, %155
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  %777 = load i32, ptr %13, align 4
  ret i32 %777
}

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


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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @f2c_dsymm(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 readonly %8, ptr nocapture noundef readonly %9, ptr nocapture noundef %10, ptr nocapture noundef readonly %11) local_unnamed_addr #0 {
  %13 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #6
  %14 = load i64, ptr %6, align 8, !tbaa !5
  %15 = xor i64 %14, -1
  %16 = getelementptr inbounds double, ptr %5, i64 %15
  %17 = load i64, ptr %8, align 8, !tbaa !5
  %18 = xor i64 %17, -1
  %19 = getelementptr inbounds double, ptr %7, i64 %18
  %20 = load i64, ptr %11, align 8, !tbaa !5
  %21 = xor i64 %20, -1
  %22 = getelementptr inbounds double, ptr %10, i64 %21
  %23 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #6
  %.not = icmp eq i64 %23, 0
  %. = select i1 %.not, ptr %3, ptr %2
  %.0292 = load i64, ptr %., align 8, !tbaa !5
  %24 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #6
  %25 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #6
  %.not310 = icmp eq i64 %25, 0
  br i1 %.not310, label %26, label %29

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

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

29:                                               ; preds = %26, %12
  %.not312 = icmp eq i64 %24, 0
  br i1 %.not312, label %30, label %33

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

32:                                               ; preds = %30
  store i64 2, ptr %13, align 8, !tbaa !5
  br label %.thread

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

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

37:                                               ; preds = %33
  %38 = load i64, ptr %3, align 8, !tbaa !5
  %39 = icmp slt i64 %38, 0
  br i1 %39, label %40, label %41

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

41:                                               ; preds = %37
  %42 = load i64, ptr %6, align 8, !tbaa !5
  %43 = tail call i64 @llvm.smax.i64(i64 %.0292, i64 1)
  %44 = icmp slt i64 %42, %43
  br i1 %44, label %45, label %46

45:                                               ; preds = %41
  store i64 7, ptr %13, align 8, !tbaa !5
  br label %.thread

46:                                               ; preds = %41
  %47 = load i64, ptr %8, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %34, i64 1)
  %48 = icmp slt i64 %47, %spec.select
  br i1 %48, label %49, label %50

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

50:                                               ; preds = %46
  %51 = load i64, ptr %11, align 8, !tbaa !5
  %52 = icmp slt i64 %51, %spec.select
  br i1 %52, label %53, label %55

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

.thread:                                          ; preds = %28, %36, %45, %53, %49, %40, %32
  %54 = call i32 @xerbla_(ptr noundef nonnull @.str.3, ptr noundef nonnull %13) #6
  br label %.loopexit

55:                                               ; preds = %50
  %56 = icmp eq i64 %34, 0
  %57 = icmp eq i64 %38, 0
  %or.cond = or i1 %56, %57
  br i1 %or.cond, label %.loopexit, label %58

58:                                               ; preds = %55
  %59 = load double, ptr %4, align 8, !tbaa !9
  %60 = fcmp oeq double %59, 0.000000e+00
  br i1 %60, label %61, label %113

61:                                               ; preds = %58
  %62 = load double, ptr %9, align 8, !tbaa !9
  %63 = fcmp oeq double %62, 1.000000e+00
  br i1 %63, label %.loopexit, label %64

64:                                               ; preds = %61
  %65 = fcmp oeq double %62, 0.000000e+00
  br i1 %65, label %.preheader.preheader, label %.preheader339.preheader

.preheader339.preheader:                          ; preds = %64
  %66 = add nuw i64 %38, 2305843009213693951
  %67 = mul i64 %20, %66
  %68 = add i64 %67, %34
  %69 = shl i64 %68, 3
  %scevgep599 = getelementptr i8, ptr %10, i64 %69
  %scevgep600 = getelementptr i8, ptr %9, i64 8
  %70 = add nuw i64 %34, 1
  %min.iters.check607 = icmp ult i64 %34, 4
  %bound0601 = icmp ugt ptr %scevgep600, %10
  %bound1602 = icmp ugt ptr %scevgep599, %9
  %found.conflict603 = and i1 %bound0601, %bound1602
  %.mask = and i64 %20, 1152921504606846976
  %stride.check604 = icmp ne i64 %.mask, 0
  %71 = or i1 %found.conflict603, %stride.check604
  %n.vec610 = and i64 %34, 9223372036854775804
  %ind.end611 = or disjoint i64 %n.vec610, 1
  %cmp.n623 = icmp eq i64 %34, %n.vec610
  br label %.preheader339

.preheader.preheader:                             ; preds = %64
  %72 = shl i64 %20, 3
  %73 = shl nuw i64 %34, 3
  %74 = add nsw i64 %38, -1
  %xtraiter650 = and i64 %38, 7
  %75 = icmp ult i64 %74, 7
  br i1 %75, label %.loopexit.loopexit.unr-lcssa, label %.preheader.preheader.new

.preheader.preheader.new:                         ; preds = %.preheader.preheader
  %unroll_iter652 = and i64 %38, 9223372036854775800
  br label %.preheader

.preheader:                                       ; preds = %.preheader, %.preheader.preheader.new
  %indvar = phi i64 [ 0, %.preheader.preheader.new ], [ %indvar.next.7, %.preheader ]
  %niter653 = phi i64 [ 0, %.preheader.preheader.new ], [ %niter653.next.7, %.preheader ]
  %76 = mul i64 %72, %indvar
  %scevgep = getelementptr i8, ptr %10, i64 %76
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %73, i1 false), !tbaa !9
  %indvar.next = or disjoint i64 %indvar, 1
  %77 = mul i64 %72, %indvar.next
  %scevgep.1 = getelementptr i8, ptr %10, i64 %77
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.1, i8 0, i64 %73, i1 false), !tbaa !9
  %indvar.next.1 = or disjoint i64 %indvar, 2
  %78 = mul i64 %72, %indvar.next.1
  %scevgep.2 = getelementptr i8, ptr %10, i64 %78
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.2, i8 0, i64 %73, i1 false), !tbaa !9
  %indvar.next.2 = or disjoint i64 %indvar, 3
  %79 = mul i64 %72, %indvar.next.2
  %scevgep.3 = getelementptr i8, ptr %10, i64 %79
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.3, i8 0, i64 %73, i1 false), !tbaa !9
  %indvar.next.3 = or disjoint i64 %indvar, 4
  %80 = mul i64 %72, %indvar.next.3
  %scevgep.4 = getelementptr i8, ptr %10, i64 %80
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.4, i8 0, i64 %73, i1 false), !tbaa !9
  %indvar.next.4 = or disjoint i64 %indvar, 5
  %81 = mul i64 %72, %indvar.next.4
  %scevgep.5 = getelementptr i8, ptr %10, i64 %81
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.5, i8 0, i64 %73, i1 false), !tbaa !9
  %indvar.next.5 = or disjoint i64 %indvar, 6
  %82 = mul i64 %72, %indvar.next.5
  %scevgep.6 = getelementptr i8, ptr %10, i64 %82
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.6, i8 0, i64 %73, i1 false), !tbaa !9
  %indvar.next.6 = or disjoint i64 %indvar, 7
  %83 = mul i64 %72, %indvar.next.6
  %scevgep.7 = getelementptr i8, ptr %10, i64 %83
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.7, i8 0, i64 %73, i1 false), !tbaa !9
  %indvar.next.7 = add nuw nsw i64 %indvar, 8
  %niter653.next.7 = add i64 %niter653, 8
  %niter653.ncmp.7 = icmp eq i64 %niter653.next.7, %unroll_iter652
  br i1 %niter653.ncmp.7, label %.loopexit.loopexit.unr-lcssa, label %.preheader, !llvm.loop !11

.preheader339:                                    ; preds = %.preheader339.preheader, %._crit_edge451
  %.1299455 = phi i64 [ %112, %._crit_edge451 ], [ 1, %.preheader339.preheader ]
  %84 = mul nsw i64 %.1299455, %20
  %invariant.gep452 = getelementptr double, ptr %22, i64 %84
  %brmerge = select i1 %min.iters.check607, i1 true, i1 %71
  br i1 %brmerge, label %scalar.ph606.preheader, label %vector.ph608

vector.ph608:                                     ; preds = %.preheader339
  %85 = load double, ptr %9, align 8, !tbaa !9, !alias.scope !13
  %broadcast.splatinsert620 = insertelement <2 x double> poison, double %85, i64 0
  %broadcast.splat621 = shufflevector <2 x double> %broadcast.splatinsert620, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body613

vector.body613:                                   ; preds = %vector.body613, %vector.ph608
  %index614 = phi i64 [ 0, %vector.ph608 ], [ %index.next622, %vector.body613 ]
  %offset.idx615 = or disjoint i64 %index614, 1
  %86 = getelementptr double, ptr %invariant.gep452, i64 %offset.idx615
  %87 = getelementptr i8, ptr %86, i64 16
  %wide.load616 = load <2 x double>, ptr %86, align 8, !tbaa !9, !alias.scope !16, !noalias !13
  %wide.load617 = load <2 x double>, ptr %87, align 8, !tbaa !9, !alias.scope !16, !noalias !13
  %88 = fmul <2 x double> %broadcast.splat621, %wide.load616
  %89 = fmul <2 x double> %broadcast.splat621, %wide.load617
  store <2 x double> %88, ptr %86, align 8, !tbaa !9, !alias.scope !16, !noalias !13
  store <2 x double> %89, ptr %87, align 8, !tbaa !9, !alias.scope !16, !noalias !13
  %index.next622 = add nuw i64 %index614, 4
  %90 = icmp eq i64 %index.next622, %n.vec610
  br i1 %90, label %middle.block605, label %vector.body613, !llvm.loop !18

middle.block605:                                  ; preds = %vector.body613
  br i1 %cmp.n623, label %._crit_edge451, label %scalar.ph606.preheader

scalar.ph606.preheader:                           ; preds = %.preheader339, %middle.block605
  %.1303449.ph = phi i64 [ 1, %.preheader339 ], [ %ind.end611, %middle.block605 ]
  %91 = sub i64 %70, %.1303449.ph
  %92 = sub i64 %34, %.1303449.ph
  %xtraiter647 = and i64 %91, 3
  %lcmp.mod648.not = icmp eq i64 %xtraiter647, 0
  br i1 %lcmp.mod648.not, label %scalar.ph606.prol.loopexit, label %scalar.ph606.prol

scalar.ph606.prol:                                ; preds = %scalar.ph606.preheader, %scalar.ph606.prol
  %.1303449.prol = phi i64 [ %96, %scalar.ph606.prol ], [ %.1303449.ph, %scalar.ph606.preheader ]
  %prol.iter649 = phi i64 [ %prol.iter649.next, %scalar.ph606.prol ], [ 0, %scalar.ph606.preheader ]
  %93 = load double, ptr %9, align 8, !tbaa !9
  %gep453.prol = getelementptr double, ptr %invariant.gep452, i64 %.1303449.prol
  %94 = load double, ptr %gep453.prol, align 8, !tbaa !9
  %95 = fmul double %93, %94
  store double %95, ptr %gep453.prol, align 8, !tbaa !9
  %96 = add nuw i64 %.1303449.prol, 1
  %prol.iter649.next = add i64 %prol.iter649, 1
  %prol.iter649.cmp.not = icmp eq i64 %prol.iter649.next, %xtraiter647
  br i1 %prol.iter649.cmp.not, label %scalar.ph606.prol.loopexit, label %scalar.ph606.prol, !llvm.loop !21

scalar.ph606.prol.loopexit:                       ; preds = %scalar.ph606.prol, %scalar.ph606.preheader
  %.1303449.unr = phi i64 [ %.1303449.ph, %scalar.ph606.preheader ], [ %96, %scalar.ph606.prol ]
  %97 = icmp ult i64 %92, 3
  br i1 %97, label %._crit_edge451, label %scalar.ph606.preheader.new

scalar.ph606.preheader.new:                       ; preds = %scalar.ph606.prol.loopexit
  %invariant.gep660 = getelementptr i8, ptr %invariant.gep452, i64 8
  %invariant.gep662 = getelementptr i8, ptr %invariant.gep452, i64 16
  br label %scalar.ph606

scalar.ph606:                                     ; preds = %scalar.ph606, %scalar.ph606.preheader.new
  %.1303449 = phi i64 [ %.1303449.unr, %scalar.ph606.preheader.new ], [ %111, %scalar.ph606 ]
  %98 = load double, ptr %9, align 8, !tbaa !9
  %gep453 = getelementptr double, ptr %invariant.gep452, i64 %.1303449
  %99 = load double, ptr %gep453, align 8, !tbaa !9
  %100 = fmul double %98, %99
  store double %100, ptr %gep453, align 8, !tbaa !9
  %101 = load double, ptr %9, align 8, !tbaa !9
  %gep661 = getelementptr double, ptr %invariant.gep660, i64 %.1303449
  %102 = load double, ptr %gep661, align 8, !tbaa !9
  %103 = fmul double %101, %102
  store double %103, ptr %gep661, align 8, !tbaa !9
  %104 = load double, ptr %9, align 8, !tbaa !9
  %gep663 = getelementptr double, ptr %invariant.gep662, i64 %.1303449
  %105 = load double, ptr %gep663, align 8, !tbaa !9
  %106 = fmul double %104, %105
  store double %106, ptr %gep663, align 8, !tbaa !9
  %107 = add nuw i64 %.1303449, 3
  %108 = load double, ptr %9, align 8, !tbaa !9
  %gep453.3 = getelementptr double, ptr %invariant.gep452, i64 %107
  %109 = load double, ptr %gep453.3, align 8, !tbaa !9
  %110 = fmul double %108, %109
  store double %110, ptr %gep453.3, align 8, !tbaa !9
  %111 = add nuw i64 %.1303449, 4
  %exitcond484.not.3 = icmp eq i64 %107, %34
  br i1 %exitcond484.not.3, label %._crit_edge451, label %scalar.ph606, !llvm.loop !23

._crit_edge451:                                   ; preds = %scalar.ph606.prol.loopexit, %scalar.ph606, %middle.block605
  %112 = add nuw i64 %.1299455, 1
  %exitcond485.not = icmp eq i64 %.1299455, %38
  br i1 %exitcond485.not, label %.loopexit, label %.preheader339, !llvm.loop !24

113:                                              ; preds = %58
  %114 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #6
  %.not315 = icmp eq i64 %114, 0
  %115 = load i64, ptr %3, align 8, !tbaa !5
  %.not316444 = icmp slt i64 %115, 1
  br i1 %.not315, label %222, label %116

116:                                              ; preds = %113
  br i1 %.not312, label %170, label %117

117:                                              ; preds = %116
  br i1 %.not316444, label %.loopexit, label %.lr.ph369

.lr.ph369:                                        ; preds = %117
  %118 = load i64, ptr %2, align 8, !tbaa !5
  %.not329355 = icmp slt i64 %118, 1
  %119 = add i64 %14, 1
  br i1 %.not329355, label %.loopexit, label %.lr.ph358

.lr.ph358:                                        ; preds = %.lr.ph369, %._crit_edge359
  %.2300367 = phi i64 [ %169, %._crit_edge359 ], [ 1, %.lr.ph369 ]
  %120 = mul nsw i64 %.2300367, %17
  %invariant.gep360 = getelementptr double, ptr %19, i64 %120
  %121 = mul nsw i64 %.2300367, %20
  %invariant.gep353 = getelementptr double, ptr %22, i64 %121
  br label %122

122:                                              ; preds = %.lr.ph358, %167
  %indvar630 = phi i64 [ 0, %.lr.ph358 ], [ %indvar.next631, %167 ]
  %.2304356 = phi i64 [ 1, %.lr.ph358 ], [ %168, %167 ]
  %123 = load double, ptr %4, align 8, !tbaa !9
  %gep361 = getelementptr double, ptr %invariant.gep360, i64 %.2304356
  %124 = load double, ptr %gep361, align 8, !tbaa !9
  %125 = fmul double %123, %124
  %.not330.not348 = icmp ugt i64 %.2304356, 1
  br i1 %.not330.not348, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %122
  %126 = mul nsw i64 %.2304356, %14
  %invariant.gep351 = getelementptr double, ptr %16, i64 %126
  %xtraiter = and i64 %indvar630, 1
  %127 = icmp eq i64 %indvar630, 1
  br i1 %127, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %indvar630, -2
  br label %128

128:                                              ; preds = %128, %.lr.ph.new
  %.0293350 = phi double [ 0.000000e+00, %.lr.ph.new ], [ %141, %128 ]
  %.0296349 = phi i64 [ 1, %.lr.ph.new ], [ %142, %128 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.1, %128 ]
  %gep352 = getelementptr double, ptr %invariant.gep351, i64 %.0296349
  %129 = load double, ptr %gep352, align 8, !tbaa !9
  %gep354 = getelementptr double, ptr %invariant.gep353, i64 %.0296349
  %130 = load double, ptr %gep354, align 8, !tbaa !9
  %131 = tail call double @llvm.fmuladd.f64(double %125, double %129, double %130)
  store double %131, ptr %gep354, align 8, !tbaa !9
  %gep = getelementptr double, ptr %invariant.gep360, i64 %.0296349
  %132 = load double, ptr %gep, align 8, !tbaa !9
  %133 = load double, ptr %gep352, align 8, !tbaa !9
  %134 = tail call double @llvm.fmuladd.f64(double %132, double %133, double %.0293350)
  %135 = add nuw nsw i64 %.0296349, 1
  %gep352.1 = getelementptr double, ptr %invariant.gep351, i64 %135
  %136 = load double, ptr %gep352.1, align 8, !tbaa !9
  %gep354.1 = getelementptr double, ptr %invariant.gep353, i64 %135
  %137 = load double, ptr %gep354.1, align 8, !tbaa !9
  %138 = tail call double @llvm.fmuladd.f64(double %125, double %136, double %137)
  store double %138, ptr %gep354.1, align 8, !tbaa !9
  %gep.1 = getelementptr double, ptr %invariant.gep360, i64 %135
  %139 = load double, ptr %gep.1, align 8, !tbaa !9
  %140 = load double, ptr %gep352.1, align 8, !tbaa !9
  %141 = tail call double @llvm.fmuladd.f64(double %139, double %140, double %134)
  %142 = add nuw nsw i64 %.0296349, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit.unr-lcssa, label %128, !llvm.loop !25

._crit_edge.loopexit.unr-lcssa:                   ; preds = %128, %.lr.ph
  %.lcssa629.ph = phi double [ poison, %.lr.ph ], [ %141, %128 ]
  %.0293350.unr = phi double [ 0.000000e+00, %.lr.ph ], [ %141, %128 ]
  %.0296349.unr = phi i64 [ 1, %.lr.ph ], [ %142, %128 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %._crit_edge.loopexit.epilog-lcssa

._crit_edge.loopexit.epilog-lcssa:                ; preds = %._crit_edge.loopexit.unr-lcssa
  %gep352.epil = getelementptr double, ptr %invariant.gep351, i64 %.0296349.unr
  %143 = load double, ptr %gep352.epil, align 8, !tbaa !9
  %gep354.epil = getelementptr double, ptr %invariant.gep353, i64 %.0296349.unr
  %144 = load double, ptr %gep354.epil, align 8, !tbaa !9
  %145 = tail call double @llvm.fmuladd.f64(double %125, double %143, double %144)
  store double %145, ptr %gep354.epil, align 8, !tbaa !9
  %gep.epil = getelementptr double, ptr %invariant.gep360, i64 %.0296349.unr
  %146 = load double, ptr %gep.epil, align 8, !tbaa !9
  %147 = load double, ptr %gep352.epil, align 8, !tbaa !9
  %148 = tail call double @llvm.fmuladd.f64(double %146, double %147, double %.0293350.unr)
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit.epilog-lcssa, %._crit_edge.loopexit.unr-lcssa, %122
  %.0293.lcssa = phi double [ 0.000000e+00, %122 ], [ %.lcssa629.ph, %._crit_edge.loopexit.unr-lcssa ], [ %148, %._crit_edge.loopexit.epilog-lcssa ]
  %149 = load double, ptr %9, align 8, !tbaa !9
  %150 = fcmp oeq double %149, 0.000000e+00
  br i1 %150, label %151, label %158

151:                                              ; preds = %._crit_edge
  %152 = mul i64 %.2304356, %119
  %153 = getelementptr inbounds double, ptr %16, i64 %152
  %154 = load double, ptr %153, align 8, !tbaa !9
  %155 = load double, ptr %4, align 8, !tbaa !9
  %156 = fmul double %.0293.lcssa, %155
  %157 = tail call double @llvm.fmuladd.f64(double %125, double %154, double %156)
  %gep365 = getelementptr double, ptr %invariant.gep353, i64 %.2304356
  store double %157, ptr %gep365, align 8, !tbaa !9
  br label %167

158:                                              ; preds = %._crit_edge
  %gep363 = getelementptr double, ptr %invariant.gep353, i64 %.2304356
  %159 = load double, ptr %gep363, align 8, !tbaa !9
  %160 = mul i64 %.2304356, %119
  %161 = getelementptr inbounds double, ptr %16, i64 %160
  %162 = load double, ptr %161, align 8, !tbaa !9
  %163 = fmul double %125, %162
  %164 = tail call double @llvm.fmuladd.f64(double %149, double %159, double %163)
  %165 = load double, ptr %4, align 8, !tbaa !9
  %166 = tail call double @llvm.fmuladd.f64(double %165, double %.0293.lcssa, double %164)
  store double %166, ptr %gep363, align 8, !tbaa !9
  br label %167

167:                                              ; preds = %151, %158
  %168 = add nuw i64 %.2304356, 1
  %exitcond474.not = icmp eq i64 %.2304356, %118
  %indvar.next631 = add i64 %indvar630, 1
  br i1 %exitcond474.not, label %._crit_edge359, label %122, !llvm.loop !26

._crit_edge359:                                   ; preds = %167
  %169 = add nuw i64 %.2300367, 1
  %exitcond475.not = icmp eq i64 %.2300367, %115
  br i1 %exitcond475.not, label %.loopexit, label %.lr.ph358, !llvm.loop !27

170:                                              ; preds = %116
  br i1 %.not316444, label %.loopexit, label %.lr.ph396

.lr.ph396:                                        ; preds = %170
  %171 = load i64, ptr %2, align 8, !tbaa !5
  %172 = icmp sgt i64 %171, 0
  %173 = add i64 %14, 1
  br i1 %172, label %.lr.ph385.us, label %.loopexit

.lr.ph385.us:                                     ; preds = %.lr.ph396, %._crit_edge386.us
  %.3301394.us = phi i64 [ %221, %._crit_edge386.us ], [ 1, %.lr.ph396 ]
  %174 = mul nsw i64 %.3301394.us, %17
  %invariant.gep387.us = getelementptr double, ptr %19, i64 %174
  %175 = mul nsw i64 %.3301394.us, %20
  %invariant.gep381.us = getelementptr double, ptr %22, i64 %175
  br label %176

176:                                              ; preds = %.lr.ph385.us, %198
  %indvar633 = phi i64 [ 0, %.lr.ph385.us ], [ %indvar.next634, %198 ]
  %.3305383.us = phi i64 [ %171, %.lr.ph385.us ], [ %199, %198 ]
  %177 = load double, ptr %4, align 8, !tbaa !9
  %gep388.us = getelementptr double, ptr %invariant.gep387.us, i64 %.3305383.us
  %178 = load double, ptr %gep388.us, align 8, !tbaa !9
  %179 = fmul double %177, %178
  %.not327.not372.us = icmp slt i64 %.3305383.us, %171
  br i1 %.not327.not372.us, label %.lr.ph376.us, label %._crit_edge377.us

._crit_edge377.us:                                ; preds = %.prol.loopexit, %.lr.ph376.us.new, %176
  %.1.lcssa.us = phi double [ 0.000000e+00, %176 ], [ %.lcssa.unr, %.prol.loopexit ], [ %212, %.lr.ph376.us.new ]
  %180 = load double, ptr %9, align 8, !tbaa !9
  %181 = fcmp oeq double %180, 0.000000e+00
  br i1 %181, label %191, label %182

182:                                              ; preds = %._crit_edge377.us
  %gep390.us = getelementptr double, ptr %invariant.gep381.us, i64 %.3305383.us
  %183 = load double, ptr %gep390.us, align 8, !tbaa !9
  %184 = mul i64 %.3305383.us, %173
  %185 = getelementptr inbounds double, ptr %16, i64 %184
  %186 = load double, ptr %185, align 8, !tbaa !9
  %187 = fmul double %179, %186
  %188 = tail call double @llvm.fmuladd.f64(double %180, double %183, double %187)
  %189 = load double, ptr %4, align 8, !tbaa !9
  %190 = tail call double @llvm.fmuladd.f64(double %189, double %.1.lcssa.us, double %188)
  store double %190, ptr %gep390.us, align 8, !tbaa !9
  br label %198

191:                                              ; preds = %._crit_edge377.us
  %192 = mul i64 %.3305383.us, %173
  %193 = getelementptr inbounds double, ptr %16, i64 %192
  %194 = load double, ptr %193, align 8, !tbaa !9
  %195 = load double, ptr %4, align 8, !tbaa !9
  %196 = fmul double %.1.lcssa.us, %195
  %197 = tail call double @llvm.fmuladd.f64(double %179, double %194, double %196)
  %gep392.us = getelementptr double, ptr %invariant.gep381.us, i64 %.3305383.us
  store double %197, ptr %gep392.us, align 8, !tbaa !9
  br label %198

198:                                              ; preds = %191, %182
  %199 = add nsw i64 %.3305383.us, -1
  %200 = icmp sgt i64 %.3305383.us, 1
  %indvar.next634 = add i64 %indvar633, 1
  br i1 %200, label %176, label %._crit_edge386.us, !llvm.loop !28

.lr.ph376.us.new:                                 ; preds = %.prol.loopexit, %.lr.ph376.us.new
  %.1374.us = phi double [ %212, %.lr.ph376.us.new ], [ %.1374.us.unr, %.prol.loopexit ]
  %.1297.in373.us = phi i64 [ %.1297.us.1, %.lr.ph376.us.new ], [ %.1297.in373.us.unr, %.prol.loopexit ]
  %.1297.us = add nuw nsw i64 %.1297.in373.us, 1
  %gep380.us = getelementptr double, ptr %invariant.gep379.us, i64 %.1297.us
  %201 = load double, ptr %gep380.us, align 8, !tbaa !9
  %gep382.us = getelementptr double, ptr %invariant.gep381.us, i64 %.1297.us
  %202 = load double, ptr %gep382.us, align 8, !tbaa !9
  %203 = tail call double @llvm.fmuladd.f64(double %179, double %201, double %202)
  store double %203, ptr %gep382.us, align 8, !tbaa !9
  %gep371.us = getelementptr double, ptr %invariant.gep387.us, i64 %.1297.us
  %204 = load double, ptr %gep371.us, align 8, !tbaa !9
  %205 = load double, ptr %gep380.us, align 8, !tbaa !9
  %206 = tail call double @llvm.fmuladd.f64(double %204, double %205, double %.1374.us)
  %.1297.us.1 = add nuw nsw i64 %.1297.in373.us, 2
  %gep380.us.1 = getelementptr double, ptr %invariant.gep379.us, i64 %.1297.us.1
  %207 = load double, ptr %gep380.us.1, align 8, !tbaa !9
  %gep382.us.1 = getelementptr double, ptr %invariant.gep381.us, i64 %.1297.us.1
  %208 = load double, ptr %gep382.us.1, align 8, !tbaa !9
  %209 = tail call double @llvm.fmuladd.f64(double %179, double %207, double %208)
  store double %209, ptr %gep382.us.1, align 8, !tbaa !9
  %gep371.us.1 = getelementptr double, ptr %invariant.gep387.us, i64 %.1297.us.1
  %210 = load double, ptr %gep371.us.1, align 8, !tbaa !9
  %211 = load double, ptr %gep380.us.1, align 8, !tbaa !9
  %212 = tail call double @llvm.fmuladd.f64(double %210, double %211, double %206)
  %exitcond476.not.1 = icmp eq i64 %.1297.us.1, %171
  br i1 %exitcond476.not.1, label %._crit_edge377.us, label %.lr.ph376.us.new, !llvm.loop !29

.lr.ph376.us:                                     ; preds = %176
  %213 = mul nsw i64 %.3305383.us, %14
  %invariant.gep379.us = getelementptr double, ptr %16, i64 %213
  %xtraiter635 = and i64 %indvar633, 1
  %lcmp.mod636.not = icmp eq i64 %xtraiter635, 0
  br i1 %lcmp.mod636.not, label %.prol.loopexit, label %.prol.loopexit.unr-lcssa

.prol.loopexit.unr-lcssa:                         ; preds = %.lr.ph376.us
  %.1297.us.prol = add nuw nsw i64 %.3305383.us, 1
  %gep380.us.prol = getelementptr double, ptr %invariant.gep379.us, i64 %.1297.us.prol
  %214 = load double, ptr %gep380.us.prol, align 8, !tbaa !9
  %gep382.us.prol = getelementptr double, ptr %invariant.gep381.us, i64 %.1297.us.prol
  %215 = load double, ptr %gep382.us.prol, align 8, !tbaa !9
  %216 = tail call double @llvm.fmuladd.f64(double %179, double %214, double %215)
  store double %216, ptr %gep382.us.prol, align 8, !tbaa !9
  %gep371.us.prol = getelementptr double, ptr %invariant.gep387.us, i64 %.1297.us.prol
  %217 = load double, ptr %gep371.us.prol, align 8, !tbaa !9
  %218 = load double, ptr %gep380.us.prol, align 8, !tbaa !9
  %219 = tail call double @llvm.fmuladd.f64(double %217, double %218, double 0.000000e+00)
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.lr.ph376.us
  %.lcssa.unr = phi double [ poison, %.lr.ph376.us ], [ %219, %.prol.loopexit.unr-lcssa ]
  %.1374.us.unr = phi double [ 0.000000e+00, %.lr.ph376.us ], [ %219, %.prol.loopexit.unr-lcssa ]
  %.1297.in373.us.unr = phi i64 [ %.3305383.us, %.lr.ph376.us ], [ %.1297.us.prol, %.prol.loopexit.unr-lcssa ]
  %220 = icmp eq i64 %indvar633, 1
  br i1 %220, label %._crit_edge377.us, label %.lr.ph376.us.new

._crit_edge386.us:                                ; preds = %198
  %221 = add nuw i64 %.3301394.us, 1
  %exitcond477.not = icmp eq i64 %.3301394.us, %115
  br i1 %exitcond477.not, label %.loopexit, label %.lr.ph385.us, !llvm.loop !30

222:                                              ; preds = %113
  br i1 %.not316444, label %.loopexit, label %.lr.ph447.preheader

.lr.ph447.preheader:                              ; preds = %222
  %223 = shl i64 %20, 3
  %224 = shl i64 %17, 3
  %225 = shl i64 %17, 3
  %226 = shl i64 %115, 3
  %227 = add i64 %226, -8
  %228 = mul i64 %17, %227
  %scevgep505 = getelementptr i8, ptr %7, i64 %228
  %229 = shl i64 %20, 3
  %230 = shl i64 %17, 3
  %231 = shl i64 %20, 3
  %232 = shl i64 %17, 3
  %233 = shl i64 %20, 3
  %scevgep566 = getelementptr i8, ptr %9, i64 8
  %234 = shl i64 %17, 3
  %235 = shl i64 %17, 3
  %236 = getelementptr i8, ptr %7, i64 %224
  %237 = load i64, ptr %2, align 8, !tbaa !5
  %.not318405 = icmp slt i64 %237, 1
  %min.iters.check577 = icmp ult i64 %237, 4
  %238 = shl i64 %237, 3
  %n.vec580 = and i64 %237, 9223372036854775804
  %ind.end581 = or disjoint i64 %n.vec580, 1
  %cmp.n597 = icmp eq i64 %237, %n.vec580
  %xtraiter637 = and i64 %237, 1
  %lcmp.mod638.not = icmp eq i64 %xtraiter637, 0
  %min.iters.check548 = icmp ult i64 %237, 4
  %239 = shl i64 %237, 3
  %n.vec551 = and i64 %237, 9223372036854775804
  %ind.end552 = or disjoint i64 %n.vec551, 1
  %cmp.n562 = icmp eq i64 %237, %n.vec551
  %240 = add nuw i64 %237, 1
  %.not324413 = icmp slt i64 %237, 1
  %241 = shl i64 %237, 3
  %invariant.gep = getelementptr i8, ptr %7, i64 %241
  %min.iters.check521 = icmp ult i64 %237, 4
  %stride.check518 = icmp slt i64 %230, 0
  %n.vec524 = and i64 %237, 9223372036854775804
  %ind.end525 = or disjoint i64 %n.vec524, 1
  %cmp.n537 = icmp eq i64 %237, %n.vec524
  %xtraiter641 = and i64 %237, 1
  %lcmp.mod642.not = icmp eq i64 %xtraiter641, 0
  %.not322429 = icmp slt i64 %237, 1
  %242 = shl i64 %237, 3
  %scevgep506 = getelementptr i8, ptr %scevgep505, i64 %242
  %min.iters.check = icmp ult i64 %237, 4
  %stride.check = icmp slt i64 %224, 0
  %n.vec = and i64 %237, 9223372036854775804
  %ind.end = or disjoint i64 %n.vec, 1
  %cmp.n = icmp eq i64 %237, %n.vec
  %xtraiter644 = and i64 %237, 1
  %lcmp.mod645.not = icmp eq i64 %xtraiter644, 0
  br label %.lr.ph447

.loopexit342:                                     ; preds = %._crit_edge433, %._crit_edge428
  %exitcond483.not = icmp eq i64 %.4445, %115
  %indvar.next501 = add i64 %indvar500, 1
  br i1 %exitcond483.not, label %.loopexit, label %.lr.ph447, !llvm.loop !31

.lr.ph447:                                        ; preds = %.lr.ph447.preheader, %.loopexit342
  %indvar500 = phi i64 [ 0, %.lr.ph447.preheader ], [ %indvar.next501, %.loopexit342 ]
  %.4445 = phi i64 [ 1, %.lr.ph447.preheader ], [ %350, %.loopexit342 ]
  %243 = mul i64 %233, %indvar500
  %scevgep564 = getelementptr i8, ptr %10, i64 %243
  %244 = mul i64 %234, %indvar500
  %scevgep567 = getelementptr i8, ptr %7, i64 %244
  %245 = mul i64 %231, %indvar500
  %scevgep539 = getelementptr i8, ptr %10, i64 %245
  %246 = mul i64 %232, %indvar500
  %scevgep541 = getelementptr i8, ptr %7, i64 %246
  %247 = mul i64 %229, %indvar500
  %scevgep511 = getelementptr i8, ptr %10, i64 %247
  %248 = mul i64 %230, %indvar500
  %249 = sub i64 %248, %235
  %250 = mul i64 %223, %indvar500
  %scevgep502 = getelementptr i8, ptr %10, i64 %250
  %251 = mul i64 %225, %indvar500
  %scevgep504 = getelementptr i8, ptr %236, i64 %251
  %252 = load double, ptr %4, align 8, !tbaa !9
  %253 = mul nsw i64 %.4445, %14
  %254 = getelementptr double, ptr %16, i64 %.4445
  %255 = getelementptr double, ptr %254, i64 %253
  %256 = load double, ptr %255, align 8, !tbaa !9
  %257 = fmul double %252, %256
  %258 = load double, ptr %9, align 8, !tbaa !9
  %259 = fcmp oeq double %258, 0.000000e+00
  br i1 %259, label %260, label %288

260:                                              ; preds = %.lr.ph447
  br i1 %.not318405, label %.loopexit343, label %.lr.ph408

.lr.ph408:                                        ; preds = %260
  %261 = mul nsw i64 %.4445, %17
  %invariant.gep409 = getelementptr double, ptr %19, i64 %261
  %262 = mul nsw i64 %.4445, %20
  %invariant.gep411 = getelementptr double, ptr %22, i64 %262
  br i1 %min.iters.check548, label %scalar.ph547.preheader, label %vector.memcheck538

vector.memcheck538:                               ; preds = %.lr.ph408
  %scevgep540 = getelementptr i8, ptr %scevgep539, i64 %239
  %scevgep542 = getelementptr i8, ptr %scevgep541, i64 %239
  %bound0543 = icmp ult ptr %scevgep539, %scevgep542
  %bound1544 = icmp ult ptr %scevgep541, %scevgep540
  %found.conflict545 = and i1 %bound0543, %bound1544
  br i1 %found.conflict545, label %scalar.ph547.preheader, label %vector.ph549

vector.ph549:                                     ; preds = %vector.memcheck538
  %broadcast.splatinsert559 = insertelement <2 x double> poison, double %257, i64 0
  %broadcast.splat560 = shufflevector <2 x double> %broadcast.splatinsert559, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body554

vector.body554:                                   ; preds = %vector.body554, %vector.ph549
  %index555 = phi i64 [ 0, %vector.ph549 ], [ %index.next561, %vector.body554 ]
  %offset.idx556 = or disjoint i64 %index555, 1
  %263 = getelementptr double, ptr %invariant.gep409, i64 %offset.idx556
  %264 = getelementptr i8, ptr %263, i64 16
  %wide.load557 = load <2 x double>, ptr %263, align 8, !tbaa !9, !alias.scope !32
  %wide.load558 = load <2 x double>, ptr %264, align 8, !tbaa !9, !alias.scope !32
  %265 = fmul <2 x double> %broadcast.splat560, %wide.load557
  %266 = fmul <2 x double> %broadcast.splat560, %wide.load558
  %267 = getelementptr double, ptr %invariant.gep411, i64 %offset.idx556
  %268 = getelementptr i8, ptr %267, i64 16
  store <2 x double> %265, ptr %267, align 8, !tbaa !9, !alias.scope !35, !noalias !32
  store <2 x double> %266, ptr %268, align 8, !tbaa !9, !alias.scope !35, !noalias !32
  %index.next561 = add nuw i64 %index555, 4
  %269 = icmp eq i64 %index.next561, %n.vec551
  br i1 %269, label %middle.block546, label %vector.body554, !llvm.loop !37

middle.block546:                                  ; preds = %vector.body554
  br i1 %cmp.n562, label %.loopexit343, label %scalar.ph547.preheader

scalar.ph547.preheader:                           ; preds = %middle.block546, %vector.memcheck538, %.lr.ph408
  %.4306406.ph = phi i64 [ 1, %vector.memcheck538 ], [ 1, %.lr.ph408 ], [ %ind.end552, %middle.block546 ]
  %270 = sub i64 %240, %.4306406.ph
  %271 = sub i64 %237, %.4306406.ph
  %xtraiter639 = and i64 %270, 3
  %lcmp.mod640.not = icmp eq i64 %xtraiter639, 0
  br i1 %lcmp.mod640.not, label %scalar.ph547.prol.loopexit, label %scalar.ph547.prol

scalar.ph547.prol:                                ; preds = %scalar.ph547.preheader, %scalar.ph547.prol
  %.4306406.prol = phi i64 [ %274, %scalar.ph547.prol ], [ %.4306406.ph, %scalar.ph547.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph547.prol ], [ 0, %scalar.ph547.preheader ]
  %gep410.prol = getelementptr double, ptr %invariant.gep409, i64 %.4306406.prol
  %272 = load double, ptr %gep410.prol, align 8, !tbaa !9
  %273 = fmul double %257, %272
  %gep412.prol = getelementptr double, ptr %invariant.gep411, i64 %.4306406.prol
  store double %273, ptr %gep412.prol, align 8, !tbaa !9
  %274 = add nuw i64 %.4306406.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter639
  br i1 %prol.iter.cmp.not, label %scalar.ph547.prol.loopexit, label %scalar.ph547.prol, !llvm.loop !38

scalar.ph547.prol.loopexit:                       ; preds = %scalar.ph547.prol, %scalar.ph547.preheader
  %.4306406.unr = phi i64 [ %.4306406.ph, %scalar.ph547.preheader ], [ %274, %scalar.ph547.prol ]
  %275 = icmp ult i64 %271, 3
  br i1 %275, label %.loopexit343, label %scalar.ph547

scalar.ph547:                                     ; preds = %scalar.ph547.prol.loopexit, %scalar.ph547
  %.4306406 = phi i64 [ %287, %scalar.ph547 ], [ %.4306406.unr, %scalar.ph547.prol.loopexit ]
  %gep410 = getelementptr double, ptr %invariant.gep409, i64 %.4306406
  %276 = load double, ptr %gep410, align 8, !tbaa !9
  %277 = fmul double %257, %276
  %gep412 = getelementptr double, ptr %invariant.gep411, i64 %.4306406
  store double %277, ptr %gep412, align 8, !tbaa !9
  %278 = add nuw i64 %.4306406, 1
  %gep410.1 = getelementptr double, ptr %invariant.gep409, i64 %278
  %279 = load double, ptr %gep410.1, align 8, !tbaa !9
  %280 = fmul double %257, %279
  %gep412.1 = getelementptr double, ptr %invariant.gep411, i64 %278
  store double %280, ptr %gep412.1, align 8, !tbaa !9
  %281 = add nuw i64 %.4306406, 2
  %gep410.2 = getelementptr double, ptr %invariant.gep409, i64 %281
  %282 = load double, ptr %gep410.2, align 8, !tbaa !9
  %283 = fmul double %257, %282
  %gep412.2 = getelementptr double, ptr %invariant.gep411, i64 %281
  store double %283, ptr %gep412.2, align 8, !tbaa !9
  %284 = add nuw i64 %.4306406, 3
  %gep410.3 = getelementptr double, ptr %invariant.gep409, i64 %284
  %285 = load double, ptr %gep410.3, align 8, !tbaa !9
  %286 = fmul double %257, %285
  %gep412.3 = getelementptr double, ptr %invariant.gep411, i64 %284
  store double %286, ptr %gep412.3, align 8, !tbaa !9
  %287 = add nuw i64 %.4306406, 4
  %exitcond479.not.3 = icmp eq i64 %284, %237
  br i1 %exitcond479.not.3, label %.loopexit343, label %scalar.ph547, !llvm.loop !39

288:                                              ; preds = %.lr.ph447
  br i1 %.not318405, label %.loopexit343, label %.lr.ph400

.lr.ph400:                                        ; preds = %288
  %289 = mul nsw i64 %.4445, %20
  %invariant.gep401 = getelementptr double, ptr %22, i64 %289
  %290 = mul nsw i64 %.4445, %17
  %invariant.gep403 = getelementptr double, ptr %19, i64 %290
  br i1 %min.iters.check577, label %scalar.ph576.preheader, label %vector.memcheck563

vector.memcheck563:                               ; preds = %.lr.ph400
  %scevgep565 = getelementptr i8, ptr %scevgep564, i64 %238
  %scevgep568 = getelementptr i8, ptr %scevgep567, i64 %238
  %bound0569 = icmp ult ptr %scevgep564, %scevgep566
  %bound1570 = icmp ugt ptr %scevgep565, %9
  %found.conflict571 = and i1 %bound0569, %bound1570
  %bound0572 = icmp ult ptr %scevgep564, %scevgep568
  %bound1573 = icmp ult ptr %scevgep567, %scevgep565
  %found.conflict574 = and i1 %bound0572, %bound1573
  %conflict.rdx = or i1 %found.conflict571, %found.conflict574
  br i1 %conflict.rdx, label %scalar.ph576.preheader, label %vector.ph578

vector.ph578:                                     ; preds = %vector.memcheck563
  %broadcast.splatinsert590 = insertelement <2 x double> poison, double %257, i64 0
  %broadcast.splat591 = shufflevector <2 x double> %broadcast.splatinsert590, <2 x double> poison, <2 x i32> zeroinitializer
  %291 = load double, ptr %9, align 8, !tbaa !9, !alias.scope !40
  %broadcast.splatinsert594 = insertelement <2 x double> poison, double %291, i64 0
  %broadcast.splat595 = shufflevector <2 x double> %broadcast.splatinsert594, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body583

vector.body583:                                   ; preds = %vector.body583, %vector.ph578
  %index584 = phi i64 [ 0, %vector.ph578 ], [ %index.next596, %vector.body583 ]
  %offset.idx585 = or disjoint i64 %index584, 1
  %292 = getelementptr double, ptr %invariant.gep401, i64 %offset.idx585
  %293 = getelementptr i8, ptr %292, i64 16
  %wide.load586 = load <2 x double>, ptr %292, align 8, !tbaa !9, !alias.scope !43, !noalias !45
  %wide.load587 = load <2 x double>, ptr %293, align 8, !tbaa !9, !alias.scope !43, !noalias !45
  %294 = getelementptr double, ptr %invariant.gep403, i64 %offset.idx585
  %295 = getelementptr i8, ptr %294, i64 16
  %wide.load588 = load <2 x double>, ptr %294, align 8, !tbaa !9, !alias.scope !47
  %wide.load589 = load <2 x double>, ptr %295, align 8, !tbaa !9, !alias.scope !47
  %296 = fmul <2 x double> %broadcast.splat591, %wide.load588
  %297 = fmul <2 x double> %broadcast.splat591, %wide.load589
  %298 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat595, <2 x double> %wide.load586, <2 x double> %296)
  %299 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat595, <2 x double> %wide.load587, <2 x double> %297)
  store <2 x double> %298, ptr %292, align 8, !tbaa !9, !alias.scope !43, !noalias !45
  store <2 x double> %299, ptr %293, align 8, !tbaa !9, !alias.scope !43, !noalias !45
  %index.next596 = add nuw i64 %index584, 4
  %300 = icmp eq i64 %index.next596, %n.vec580
  br i1 %300, label %middle.block575, label %vector.body583, !llvm.loop !48

middle.block575:                                  ; preds = %vector.body583
  br i1 %cmp.n597, label %.loopexit343, label %scalar.ph576.preheader

scalar.ph576.preheader:                           ; preds = %middle.block575, %vector.memcheck563, %.lr.ph400
  %.5398.ph = phi i64 [ 1, %vector.memcheck563 ], [ 1, %.lr.ph400 ], [ %ind.end581, %middle.block575 ]
  br i1 %lcmp.mod638.not, label %scalar.ph576.prol.loopexit, label %scalar.ph576.prol

scalar.ph576.prol:                                ; preds = %scalar.ph576.preheader
  %301 = load double, ptr %9, align 8, !tbaa !9
  %gep402.prol = getelementptr double, ptr %invariant.gep401, i64 %.5398.ph
  %302 = load double, ptr %gep402.prol, align 8, !tbaa !9
  %gep404.prol = getelementptr double, ptr %invariant.gep403, i64 %.5398.ph
  %303 = load double, ptr %gep404.prol, align 8, !tbaa !9
  %304 = fmul double %257, %303
  %305 = tail call double @llvm.fmuladd.f64(double %301, double %302, double %304)
  store double %305, ptr %gep402.prol, align 8, !tbaa !9
  %306 = add nuw i64 %.5398.ph, 1
  br label %scalar.ph576.prol.loopexit

scalar.ph576.prol.loopexit:                       ; preds = %scalar.ph576.prol, %scalar.ph576.preheader
  %.5398.unr = phi i64 [ %.5398.ph, %scalar.ph576.preheader ], [ %306, %scalar.ph576.prol ]
  %307 = icmp eq i64 %237, %.5398.ph
  br i1 %307, label %.loopexit343, label %scalar.ph576

scalar.ph576:                                     ; preds = %scalar.ph576.prol.loopexit, %scalar.ph576
  %.5398 = phi i64 [ %319, %scalar.ph576 ], [ %.5398.unr, %scalar.ph576.prol.loopexit ]
  %308 = load double, ptr %9, align 8, !tbaa !9
  %gep402 = getelementptr double, ptr %invariant.gep401, i64 %.5398
  %309 = load double, ptr %gep402, align 8, !tbaa !9
  %gep404 = getelementptr double, ptr %invariant.gep403, i64 %.5398
  %310 = load double, ptr %gep404, align 8, !tbaa !9
  %311 = fmul double %257, %310
  %312 = tail call double @llvm.fmuladd.f64(double %308, double %309, double %311)
  store double %312, ptr %gep402, align 8, !tbaa !9
  %313 = add nuw i64 %.5398, 1
  %314 = load double, ptr %9, align 8, !tbaa !9
  %gep402.1 = getelementptr double, ptr %invariant.gep401, i64 %313
  %315 = load double, ptr %gep402.1, align 8, !tbaa !9
  %gep404.1 = getelementptr double, ptr %invariant.gep403, i64 %313
  %316 = load double, ptr %gep404.1, align 8, !tbaa !9
  %317 = fmul double %257, %316
  %318 = tail call double @llvm.fmuladd.f64(double %314, double %315, double %317)
  store double %318, ptr %gep402.1, align 8, !tbaa !9
  %319 = add nuw i64 %.5398, 2
  %exitcond478.not.1 = icmp eq i64 %313, %237
  br i1 %exitcond478.not.1, label %.loopexit343, label %scalar.ph576, !llvm.loop !49

.loopexit343:                                     ; preds = %scalar.ph576.prol.loopexit, %scalar.ph576, %scalar.ph547.prol.loopexit, %scalar.ph547, %middle.block575, %middle.block546, %288, %260
  %invariant.gep422 = getelementptr double, ptr %16, i64 %253
  %.not319.not424 = icmp ugt i64 %.4445, 1
  br i1 %.not319.not424, label %.lr.ph427, label %._crit_edge428

.lr.ph427:                                        ; preds = %.loopexit343
  %320 = mul nsw i64 %.4445, %20
  %invariant.gep420 = getelementptr double, ptr %22, i64 %320
  %scevgep512 = getelementptr i8, ptr %scevgep511, i64 %241
  %gep659 = getelementptr i8, ptr %invariant.gep, i64 %249
  %bound0515 = icmp ult ptr %scevgep511, %gep659
  %bound1516 = icmp ugt ptr %scevgep512, %7
  %found.conflict517 = and i1 %bound0515, %bound1516
  %321 = or i1 %found.conflict517, %stride.check518
  br label %322

322:                                              ; preds = %.lr.ph427, %._crit_edge417
  %.2425 = phi i64 [ 1, %.lr.ph427 ], [ %349, %._crit_edge417 ]
  %323 = load double, ptr %4, align 8, !tbaa !9
  %324 = mul nsw i64 %.2425, %14
  %325 = getelementptr double, ptr %254, i64 %324
  %gep423 = getelementptr double, ptr %invariant.gep422, i64 %.2425
  %.sink493 = select i1 %.not312, ptr %325, ptr %gep423
  %326 = load double, ptr %.sink493, align 8, !tbaa !9
  %327 = fmul double %323, %326
  br i1 %.not324413, label %._crit_edge417, label %.lr.ph416

.lr.ph416:                                        ; preds = %322
  %328 = mul nsw i64 %.2425, %17
  %invariant.gep418 = getelementptr double, ptr %19, i64 %328
  %brmerge664 = select i1 %min.iters.check521, i1 true, i1 %321
  br i1 %brmerge664, label %scalar.ph520.preheader, label %vector.ph522

vector.ph522:                                     ; preds = %.lr.ph416
  %broadcast.splatinsert534 = insertelement <2 x double> poison, double %327, i64 0
  %broadcast.splat535 = shufflevector <2 x double> %broadcast.splatinsert534, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body527

vector.body527:                                   ; preds = %vector.body527, %vector.ph522
  %index528 = phi i64 [ 0, %vector.ph522 ], [ %index.next536, %vector.body527 ]
  %offset.idx529 = or disjoint i64 %index528, 1
  %329 = getelementptr double, ptr %invariant.gep418, i64 %offset.idx529
  %330 = getelementptr i8, ptr %329, i64 16
  %wide.load530 = load <2 x double>, ptr %329, align 8, !tbaa !9, !alias.scope !50
  %wide.load531 = load <2 x double>, ptr %330, align 8, !tbaa !9, !alias.scope !50
  %331 = getelementptr double, ptr %invariant.gep420, i64 %offset.idx529
  %332 = getelementptr i8, ptr %331, i64 16
  %wide.load532 = load <2 x double>, ptr %331, align 8, !tbaa !9, !alias.scope !53, !noalias !50
  %wide.load533 = load <2 x double>, ptr %332, align 8, !tbaa !9, !alias.scope !53, !noalias !50
  %333 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat535, <2 x double> %wide.load530, <2 x double> %wide.load532)
  %334 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat535, <2 x double> %wide.load531, <2 x double> %wide.load533)
  store <2 x double> %333, ptr %331, align 8, !tbaa !9, !alias.scope !53, !noalias !50
  store <2 x double> %334, ptr %332, align 8, !tbaa !9, !alias.scope !53, !noalias !50
  %index.next536 = add nuw i64 %index528, 4
  %335 = icmp eq i64 %index.next536, %n.vec524
  br i1 %335, label %middle.block519, label %vector.body527, !llvm.loop !55

middle.block519:                                  ; preds = %vector.body527
  br i1 %cmp.n537, label %._crit_edge417, label %scalar.ph520.preheader

scalar.ph520.preheader:                           ; preds = %.lr.ph416, %middle.block519
  %.6414.ph = phi i64 [ 1, %.lr.ph416 ], [ %ind.end525, %middle.block519 ]
  br i1 %lcmp.mod642.not, label %scalar.ph520.prol.loopexit, label %scalar.ph520.prol

scalar.ph520.prol:                                ; preds = %scalar.ph520.preheader
  %gep419.prol = getelementptr double, ptr %invariant.gep418, i64 %.6414.ph
  %336 = load double, ptr %gep419.prol, align 8, !tbaa !9
  %gep421.prol = getelementptr double, ptr %invariant.gep420, i64 %.6414.ph
  %337 = load double, ptr %gep421.prol, align 8, !tbaa !9
  %338 = tail call double @llvm.fmuladd.f64(double %327, double %336, double %337)
  store double %338, ptr %gep421.prol, align 8, !tbaa !9
  %339 = add nuw i64 %.6414.ph, 1
  br label %scalar.ph520.prol.loopexit

scalar.ph520.prol.loopexit:                       ; preds = %scalar.ph520.prol, %scalar.ph520.preheader
  %.6414.unr = phi i64 [ %.6414.ph, %scalar.ph520.preheader ], [ %339, %scalar.ph520.prol ]
  %340 = icmp eq i64 %237, %.6414.ph
  br i1 %340, label %._crit_edge417, label %scalar.ph520

scalar.ph520:                                     ; preds = %scalar.ph520.prol.loopexit, %scalar.ph520
  %.6414 = phi i64 [ %348, %scalar.ph520 ], [ %.6414.unr, %scalar.ph520.prol.loopexit ]
  %gep419 = getelementptr double, ptr %invariant.gep418, i64 %.6414
  %341 = load double, ptr %gep419, align 8, !tbaa !9
  %gep421 = getelementptr double, ptr %invariant.gep420, i64 %.6414
  %342 = load double, ptr %gep421, align 8, !tbaa !9
  %343 = tail call double @llvm.fmuladd.f64(double %327, double %341, double %342)
  store double %343, ptr %gep421, align 8, !tbaa !9
  %344 = add nuw i64 %.6414, 1
  %gep419.1 = getelementptr double, ptr %invariant.gep418, i64 %344
  %345 = load double, ptr %gep419.1, align 8, !tbaa !9
  %gep421.1 = getelementptr double, ptr %invariant.gep420, i64 %344
  %346 = load double, ptr %gep421.1, align 8, !tbaa !9
  %347 = tail call double @llvm.fmuladd.f64(double %327, double %345, double %346)
  store double %347, ptr %gep421.1, align 8, !tbaa !9
  %348 = add nuw i64 %.6414, 2
  %exitcond480.not.1 = icmp eq i64 %344, %237
  br i1 %exitcond480.not.1, label %._crit_edge417, label %scalar.ph520, !llvm.loop !56

._crit_edge417:                                   ; preds = %scalar.ph520.prol.loopexit, %scalar.ph520, %middle.block519, %322
  %349 = add nuw nsw i64 %.2425, 1
  %exitcond481.not = icmp eq i64 %349, %.4445
  br i1 %exitcond481.not, label %._crit_edge428, label %322, !llvm.loop !57

._crit_edge428:                                   ; preds = %._crit_edge417, %.loopexit343
  %350 = add nuw i64 %.4445, 1
  %.not320440.not = icmp slt i64 %.4445, %115
  br i1 %.not320440.not, label %.lr.ph443, label %.loopexit342

.lr.ph443:                                        ; preds = %._crit_edge428
  %351 = mul nsw i64 %.4445, %20
  %invariant.gep436 = getelementptr double, ptr %22, i64 %351
  %scevgep503 = getelementptr i8, ptr %scevgep502, i64 %242
  %bound0 = icmp ult ptr %scevgep502, %scevgep506
  %bound1 = icmp ult ptr %scevgep504, %scevgep503
  %found.conflict = and i1 %bound0, %bound1
  %352 = or i1 %found.conflict, %stride.check
  br label %353

353:                                              ; preds = %.lr.ph443, %._crit_edge433
  %.3441 = phi i64 [ %350, %.lr.ph443 ], [ %380, %._crit_edge433 ]
  %354 = load double, ptr %4, align 8, !tbaa !9
  %gep439 = getelementptr double, ptr %invariant.gep422, i64 %.3441
  %355 = mul nsw i64 %.3441, %14
  %356 = getelementptr double, ptr %254, i64 %355
  %gep439.sink = select i1 %.not312, ptr %gep439, ptr %356
  %357 = load double, ptr %gep439.sink, align 8, !tbaa !9
  %358 = fmul double %354, %357
  br i1 %.not322429, label %._crit_edge433, label %.lr.ph432

.lr.ph432:                                        ; preds = %353
  %359 = mul nsw i64 %.3441, %17
  %invariant.gep434 = getelementptr double, ptr %19, i64 %359
  %brmerge665 = select i1 %min.iters.check, i1 true, i1 %352
  br i1 %brmerge665, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph432
  %broadcast.splatinsert = insertelement <2 x double> poison, double %358, 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
  %360 = getelementptr double, ptr %invariant.gep434, i64 %offset.idx
  %361 = getelementptr i8, ptr %360, i64 16
  %wide.load = load <2 x double>, ptr %360, align 8, !tbaa !9, !alias.scope !58
  %wide.load507 = load <2 x double>, ptr %361, align 8, !tbaa !9, !alias.scope !58
  %362 = getelementptr double, ptr %invariant.gep436, i64 %offset.idx
  %363 = getelementptr i8, ptr %362, i64 16
  %wide.load508 = load <2 x double>, ptr %362, align 8, !tbaa !9, !alias.scope !61, !noalias !58
  %wide.load509 = load <2 x double>, ptr %363, align 8, !tbaa !9, !alias.scope !61, !noalias !58
  %364 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load, <2 x double> %wide.load508)
  %365 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load507, <2 x double> %wide.load509)
  store <2 x double> %364, ptr %362, align 8, !tbaa !9, !alias.scope !61, !noalias !58
  store <2 x double> %365, ptr %363, align 8, !tbaa !9, !alias.scope !61, !noalias !58
  %index.next = add nuw i64 %index, 4
  %366 = icmp eq i64 %index.next, %n.vec
  br i1 %366, label %middle.block, label %vector.body, !llvm.loop !63

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

scalar.ph.preheader:                              ; preds = %.lr.ph432, %middle.block
  %.7430.ph = phi i64 [ 1, %.lr.ph432 ], [ %ind.end, %middle.block ]
  br i1 %lcmp.mod645.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %gep435.prol = getelementptr double, ptr %invariant.gep434, i64 %.7430.ph
  %367 = load double, ptr %gep435.prol, align 8, !tbaa !9
  %gep437.prol = getelementptr double, ptr %invariant.gep436, i64 %.7430.ph
  %368 = load double, ptr %gep437.prol, align 8, !tbaa !9
  %369 = tail call double @llvm.fmuladd.f64(double %358, double %367, double %368)
  store double %369, ptr %gep437.prol, align 8, !tbaa !9
  %370 = add nuw i64 %.7430.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.7430.unr = phi i64 [ %.7430.ph, %scalar.ph.preheader ], [ %370, %scalar.ph.prol ]
  %371 = icmp eq i64 %237, %.7430.ph
  br i1 %371, label %._crit_edge433, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.7430 = phi i64 [ %379, %scalar.ph ], [ %.7430.unr, %scalar.ph.prol.loopexit ]
  %gep435 = getelementptr double, ptr %invariant.gep434, i64 %.7430
  %372 = load double, ptr %gep435, align 8, !tbaa !9
  %gep437 = getelementptr double, ptr %invariant.gep436, i64 %.7430
  %373 = load double, ptr %gep437, align 8, !tbaa !9
  %374 = tail call double @llvm.fmuladd.f64(double %358, double %372, double %373)
  store double %374, ptr %gep437, align 8, !tbaa !9
  %375 = add nuw i64 %.7430, 1
  %gep435.1 = getelementptr double, ptr %invariant.gep434, i64 %375
  %376 = load double, ptr %gep435.1, align 8, !tbaa !9
  %gep437.1 = getelementptr double, ptr %invariant.gep436, i64 %375
  %377 = load double, ptr %gep437.1, align 8, !tbaa !9
  %378 = tail call double @llvm.fmuladd.f64(double %358, double %376, double %377)
  store double %378, ptr %gep437.1, align 8, !tbaa !9
  %379 = add nuw i64 %.7430, 2
  %exitcond482.not.1 = icmp eq i64 %375, %237
  br i1 %exitcond482.not.1, label %._crit_edge433, label %scalar.ph, !llvm.loop !64

._crit_edge433:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %353
  %380 = add nuw nsw i64 %.3441, 1
  %.not320.not = icmp slt i64 %.3441, %115
  br i1 %.not320.not, label %353, label %.loopexit342, !llvm.loop !65

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

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

.loopexit:                                        ; preds = %._crit_edge359, %._crit_edge386.us, %.loopexit342, %._crit_edge451, %.loopexit.loopexit.unr-lcssa, %.preheader.epil, %.lr.ph396, %.lr.ph369, %117, %170, %222, %55, %61, %.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #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 = distinct !{!26, !12}
!27 = distinct !{!27, !12}
!28 = distinct !{!28, !12}
!29 = distinct !{!29, !12}
!30 = distinct !{!30, !12}
!31 = distinct !{!31, !12}
!32 = !{!33}
!33 = distinct !{!33, !34}
!34 = distinct !{!34, !"LVerDomain"}
!35 = !{!36}
!36 = distinct !{!36, !34}
!37 = distinct !{!37, !12, !19, !20}
!38 = distinct !{!38, !22}
!39 = distinct !{!39, !12, !19}
!40 = !{!41}
!41 = distinct !{!41, !42}
!42 = distinct !{!42, !"LVerDomain"}
!43 = !{!44}
!44 = distinct !{!44, !42}
!45 = !{!41, !46}
!46 = distinct !{!46, !42}
!47 = !{!46}
!48 = distinct !{!48, !12, !19, !20}
!49 = distinct !{!49, !12, !19}
!50 = !{!51}
!51 = distinct !{!51, !52}
!52 = distinct !{!52, !"LVerDomain"}
!53 = !{!54}
!54 = distinct !{!54, !52}
!55 = distinct !{!55, !12, !19, !20}
!56 = distinct !{!56, !12, !19}
!57 = distinct !{!57, !12}
!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, !22}


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