; LLVM IR from niuyishuai/PDCABB :: LAPACK_BLAS/LAPACK (dla_gercond)

; 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 [12 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@c__1 = external hidden global i64, align 8
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1

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

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

77:                                               ; preds = %73
  %78 = load ptr, ptr %15, align 8, !tbaa !5
  %79 = call i64 @lsame_(ptr noundef %78, ptr noundef @.str.2)
  %80 = icmp ne i64 %79, 0
  br i1 %80, label %83, label %81

81:                                               ; preds = %77
  %82 = load ptr, ptr %24, align 8, !tbaa !5
  store i64 -1, ptr %82, align 8, !tbaa !9
  br label %122

83:                                               ; preds = %77, %73, %13
  %84 = load ptr, ptr %16, align 8, !tbaa !5
  %85 = load i64, ptr %84, align 8, !tbaa !9
  %86 = icmp slt i64 %85, 0
  br i1 %86, label %87, label %89

87:                                               ; preds = %83
  %88 = load ptr, ptr %24, align 8, !tbaa !5
  store i64 -2, ptr %88, align 8, !tbaa !9
  br label %121

89:                                               ; preds = %83
  %90 = load ptr, ptr %18, align 8, !tbaa !5
  %91 = load i64, ptr %90, align 8, !tbaa !9
  %92 = load ptr, ptr %16, align 8, !tbaa !5
  %93 = load i64, ptr %92, align 8, !tbaa !9
  %94 = icmp sge i64 1, %93
  br i1 %94, label %95, label %96

95:                                               ; preds = %89
  br label %99

96:                                               ; preds = %89
  %97 = load ptr, ptr %16, align 8, !tbaa !5
  %98 = load i64, ptr %97, align 8, !tbaa !9
  br label %99

99:                                               ; preds = %96, %95
  %100 = phi i64 [ 1, %95 ], [ %98, %96 ]
  %101 = icmp slt i64 %91, %100
  br i1 %101, label %102, label %104

102:                                              ; preds = %99
  %103 = load ptr, ptr %24, align 8, !tbaa !5
  store i64 -4, ptr %103, align 8, !tbaa !9
  br label %120

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

110:                                              ; preds = %104
  br label %114

111:                                              ; preds = %104
  %112 = load ptr, ptr %16, align 8, !tbaa !5
  %113 = load i64, ptr %112, align 8, !tbaa !9
  br label %114

114:                                              ; preds = %111, %110
  %115 = phi i64 [ 1, %110 ], [ %113, %111 ]
  %116 = icmp slt i64 %106, %115
  br i1 %116, label %117, label %119

117:                                              ; preds = %114
  %118 = load ptr, ptr %24, align 8, !tbaa !5
  store i64 -6, ptr %118, align 8, !tbaa !9
  br label %119

119:                                              ; preds = %117, %114
  br label %120

120:                                              ; preds = %119, %102
  br label %121

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

122:                                              ; preds = %121, %81
  %123 = load ptr, ptr %24, align 8, !tbaa !5
  %124 = load i64, ptr %123, align 8, !tbaa !9
  %125 = icmp ne i64 %124, 0
  br i1 %125, label %126, label %132

126:                                              ; preds = %122
  %127 = load ptr, ptr %24, align 8, !tbaa !5
  %128 = load i64, ptr %127, align 8, !tbaa !9
  %129 = sub nsw i64 0, %128
  store i64 %129, ptr %32, align 8, !tbaa !9
  %130 = call i32 @xerbla_(ptr noundef @.str.3, ptr noundef %32)
  %131 = load double, ptr %34, align 8, !tbaa !11
  store double %131, ptr %14, align 8
  store i32 1, ptr %43, align 4
  br label %643

132:                                              ; preds = %122
  %133 = load ptr, ptr %16, align 8, !tbaa !5
  %134 = load i64, ptr %133, align 8, !tbaa !9
  %135 = icmp eq i64 %134, 0
  br i1 %135, label %136, label %138

136:                                              ; preds = %132
  store double 1.000000e+00, ptr %34, align 8, !tbaa !11
  %137 = load double, ptr %34, align 8, !tbaa !11
  store double %137, ptr %14, align 8
  store i32 1, ptr %43, align 4
  br label %643

138:                                              ; preds = %132
  %139 = load i64, ptr %42, align 8, !tbaa !9
  %140 = icmp ne i64 %139, 0
  br i1 %140, label %141, label %273

141:                                              ; preds = %138
  %142 = load ptr, ptr %16, align 8, !tbaa !5
  %143 = load i64, ptr %142, align 8, !tbaa !9
  store i64 %143, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %144

144:                                              ; preds = %269, %141
  %145 = load i64, ptr %36, align 8, !tbaa !9
  %146 = load i64, ptr %32, align 8, !tbaa !9
  %147 = icmp sle i64 %145, %146
  br i1 %147, label %148, label %272

148:                                              ; preds = %144
  store double 0.000000e+00, ptr %38, align 8, !tbaa !11
  %149 = load ptr, ptr %22, align 8, !tbaa !5
  %150 = load i64, ptr %149, align 8, !tbaa !9
  %151 = icmp eq i64 %150, 1
  br i1 %151, label %152, label %188

152:                                              ; preds = %148
  %153 = load ptr, ptr %16, align 8, !tbaa !5
  %154 = load i64, ptr %153, align 8, !tbaa !9
  store i64 %154, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %37, align 8, !tbaa !9
  br label %155

155:                                              ; preds = %184, %152
  %156 = load i64, ptr %37, align 8, !tbaa !9
  %157 = load i64, ptr %33, align 8, !tbaa !9
  %158 = icmp sle i64 %156, %157
  br i1 %158, label %159, label %187

159:                                              ; preds = %155
  %160 = load ptr, ptr %17, align 8, !tbaa !5
  %161 = load i64, ptr %36, align 8, !tbaa !9
  %162 = load i64, ptr %37, align 8, !tbaa !9
  %163 = load i64, ptr %28, align 8, !tbaa !9
  %164 = mul nsw i64 %162, %163
  %165 = add nsw i64 %161, %164
  %166 = getelementptr inbounds double, ptr %160, i64 %165
  %167 = load double, ptr %166, align 8, !tbaa !11
  %168 = load ptr, ptr %23, align 8, !tbaa !5
  %169 = load i64, ptr %37, align 8, !tbaa !9
  %170 = getelementptr inbounds double, ptr %168, i64 %169
  %171 = load double, ptr %170, align 8, !tbaa !11
  %172 = fmul double %167, %171
  store double %172, ptr %35, align 8, !tbaa !11
  %173 = load double, ptr %35, align 8, !tbaa !11
  %174 = fcmp oge double %173, 0.000000e+00
  br i1 %174, label %175, label %177

175:                                              ; preds = %159
  %176 = load double, ptr %35, align 8, !tbaa !11
  br label %180

177:                                              ; preds = %159
  %178 = load double, ptr %35, align 8, !tbaa !11
  %179 = fneg double %178
  br label %180

180:                                              ; preds = %177, %175
  %181 = phi double [ %176, %175 ], [ %179, %177 ]
  %182 = load double, ptr %38, align 8, !tbaa !11
  %183 = fadd double %182, %181
  store double %183, ptr %38, align 8, !tbaa !11
  br label %184

184:                                              ; preds = %180
  %185 = load i64, ptr %37, align 8, !tbaa !9
  %186 = add nsw i64 %185, 1
  store i64 %186, ptr %37, align 8, !tbaa !9
  br label %155, !llvm.loop !13

187:                                              ; preds = %155
  br label %260

188:                                              ; preds = %148
  %189 = load ptr, ptr %22, align 8, !tbaa !5
  %190 = load i64, ptr %189, align 8, !tbaa !9
  %191 = icmp eq i64 %190, 0
  br i1 %191, label %192, label %223

192:                                              ; preds = %188
  %193 = load ptr, ptr %16, align 8, !tbaa !5
  %194 = load i64, ptr %193, align 8, !tbaa !9
  store i64 %194, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %37, align 8, !tbaa !9
  br label %195

195:                                              ; preds = %219, %192
  %196 = load i64, ptr %37, align 8, !tbaa !9
  %197 = load i64, ptr %33, align 8, !tbaa !9
  %198 = icmp sle i64 %196, %197
  br i1 %198, label %199, label %222

199:                                              ; preds = %195
  %200 = load ptr, ptr %17, align 8, !tbaa !5
  %201 = load i64, ptr %36, align 8, !tbaa !9
  %202 = load i64, ptr %37, align 8, !tbaa !9
  %203 = load i64, ptr %28, align 8, !tbaa !9
  %204 = mul nsw i64 %202, %203
  %205 = add nsw i64 %201, %204
  %206 = getelementptr inbounds double, ptr %200, i64 %205
  %207 = load double, ptr %206, align 8, !tbaa !11
  store double %207, ptr %35, align 8, !tbaa !11
  %208 = load double, ptr %35, align 8, !tbaa !11
  %209 = fcmp oge double %208, 0.000000e+00
  br i1 %209, label %210, label %212

210:                                              ; preds = %199
  %211 = load double, ptr %35, align 8, !tbaa !11
  br label %215

212:                                              ; preds = %199
  %213 = load double, ptr %35, align 8, !tbaa !11
  %214 = fneg double %213
  br label %215

215:                                              ; preds = %212, %210
  %216 = phi double [ %211, %210 ], [ %214, %212 ]
  %217 = load double, ptr %38, align 8, !tbaa !11
  %218 = fadd double %217, %216
  store double %218, ptr %38, align 8, !tbaa !11
  br label %219

219:                                              ; preds = %215
  %220 = load i64, ptr %37, align 8, !tbaa !9
  %221 = add nsw i64 %220, 1
  store i64 %221, ptr %37, align 8, !tbaa !9
  br label %195, !llvm.loop !15

222:                                              ; preds = %195
  br label %259

223:                                              ; preds = %188
  %224 = load ptr, ptr %16, align 8, !tbaa !5
  %225 = load i64, ptr %224, align 8, !tbaa !9
  store i64 %225, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %37, align 8, !tbaa !9
  br label %226

226:                                              ; preds = %255, %223
  %227 = load i64, ptr %37, align 8, !tbaa !9
  %228 = load i64, ptr %33, align 8, !tbaa !9
  %229 = icmp sle i64 %227, %228
  br i1 %229, label %230, label %258

230:                                              ; preds = %226
  %231 = load ptr, ptr %17, align 8, !tbaa !5
  %232 = load i64, ptr %36, align 8, !tbaa !9
  %233 = load i64, ptr %37, align 8, !tbaa !9
  %234 = load i64, ptr %28, align 8, !tbaa !9
  %235 = mul nsw i64 %233, %234
  %236 = add nsw i64 %232, %235
  %237 = getelementptr inbounds double, ptr %231, i64 %236
  %238 = load double, ptr %237, align 8, !tbaa !11
  %239 = load ptr, ptr %23, align 8, !tbaa !5
  %240 = load i64, ptr %37, align 8, !tbaa !9
  %241 = getelementptr inbounds double, ptr %239, i64 %240
  %242 = load double, ptr %241, align 8, !tbaa !11
  %243 = fdiv double %238, %242
  store double %243, ptr %35, align 8, !tbaa !11
  %244 = load double, ptr %35, align 8, !tbaa !11
  %245 = fcmp oge double %244, 0.000000e+00
  br i1 %245, label %246, label %248

246:                                              ; preds = %230
  %247 = load double, ptr %35, align 8, !tbaa !11
  br label %251

248:                                              ; preds = %230
  %249 = load double, ptr %35, align 8, !tbaa !11
  %250 = fneg double %249
  br label %251

251:                                              ; preds = %248, %246
  %252 = phi double [ %247, %246 ], [ %250, %248 ]
  %253 = load double, ptr %38, align 8, !tbaa !11
  %254 = fadd double %253, %252
  store double %254, ptr %38, align 8, !tbaa !11
  br label %255

255:                                              ; preds = %251
  %256 = load i64, ptr %37, align 8, !tbaa !9
  %257 = add nsw i64 %256, 1
  store i64 %257, ptr %37, align 8, !tbaa !9
  br label %226, !llvm.loop !16

258:                                              ; preds = %226
  br label %259

259:                                              ; preds = %258, %222
  br label %260

260:                                              ; preds = %259, %187
  %261 = load double, ptr %38, align 8, !tbaa !11
  %262 = load ptr, ptr %25, align 8, !tbaa !5
  %263 = load ptr, ptr %16, align 8, !tbaa !5
  %264 = load i64, ptr %263, align 8, !tbaa !9
  %265 = shl i64 %264, 1
  %266 = load i64, ptr %36, align 8, !tbaa !9
  %267 = add nsw i64 %265, %266
  %268 = getelementptr inbounds double, ptr %262, i64 %267
  store double %261, ptr %268, align 8, !tbaa !11
  br label %269

269:                                              ; preds = %260
  %270 = load i64, ptr %36, align 8, !tbaa !9
  %271 = add nsw i64 %270, 1
  store i64 %271, ptr %36, align 8, !tbaa !9
  br label %144, !llvm.loop !17

272:                                              ; preds = %144
  br label %405

273:                                              ; preds = %138
  %274 = load ptr, ptr %16, align 8, !tbaa !5
  %275 = load i64, ptr %274, align 8, !tbaa !9
  store i64 %275, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %276

276:                                              ; preds = %401, %273
  %277 = load i64, ptr %36, align 8, !tbaa !9
  %278 = load i64, ptr %32, align 8, !tbaa !9
  %279 = icmp sle i64 %277, %278
  br i1 %279, label %280, label %404

280:                                              ; preds = %276
  store double 0.000000e+00, ptr %38, align 8, !tbaa !11
  %281 = load ptr, ptr %22, align 8, !tbaa !5
  %282 = load i64, ptr %281, align 8, !tbaa !9
  %283 = icmp eq i64 %282, 1
  br i1 %283, label %284, label %320

284:                                              ; preds = %280
  %285 = load ptr, ptr %16, align 8, !tbaa !5
  %286 = load i64, ptr %285, align 8, !tbaa !9
  store i64 %286, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %37, align 8, !tbaa !9
  br label %287

287:                                              ; preds = %316, %284
  %288 = load i64, ptr %37, align 8, !tbaa !9
  %289 = load i64, ptr %33, align 8, !tbaa !9
  %290 = icmp sle i64 %288, %289
  br i1 %290, label %291, label %319

291:                                              ; preds = %287
  %292 = load ptr, ptr %17, align 8, !tbaa !5
  %293 = load i64, ptr %37, align 8, !tbaa !9
  %294 = load i64, ptr %36, align 8, !tbaa !9
  %295 = load i64, ptr %28, align 8, !tbaa !9
  %296 = mul nsw i64 %294, %295
  %297 = add nsw i64 %293, %296
  %298 = getelementptr inbounds double, ptr %292, i64 %297
  %299 = load double, ptr %298, align 8, !tbaa !11
  %300 = load ptr, ptr %23, align 8, !tbaa !5
  %301 = load i64, ptr %37, align 8, !tbaa !9
  %302 = getelementptr inbounds double, ptr %300, i64 %301
  %303 = load double, ptr %302, align 8, !tbaa !11
  %304 = fmul double %299, %303
  store double %304, ptr %35, align 8, !tbaa !11
  %305 = load double, ptr %35, align 8, !tbaa !11
  %306 = fcmp oge double %305, 0.000000e+00
  br i1 %306, label %307, label %309

307:                                              ; preds = %291
  %308 = load double, ptr %35, align 8, !tbaa !11
  br label %312

309:                                              ; preds = %291
  %310 = load double, ptr %35, align 8, !tbaa !11
  %311 = fneg double %310
  br label %312

312:                                              ; preds = %309, %307
  %313 = phi double [ %308, %307 ], [ %311, %309 ]
  %314 = load double, ptr %38, align 8, !tbaa !11
  %315 = fadd double %314, %313
  store double %315, ptr %38, align 8, !tbaa !11
  br label %316

316:                                              ; preds = %312
  %317 = load i64, ptr %37, align 8, !tbaa !9
  %318 = add nsw i64 %317, 1
  store i64 %318, ptr %37, align 8, !tbaa !9
  br label %287, !llvm.loop !18

319:                                              ; preds = %287
  br label %392

320:                                              ; preds = %280
  %321 = load ptr, ptr %22, align 8, !tbaa !5
  %322 = load i64, ptr %321, align 8, !tbaa !9
  %323 = icmp eq i64 %322, 0
  br i1 %323, label %324, label %355

324:                                              ; preds = %320
  %325 = load ptr, ptr %16, align 8, !tbaa !5
  %326 = load i64, ptr %325, align 8, !tbaa !9
  store i64 %326, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %37, align 8, !tbaa !9
  br label %327

327:                                              ; preds = %351, %324
  %328 = load i64, ptr %37, align 8, !tbaa !9
  %329 = load i64, ptr %33, align 8, !tbaa !9
  %330 = icmp sle i64 %328, %329
  br i1 %330, label %331, label %354

331:                                              ; preds = %327
  %332 = load ptr, ptr %17, align 8, !tbaa !5
  %333 = load i64, ptr %37, align 8, !tbaa !9
  %334 = load i64, ptr %36, align 8, !tbaa !9
  %335 = load i64, ptr %28, align 8, !tbaa !9
  %336 = mul nsw i64 %334, %335
  %337 = add nsw i64 %333, %336
  %338 = getelementptr inbounds double, ptr %332, i64 %337
  %339 = load double, ptr %338, align 8, !tbaa !11
  store double %339, ptr %35, align 8, !tbaa !11
  %340 = load double, ptr %35, align 8, !tbaa !11
  %341 = fcmp oge double %340, 0.000000e+00
  br i1 %341, label %342, label %344

342:                                              ; preds = %331
  %343 = load double, ptr %35, align 8, !tbaa !11
  br label %347

344:                                              ; preds = %331
  %345 = load double, ptr %35, align 8, !tbaa !11
  %346 = fneg double %345
  br label %347

347:                                              ; preds = %344, %342
  %348 = phi double [ %343, %342 ], [ %346, %344 ]
  %349 = load double, ptr %38, align 8, !tbaa !11
  %350 = fadd double %349, %348
  store double %350, ptr %38, align 8, !tbaa !11
  br label %351

351:                                              ; preds = %347
  %352 = load i64, ptr %37, align 8, !tbaa !9
  %353 = add nsw i64 %352, 1
  store i64 %353, ptr %37, align 8, !tbaa !9
  br label %327, !llvm.loop !19

354:                                              ; preds = %327
  br label %391

355:                                              ; preds = %320
  %356 = load ptr, ptr %16, align 8, !tbaa !5
  %357 = load i64, ptr %356, align 8, !tbaa !9
  store i64 %357, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %37, align 8, !tbaa !9
  br label %358

358:                                              ; preds = %387, %355
  %359 = load i64, ptr %37, align 8, !tbaa !9
  %360 = load i64, ptr %33, align 8, !tbaa !9
  %361 = icmp sle i64 %359, %360
  br i1 %361, label %362, label %390

362:                                              ; preds = %358
  %363 = load ptr, ptr %17, align 8, !tbaa !5
  %364 = load i64, ptr %37, align 8, !tbaa !9
  %365 = load i64, ptr %36, align 8, !tbaa !9
  %366 = load i64, ptr %28, align 8, !tbaa !9
  %367 = mul nsw i64 %365, %366
  %368 = add nsw i64 %364, %367
  %369 = getelementptr inbounds double, ptr %363, i64 %368
  %370 = load double, ptr %369, align 8, !tbaa !11
  %371 = load ptr, ptr %23, align 8, !tbaa !5
  %372 = load i64, ptr %37, align 8, !tbaa !9
  %373 = getelementptr inbounds double, ptr %371, i64 %372
  %374 = load double, ptr %373, align 8, !tbaa !11
  %375 = fdiv double %370, %374
  store double %375, ptr %35, align 8, !tbaa !11
  %376 = load double, ptr %35, align 8, !tbaa !11
  %377 = fcmp oge double %376, 0.000000e+00
  br i1 %377, label %378, label %380

378:                                              ; preds = %362
  %379 = load double, ptr %35, align 8, !tbaa !11
  br label %383

380:                                              ; preds = %362
  %381 = load double, ptr %35, align 8, !tbaa !11
  %382 = fneg double %381
  br label %383

383:                                              ; preds = %380, %378
  %384 = phi double [ %379, %378 ], [ %382, %380 ]
  %385 = load double, ptr %38, align 8, !tbaa !11
  %386 = fadd double %385, %384
  store double %386, ptr %38, align 8, !tbaa !11
  br label %387

387:                                              ; preds = %383
  %388 = load i64, ptr %37, align 8, !tbaa !9
  %389 = add nsw i64 %388, 1
  store i64 %389, ptr %37, align 8, !tbaa !9
  br label %358, !llvm.loop !20

390:                                              ; preds = %358
  br label %391

391:                                              ; preds = %390, %354
  br label %392

392:                                              ; preds = %391, %319
  %393 = load double, ptr %38, align 8, !tbaa !11
  %394 = load ptr, ptr %25, align 8, !tbaa !5
  %395 = load ptr, ptr %16, align 8, !tbaa !5
  %396 = load i64, ptr %395, align 8, !tbaa !9
  %397 = shl i64 %396, 1
  %398 = load i64, ptr %36, align 8, !tbaa !9
  %399 = add nsw i64 %397, %398
  %400 = getelementptr inbounds double, ptr %394, i64 %399
  store double %393, ptr %400, align 8, !tbaa !11
  br label %401

401:                                              ; preds = %392
  %402 = load i64, ptr %36, align 8, !tbaa !9
  %403 = add nsw i64 %402, 1
  store i64 %403, ptr %36, align 8, !tbaa !9
  br label %276, !llvm.loop !21

404:                                              ; preds = %276
  br label %405

405:                                              ; preds = %404, %272
  store double 0.000000e+00, ptr %41, align 8, !tbaa !11
  store i64 0, ptr %39, align 8, !tbaa !9
  br label %406

406:                                              ; preds = %634, %405
  %407 = load ptr, ptr %16, align 8, !tbaa !5
  %408 = load ptr, ptr %25, align 8, !tbaa !5
  %409 = load ptr, ptr %16, align 8, !tbaa !5
  %410 = load i64, ptr %409, align 8, !tbaa !9
  %411 = add nsw i64 %410, 1
  %412 = getelementptr inbounds double, ptr %408, i64 %411
  %413 = load ptr, ptr %25, align 8, !tbaa !5
  %414 = getelementptr inbounds double, ptr %413, i64 1
  %415 = load ptr, ptr %26, align 8, !tbaa !5
  %416 = getelementptr inbounds i64, ptr %415, i64 1
  %417 = getelementptr inbounds [3 x i64], ptr %40, i64 0, i64 0
  %418 = call i32 @dlacn2_(ptr noundef %407, ptr noundef %412, ptr noundef %414, ptr noundef %416, ptr noundef %41, ptr noundef %39, ptr noundef %417)
  %419 = load i64, ptr %39, align 8, !tbaa !9
  %420 = icmp ne i64 %419, 0
  br i1 %420, label %421, label %635

421:                                              ; preds = %406
  %422 = load i64, ptr %39, align 8, !tbaa !9
  %423 = icmp eq i64 %422, 2
  br i1 %423, label %424, label %529

424:                                              ; preds = %421
  %425 = load ptr, ptr %16, align 8, !tbaa !5
  %426 = load i64, ptr %425, align 8, !tbaa !9
  store i64 %426, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %427

427:                                              ; preds = %445, %424
  %428 = load i64, ptr %36, align 8, !tbaa !9
  %429 = load i64, ptr %32, align 8, !tbaa !9
  %430 = icmp sle i64 %428, %429
  br i1 %430, label %431, label %448

431:                                              ; preds = %427
  %432 = load ptr, ptr %25, align 8, !tbaa !5
  %433 = load ptr, ptr %16, align 8, !tbaa !5
  %434 = load i64, ptr %433, align 8, !tbaa !9
  %435 = shl i64 %434, 1
  %436 = load i64, ptr %36, align 8, !tbaa !9
  %437 = add nsw i64 %435, %436
  %438 = getelementptr inbounds double, ptr %432, i64 %437
  %439 = load double, ptr %438, align 8, !tbaa !11
  %440 = load ptr, ptr %25, align 8, !tbaa !5
  %441 = load i64, ptr %36, align 8, !tbaa !9
  %442 = getelementptr inbounds double, ptr %440, i64 %441
  %443 = load double, ptr %442, align 8, !tbaa !11
  %444 = fmul double %443, %439
  store double %444, ptr %442, align 8, !tbaa !11
  br label %445

445:                                              ; preds = %431
  %446 = load i64, ptr %36, align 8, !tbaa !9
  %447 = add nsw i64 %446, 1
  store i64 %447, ptr %36, align 8, !tbaa !9
  br label %427, !llvm.loop !22

448:                                              ; preds = %427
  %449 = load i64, ptr %42, align 8, !tbaa !9
  %450 = icmp ne i64 %449, 0
  br i1 %450, label %451, label %464

451:                                              ; preds = %448
  %452 = load ptr, ptr %16, align 8, !tbaa !5
  %453 = load ptr, ptr %19, align 8, !tbaa !5
  %454 = load i64, ptr %31, align 8, !tbaa !9
  %455 = getelementptr inbounds double, ptr %453, i64 %454
  %456 = load ptr, ptr %20, align 8, !tbaa !5
  %457 = load ptr, ptr %21, align 8, !tbaa !5
  %458 = getelementptr inbounds i64, ptr %457, i64 1
  %459 = load ptr, ptr %25, align 8, !tbaa !5
  %460 = getelementptr inbounds double, ptr %459, i64 1
  %461 = load ptr, ptr %16, align 8, !tbaa !5
  %462 = load ptr, ptr %24, align 8, !tbaa !5
  %463 = call i32 @dgetrs_(ptr noundef @.str.4, ptr noundef %452, ptr noundef @c__1, ptr noundef %455, ptr noundef %456, ptr noundef %458, ptr noundef %460, ptr noundef %461, ptr noundef %462)
  br label %477

464:                                              ; preds = %448
  %465 = load ptr, ptr %16, align 8, !tbaa !5
  %466 = load ptr, ptr %19, align 8, !tbaa !5
  %467 = load i64, ptr %31, align 8, !tbaa !9
  %468 = getelementptr inbounds double, ptr %466, i64 %467
  %469 = load ptr, ptr %20, align 8, !tbaa !5
  %470 = load ptr, ptr %21, align 8, !tbaa !5
  %471 = getelementptr inbounds i64, ptr %470, i64 1
  %472 = load ptr, ptr %25, align 8, !tbaa !5
  %473 = getelementptr inbounds double, ptr %472, i64 1
  %474 = load ptr, ptr %16, align 8, !tbaa !5
  %475 = load ptr, ptr %24, align 8, !tbaa !5
  %476 = call i32 @dgetrs_(ptr noundef @.str.5, ptr noundef %465, ptr noundef @c__1, ptr noundef %468, ptr noundef %469, ptr noundef %471, ptr noundef %473, ptr noundef %474, ptr noundef %475)
  br label %477

477:                                              ; preds = %464, %451
  %478 = load ptr, ptr %22, align 8, !tbaa !5
  %479 = load i64, ptr %478, align 8, !tbaa !9
  %480 = icmp eq i64 %479, 1
  br i1 %480, label %481, label %502

481:                                              ; preds = %477
  %482 = load ptr, ptr %16, align 8, !tbaa !5
  %483 = load i64, ptr %482, align 8, !tbaa !9
  store i64 %483, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %484

484:                                              ; preds = %498, %481
  %485 = load i64, ptr %36, align 8, !tbaa !9
  %486 = load i64, ptr %32, align 8, !tbaa !9
  %487 = icmp sle i64 %485, %486
  br i1 %487, label %488, label %501

488:                                              ; preds = %484
  %489 = load ptr, ptr %23, align 8, !tbaa !5
  %490 = load i64, ptr %36, align 8, !tbaa !9
  %491 = getelementptr inbounds double, ptr %489, i64 %490
  %492 = load double, ptr %491, align 8, !tbaa !11
  %493 = load ptr, ptr %25, align 8, !tbaa !5
  %494 = load i64, ptr %36, align 8, !tbaa !9
  %495 = getelementptr inbounds double, ptr %493, i64 %494
  %496 = load double, ptr %495, align 8, !tbaa !11
  %497 = fdiv double %496, %492
  store double %497, ptr %495, align 8, !tbaa !11
  br label %498

498:                                              ; preds = %488
  %499 = load i64, ptr %36, align 8, !tbaa !9
  %500 = add nsw i64 %499, 1
  store i64 %500, ptr %36, align 8, !tbaa !9
  br label %484, !llvm.loop !23

501:                                              ; preds = %484
  br label %528

502:                                              ; preds = %477
  %503 = load ptr, ptr %22, align 8, !tbaa !5
  %504 = load i64, ptr %503, align 8, !tbaa !9
  %505 = icmp eq i64 %504, -1
  br i1 %505, label %506, label %527

506:                                              ; preds = %502
  %507 = load ptr, ptr %16, align 8, !tbaa !5
  %508 = load i64, ptr %507, align 8, !tbaa !9
  store i64 %508, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %509

509:                                              ; preds = %523, %506
  %510 = load i64, ptr %36, align 8, !tbaa !9
  %511 = load i64, ptr %32, align 8, !tbaa !9
  %512 = icmp sle i64 %510, %511
  br i1 %512, label %513, label %526

513:                                              ; preds = %509
  %514 = load ptr, ptr %23, align 8, !tbaa !5
  %515 = load i64, ptr %36, align 8, !tbaa !9
  %516 = getelementptr inbounds double, ptr %514, i64 %515
  %517 = load double, ptr %516, align 8, !tbaa !11
  %518 = load ptr, ptr %25, align 8, !tbaa !5
  %519 = load i64, ptr %36, align 8, !tbaa !9
  %520 = getelementptr inbounds double, ptr %518, i64 %519
  %521 = load double, ptr %520, align 8, !tbaa !11
  %522 = fmul double %521, %517
  store double %522, ptr %520, align 8, !tbaa !11
  br label %523

523:                                              ; preds = %513
  %524 = load i64, ptr %36, align 8, !tbaa !9
  %525 = add nsw i64 %524, 1
  store i64 %525, ptr %36, align 8, !tbaa !9
  br label %509, !llvm.loop !24

526:                                              ; preds = %509
  br label %527

527:                                              ; preds = %526, %502
  br label %528

528:                                              ; preds = %527, %501
  br label %634

529:                                              ; preds = %421
  %530 = load ptr, ptr %22, align 8, !tbaa !5
  %531 = load i64, ptr %530, align 8, !tbaa !9
  %532 = icmp eq i64 %531, 1
  br i1 %532, label %533, label %554

533:                                              ; preds = %529
  %534 = load ptr, ptr %16, align 8, !tbaa !5
  %535 = load i64, ptr %534, align 8, !tbaa !9
  store i64 %535, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %536

536:                                              ; preds = %550, %533
  %537 = load i64, ptr %36, align 8, !tbaa !9
  %538 = load i64, ptr %32, align 8, !tbaa !9
  %539 = icmp sle i64 %537, %538
  br i1 %539, label %540, label %553

540:                                              ; preds = %536
  %541 = load ptr, ptr %23, align 8, !tbaa !5
  %542 = load i64, ptr %36, align 8, !tbaa !9
  %543 = getelementptr inbounds double, ptr %541, i64 %542
  %544 = load double, ptr %543, align 8, !tbaa !11
  %545 = load ptr, ptr %25, align 8, !tbaa !5
  %546 = load i64, ptr %36, align 8, !tbaa !9
  %547 = getelementptr inbounds double, ptr %545, i64 %546
  %548 = load double, ptr %547, align 8, !tbaa !11
  %549 = fdiv double %548, %544
  store double %549, ptr %547, align 8, !tbaa !11
  br label %550

550:                                              ; preds = %540
  %551 = load i64, ptr %36, align 8, !tbaa !9
  %552 = add nsw i64 %551, 1
  store i64 %552, ptr %36, align 8, !tbaa !9
  br label %536, !llvm.loop !25

553:                                              ; preds = %536
  br label %580

554:                                              ; preds = %529
  %555 = load ptr, ptr %22, align 8, !tbaa !5
  %556 = load i64, ptr %555, align 8, !tbaa !9
  %557 = icmp eq i64 %556, -1
  br i1 %557, label %558, label %579

558:                                              ; preds = %554
  %559 = load ptr, ptr %16, align 8, !tbaa !5
  %560 = load i64, ptr %559, align 8, !tbaa !9
  store i64 %560, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %561

561:                                              ; preds = %575, %558
  %562 = load i64, ptr %36, align 8, !tbaa !9
  %563 = load i64, ptr %32, align 8, !tbaa !9
  %564 = icmp sle i64 %562, %563
  br i1 %564, label %565, label %578

565:                                              ; preds = %561
  %566 = load ptr, ptr %23, align 8, !tbaa !5
  %567 = load i64, ptr %36, align 8, !tbaa !9
  %568 = getelementptr inbounds double, ptr %566, i64 %567
  %569 = load double, ptr %568, align 8, !tbaa !11
  %570 = load ptr, ptr %25, align 8, !tbaa !5
  %571 = load i64, ptr %36, align 8, !tbaa !9
  %572 = getelementptr inbounds double, ptr %570, i64 %571
  %573 = load double, ptr %572, align 8, !tbaa !11
  %574 = fmul double %573, %569
  store double %574, ptr %572, align 8, !tbaa !11
  br label %575

575:                                              ; preds = %565
  %576 = load i64, ptr %36, align 8, !tbaa !9
  %577 = add nsw i64 %576, 1
  store i64 %577, ptr %36, align 8, !tbaa !9
  br label %561, !llvm.loop !26

578:                                              ; preds = %561
  br label %579

579:                                              ; preds = %578, %554
  br label %580

580:                                              ; preds = %579, %553
  %581 = load i64, ptr %42, align 8, !tbaa !9
  %582 = icmp ne i64 %581, 0
  br i1 %582, label %583, label %596

583:                                              ; preds = %580
  %584 = load ptr, ptr %16, align 8, !tbaa !5
  %585 = load ptr, ptr %19, align 8, !tbaa !5
  %586 = load i64, ptr %31, align 8, !tbaa !9
  %587 = getelementptr inbounds double, ptr %585, i64 %586
  %588 = load ptr, ptr %20, align 8, !tbaa !5
  %589 = load ptr, ptr %21, align 8, !tbaa !5
  %590 = getelementptr inbounds i64, ptr %589, i64 1
  %591 = load ptr, ptr %25, align 8, !tbaa !5
  %592 = getelementptr inbounds double, ptr %591, i64 1
  %593 = load ptr, ptr %16, align 8, !tbaa !5
  %594 = load ptr, ptr %24, align 8, !tbaa !5
  %595 = call i32 @dgetrs_(ptr noundef @.str.5, ptr noundef %584, ptr noundef @c__1, ptr noundef %587, ptr noundef %588, ptr noundef %590, ptr noundef %592, ptr noundef %593, ptr noundef %594)
  br label %609

596:                                              ; preds = %580
  %597 = load ptr, ptr %16, align 8, !tbaa !5
  %598 = load ptr, ptr %19, align 8, !tbaa !5
  %599 = load i64, ptr %31, align 8, !tbaa !9
  %600 = getelementptr inbounds double, ptr %598, i64 %599
  %601 = load ptr, ptr %20, align 8, !tbaa !5
  %602 = load ptr, ptr %21, align 8, !tbaa !5
  %603 = getelementptr inbounds i64, ptr %602, i64 1
  %604 = load ptr, ptr %25, align 8, !tbaa !5
  %605 = getelementptr inbounds double, ptr %604, i64 1
  %606 = load ptr, ptr %16, align 8, !tbaa !5
  %607 = load ptr, ptr %24, align 8, !tbaa !5
  %608 = call i32 @dgetrs_(ptr noundef @.str.4, ptr noundef %597, ptr noundef @c__1, ptr noundef %600, ptr noundef %601, ptr noundef %603, ptr noundef %605, ptr noundef %606, ptr noundef %607)
  br label %609

609:                                              ; preds = %596, %583
  %610 = load ptr, ptr %16, align 8, !tbaa !5
  %611 = load i64, ptr %610, align 8, !tbaa !9
  store i64 %611, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %612

612:                                              ; preds = %630, %609
  %613 = load i64, ptr %36, align 8, !tbaa !9
  %614 = load i64, ptr %32, align 8, !tbaa !9
  %615 = icmp sle i64 %613, %614
  br i1 %615, label %616, label %633

616:                                              ; preds = %612
  %617 = load ptr, ptr %25, align 8, !tbaa !5
  %618 = load ptr, ptr %16, align 8, !tbaa !5
  %619 = load i64, ptr %618, align 8, !tbaa !9
  %620 = shl i64 %619, 1
  %621 = load i64, ptr %36, align 8, !tbaa !9
  %622 = add nsw i64 %620, %621
  %623 = getelementptr inbounds double, ptr %617, i64 %622
  %624 = load double, ptr %623, align 8, !tbaa !11
  %625 = load ptr, ptr %25, align 8, !tbaa !5
  %626 = load i64, ptr %36, align 8, !tbaa !9
  %627 = getelementptr inbounds double, ptr %625, i64 %626
  %628 = load double, ptr %627, align 8, !tbaa !11
  %629 = fmul double %628, %624
  store double %629, ptr %627, align 8, !tbaa !11
  br label %630

630:                                              ; preds = %616
  %631 = load i64, ptr %36, align 8, !tbaa !9
  %632 = add nsw i64 %631, 1
  store i64 %632, ptr %36, align 8, !tbaa !9
  br label %612, !llvm.loop !27

633:                                              ; preds = %612
  br label %634

634:                                              ; preds = %633, %528
  br label %406

635:                                              ; preds = %406
  %636 = load double, ptr %41, align 8, !tbaa !11
  %637 = fcmp une double %636, 0.000000e+00
  br i1 %637, label %638, label %641

638:                                              ; preds = %635
  %639 = load double, ptr %41, align 8, !tbaa !11
  %640 = fdiv double 1.000000e+00, %639
  store double %640, ptr %34, align 8, !tbaa !11
  br label %641

641:                                              ; preds = %638, %635
  %642 = load double, ptr %34, align 8, !tbaa !11
  store double %642, ptr %14, align 8
  store i32 1, ptr %43, align 4
  br label %643

643:                                              ; preds = %641, %136, %126
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  %644 = load double, ptr %14, align 8
  ret double %644
}

; 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

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"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}


; 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 [12 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@c__1 = external hidden global i64, align 8
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1

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

24:                                               ; preds = %13
  %25 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #4
  %.not246 = icmp eq i64 %25, 0
  br i1 %.not246, label %26, label %28

26:                                               ; preds = %24
  %27 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #4
  %.not247 = icmp eq i64 %27, 0
  br i1 %.not247, label %.thread.sink.split, label %28

28:                                               ; preds = %26, %24, %13
  %29 = load i64, ptr %1, align 8, !tbaa !5
  %30 = icmp slt i64 %29, 0
  br i1 %30, label %.thread.sink.split, label %31

31:                                               ; preds = %28
  %32 = load i64, ptr %3, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %29, i64 1)
  %33 = icmp slt i64 %32, %spec.select
  br i1 %33, label %.thread.sink.split, label %34

34:                                               ; preds = %31
  %35 = load i64, ptr %5, align 8, !tbaa !5
  %36 = icmp slt i64 %35, %spec.select
  br i1 %36, label %.thread.sink.split, label %37

37:                                               ; preds = %34
  %.pr = load i64, ptr %9, align 8, !tbaa !5
  %.not248 = icmp eq i64 %.pr, 0
  br i1 %.not248, label %41, label %.thread

.thread.sink.split:                               ; preds = %34, %31, %28, %26
  %.sink = phi i64 [ -1, %26 ], [ -2, %28 ], [ -4, %31 ], [ -6, %34 ]
  store i64 %.sink, ptr %9, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %37
  %38 = phi i64 [ %.pr, %37 ], [ %.sink, %.thread.sink.split ]
  %39 = sub nsw i64 0, %38
  store i64 %39, ptr %14, align 8, !tbaa !5
  %40 = call i32 @xerbla_(ptr noundef nonnull @.str.3, ptr noundef nonnull %14) #4
  br label %490

41:                                               ; preds = %37
  %42 = icmp eq i64 %29, 0
  br i1 %42, label %490, label %43

43:                                               ; preds = %41
  %44 = load i64, ptr %7, align 8, !tbaa !5
  %.idx = shl i64 %29, 4
  %45 = getelementptr i8, ptr %22, i64 %.idx
  br i1 %.not, label %.lr.ph329, label %.lr.ph302

.lr.ph302:                                        ; preds = %43
  switch i64 %44, label %.preheader279.preheader [
    i64 1, label %.preheader281.us.preheader
    i64 0, label %.preheader283.us.preheader
  ]

.preheader283.us.preheader:                       ; preds = %.lr.ph302
  %xtraiter = and i64 %29, 1
  %46 = icmp eq i64 %29, 1
  %unroll_iter = and i64 %29, 9223372036854775806
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader283.us

.preheader281.us.preheader:                       ; preds = %.lr.ph302
  %xtraiter558 = and i64 %29, 1
  %47 = icmp eq i64 %29, 1
  %unroll_iter561 = and i64 %29, 9223372036854775806
  %lcmp.mod559.not = icmp eq i64 %xtraiter558, 0
  br label %.preheader281.us

.preheader279.preheader:                          ; preds = %.lr.ph302
  %xtraiter564 = and i64 %29, 1
  %48 = icmp eq i64 %29, 1
  %unroll_iter567 = and i64 %29, 9223372036854775806
  %lcmp.mod565.not = icmp eq i64 %xtraiter564, 0
  br label %.preheader279

.preheader281.us:                                 ; preds = %.preheader281.us.preheader, %..loopexit282_crit_edge.us
  %.0227300.us = phi i64 [ %83, %..loopexit282_crit_edge.us ], [ %44, %.preheader281.us.preheader ]
  %49 = getelementptr double, ptr %20, i64 %.0227300.us
  br i1 %47, label %..loopexit282_crit_edge.us.unr-lcssa, label %.preheader281.us.new

.preheader281.us.new:                             ; preds = %.preheader281.us, %.preheader281.us.new
  %.0220291.us = phi double [ %70, %.preheader281.us.new ], [ 0.000000e+00, %.preheader281.us ]
  %.0221290.us = phi i64 [ %71, %.preheader281.us.new ], [ 1, %.preheader281.us ]
  %niter562 = phi i64 [ %niter562.next.1, %.preheader281.us.new ], [ 0, %.preheader281.us ]
  %50 = mul nsw i64 %.0221290.us, %18
  %51 = getelementptr double, ptr %49, i64 %50
  %52 = load double, ptr %51, align 8, !tbaa !9
  %53 = getelementptr inbounds double, ptr %21, i64 %.0221290.us
  %54 = load double, ptr %53, align 8, !tbaa !9
  %55 = fmul double %52, %54
  %56 = fcmp oge double %55, 0.000000e+00
  %57 = fneg double %55
  %58 = select i1 %56, double %55, double %57
  %59 = fadd double %.0220291.us, %58
  %60 = add nuw i64 %.0221290.us, 1
  %61 = mul nsw i64 %60, %18
  %62 = getelementptr double, ptr %49, i64 %61
  %63 = load double, ptr %62, align 8, !tbaa !9
  %64 = getelementptr double, ptr %8, i64 %.0221290.us
  %65 = load double, ptr %64, align 8, !tbaa !9
  %66 = fmul double %63, %65
  %67 = fcmp oge double %66, 0.000000e+00
  %68 = fneg double %66
  %69 = select i1 %67, double %66, double %68
  %70 = fadd double %59, %69
  %71 = add nuw i64 %.0221290.us, 2
  %niter562.next.1 = add nuw i64 %niter562, 2
  %niter562.ncmp.1 = icmp eq i64 %niter562.next.1, %unroll_iter561
  br i1 %niter562.ncmp.1, label %..loopexit282_crit_edge.us.unr-lcssa, label %.preheader281.us.new, !llvm.loop !11

..loopexit282_crit_edge.us.unr-lcssa:             ; preds = %.preheader281.us.new, %.preheader281.us
  %.lcssa553.ph = phi double [ poison, %.preheader281.us ], [ %70, %.preheader281.us.new ]
  %.0220291.us.unr = phi double [ 0.000000e+00, %.preheader281.us ], [ %70, %.preheader281.us.new ]
  %.0221290.us.unr = phi i64 [ 1, %.preheader281.us ], [ %71, %.preheader281.us.new ]
  br i1 %lcmp.mod559.not, label %..loopexit282_crit_edge.us, label %..loopexit282_crit_edge.us.epilog-lcssa

..loopexit282_crit_edge.us.epilog-lcssa:          ; preds = %..loopexit282_crit_edge.us.unr-lcssa
  %72 = mul nsw i64 %.0221290.us.unr, %18
  %73 = getelementptr double, ptr %49, i64 %72
  %74 = load double, ptr %73, align 8, !tbaa !9
  %75 = getelementptr inbounds double, ptr %21, i64 %.0221290.us.unr
  %76 = load double, ptr %75, align 8, !tbaa !9
  %77 = fmul double %74, %76
  %78 = fcmp oge double %77, 0.000000e+00
  %79 = fneg double %77
  %80 = select i1 %78, double %77, double %79
  %81 = fadd double %.0220291.us.unr, %80
  br label %..loopexit282_crit_edge.us

..loopexit282_crit_edge.us:                       ; preds = %..loopexit282_crit_edge.us.unr-lcssa, %..loopexit282_crit_edge.us.epilog-lcssa
  %.lcssa553 = phi double [ %.lcssa553.ph, %..loopexit282_crit_edge.us.unr-lcssa ], [ %81, %..loopexit282_crit_edge.us.epilog-lcssa ]
  %82 = getelementptr double, ptr %45, i64 %.0227300.us
  store double %.lcssa553, ptr %82, align 8, !tbaa !9
  %83 = add nuw i64 %.0227300.us, 1
  %exitcond380.not = icmp eq i64 %.0227300.us, %29
  br i1 %exitcond380.not, label %.loopexit278, label %.preheader281.us, !llvm.loop !13

.preheader283.us:                                 ; preds = %.preheader283.us.preheader, %..loopexit284_crit_edge.us
  %.0227300.us304 = phi i64 [ %109, %..loopexit284_crit_edge.us ], [ 1, %.preheader283.us.preheader ]
  %84 = getelementptr double, ptr %20, i64 %.0227300.us304
  br i1 %46, label %..loopexit284_crit_edge.us.unr-lcssa, label %.preheader283.us.new

.preheader283.us.new:                             ; preds = %.preheader283.us, %.preheader283.us.new
  %.1288.us = phi double [ %99, %.preheader283.us.new ], [ 0.000000e+00, %.preheader283.us ]
  %.1222287.us = phi i64 [ %100, %.preheader283.us.new ], [ 1, %.preheader283.us ]
  %niter = phi i64 [ %niter.next.1, %.preheader283.us.new ], [ 0, %.preheader283.us ]
  %85 = mul nsw i64 %.1222287.us, %18
  %86 = getelementptr double, ptr %84, i64 %85
  %87 = load double, ptr %86, align 8, !tbaa !9
  %88 = fcmp oge double %87, 0.000000e+00
  %89 = fneg double %87
  %90 = select i1 %88, double %87, double %89
  %91 = fadd double %.1288.us, %90
  %92 = add nuw i64 %.1222287.us, 1
  %93 = mul nsw i64 %92, %18
  %94 = getelementptr double, ptr %84, i64 %93
  %95 = load double, ptr %94, align 8, !tbaa !9
  %96 = fcmp oge double %95, 0.000000e+00
  %97 = fneg double %95
  %98 = select i1 %96, double %95, double %97
  %99 = fadd double %91, %98
  %100 = add nuw i64 %.1222287.us, 2
  %niter.next.1 = add nuw i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %..loopexit284_crit_edge.us.unr-lcssa, label %.preheader283.us.new, !llvm.loop !14

..loopexit284_crit_edge.us.unr-lcssa:             ; preds = %.preheader283.us.new, %.preheader283.us
  %.lcssa555.ph = phi double [ poison, %.preheader283.us ], [ %99, %.preheader283.us.new ]
  %.1288.us.unr = phi double [ 0.000000e+00, %.preheader283.us ], [ %99, %.preheader283.us.new ]
  %.1222287.us.unr = phi i64 [ 1, %.preheader283.us ], [ %100, %.preheader283.us.new ]
  br i1 %lcmp.mod.not, label %..loopexit284_crit_edge.us, label %..loopexit284_crit_edge.us.epilog-lcssa

..loopexit284_crit_edge.us.epilog-lcssa:          ; preds = %..loopexit284_crit_edge.us.unr-lcssa
  %101 = mul nsw i64 %.1222287.us.unr, %18
  %102 = getelementptr double, ptr %84, i64 %101
  %103 = load double, ptr %102, align 8, !tbaa !9
  %104 = fcmp oge double %103, 0.000000e+00
  %105 = fneg double %103
  %106 = select i1 %104, double %103, double %105
  %107 = fadd double %.1288.us.unr, %106
  br label %..loopexit284_crit_edge.us

..loopexit284_crit_edge.us:                       ; preds = %..loopexit284_crit_edge.us.unr-lcssa, %..loopexit284_crit_edge.us.epilog-lcssa
  %.lcssa555 = phi double [ %.lcssa555.ph, %..loopexit284_crit_edge.us.unr-lcssa ], [ %107, %..loopexit284_crit_edge.us.epilog-lcssa ]
  %108 = getelementptr double, ptr %45, i64 %.0227300.us304
  store double %.lcssa555, ptr %108, align 8, !tbaa !9
  %109 = add nuw i64 %.0227300.us304, 1
  %exitcond378.not = icmp eq i64 %.0227300.us304, %29
  br i1 %exitcond378.not, label %.loopexit278, label %.preheader283.us, !llvm.loop !13

.preheader279:                                    ; preds = %.preheader279.preheader, %..loopexit280_crit_edge
  %.0227300 = phi i64 [ %144, %..loopexit280_crit_edge ], [ 1, %.preheader279.preheader ]
  %110 = getelementptr double, ptr %20, i64 %.0227300
  br i1 %48, label %..loopexit280_crit_edge.unr-lcssa, label %.preheader279.new

.preheader279.new:                                ; preds = %.preheader279, %.preheader279.new
  %.2296 = phi double [ %131, %.preheader279.new ], [ 0.000000e+00, %.preheader279 ]
  %.2223295 = phi i64 [ %132, %.preheader279.new ], [ 1, %.preheader279 ]
  %niter568 = phi i64 [ %niter568.next.1, %.preheader279.new ], [ 0, %.preheader279 ]
  %111 = mul nsw i64 %.2223295, %18
  %112 = getelementptr double, ptr %110, i64 %111
  %113 = load double, ptr %112, align 8, !tbaa !9
  %114 = getelementptr inbounds double, ptr %21, i64 %.2223295
  %115 = load double, ptr %114, align 8, !tbaa !9
  %116 = fdiv double %113, %115
  %117 = fcmp oge double %116, 0.000000e+00
  %118 = fneg double %116
  %119 = select i1 %117, double %116, double %118
  %120 = fadd double %.2296, %119
  %121 = add nuw i64 %.2223295, 1
  %122 = mul nsw i64 %121, %18
  %123 = getelementptr double, ptr %110, i64 %122
  %124 = load double, ptr %123, align 8, !tbaa !9
  %125 = getelementptr double, ptr %8, i64 %.2223295
  %126 = load double, ptr %125, align 8, !tbaa !9
  %127 = fdiv double %124, %126
  %128 = fcmp oge double %127, 0.000000e+00
  %129 = fneg double %127
  %130 = select i1 %128, double %127, double %129
  %131 = fadd double %120, %130
  %132 = add nuw i64 %.2223295, 2
  %niter568.next.1 = add nuw i64 %niter568, 2
  %niter568.ncmp.1 = icmp eq i64 %niter568.next.1, %unroll_iter567
  br i1 %niter568.ncmp.1, label %..loopexit280_crit_edge.unr-lcssa, label %.preheader279.new, !llvm.loop !15

..loopexit280_crit_edge.unr-lcssa:                ; preds = %.preheader279.new, %.preheader279
  %.lcssa551.ph = phi double [ poison, %.preheader279 ], [ %131, %.preheader279.new ]
  %.2296.unr = phi double [ 0.000000e+00, %.preheader279 ], [ %131, %.preheader279.new ]
  %.2223295.unr = phi i64 [ 1, %.preheader279 ], [ %132, %.preheader279.new ]
  br i1 %lcmp.mod565.not, label %..loopexit280_crit_edge, label %..loopexit280_crit_edge.epilog-lcssa

..loopexit280_crit_edge.epilog-lcssa:             ; preds = %..loopexit280_crit_edge.unr-lcssa
  %133 = mul nsw i64 %.2223295.unr, %18
  %134 = getelementptr double, ptr %110, i64 %133
  %135 = load double, ptr %134, align 8, !tbaa !9
  %136 = getelementptr inbounds double, ptr %21, i64 %.2223295.unr
  %137 = load double, ptr %136, align 8, !tbaa !9
  %138 = fdiv double %135, %137
  %139 = fcmp oge double %138, 0.000000e+00
  %140 = fneg double %138
  %141 = select i1 %139, double %138, double %140
  %142 = fadd double %.2296.unr, %141
  br label %..loopexit280_crit_edge

..loopexit280_crit_edge:                          ; preds = %..loopexit280_crit_edge.unr-lcssa, %..loopexit280_crit_edge.epilog-lcssa
  %.lcssa551 = phi double [ %.lcssa551.ph, %..loopexit280_crit_edge.unr-lcssa ], [ %142, %..loopexit280_crit_edge.epilog-lcssa ]
  %143 = getelementptr double, ptr %45, i64 %.0227300
  store double %.lcssa551, ptr %143, align 8, !tbaa !9
  %144 = add nuw i64 %.0227300, 1
  %exitcond382.not = icmp eq i64 %.0227300, %29
  br i1 %exitcond382.not, label %.loopexit278, label %.preheader279, !llvm.loop !13

.lr.ph329:                                        ; preds = %43
  switch i64 %44, label %.preheader.preheader [
    i64 1, label %.preheader274.us.preheader
    i64 0, label %.preheader276.us.preheader
  ]

.preheader276.us.preheader:                       ; preds = %.lr.ph329
  %xtraiter570 = and i64 %29, 1
  %145 = icmp eq i64 %29, 1
  %unroll_iter573 = and i64 %29, 9223372036854775806
  %lcmp.mod571.not = icmp eq i64 %xtraiter570, 0
  br label %.preheader276.us

.preheader274.us.preheader:                       ; preds = %.lr.ph329
  %xtraiter576 = and i64 %29, 1
  %146 = icmp eq i64 %29, 1
  %unroll_iter579 = and i64 %29, 9223372036854775806
  %lcmp.mod577.not = icmp eq i64 %xtraiter576, 0
  br label %.preheader274.us

.preheader.preheader:                             ; preds = %.lr.ph329
  %xtraiter582 = and i64 %29, 1
  %147 = icmp eq i64 %29, 1
  %unroll_iter585 = and i64 %29, 9223372036854775806
  %lcmp.mod583.not = icmp eq i64 %xtraiter582, 0
  br label %.preheader

.preheader274.us:                                 ; preds = %.preheader274.us.preheader, %..loopexit275_crit_edge.us
  %.1228328.us = phi i64 [ %176, %..loopexit275_crit_edge.us ], [ %44, %.preheader274.us.preheader ]
  %148 = mul nsw i64 %.1228328.us, %18
  %invariant.gep318.us = getelementptr double, ptr %20, i64 %148
  br i1 %146, label %..loopexit275_crit_edge.us.unr-lcssa, label %.preheader274.us.new

.preheader274.us.new:                             ; preds = %.preheader274.us
  %invariant.gep622 = getelementptr i8, ptr %invariant.gep318.us, i64 8
  br label %149

149:                                              ; preds = %149, %.preheader274.us.new
  %.4315.us = phi double [ 0.000000e+00, %.preheader274.us.new ], [ %165, %149 ]
  %.3224314.us = phi i64 [ 1, %.preheader274.us.new ], [ %166, %149 ]
  %niter580 = phi i64 [ 0, %.preheader274.us.new ], [ %niter580.next.1, %149 ]
  %gep319.us = getelementptr double, ptr %invariant.gep318.us, i64 %.3224314.us
  %150 = load double, ptr %gep319.us, align 8, !tbaa !9
  %151 = getelementptr inbounds double, ptr %21, i64 %.3224314.us
  %152 = load double, ptr %151, align 8, !tbaa !9
  %153 = fmul double %150, %152
  %154 = fcmp oge double %153, 0.000000e+00
  %155 = fneg double %153
  %156 = select i1 %154, double %153, double %155
  %157 = fadd double %.4315.us, %156
  %gep623 = getelementptr double, ptr %invariant.gep622, i64 %.3224314.us
  %158 = load double, ptr %gep623, align 8, !tbaa !9
  %159 = getelementptr double, ptr %8, i64 %.3224314.us
  %160 = load double, ptr %159, align 8, !tbaa !9
  %161 = fmul double %158, %160
  %162 = fcmp oge double %161, 0.000000e+00
  %163 = fneg double %161
  %164 = select i1 %162, double %161, double %163
  %165 = fadd double %157, %164
  %166 = add nuw i64 %.3224314.us, 2
  %niter580.next.1 = add i64 %niter580, 2
  %niter580.ncmp.1 = icmp eq i64 %niter580.next.1, %unroll_iter579
  br i1 %niter580.ncmp.1, label %..loopexit275_crit_edge.us.unr-lcssa, label %149, !llvm.loop !16

..loopexit275_crit_edge.us.unr-lcssa:             ; preds = %149, %.preheader274.us
  %.lcssa547.ph = phi double [ poison, %.preheader274.us ], [ %165, %149 ]
  %.4315.us.unr = phi double [ 0.000000e+00, %.preheader274.us ], [ %165, %149 ]
  %.3224314.us.unr = phi i64 [ 1, %.preheader274.us ], [ %166, %149 ]
  br i1 %lcmp.mod577.not, label %..loopexit275_crit_edge.us, label %..loopexit275_crit_edge.us.epilog-lcssa

..loopexit275_crit_edge.us.epilog-lcssa:          ; preds = %..loopexit275_crit_edge.us.unr-lcssa
  %gep319.us.epil = getelementptr double, ptr %invariant.gep318.us, i64 %.3224314.us.unr
  %167 = load double, ptr %gep319.us.epil, align 8, !tbaa !9
  %168 = getelementptr inbounds double, ptr %21, i64 %.3224314.us.unr
  %169 = load double, ptr %168, align 8, !tbaa !9
  %170 = fmul double %167, %169
  %171 = fcmp oge double %170, 0.000000e+00
  %172 = fneg double %170
  %173 = select i1 %171, double %170, double %172
  %174 = fadd double %.4315.us.unr, %173
  br label %..loopexit275_crit_edge.us

..loopexit275_crit_edge.us:                       ; preds = %..loopexit275_crit_edge.us.unr-lcssa, %..loopexit275_crit_edge.us.epilog-lcssa
  %.lcssa547 = phi double [ %.lcssa547.ph, %..loopexit275_crit_edge.us.unr-lcssa ], [ %174, %..loopexit275_crit_edge.us.epilog-lcssa ]
  %175 = getelementptr double, ptr %45, i64 %.1228328.us
  store double %.lcssa547, ptr %175, align 8, !tbaa !9
  %176 = add nuw i64 %.1228328.us, 1
  %exitcond386.not = icmp eq i64 %.1228328.us, %29
  br i1 %exitcond386.not, label %.loopexit278, label %.preheader274.us, !llvm.loop !17

.preheader276.us:                                 ; preds = %.preheader276.us.preheader, %..loopexit277_crit_edge.us
  %.1228328.us331 = phi i64 [ %196, %..loopexit277_crit_edge.us ], [ 1, %.preheader276.us.preheader ]
  %177 = mul nsw i64 %.1228328.us331, %18
  %invariant.gep.us = getelementptr double, ptr %20, i64 %177
  br i1 %145, label %..loopexit277_crit_edge.us.unr-lcssa, label %.preheader276.us.new

.preheader276.us.new:                             ; preds = %.preheader276.us
  %invariant.gep = getelementptr i8, ptr %invariant.gep.us, i64 8
  br label %178

178:                                              ; preds = %178, %.preheader276.us.new
  %.5312.us = phi double [ 0.000000e+00, %.preheader276.us.new ], [ %188, %178 ]
  %.4225311.us = phi i64 [ 1, %.preheader276.us.new ], [ %189, %178 ]
  %niter574 = phi i64 [ 0, %.preheader276.us.new ], [ %niter574.next.1, %178 ]
  %gep.us = getelementptr double, ptr %invariant.gep.us, i64 %.4225311.us
  %179 = load double, ptr %gep.us, align 8, !tbaa !9
  %180 = fcmp oge double %179, 0.000000e+00
  %181 = fneg double %179
  %182 = select i1 %180, double %179, double %181
  %183 = fadd double %.5312.us, %182
  %gep = getelementptr double, ptr %invariant.gep, i64 %.4225311.us
  %184 = load double, ptr %gep, align 8, !tbaa !9
  %185 = fcmp oge double %184, 0.000000e+00
  %186 = fneg double %184
  %187 = select i1 %185, double %184, double %186
  %188 = fadd double %183, %187
  %189 = add nuw i64 %.4225311.us, 2
  %niter574.next.1 = add i64 %niter574, 2
  %niter574.ncmp.1 = icmp eq i64 %niter574.next.1, %unroll_iter573
  br i1 %niter574.ncmp.1, label %..loopexit277_crit_edge.us.unr-lcssa, label %178, !llvm.loop !18

..loopexit277_crit_edge.us.unr-lcssa:             ; preds = %178, %.preheader276.us
  %.lcssa549.ph = phi double [ poison, %.preheader276.us ], [ %188, %178 ]
  %.5312.us.unr = phi double [ 0.000000e+00, %.preheader276.us ], [ %188, %178 ]
  %.4225311.us.unr = phi i64 [ 1, %.preheader276.us ], [ %189, %178 ]
  br i1 %lcmp.mod571.not, label %..loopexit277_crit_edge.us, label %..loopexit277_crit_edge.us.epilog-lcssa

..loopexit277_crit_edge.us.epilog-lcssa:          ; preds = %..loopexit277_crit_edge.us.unr-lcssa
  %gep.us.epil = getelementptr double, ptr %invariant.gep.us, i64 %.4225311.us.unr
  %190 = load double, ptr %gep.us.epil, align 8, !tbaa !9
  %191 = fcmp oge double %190, 0.000000e+00
  %192 = fneg double %190
  %193 = select i1 %191, double %190, double %192
  %194 = fadd double %.5312.us.unr, %193
  br label %..loopexit277_crit_edge.us

..loopexit277_crit_edge.us:                       ; preds = %..loopexit277_crit_edge.us.unr-lcssa, %..loopexit277_crit_edge.us.epilog-lcssa
  %.lcssa549 = phi double [ %.lcssa549.ph, %..loopexit277_crit_edge.us.unr-lcssa ], [ %194, %..loopexit277_crit_edge.us.epilog-lcssa ]
  %195 = getelementptr double, ptr %45, i64 %.1228328.us331
  store double %.lcssa549, ptr %195, align 8, !tbaa !9
  %196 = add nuw i64 %.1228328.us331, 1
  %exitcond384.not = icmp eq i64 %.1228328.us331, %29
  br i1 %exitcond384.not, label %.loopexit278, label %.preheader276.us, !llvm.loop !17

.preheader:                                       ; preds = %.preheader.preheader, %..loopexit273_crit_edge
  %.1228328 = phi i64 [ %225, %..loopexit273_crit_edge ], [ 1, %.preheader.preheader ]
  %197 = mul nsw i64 %.1228328, %18
  %invariant.gep325 = getelementptr double, ptr %20, i64 %197
  br i1 %147, label %..loopexit273_crit_edge.unr-lcssa, label %.preheader.new

.preheader.new:                                   ; preds = %.preheader
  %invariant.gep624 = getelementptr i8, ptr %invariant.gep325, i64 8
  br label %198

198:                                              ; preds = %198, %.preheader.new
  %.6322 = phi double [ 0.000000e+00, %.preheader.new ], [ %214, %198 ]
  %.5226321 = phi i64 [ 1, %.preheader.new ], [ %215, %198 ]
  %niter586 = phi i64 [ 0, %.preheader.new ], [ %niter586.next.1, %198 ]
  %gep326 = getelementptr double, ptr %invariant.gep325, i64 %.5226321
  %199 = load double, ptr %gep326, align 8, !tbaa !9
  %200 = getelementptr inbounds double, ptr %21, i64 %.5226321
  %201 = load double, ptr %200, align 8, !tbaa !9
  %202 = fdiv double %199, %201
  %203 = fcmp oge double %202, 0.000000e+00
  %204 = fneg double %202
  %205 = select i1 %203, double %202, double %204
  %206 = fadd double %.6322, %205
  %gep625 = getelementptr double, ptr %invariant.gep624, i64 %.5226321
  %207 = load double, ptr %gep625, align 8, !tbaa !9
  %208 = getelementptr double, ptr %8, i64 %.5226321
  %209 = load double, ptr %208, align 8, !tbaa !9
  %210 = fdiv double %207, %209
  %211 = fcmp oge double %210, 0.000000e+00
  %212 = fneg double %210
  %213 = select i1 %211, double %210, double %212
  %214 = fadd double %206, %213
  %215 = add nuw i64 %.5226321, 2
  %niter586.next.1 = add i64 %niter586, 2
  %niter586.ncmp.1 = icmp eq i64 %niter586.next.1, %unroll_iter585
  br i1 %niter586.ncmp.1, label %..loopexit273_crit_edge.unr-lcssa, label %198, !llvm.loop !19

..loopexit273_crit_edge.unr-lcssa:                ; preds = %198, %.preheader
  %.lcssa.ph = phi double [ poison, %.preheader ], [ %214, %198 ]
  %.6322.unr = phi double [ 0.000000e+00, %.preheader ], [ %214, %198 ]
  %.5226321.unr = phi i64 [ 1, %.preheader ], [ %215, %198 ]
  br i1 %lcmp.mod583.not, label %..loopexit273_crit_edge, label %..loopexit273_crit_edge.epilog-lcssa

..loopexit273_crit_edge.epilog-lcssa:             ; preds = %..loopexit273_crit_edge.unr-lcssa
  %gep326.epil = getelementptr double, ptr %invariant.gep325, i64 %.5226321.unr
  %216 = load double, ptr %gep326.epil, align 8, !tbaa !9
  %217 = getelementptr inbounds double, ptr %21, i64 %.5226321.unr
  %218 = load double, ptr %217, align 8, !tbaa !9
  %219 = fdiv double %216, %218
  %220 = fcmp oge double %219, 0.000000e+00
  %221 = fneg double %219
  %222 = select i1 %220, double %219, double %221
  %223 = fadd double %.6322.unr, %222
  br label %..loopexit273_crit_edge

..loopexit273_crit_edge:                          ; preds = %..loopexit273_crit_edge.unr-lcssa, %..loopexit273_crit_edge.epilog-lcssa
  %.lcssa = phi double [ %.lcssa.ph, %..loopexit273_crit_edge.unr-lcssa ], [ %223, %..loopexit273_crit_edge.epilog-lcssa ]
  %224 = getelementptr double, ptr %45, i64 %.1228328
  store double %.lcssa, ptr %224, align 8, !tbaa !9
  %225 = add nuw i64 %.1228328, 1
  %exitcond388.not = icmp eq i64 %.1228328, %29
  br i1 %exitcond388.not, label %.loopexit278, label %.preheader, !llvm.loop !17

.loopexit278:                                     ; preds = %..loopexit284_crit_edge.us, %..loopexit282_crit_edge.us, %..loopexit280_crit_edge, %..loopexit277_crit_edge.us, %..loopexit275_crit_edge.us, %..loopexit273_crit_edge
  store double 0.000000e+00, ptr %17, align 8, !tbaa !9
  store i64 0, ptr %15, align 8, !tbaa !5
  %.str.5..str.4 = select i1 %.not, ptr @.str.5, ptr @.str.4
  %.str.4..str.5 = select i1 %.not, ptr @.str.4, ptr @.str.5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.backedge, %.loopexit278
  %226 = phi i64 [ %29, %.loopexit278 ], [ %.be, %.loopexit.backedge ]
  %227 = getelementptr double, ptr %10, i64 %226
  %228 = call i32 @dlacn2_(ptr noundef nonnull %1, ptr noundef %227, ptr noundef %10, ptr noundef %11, ptr noundef nonnull %17, ptr noundef nonnull %15, ptr noundef nonnull %16) #4
  %229 = load i64, ptr %15, align 8, !tbaa !5
  switch i64 %229, label %357 [
    i64 0, label %486
    i64 2, label %230
  ]

230:                                              ; preds = %.loopexit
  %231 = load i64, ptr %1, align 8, !tbaa !5
  %.not259337 = icmp slt i64 %231, 1
  br i1 %.not259337, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %230
  %.idx262 = shl i64 %231, 4
  %232 = getelementptr i8, ptr %22, i64 %.idx262
  %min.iters.check524 = icmp ult i64 %231, 6
  br i1 %min.iters.check524, label %scalar.ph523.preheader, label %vector.memcheck515

vector.memcheck515:                               ; preds = %.lr.ph
  %233 = shl i64 %231, 3
  %scevgep516 = getelementptr i8, ptr %10, i64 %233
  %scevgep517 = getelementptr i8, ptr %10, i64 %.idx262
  %234 = mul i64 %231, 24
  %scevgep518 = getelementptr i8, ptr %10, i64 %234
  %bound0519 = icmp ugt ptr %scevgep518, %10
  %bound1520 = icmp ult ptr %scevgep517, %scevgep516
  %found.conflict521 = and i1 %bound0519, %bound1520
  br i1 %found.conflict521, label %scalar.ph523.preheader, label %vector.ph525

vector.ph525:                                     ; preds = %vector.memcheck515
  %n.vec527 = and i64 %231, 9223372036854775804
  %ind.end528 = or disjoint i64 %n.vec527, 1
  br label %vector.body530

vector.body530:                                   ; preds = %vector.body530, %vector.ph525
  %index531 = phi i64 [ 0, %vector.ph525 ], [ %index.next537, %vector.body530 ]
  %offset.idx532 = or disjoint i64 %index531, 1
  %235 = getelementptr double, ptr %232, i64 %offset.idx532
  %236 = getelementptr i8, ptr %235, i64 16
  %wide.load533 = load <2 x double>, ptr %235, align 8, !tbaa !9, !alias.scope !20
  %wide.load534 = load <2 x double>, ptr %236, align 8, !tbaa !9, !alias.scope !20
  %237 = getelementptr double, ptr %10, i64 %index531
  %238 = getelementptr inbounds i8, ptr %237, i64 16
  %wide.load535 = load <2 x double>, ptr %237, align 8, !tbaa !9, !alias.scope !23, !noalias !20
  %wide.load536 = load <2 x double>, ptr %238, align 8, !tbaa !9, !alias.scope !23, !noalias !20
  %239 = fmul <2 x double> %wide.load533, %wide.load535
  %240 = fmul <2 x double> %wide.load534, %wide.load536
  store <2 x double> %239, ptr %237, align 8, !tbaa !9, !alias.scope !23, !noalias !20
  store <2 x double> %240, ptr %238, align 8, !tbaa !9, !alias.scope !23, !noalias !20
  %index.next537 = add nuw i64 %index531, 4
  %241 = icmp eq i64 %index.next537, %n.vec527
  br i1 %241, label %middle.block522, label %vector.body530, !llvm.loop !25

middle.block522:                                  ; preds = %vector.body530
  %cmp.n538 = icmp eq i64 %231, %n.vec527
  br i1 %cmp.n538, label %._crit_edge, label %scalar.ph523.preheader

scalar.ph523.preheader:                           ; preds = %middle.block522, %vector.memcheck515, %.lr.ph
  %.2229338.ph = phi i64 [ 1, %vector.memcheck515 ], [ 1, %.lr.ph ], [ %ind.end528, %middle.block522 ]
  %242 = add nuw i64 %231, 1
  %243 = sub i64 %242, %.2229338.ph
  %244 = sub i64 %231, %.2229338.ph
  %xtraiter587 = and i64 %243, 3
  %lcmp.mod588.not = icmp eq i64 %xtraiter587, 0
  br i1 %lcmp.mod588.not, label %scalar.ph523.prol.loopexit, label %scalar.ph523.prol

scalar.ph523.prol:                                ; preds = %scalar.ph523.preheader, %scalar.ph523.prol
  %.2229338.prol = phi i64 [ %250, %scalar.ph523.prol ], [ %.2229338.ph, %scalar.ph523.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph523.prol ], [ 0, %scalar.ph523.preheader ]
  %245 = getelementptr double, ptr %232, i64 %.2229338.prol
  %246 = load double, ptr %245, align 8, !tbaa !9
  %247 = getelementptr inbounds double, ptr %22, i64 %.2229338.prol
  %248 = load double, ptr %247, align 8, !tbaa !9
  %249 = fmul double %246, %248
  store double %249, ptr %247, align 8, !tbaa !9
  %250 = add nuw i64 %.2229338.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter587
  br i1 %prol.iter.cmp.not, label %scalar.ph523.prol.loopexit, label %scalar.ph523.prol, !llvm.loop !28

scalar.ph523.prol.loopexit:                       ; preds = %scalar.ph523.prol, %scalar.ph523.preheader
  %.2229338.unr = phi i64 [ %.2229338.ph, %scalar.ph523.preheader ], [ %250, %scalar.ph523.prol ]
  %251 = icmp ult i64 %244, 3
  br i1 %251, label %._crit_edge, label %scalar.ph523.preheader.new

scalar.ph523.preheader.new:                       ; preds = %scalar.ph523.prol.loopexit
  %invariant.gep626 = getelementptr i8, ptr %232, i64 8
  br label %scalar.ph523

scalar.ph523:                                     ; preds = %scalar.ph523, %scalar.ph523.preheader.new
  %.2229338 = phi i64 [ %.2229338.unr, %scalar.ph523.preheader.new ], [ %273, %scalar.ph523 ]
  %252 = getelementptr double, ptr %232, i64 %.2229338
  %253 = load double, ptr %252, align 8, !tbaa !9
  %254 = getelementptr inbounds double, ptr %22, i64 %.2229338
  %255 = load double, ptr %254, align 8, !tbaa !9
  %256 = fmul double %253, %255
  store double %256, ptr %254, align 8, !tbaa !9
  %gep627 = getelementptr double, ptr %invariant.gep626, i64 %.2229338
  %257 = load double, ptr %gep627, align 8, !tbaa !9
  %258 = getelementptr double, ptr %10, i64 %.2229338
  %259 = load double, ptr %258, align 8, !tbaa !9
  %260 = fmul double %257, %259
  store double %260, ptr %258, align 8, !tbaa !9
  %261 = add nuw i64 %.2229338, 2
  %262 = getelementptr double, ptr %232, i64 %261
  %263 = load double, ptr %262, align 8, !tbaa !9
  %264 = getelementptr inbounds double, ptr %22, i64 %261
  %265 = load double, ptr %264, align 8, !tbaa !9
  %266 = fmul double %263, %265
  store double %266, ptr %264, align 8, !tbaa !9
  %267 = add nuw i64 %.2229338, 3
  %268 = getelementptr double, ptr %232, i64 %267
  %269 = load double, ptr %268, align 8, !tbaa !9
  %270 = getelementptr inbounds double, ptr %22, i64 %267
  %271 = load double, ptr %270, align 8, !tbaa !9
  %272 = fmul double %269, %271
  store double %272, ptr %270, align 8, !tbaa !9
  %273 = add nuw i64 %.2229338, 4
  %exitcond389.not.3 = icmp eq i64 %267, %231
  br i1 %exitcond389.not.3, label %._crit_edge, label %scalar.ph523, !llvm.loop !30

._crit_edge:                                      ; preds = %scalar.ph523.prol.loopexit, %scalar.ph523, %middle.block522, %230
  %274 = call i32 @dgetrs_(ptr noundef nonnull %.str.5..str.4, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %6, ptr noundef %10, ptr noundef nonnull %1, ptr noundef nonnull %9) #4
  %275 = load i64, ptr %7, align 8, !tbaa !5
  %.pre.pre = load i64, ptr %1, align 8, !tbaa !5
  switch i64 %275, label %.loopexit.backedge [
    i64 1, label %276
    i64 -1, label %315
  ]

276:                                              ; preds = %._crit_edge
  %.not261343 = icmp slt i64 %.pre.pre, 1
  br i1 %.not261343, label %.loopexit.backedge, label %.lr.ph346.preheader

.lr.ph346.preheader:                              ; preds = %276
  %min.iters.check479 = icmp eq i64 %.pre.pre, 1
  br i1 %min.iters.check479, label %.lr.ph346.preheader542, label %vector.memcheck471

vector.memcheck471:                               ; preds = %.lr.ph346.preheader
  %277 = shl i64 %.pre.pre, 3
  %scevgep472 = getelementptr i8, ptr %10, i64 %277
  %scevgep473 = getelementptr i8, ptr %8, i64 %277
  %bound0474 = icmp ugt ptr %scevgep473, %10
  %bound1475 = icmp ugt ptr %scevgep472, %8
  %found.conflict476 = and i1 %bound0474, %bound1475
  br i1 %found.conflict476, label %.lr.ph346.preheader542, label %vector.ph480

vector.ph480:                                     ; preds = %vector.memcheck471
  %n.vec482 = and i64 %.pre.pre, 9223372036854775806
  %ind.end483 = or i64 %.pre.pre, 1
  br label %vector.body485

vector.body485:                                   ; preds = %vector.body485, %vector.ph480
  %index486 = phi i64 [ 0, %vector.ph480 ], [ %index.next490, %vector.body485 ]
  %278 = getelementptr double, ptr %8, i64 %index486
  %wide.load488 = load <2 x double>, ptr %278, align 8, !tbaa !9, !alias.scope !31
  %279 = getelementptr double, ptr %10, i64 %index486
  %wide.load489 = load <2 x double>, ptr %279, align 8, !tbaa !9, !alias.scope !34, !noalias !31
  %280 = fdiv <2 x double> %wide.load489, %wide.load488
  store <2 x double> %280, ptr %279, align 8, !tbaa !9, !alias.scope !34, !noalias !31
  %index.next490 = add nuw i64 %index486, 2
  %281 = icmp eq i64 %index.next490, %n.vec482
  br i1 %281, label %middle.block477, label %vector.body485, !llvm.loop !36

middle.block477:                                  ; preds = %vector.body485
  %cmp.n491 = icmp eq i64 %.pre.pre, %n.vec482
  br i1 %cmp.n491, label %.loopexit.backedge, label %.lr.ph346.preheader542

.lr.ph346.preheader542:                           ; preds = %middle.block477, %vector.memcheck471, %.lr.ph346.preheader
  %.3230344.ph = phi i64 [ 1, %vector.memcheck471 ], [ 1, %.lr.ph346.preheader ], [ %ind.end483, %middle.block477 ]
  %282 = add nuw i64 %.pre.pre, 1
  %283 = sub i64 %282, %.3230344.ph
  %284 = sub i64 %.pre.pre, %.3230344.ph
  %xtraiter592 = and i64 %283, 3
  %lcmp.mod593.not = icmp eq i64 %xtraiter592, 0
  br i1 %lcmp.mod593.not, label %.lr.ph346.prol.loopexit, label %.lr.ph346.prol

.lr.ph346.prol:                                   ; preds = %.lr.ph346.preheader542, %.lr.ph346.prol
  %.3230344.prol = phi i64 [ %290, %.lr.ph346.prol ], [ %.3230344.ph, %.lr.ph346.preheader542 ]
  %prol.iter594 = phi i64 [ %prol.iter594.next, %.lr.ph346.prol ], [ 0, %.lr.ph346.preheader542 ]
  %285 = getelementptr inbounds double, ptr %21, i64 %.3230344.prol
  %286 = load double, ptr %285, align 8, !tbaa !9
  %287 = getelementptr inbounds double, ptr %22, i64 %.3230344.prol
  %288 = load double, ptr %287, align 8, !tbaa !9
  %289 = fdiv double %288, %286
  store double %289, ptr %287, align 8, !tbaa !9
  %290 = add nuw i64 %.3230344.prol, 1
  %prol.iter594.next = add i64 %prol.iter594, 1
  %prol.iter594.cmp.not = icmp eq i64 %prol.iter594.next, %xtraiter592
  br i1 %prol.iter594.cmp.not, label %.lr.ph346.prol.loopexit, label %.lr.ph346.prol, !llvm.loop !37

.lr.ph346.prol.loopexit:                          ; preds = %.lr.ph346.prol, %.lr.ph346.preheader542
  %.3230344.unr = phi i64 [ %.3230344.ph, %.lr.ph346.preheader542 ], [ %290, %.lr.ph346.prol ]
  %291 = icmp ult i64 %284, 3
  br i1 %291, label %.loopexit.backedge, label %.lr.ph346

.lr.ph346:                                        ; preds = %.lr.ph346.prol.loopexit, %.lr.ph346
  %.3230344 = phi i64 [ %314, %.lr.ph346 ], [ %.3230344.unr, %.lr.ph346.prol.loopexit ]
  %292 = getelementptr inbounds double, ptr %21, i64 %.3230344
  %293 = load double, ptr %292, align 8, !tbaa !9
  %294 = getelementptr inbounds double, ptr %22, i64 %.3230344
  %295 = load double, ptr %294, align 8, !tbaa !9
  %296 = fdiv double %295, %293
  store double %296, ptr %294, align 8, !tbaa !9
  %297 = getelementptr double, ptr %8, i64 %.3230344
  %298 = load double, ptr %297, align 8, !tbaa !9
  %299 = getelementptr double, ptr %10, i64 %.3230344
  %300 = load double, ptr %299, align 8, !tbaa !9
  %301 = fdiv double %300, %298
  store double %301, ptr %299, align 8, !tbaa !9
  %302 = add nuw i64 %.3230344, 2
  %303 = getelementptr inbounds double, ptr %21, i64 %302
  %304 = load double, ptr %303, align 8, !tbaa !9
  %305 = getelementptr inbounds double, ptr %22, i64 %302
  %306 = load double, ptr %305, align 8, !tbaa !9
  %307 = fdiv double %306, %304
  store double %307, ptr %305, align 8, !tbaa !9
  %308 = add nuw i64 %.3230344, 3
  %309 = getelementptr inbounds double, ptr %21, i64 %308
  %310 = load double, ptr %309, align 8, !tbaa !9
  %311 = getelementptr inbounds double, ptr %22, i64 %308
  %312 = load double, ptr %311, align 8, !tbaa !9
  %313 = fdiv double %312, %310
  store double %313, ptr %311, align 8, !tbaa !9
  %314 = add nuw i64 %.3230344, 4
  %exitcond391.not.3 = icmp eq i64 %308, %.pre.pre
  br i1 %exitcond391.not.3, label %.loopexit.backedge, label %.lr.ph346, !llvm.loop !38

315:                                              ; preds = %._crit_edge
  %.not260339 = icmp slt i64 %.pre.pre, 1
  br i1 %.not260339, label %.loopexit.backedge, label %.lr.ph342.preheader

.lr.ph342.preheader:                              ; preds = %315
  %min.iters.check500 = icmp ult i64 %.pre.pre, 4
  br i1 %min.iters.check500, label %.lr.ph342.preheader544, label %vector.memcheck492

vector.memcheck492:                               ; preds = %.lr.ph342.preheader
  %316 = shl i64 %.pre.pre, 3
  %scevgep493 = getelementptr i8, ptr %10, i64 %316
  %scevgep494 = getelementptr i8, ptr %8, i64 %316
  %bound0495 = icmp ugt ptr %scevgep494, %10
  %bound1496 = icmp ugt ptr %scevgep493, %8
  %found.conflict497 = and i1 %bound0495, %bound1496
  br i1 %found.conflict497, label %.lr.ph342.preheader544, label %vector.ph501

vector.ph501:                                     ; preds = %vector.memcheck492
  %n.vec503 = and i64 %.pre.pre, 9223372036854775804
  %ind.end504 = or disjoint i64 %n.vec503, 1
  br label %vector.body506

vector.body506:                                   ; preds = %vector.body506, %vector.ph501
  %index507 = phi i64 [ 0, %vector.ph501 ], [ %index.next513, %vector.body506 ]
  %317 = getelementptr double, ptr %8, i64 %index507
  %318 = getelementptr inbounds i8, ptr %317, i64 16
  %wide.load509 = load <2 x double>, ptr %317, align 8, !tbaa !9, !alias.scope !39
  %wide.load510 = load <2 x double>, ptr %318, align 8, !tbaa !9, !alias.scope !39
  %319 = getelementptr double, ptr %10, i64 %index507
  %320 = getelementptr inbounds i8, ptr %319, i64 16
  %wide.load511 = load <2 x double>, ptr %319, align 8, !tbaa !9, !alias.scope !42, !noalias !39
  %wide.load512 = load <2 x double>, ptr %320, align 8, !tbaa !9, !alias.scope !42, !noalias !39
  %321 = fmul <2 x double> %wide.load509, %wide.load511
  %322 = fmul <2 x double> %wide.load510, %wide.load512
  store <2 x double> %321, ptr %319, align 8, !tbaa !9, !alias.scope !42, !noalias !39
  store <2 x double> %322, ptr %320, align 8, !tbaa !9, !alias.scope !42, !noalias !39
  %index.next513 = add nuw i64 %index507, 4
  %323 = icmp eq i64 %index.next513, %n.vec503
  br i1 %323, label %middle.block498, label %vector.body506, !llvm.loop !44

middle.block498:                                  ; preds = %vector.body506
  %cmp.n514 = icmp eq i64 %.pre.pre, %n.vec503
  br i1 %cmp.n514, label %.loopexit.backedge, label %.lr.ph342.preheader544

.loopexit.backedge:                               ; preds = %.lr.ph342.prol.loopexit, %.lr.ph342, %.lr.ph346.prol.loopexit, %.lr.ph346, %scalar.ph.prol.loopexit, %scalar.ph, %middle.block498, %middle.block477, %middle.block, %._crit_edge, %315, %276, %.loopexit269
  %.be = phi i64 [ %.pre.pre, %315 ], [ %.pre.pre, %276 ], [ %443, %.loopexit269 ], [ %.pre.pre, %._crit_edge ], [ %443, %middle.block ], [ %.pre.pre, %middle.block477 ], [ %.pre.pre, %middle.block498 ], [ %443, %scalar.ph ], [ %443, %scalar.ph.prol.loopexit ], [ %.pre.pre, %.lr.ph346 ], [ %.pre.pre, %.lr.ph346.prol.loopexit ], [ %.pre.pre, %.lr.ph342 ], [ %.pre.pre, %.lr.ph342.prol.loopexit ]
  br label %.loopexit

.lr.ph342.preheader544:                           ; preds = %middle.block498, %vector.memcheck492, %.lr.ph342.preheader
  %.4231340.ph = phi i64 [ 1, %vector.memcheck492 ], [ 1, %.lr.ph342.preheader ], [ %ind.end504, %middle.block498 ]
  %324 = add nuw i64 %.pre.pre, 1
  %325 = sub i64 %324, %.4231340.ph
  %326 = sub i64 %.pre.pre, %.4231340.ph
  %xtraiter589 = and i64 %325, 3
  %lcmp.mod590.not = icmp eq i64 %xtraiter589, 0
  br i1 %lcmp.mod590.not, label %.lr.ph342.prol.loopexit, label %.lr.ph342.prol

.lr.ph342.prol:                                   ; preds = %.lr.ph342.preheader544, %.lr.ph342.prol
  %.4231340.prol = phi i64 [ %332, %.lr.ph342.prol ], [ %.4231340.ph, %.lr.ph342.preheader544 ]
  %prol.iter591 = phi i64 [ %prol.iter591.next, %.lr.ph342.prol ], [ 0, %.lr.ph342.preheader544 ]
  %327 = getelementptr inbounds double, ptr %21, i64 %.4231340.prol
  %328 = load double, ptr %327, align 8, !tbaa !9
  %329 = getelementptr inbounds double, ptr %22, i64 %.4231340.prol
  %330 = load double, ptr %329, align 8, !tbaa !9
  %331 = fmul double %328, %330
  store double %331, ptr %329, align 8, !tbaa !9
  %332 = add nuw i64 %.4231340.prol, 1
  %prol.iter591.next = add i64 %prol.iter591, 1
  %prol.iter591.cmp.not = icmp eq i64 %prol.iter591.next, %xtraiter589
  br i1 %prol.iter591.cmp.not, label %.lr.ph342.prol.loopexit, label %.lr.ph342.prol, !llvm.loop !45

.lr.ph342.prol.loopexit:                          ; preds = %.lr.ph342.prol, %.lr.ph342.preheader544
  %.4231340.unr = phi i64 [ %.4231340.ph, %.lr.ph342.preheader544 ], [ %332, %.lr.ph342.prol ]
  %333 = icmp ult i64 %326, 3
  br i1 %333, label %.loopexit.backedge, label %.lr.ph342

.lr.ph342:                                        ; preds = %.lr.ph342.prol.loopexit, %.lr.ph342
  %.4231340 = phi i64 [ %356, %.lr.ph342 ], [ %.4231340.unr, %.lr.ph342.prol.loopexit ]
  %334 = getelementptr inbounds double, ptr %21, i64 %.4231340
  %335 = load double, ptr %334, align 8, !tbaa !9
  %336 = getelementptr inbounds double, ptr %22, i64 %.4231340
  %337 = load double, ptr %336, align 8, !tbaa !9
  %338 = fmul double %335, %337
  store double %338, ptr %336, align 8, !tbaa !9
  %339 = getelementptr double, ptr %8, i64 %.4231340
  %340 = load double, ptr %339, align 8, !tbaa !9
  %341 = getelementptr double, ptr %10, i64 %.4231340
  %342 = load double, ptr %341, align 8, !tbaa !9
  %343 = fmul double %340, %342
  store double %343, ptr %341, align 8, !tbaa !9
  %344 = add nuw i64 %.4231340, 2
  %345 = getelementptr inbounds double, ptr %21, i64 %344
  %346 = load double, ptr %345, align 8, !tbaa !9
  %347 = getelementptr inbounds double, ptr %22, i64 %344
  %348 = load double, ptr %347, align 8, !tbaa !9
  %349 = fmul double %346, %348
  store double %349, ptr %347, align 8, !tbaa !9
  %350 = add nuw i64 %.4231340, 3
  %351 = getelementptr inbounds double, ptr %21, i64 %350
  %352 = load double, ptr %351, align 8, !tbaa !9
  %353 = getelementptr inbounds double, ptr %22, i64 %350
  %354 = load double, ptr %353, align 8, !tbaa !9
  %355 = fmul double %352, %354
  store double %355, ptr %353, align 8, !tbaa !9
  %356 = add nuw i64 %.4231340, 4
  %exitcond390.not.3 = icmp eq i64 %350, %.pre.pre
  br i1 %exitcond390.not.3, label %.loopexit.backedge, label %.lr.ph342, !llvm.loop !46

357:                                              ; preds = %.loopexit
  %358 = load i64, ptr %7, align 8, !tbaa !5
  switch i64 %358, label %.loopexit269 [
    i64 1, label %359
    i64 -1, label %399
  ]

359:                                              ; preds = %357
  %360 = load i64, ptr %1, align 8, !tbaa !5
  %.not256351 = icmp slt i64 %360, 1
  br i1 %.not256351, label %.loopexit269, label %.lr.ph354.preheader

.lr.ph354.preheader:                              ; preds = %359
  %min.iters.check435 = icmp eq i64 %360, 1
  br i1 %min.iters.check435, label %.lr.ph354.preheader539, label %vector.memcheck427

vector.memcheck427:                               ; preds = %.lr.ph354.preheader
  %361 = shl i64 %360, 3
  %scevgep428 = getelementptr i8, ptr %10, i64 %361
  %scevgep429 = getelementptr i8, ptr %8, i64 %361
  %bound0430 = icmp ugt ptr %scevgep429, %10
  %bound1431 = icmp ugt ptr %scevgep428, %8
  %found.conflict432 = and i1 %bound0430, %bound1431
  br i1 %found.conflict432, label %.lr.ph354.preheader539, label %vector.ph436

vector.ph436:                                     ; preds = %vector.memcheck427
  %n.vec438 = and i64 %360, 9223372036854775806
  %ind.end439 = or i64 %360, 1
  br label %vector.body441

vector.body441:                                   ; preds = %vector.body441, %vector.ph436
  %index442 = phi i64 [ 0, %vector.ph436 ], [ %index.next446, %vector.body441 ]
  %362 = getelementptr double, ptr %8, i64 %index442
  %wide.load444 = load <2 x double>, ptr %362, align 8, !tbaa !9, !alias.scope !47
  %363 = getelementptr double, ptr %10, i64 %index442
  %wide.load445 = load <2 x double>, ptr %363, align 8, !tbaa !9, !alias.scope !50, !noalias !47
  %364 = fdiv <2 x double> %wide.load445, %wide.load444
  store <2 x double> %364, ptr %363, align 8, !tbaa !9, !alias.scope !50, !noalias !47
  %index.next446 = add nuw i64 %index442, 2
  %365 = icmp eq i64 %index.next446, %n.vec438
  br i1 %365, label %middle.block433, label %vector.body441, !llvm.loop !52

middle.block433:                                  ; preds = %vector.body441
  %cmp.n447 = icmp eq i64 %360, %n.vec438
  br i1 %cmp.n447, label %.loopexit269, label %.lr.ph354.preheader539

.lr.ph354.preheader539:                           ; preds = %middle.block433, %vector.memcheck427, %.lr.ph354.preheader
  %.5232352.ph = phi i64 [ 1, %vector.memcheck427 ], [ 1, %.lr.ph354.preheader ], [ %ind.end439, %middle.block433 ]
  %366 = add nuw i64 %360, 1
  %367 = sub i64 %366, %.5232352.ph
  %368 = sub i64 %360, %.5232352.ph
  %xtraiter598 = and i64 %367, 3
  %lcmp.mod599.not = icmp eq i64 %xtraiter598, 0
  br i1 %lcmp.mod599.not, label %.lr.ph354.prol.loopexit, label %.lr.ph354.prol

.lr.ph354.prol:                                   ; preds = %.lr.ph354.preheader539, %.lr.ph354.prol
  %.5232352.prol = phi i64 [ %374, %.lr.ph354.prol ], [ %.5232352.ph, %.lr.ph354.preheader539 ]
  %prol.iter600 = phi i64 [ %prol.iter600.next, %.lr.ph354.prol ], [ 0, %.lr.ph354.preheader539 ]
  %369 = getelementptr inbounds double, ptr %21, i64 %.5232352.prol
  %370 = load double, ptr %369, align 8, !tbaa !9
  %371 = getelementptr inbounds double, ptr %22, i64 %.5232352.prol
  %372 = load double, ptr %371, align 8, !tbaa !9
  %373 = fdiv double %372, %370
  store double %373, ptr %371, align 8, !tbaa !9
  %374 = add nuw i64 %.5232352.prol, 1
  %prol.iter600.next = add i64 %prol.iter600, 1
  %prol.iter600.cmp.not = icmp eq i64 %prol.iter600.next, %xtraiter598
  br i1 %prol.iter600.cmp.not, label %.lr.ph354.prol.loopexit, label %.lr.ph354.prol, !llvm.loop !53

.lr.ph354.prol.loopexit:                          ; preds = %.lr.ph354.prol, %.lr.ph354.preheader539
  %.5232352.unr = phi i64 [ %.5232352.ph, %.lr.ph354.preheader539 ], [ %374, %.lr.ph354.prol ]
  %375 = icmp ult i64 %368, 3
  br i1 %375, label %.loopexit269, label %.lr.ph354

.lr.ph354:                                        ; preds = %.lr.ph354.prol.loopexit, %.lr.ph354
  %.5232352 = phi i64 [ %398, %.lr.ph354 ], [ %.5232352.unr, %.lr.ph354.prol.loopexit ]
  %376 = getelementptr inbounds double, ptr %21, i64 %.5232352
  %377 = load double, ptr %376, align 8, !tbaa !9
  %378 = getelementptr inbounds double, ptr %22, i64 %.5232352
  %379 = load double, ptr %378, align 8, !tbaa !9
  %380 = fdiv double %379, %377
  store double %380, ptr %378, align 8, !tbaa !9
  %381 = getelementptr double, ptr %8, i64 %.5232352
  %382 = load double, ptr %381, align 8, !tbaa !9
  %383 = getelementptr double, ptr %10, i64 %.5232352
  %384 = load double, ptr %383, align 8, !tbaa !9
  %385 = fdiv double %384, %382
  store double %385, ptr %383, align 8, !tbaa !9
  %386 = add nuw i64 %.5232352, 2
  %387 = getelementptr inbounds double, ptr %21, i64 %386
  %388 = load double, ptr %387, align 8, !tbaa !9
  %389 = getelementptr inbounds double, ptr %22, i64 %386
  %390 = load double, ptr %389, align 8, !tbaa !9
  %391 = fdiv double %390, %388
  store double %391, ptr %389, align 8, !tbaa !9
  %392 = add nuw i64 %.5232352, 3
  %393 = getelementptr inbounds double, ptr %21, i64 %392
  %394 = load double, ptr %393, align 8, !tbaa !9
  %395 = getelementptr inbounds double, ptr %22, i64 %392
  %396 = load double, ptr %395, align 8, !tbaa !9
  %397 = fdiv double %396, %394
  store double %397, ptr %395, align 8, !tbaa !9
  %398 = add nuw i64 %.5232352, 4
  %exitcond393.not.3 = icmp eq i64 %392, %360
  br i1 %exitcond393.not.3, label %.loopexit269, label %.lr.ph354, !llvm.loop !54

399:                                              ; preds = %357
  %400 = load i64, ptr %1, align 8, !tbaa !5
  %.not255347 = icmp slt i64 %400, 1
  br i1 %.not255347, label %.loopexit269, label %.lr.ph350.preheader

.lr.ph350.preheader:                              ; preds = %399
  %min.iters.check456 = icmp ult i64 %400, 4
  br i1 %min.iters.check456, label %.lr.ph350.preheader540, label %vector.memcheck448

vector.memcheck448:                               ; preds = %.lr.ph350.preheader
  %401 = shl i64 %400, 3
  %scevgep449 = getelementptr i8, ptr %10, i64 %401
  %scevgep450 = getelementptr i8, ptr %8, i64 %401
  %bound0451 = icmp ugt ptr %scevgep450, %10
  %bound1452 = icmp ugt ptr %scevgep449, %8
  %found.conflict453 = and i1 %bound0451, %bound1452
  br i1 %found.conflict453, label %.lr.ph350.preheader540, label %vector.ph457

vector.ph457:                                     ; preds = %vector.memcheck448
  %n.vec459 = and i64 %400, 9223372036854775804
  %ind.end460 = or disjoint i64 %n.vec459, 1
  br label %vector.body462

vector.body462:                                   ; preds = %vector.body462, %vector.ph457
  %index463 = phi i64 [ 0, %vector.ph457 ], [ %index.next469, %vector.body462 ]
  %402 = getelementptr double, ptr %8, i64 %index463
  %403 = getelementptr inbounds i8, ptr %402, i64 16
  %wide.load465 = load <2 x double>, ptr %402, align 8, !tbaa !9, !alias.scope !55
  %wide.load466 = load <2 x double>, ptr %403, align 8, !tbaa !9, !alias.scope !55
  %404 = getelementptr double, ptr %10, i64 %index463
  %405 = getelementptr inbounds i8, ptr %404, i64 16
  %wide.load467 = load <2 x double>, ptr %404, align 8, !tbaa !9, !alias.scope !58, !noalias !55
  %wide.load468 = load <2 x double>, ptr %405, align 8, !tbaa !9, !alias.scope !58, !noalias !55
  %406 = fmul <2 x double> %wide.load465, %wide.load467
  %407 = fmul <2 x double> %wide.load466, %wide.load468
  store <2 x double> %406, ptr %404, align 8, !tbaa !9, !alias.scope !58, !noalias !55
  store <2 x double> %407, ptr %405, align 8, !tbaa !9, !alias.scope !58, !noalias !55
  %index.next469 = add nuw i64 %index463, 4
  %408 = icmp eq i64 %index.next469, %n.vec459
  br i1 %408, label %middle.block454, label %vector.body462, !llvm.loop !60

middle.block454:                                  ; preds = %vector.body462
  %cmp.n470 = icmp eq i64 %400, %n.vec459
  br i1 %cmp.n470, label %.loopexit269, label %.lr.ph350.preheader540

.lr.ph350.preheader540:                           ; preds = %middle.block454, %vector.memcheck448, %.lr.ph350.preheader
  %.6233348.ph = phi i64 [ 1, %vector.memcheck448 ], [ 1, %.lr.ph350.preheader ], [ %ind.end460, %middle.block454 ]
  %409 = add nuw i64 %400, 1
  %410 = sub i64 %409, %.6233348.ph
  %411 = sub i64 %400, %.6233348.ph
  %xtraiter595 = and i64 %410, 3
  %lcmp.mod596.not = icmp eq i64 %xtraiter595, 0
  br i1 %lcmp.mod596.not, label %.lr.ph350.prol.loopexit, label %.lr.ph350.prol

.lr.ph350.prol:                                   ; preds = %.lr.ph350.preheader540, %.lr.ph350.prol
  %.6233348.prol = phi i64 [ %417, %.lr.ph350.prol ], [ %.6233348.ph, %.lr.ph350.preheader540 ]
  %prol.iter597 = phi i64 [ %prol.iter597.next, %.lr.ph350.prol ], [ 0, %.lr.ph350.preheader540 ]
  %412 = getelementptr inbounds double, ptr %21, i64 %.6233348.prol
  %413 = load double, ptr %412, align 8, !tbaa !9
  %414 = getelementptr inbounds double, ptr %22, i64 %.6233348.prol
  %415 = load double, ptr %414, align 8, !tbaa !9
  %416 = fmul double %413, %415
  store double %416, ptr %414, align 8, !tbaa !9
  %417 = add nuw i64 %.6233348.prol, 1
  %prol.iter597.next = add i64 %prol.iter597, 1
  %prol.iter597.cmp.not = icmp eq i64 %prol.iter597.next, %xtraiter595
  br i1 %prol.iter597.cmp.not, label %.lr.ph350.prol.loopexit, label %.lr.ph350.prol, !llvm.loop !61

.lr.ph350.prol.loopexit:                          ; preds = %.lr.ph350.prol, %.lr.ph350.preheader540
  %.6233348.unr = phi i64 [ %.6233348.ph, %.lr.ph350.preheader540 ], [ %417, %.lr.ph350.prol ]
  %418 = icmp ult i64 %411, 3
  br i1 %418, label %.loopexit269, label %.lr.ph350

.lr.ph350:                                        ; preds = %.lr.ph350.prol.loopexit, %.lr.ph350
  %.6233348 = phi i64 [ %441, %.lr.ph350 ], [ %.6233348.unr, %.lr.ph350.prol.loopexit ]
  %419 = getelementptr inbounds double, ptr %21, i64 %.6233348
  %420 = load double, ptr %419, align 8, !tbaa !9
  %421 = getelementptr inbounds double, ptr %22, i64 %.6233348
  %422 = load double, ptr %421, align 8, !tbaa !9
  %423 = fmul double %420, %422
  store double %423, ptr %421, align 8, !tbaa !9
  %424 = getelementptr double, ptr %8, i64 %.6233348
  %425 = load double, ptr %424, align 8, !tbaa !9
  %426 = getelementptr double, ptr %10, i64 %.6233348
  %427 = load double, ptr %426, align 8, !tbaa !9
  %428 = fmul double %425, %427
  store double %428, ptr %426, align 8, !tbaa !9
  %429 = add nuw i64 %.6233348, 2
  %430 = getelementptr inbounds double, ptr %21, i64 %429
  %431 = load double, ptr %430, align 8, !tbaa !9
  %432 = getelementptr inbounds double, ptr %22, i64 %429
  %433 = load double, ptr %432, align 8, !tbaa !9
  %434 = fmul double %431, %433
  store double %434, ptr %432, align 8, !tbaa !9
  %435 = add nuw i64 %.6233348, 3
  %436 = getelementptr inbounds double, ptr %21, i64 %435
  %437 = load double, ptr %436, align 8, !tbaa !9
  %438 = getelementptr inbounds double, ptr %22, i64 %435
  %439 = load double, ptr %438, align 8, !tbaa !9
  %440 = fmul double %437, %439
  store double %440, ptr %438, align 8, !tbaa !9
  %441 = add nuw i64 %.6233348, 4
  %exitcond392.not.3 = icmp eq i64 %435, %400
  br i1 %exitcond392.not.3, label %.loopexit269, label %.lr.ph350, !llvm.loop !62

.loopexit269:                                     ; preds = %.lr.ph350.prol.loopexit, %.lr.ph350, %.lr.ph354.prol.loopexit, %.lr.ph354, %middle.block454, %middle.block433, %399, %359, %357
  %442 = call i32 @dgetrs_(ptr noundef nonnull %.str.4..str.5, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %6, ptr noundef %10, ptr noundef nonnull %1, ptr noundef nonnull %9) #4
  %443 = load i64, ptr %1, align 8, !tbaa !5
  %.not257355 = icmp slt i64 %443, 1
  br i1 %.not257355, label %.loopexit.backedge, label %.lr.ph358

.lr.ph358:                                        ; preds = %.loopexit269
  %.idx258 = shl i64 %443, 4
  %444 = getelementptr i8, ptr %22, i64 %.idx258
  %min.iters.check = icmp ult i64 %443, 6
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph358
  %445 = shl i64 %443, 3
  %scevgep = getelementptr i8, ptr %10, i64 %445
  %scevgep422 = getelementptr i8, ptr %10, i64 %.idx258
  %446 = mul i64 %443, 24
  %scevgep423 = getelementptr i8, ptr %10, i64 %446
  %bound0 = icmp ugt ptr %scevgep423, %10
  %bound1 = icmp ult ptr %scevgep422, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %443, 9223372036854775804
  %ind.end = or disjoint i64 %n.vec, 1
  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
  %447 = getelementptr double, ptr %444, i64 %offset.idx
  %448 = getelementptr i8, ptr %447, i64 16
  %wide.load = load <2 x double>, ptr %447, align 8, !tbaa !9, !alias.scope !63
  %wide.load424 = load <2 x double>, ptr %448, align 8, !tbaa !9, !alias.scope !63
  %449 = getelementptr double, ptr %10, i64 %index
  %450 = getelementptr inbounds i8, ptr %449, i64 16
  %wide.load425 = load <2 x double>, ptr %449, align 8, !tbaa !9, !alias.scope !66, !noalias !63
  %wide.load426 = load <2 x double>, ptr %450, align 8, !tbaa !9, !alias.scope !66, !noalias !63
  %451 = fmul <2 x double> %wide.load, %wide.load425
  %452 = fmul <2 x double> %wide.load424, %wide.load426
  store <2 x double> %451, ptr %449, align 8, !tbaa !9, !alias.scope !66, !noalias !63
  store <2 x double> %452, ptr %450, align 8, !tbaa !9, !alias.scope !66, !noalias !63
  %index.next = add nuw i64 %index, 4
  %453 = icmp eq i64 %index.next, %n.vec
  br i1 %453, label %middle.block, label %vector.body, !llvm.loop !68

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

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph358
  %.7234356.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph358 ], [ %ind.end, %middle.block ]
  %454 = add nuw i64 %443, 1
  %455 = sub i64 %454, %.7234356.ph
  %456 = sub i64 %443, %.7234356.ph
  %xtraiter601 = and i64 %455, 3
  %lcmp.mod602.not = icmp eq i64 %xtraiter601, 0
  br i1 %lcmp.mod602.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %.7234356.prol = phi i64 [ %462, %scalar.ph.prol ], [ %.7234356.ph, %scalar.ph.preheader ]
  %prol.iter603 = phi i64 [ %prol.iter603.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %457 = getelementptr double, ptr %444, i64 %.7234356.prol
  %458 = load double, ptr %457, align 8, !tbaa !9
  %459 = getelementptr inbounds double, ptr %22, i64 %.7234356.prol
  %460 = load double, ptr %459, align 8, !tbaa !9
  %461 = fmul double %458, %460
  store double %461, ptr %459, align 8, !tbaa !9
  %462 = add nuw i64 %.7234356.prol, 1
  %prol.iter603.next = add i64 %prol.iter603, 1
  %prol.iter603.cmp.not = icmp eq i64 %prol.iter603.next, %xtraiter601
  br i1 %prol.iter603.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !69

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.7234356.unr = phi i64 [ %.7234356.ph, %scalar.ph.preheader ], [ %462, %scalar.ph.prol ]
  %463 = icmp ult i64 %456, 3
  br i1 %463, label %.loopexit.backedge, label %scalar.ph.preheader.new

scalar.ph.preheader.new:                          ; preds = %scalar.ph.prol.loopexit
  %invariant.gep628 = getelementptr i8, ptr %444, i64 8
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph, %scalar.ph.preheader.new
  %.7234356 = phi i64 [ %.7234356.unr, %scalar.ph.preheader.new ], [ %485, %scalar.ph ]
  %464 = getelementptr double, ptr %444, i64 %.7234356
  %465 = load double, ptr %464, align 8, !tbaa !9
  %466 = getelementptr inbounds double, ptr %22, i64 %.7234356
  %467 = load double, ptr %466, align 8, !tbaa !9
  %468 = fmul double %465, %467
  store double %468, ptr %466, align 8, !tbaa !9
  %gep629 = getelementptr double, ptr %invariant.gep628, i64 %.7234356
  %469 = load double, ptr %gep629, align 8, !tbaa !9
  %470 = getelementptr double, ptr %10, i64 %.7234356
  %471 = load double, ptr %470, align 8, !tbaa !9
  %472 = fmul double %469, %471
  store double %472, ptr %470, align 8, !tbaa !9
  %473 = add nuw i64 %.7234356, 2
  %474 = getelementptr double, ptr %444, i64 %473
  %475 = load double, ptr %474, align 8, !tbaa !9
  %476 = getelementptr inbounds double, ptr %22, i64 %473
  %477 = load double, ptr %476, align 8, !tbaa !9
  %478 = fmul double %475, %477
  store double %478, ptr %476, align 8, !tbaa !9
  %479 = add nuw i64 %.7234356, 3
  %480 = getelementptr double, ptr %444, i64 %479
  %481 = load double, ptr %480, align 8, !tbaa !9
  %482 = getelementptr inbounds double, ptr %22, i64 %479
  %483 = load double, ptr %482, align 8, !tbaa !9
  %484 = fmul double %481, %483
  store double %484, ptr %482, align 8, !tbaa !9
  %485 = add nuw i64 %.7234356, 4
  %exitcond394.not.3 = icmp eq i64 %479, %443
  br i1 %exitcond394.not.3, label %.loopexit.backedge, label %scalar.ph, !llvm.loop !70

486:                                              ; preds = %.loopexit
  %487 = load double, ptr %17, align 8, !tbaa !9
  %488 = fcmp une double %487, 0.000000e+00
  %489 = fdiv double 1.000000e+00, %487
  %.0235 = select i1 %488, double %489, double 0.000000e+00
  br label %490

490:                                              ; preds = %41, %486, %.thread
  %.0 = phi double [ 0.000000e+00, %.thread ], [ %.0235, %486 ], [ 1.000000e+00, %41 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #4
  ret double %.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

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

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }

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

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


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