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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [8 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @dgesvx_(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, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr noundef %17, ptr noundef %18, ptr noundef %19, ptr noundef %20, ptr noundef %21) #0 {
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca double, align 8
  %56 = alloca double, align 8
  %57 = alloca double, align 8
  %58 = alloca [1 x i8], align 1
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca double, align 8
  %62 = alloca double, align 8
  %63 = alloca double, align 8
  %64 = alloca i32, align 4
  %65 = alloca double, align 8
  %66 = alloca i32, align 4
  %67 = alloca double, align 8
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca double, align 8
  %71 = alloca i32, align 4
  %72 = alloca double, align 8
  %73 = alloca i32, align 4
  %74 = alloca double, align 8
  %75 = alloca i32, align 4
  store ptr %0, ptr %23, align 8, !tbaa !5
  store ptr %1, ptr %24, align 8, !tbaa !5
  store ptr %2, ptr %25, align 8, !tbaa !5
  store ptr %3, ptr %26, align 8, !tbaa !5
  store ptr %4, ptr %27, align 8, !tbaa !5
  store ptr %5, ptr %28, align 8, !tbaa !5
  store ptr %6, ptr %29, align 8, !tbaa !5
  store ptr %7, ptr %30, align 8, !tbaa !5
  store ptr %8, ptr %31, align 8, !tbaa !5
  store ptr %9, ptr %32, align 8, !tbaa !5
  store ptr %10, ptr %33, align 8, !tbaa !5
  store ptr %11, ptr %34, align 8, !tbaa !5
  store ptr %12, ptr %35, align 8, !tbaa !5
  store ptr %13, ptr %36, align 8, !tbaa !5
  store ptr %14, ptr %37, align 8, !tbaa !5
  store ptr %15, ptr %38, align 8, !tbaa !5
  store ptr %16, ptr %39, align 8, !tbaa !5
  store ptr %17, ptr %40, align 8, !tbaa !5
  store ptr %18, ptr %41, align 8, !tbaa !5
  store ptr %19, ptr %42, align 8, !tbaa !5
  store ptr %20, ptr %43, align 8, !tbaa !5
  store ptr %21, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %58) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #3
  %76 = load ptr, ptr %28, align 8, !tbaa !5
  %77 = load i32, ptr %76, align 4, !tbaa !9
  store i32 %77, ptr %45, align 4, !tbaa !9
  %78 = load i32, ptr %45, align 4, !tbaa !9
  %79 = mul nsw i32 %78, 1
  %80 = add nsw i32 1, %79
  store i32 %80, ptr %46, align 4, !tbaa !9
  %81 = load i32, ptr %46, align 4, !tbaa !9
  %82 = load ptr, ptr %27, align 8, !tbaa !5
  %83 = sext i32 %81 to i64
  %84 = sub i64 0, %83
  %85 = getelementptr inbounds double, ptr %82, i64 %84
  store ptr %85, ptr %27, align 8, !tbaa !5
  %86 = load ptr, ptr %30, align 8, !tbaa !5
  %87 = load i32, ptr %86, align 4, !tbaa !9
  store i32 %87, ptr %47, align 4, !tbaa !9
  %88 = load i32, ptr %47, align 4, !tbaa !9
  %89 = mul nsw i32 %88, 1
  %90 = add nsw i32 1, %89
  store i32 %90, ptr %48, align 4, !tbaa !9
  %91 = load i32, ptr %48, align 4, !tbaa !9
  %92 = load ptr, ptr %29, align 8, !tbaa !5
  %93 = sext i32 %91 to i64
  %94 = sub i64 0, %93
  %95 = getelementptr inbounds double, ptr %92, i64 %94
  store ptr %95, ptr %29, align 8, !tbaa !5
  %96 = load ptr, ptr %31, align 8, !tbaa !5
  %97 = getelementptr inbounds i32, ptr %96, i32 -1
  store ptr %97, ptr %31, align 8, !tbaa !5
  %98 = load ptr, ptr %33, align 8, !tbaa !5
  %99 = getelementptr inbounds double, ptr %98, i32 -1
  store ptr %99, ptr %33, align 8, !tbaa !5
  %100 = load ptr, ptr %34, align 8, !tbaa !5
  %101 = getelementptr inbounds double, ptr %100, i32 -1
  store ptr %101, ptr %34, align 8, !tbaa !5
  %102 = load ptr, ptr %36, align 8, !tbaa !5
  %103 = load i32, ptr %102, align 4, !tbaa !9
  store i32 %103, ptr %49, align 4, !tbaa !9
  %104 = load i32, ptr %49, align 4, !tbaa !9
  %105 = mul nsw i32 %104, 1
  %106 = add nsw i32 1, %105
  store i32 %106, ptr %50, align 4, !tbaa !9
  %107 = load i32, ptr %50, align 4, !tbaa !9
  %108 = load ptr, ptr %35, align 8, !tbaa !5
  %109 = sext i32 %107 to i64
  %110 = sub i64 0, %109
  %111 = getelementptr inbounds double, ptr %108, i64 %110
  store ptr %111, ptr %35, align 8, !tbaa !5
  %112 = load ptr, ptr %38, align 8, !tbaa !5
  %113 = load i32, ptr %112, align 4, !tbaa !9
  store i32 %113, ptr %51, align 4, !tbaa !9
  %114 = load i32, ptr %51, align 4, !tbaa !9
  %115 = mul nsw i32 %114, 1
  %116 = add nsw i32 1, %115
  store i32 %116, ptr %52, align 4, !tbaa !9
  %117 = load i32, ptr %52, align 4, !tbaa !9
  %118 = load ptr, ptr %37, align 8, !tbaa !5
  %119 = sext i32 %117 to i64
  %120 = sub i64 0, %119
  %121 = getelementptr inbounds double, ptr %118, i64 %120
  store ptr %121, ptr %37, align 8, !tbaa !5
  %122 = load ptr, ptr %40, align 8, !tbaa !5
  %123 = getelementptr inbounds double, ptr %122, i32 -1
  store ptr %123, ptr %40, align 8, !tbaa !5
  %124 = load ptr, ptr %41, align 8, !tbaa !5
  %125 = getelementptr inbounds double, ptr %124, i32 -1
  store ptr %125, ptr %41, align 8, !tbaa !5
  %126 = load ptr, ptr %42, align 8, !tbaa !5
  %127 = getelementptr inbounds double, ptr %126, i32 -1
  store ptr %127, ptr %42, align 8, !tbaa !5
  %128 = load ptr, ptr %43, align 8, !tbaa !5
  %129 = getelementptr inbounds i32, ptr %128, i32 -1
  store ptr %129, ptr %43, align 8, !tbaa !5
  %130 = load ptr, ptr %44, align 8, !tbaa !5
  store i32 0, ptr %130, align 4, !tbaa !9
  %131 = load ptr, ptr %23, align 8, !tbaa !5
  %132 = call i32 @lsame_(ptr noundef %131, ptr noundef @.str)
  store i32 %132, ptr %66, align 4, !tbaa !9
  %133 = load ptr, ptr %23, align 8, !tbaa !5
  %134 = call i32 @lsame_(ptr noundef %133, ptr noundef @.str.1)
  store i32 %134, ptr %64, align 4, !tbaa !9
  %135 = load ptr, ptr %24, align 8, !tbaa !5
  %136 = call i32 @lsame_(ptr noundef %135, ptr noundef @.str)
  store i32 %136, ptr %71, align 4, !tbaa !9
  %137 = load i32, ptr %66, align 4, !tbaa !9
  %138 = icmp ne i32 %137, 0
  br i1 %138, label %142, label %139

139:                                              ; preds = %22
  %140 = load i32, ptr %64, align 4, !tbaa !9
  %141 = icmp ne i32 %140, 0
  br i1 %141, label %142, label %144

142:                                              ; preds = %139, %22
  %143 = load ptr, ptr %32, align 8, !tbaa !5
  store i8 78, ptr %143, align 1, !tbaa !11
  store i32 0, ptr %73, align 4, !tbaa !9
  store i32 0, ptr %69, align 4, !tbaa !9
  br label %168

144:                                              ; preds = %139
  %145 = load ptr, ptr %32, align 8, !tbaa !5
  %146 = call i32 @lsame_(ptr noundef %145, ptr noundef @.str.2)
  %147 = icmp ne i32 %146, 0
  br i1 %147, label %152, label %148

148:                                              ; preds = %144
  %149 = load ptr, ptr %32, align 8, !tbaa !5
  %150 = call i32 @lsame_(ptr noundef %149, ptr noundef @.str.3)
  %151 = icmp ne i32 %150, 0
  br label %152

152:                                              ; preds = %148, %144
  %153 = phi i1 [ true, %144 ], [ %151, %148 ]
  %154 = zext i1 %153 to i32
  store i32 %154, ptr %73, align 4, !tbaa !9
  %155 = load ptr, ptr %32, align 8, !tbaa !5
  %156 = call i32 @lsame_(ptr noundef %155, ptr noundef @.str.4)
  %157 = icmp ne i32 %156, 0
  br i1 %157, label %162, label %158

158:                                              ; preds = %152
  %159 = load ptr, ptr %32, align 8, !tbaa !5
  %160 = call i32 @lsame_(ptr noundef %159, ptr noundef @.str.3)
  %161 = icmp ne i32 %160, 0
  br label %162

162:                                              ; preds = %158, %152
  %163 = phi i1 [ true, %152 ], [ %161, %158 ]
  %164 = zext i1 %163 to i32
  store i32 %164, ptr %69, align 4, !tbaa !9
  %165 = call double @dlamch_(ptr noundef @.str.5)
  store double %165, ptr %72, align 8, !tbaa !12
  %166 = load double, ptr %72, align 8, !tbaa !12
  %167 = fdiv double 1.000000e+00, %166
  store double %167, ptr %67, align 8, !tbaa !12
  br label %168

168:                                              ; preds = %162, %142
  %169 = load i32, ptr %66, align 4, !tbaa !9
  %170 = icmp ne i32 %169, 0
  br i1 %170, label %180, label %171

171:                                              ; preds = %168
  %172 = load i32, ptr %64, align 4, !tbaa !9
  %173 = icmp ne i32 %172, 0
  br i1 %173, label %180, label %174

174:                                              ; preds = %171
  %175 = load ptr, ptr %23, align 8, !tbaa !5
  %176 = call i32 @lsame_(ptr noundef %175, ptr noundef @.str.6)
  %177 = icmp ne i32 %176, 0
  br i1 %177, label %180, label %178

178:                                              ; preds = %174
  %179 = load ptr, ptr %44, align 8, !tbaa !5
  store i32 -1, ptr %179, align 4, !tbaa !9
  br label %452

180:                                              ; preds = %174, %171, %168
  %181 = load i32, ptr %71, align 4, !tbaa !9
  %182 = icmp ne i32 %181, 0
  br i1 %182, label %193, label %183

183:                                              ; preds = %180
  %184 = load ptr, ptr %24, align 8, !tbaa !5
  %185 = call i32 @lsame_(ptr noundef %184, ptr noundef @.str.7)
  %186 = icmp ne i32 %185, 0
  br i1 %186, label %193, label %187

187:                                              ; preds = %183
  %188 = load ptr, ptr %24, align 8, !tbaa !5
  %189 = call i32 @lsame_(ptr noundef %188, ptr noundef @.str.4)
  %190 = icmp ne i32 %189, 0
  br i1 %190, label %193, label %191

191:                                              ; preds = %187
  %192 = load ptr, ptr %44, align 8, !tbaa !5
  store i32 -2, ptr %192, align 4, !tbaa !9
  br label %451

193:                                              ; preds = %187, %183, %180
  %194 = load ptr, ptr %25, align 8, !tbaa !5
  %195 = load i32, ptr %194, align 4, !tbaa !9
  %196 = icmp slt i32 %195, 0
  br i1 %196, label %197, label %199

197:                                              ; preds = %193
  %198 = load ptr, ptr %44, align 8, !tbaa !5
  store i32 -3, ptr %198, align 4, !tbaa !9
  br label %450

199:                                              ; preds = %193
  %200 = load ptr, ptr %26, align 8, !tbaa !5
  %201 = load i32, ptr %200, align 4, !tbaa !9
  %202 = icmp slt i32 %201, 0
  br i1 %202, label %203, label %205

203:                                              ; preds = %199
  %204 = load ptr, ptr %44, align 8, !tbaa !5
  store i32 -4, ptr %204, align 4, !tbaa !9
  br label %449

205:                                              ; preds = %199
  %206 = load ptr, ptr %28, align 8, !tbaa !5
  %207 = load i32, ptr %206, align 4, !tbaa !9
  %208 = load ptr, ptr %25, align 8, !tbaa !5
  %209 = load i32, ptr %208, align 4, !tbaa !9
  %210 = icmp sge i32 1, %209
  br i1 %210, label %211, label %212

211:                                              ; preds = %205
  br label %215

212:                                              ; preds = %205
  %213 = load ptr, ptr %25, align 8, !tbaa !5
  %214 = load i32, ptr %213, align 4, !tbaa !9
  br label %215

215:                                              ; preds = %212, %211
  %216 = phi i32 [ 1, %211 ], [ %214, %212 ]
  %217 = icmp slt i32 %207, %216
  br i1 %217, label %218, label %220

218:                                              ; preds = %215
  %219 = load ptr, ptr %44, align 8, !tbaa !5
  store i32 -6, ptr %219, align 4, !tbaa !9
  br label %448

220:                                              ; preds = %215
  %221 = load ptr, ptr %30, align 8, !tbaa !5
  %222 = load i32, ptr %221, align 4, !tbaa !9
  %223 = load ptr, ptr %25, align 8, !tbaa !5
  %224 = load i32, ptr %223, align 4, !tbaa !9
  %225 = icmp sge i32 1, %224
  br i1 %225, label %226, label %227

226:                                              ; preds = %220
  br label %230

227:                                              ; preds = %220
  %228 = load ptr, ptr %25, align 8, !tbaa !5
  %229 = load i32, ptr %228, align 4, !tbaa !9
  br label %230

230:                                              ; preds = %227, %226
  %231 = phi i32 [ 1, %226 ], [ %229, %227 ]
  %232 = icmp slt i32 %222, %231
  br i1 %232, label %233, label %235

233:                                              ; preds = %230
  %234 = load ptr, ptr %44, align 8, !tbaa !5
  store i32 -8, ptr %234, align 4, !tbaa !9
  br label %447

235:                                              ; preds = %230
  %236 = load ptr, ptr %23, align 8, !tbaa !5
  %237 = call i32 @lsame_(ptr noundef %236, ptr noundef @.str.6)
  %238 = icmp ne i32 %237, 0
  br i1 %238, label %239, label %251

239:                                              ; preds = %235
  %240 = load i32, ptr %73, align 4, !tbaa !9
  %241 = icmp ne i32 %240, 0
  br i1 %241, label %251, label %242

242:                                              ; preds = %239
  %243 = load i32, ptr %69, align 4, !tbaa !9
  %244 = icmp ne i32 %243, 0
  br i1 %244, label %251, label %245

245:                                              ; preds = %242
  %246 = load ptr, ptr %32, align 8, !tbaa !5
  %247 = call i32 @lsame_(ptr noundef %246, ptr noundef @.str)
  %248 = icmp ne i32 %247, 0
  br i1 %248, label %251, label %249

249:                                              ; preds = %245
  %250 = load ptr, ptr %44, align 8, !tbaa !5
  store i32 -10, ptr %250, align 4, !tbaa !9
  br label %446

251:                                              ; preds = %245, %242, %239, %235
  %252 = load i32, ptr %73, align 4, !tbaa !9
  %253 = icmp ne i32 %252, 0
  br i1 %253, label %254, label %328

254:                                              ; preds = %251
  %255 = load double, ptr %67, align 8, !tbaa !12
  store double %255, ptr %61, align 8, !tbaa !12
  store double 0.000000e+00, ptr %62, align 8, !tbaa !12
  %256 = load ptr, ptr %25, align 8, !tbaa !5
  %257 = load i32, ptr %256, align 4, !tbaa !9
  store i32 %257, ptr %53, align 4, !tbaa !9
  store i32 1, ptr %60, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %293, %254
  %259 = load i32, ptr %60, align 4, !tbaa !9
  %260 = load i32, ptr %53, align 4, !tbaa !9
  %261 = icmp sle i32 %259, %260
  br i1 %261, label %262, label %296

262:                                              ; preds = %258
  %263 = load double, ptr %61, align 8, !tbaa !12
  store double %263, ptr %55, align 8, !tbaa !12
  %264 = load ptr, ptr %33, align 8, !tbaa !5
  %265 = load i32, ptr %60, align 4, !tbaa !9
  %266 = sext i32 %265 to i64
  %267 = getelementptr inbounds double, ptr %264, i64 %266
  %268 = load double, ptr %267, align 8, !tbaa !12
  store double %268, ptr %56, align 8, !tbaa !12
  %269 = load double, ptr %55, align 8, !tbaa !12
  %270 = load double, ptr %56, align 8, !tbaa !12
  %271 = fcmp ole double %269, %270
  br i1 %271, label %272, label %274

272:                                              ; preds = %262
  %273 = load double, ptr %55, align 8, !tbaa !12
  br label %276

274:                                              ; preds = %262
  %275 = load double, ptr %56, align 8, !tbaa !12
  br label %276

276:                                              ; preds = %274, %272
  %277 = phi double [ %273, %272 ], [ %275, %274 ]
  store double %277, ptr %61, align 8, !tbaa !12
  %278 = load double, ptr %62, align 8, !tbaa !12
  store double %278, ptr %55, align 8, !tbaa !12
  %279 = load ptr, ptr %33, align 8, !tbaa !5
  %280 = load i32, ptr %60, align 4, !tbaa !9
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds double, ptr %279, i64 %281
  %283 = load double, ptr %282, align 8, !tbaa !12
  store double %283, ptr %56, align 8, !tbaa !12
  %284 = load double, ptr %55, align 8, !tbaa !12
  %285 = load double, ptr %56, align 8, !tbaa !12
  %286 = fcmp oge double %284, %285
  br i1 %286, label %287, label %289

287:                                              ; preds = %276
  %288 = load double, ptr %55, align 8, !tbaa !12
  br label %291

289:                                              ; preds = %276
  %290 = load double, ptr %56, align 8, !tbaa !12
  br label %291

291:                                              ; preds = %289, %287
  %292 = phi double [ %288, %287 ], [ %290, %289 ]
  store double %292, ptr %62, align 8, !tbaa !12
  br label %293

293:                                              ; preds = %291
  %294 = load i32, ptr %60, align 4, !tbaa !9
  %295 = add nsw i32 %294, 1
  store i32 %295, ptr %60, align 4, !tbaa !9
  br label %258, !llvm.loop !14

296:                                              ; preds = %258
  %297 = load double, ptr %61, align 8, !tbaa !12
  %298 = fcmp ole double %297, 0.000000e+00
  br i1 %298, label %299, label %301

299:                                              ; preds = %296
  %300 = load ptr, ptr %44, align 8, !tbaa !5
  store i32 -11, ptr %300, align 4, !tbaa !9
  br label %327

301:                                              ; preds = %296
  %302 = load ptr, ptr %25, align 8, !tbaa !5
  %303 = load i32, ptr %302, align 4, !tbaa !9
  %304 = icmp sgt i32 %303, 0
  br i1 %304, label %305, label %325

305:                                              ; preds = %301
  %306 = load double, ptr %61, align 8, !tbaa !12
  %307 = load double, ptr %72, align 8, !tbaa !12
  %308 = fcmp oge double %306, %307
  br i1 %308, label %309, label %311

309:                                              ; preds = %305
  %310 = load double, ptr %61, align 8, !tbaa !12
  br label %313

311:                                              ; preds = %305
  %312 = load double, ptr %72, align 8, !tbaa !12
  br label %313

313:                                              ; preds = %311, %309
  %314 = phi double [ %310, %309 ], [ %312, %311 ]
  %315 = load double, ptr %62, align 8, !tbaa !12
  %316 = load double, ptr %67, align 8, !tbaa !12
  %317 = fcmp ole double %315, %316
  br i1 %317, label %318, label %320

318:                                              ; preds = %313
  %319 = load double, ptr %62, align 8, !tbaa !12
  br label %322

320:                                              ; preds = %313
  %321 = load double, ptr %67, align 8, !tbaa !12
  br label %322

322:                                              ; preds = %320, %318
  %323 = phi double [ %319, %318 ], [ %321, %320 ]
  %324 = fdiv double %314, %323
  store double %324, ptr %70, align 8, !tbaa !12
  br label %326

325:                                              ; preds = %301
  store double 1.000000e+00, ptr %70, align 8, !tbaa !12
  br label %326

326:                                              ; preds = %325, %322
  br label %327

327:                                              ; preds = %326, %299
  br label %328

328:                                              ; preds = %327, %251
  %329 = load i32, ptr %69, align 4, !tbaa !9
  %330 = icmp ne i32 %329, 0
  br i1 %330, label %331, label %409

331:                                              ; preds = %328
  %332 = load ptr, ptr %44, align 8, !tbaa !5
  %333 = load i32, ptr %332, align 4, !tbaa !9
  %334 = icmp eq i32 %333, 0
  br i1 %334, label %335, label %409

335:                                              ; preds = %331
  %336 = load double, ptr %67, align 8, !tbaa !12
  store double %336, ptr %61, align 8, !tbaa !12
  store double 0.000000e+00, ptr %62, align 8, !tbaa !12
  %337 = load ptr, ptr %25, align 8, !tbaa !5
  %338 = load i32, ptr %337, align 4, !tbaa !9
  store i32 %338, ptr %53, align 4, !tbaa !9
  store i32 1, ptr %60, align 4, !tbaa !9
  br label %339

339:                                              ; preds = %374, %335
  %340 = load i32, ptr %60, align 4, !tbaa !9
  %341 = load i32, ptr %53, align 4, !tbaa !9
  %342 = icmp sle i32 %340, %341
  br i1 %342, label %343, label %377

343:                                              ; preds = %339
  %344 = load double, ptr %61, align 8, !tbaa !12
  store double %344, ptr %55, align 8, !tbaa !12
  %345 = load ptr, ptr %34, align 8, !tbaa !5
  %346 = load i32, ptr %60, align 4, !tbaa !9
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds double, ptr %345, i64 %347
  %349 = load double, ptr %348, align 8, !tbaa !12
  store double %349, ptr %56, align 8, !tbaa !12
  %350 = load double, ptr %55, align 8, !tbaa !12
  %351 = load double, ptr %56, align 8, !tbaa !12
  %352 = fcmp ole double %350, %351
  br i1 %352, label %353, label %355

353:                                              ; preds = %343
  %354 = load double, ptr %55, align 8, !tbaa !12
  br label %357

355:                                              ; preds = %343
  %356 = load double, ptr %56, align 8, !tbaa !12
  br label %357

357:                                              ; preds = %355, %353
  %358 = phi double [ %354, %353 ], [ %356, %355 ]
  store double %358, ptr %61, align 8, !tbaa !12
  %359 = load double, ptr %62, align 8, !tbaa !12
  store double %359, ptr %55, align 8, !tbaa !12
  %360 = load ptr, ptr %34, align 8, !tbaa !5
  %361 = load i32, ptr %60, align 4, !tbaa !9
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds double, ptr %360, i64 %362
  %364 = load double, ptr %363, align 8, !tbaa !12
  store double %364, ptr %56, align 8, !tbaa !12
  %365 = load double, ptr %55, align 8, !tbaa !12
  %366 = load double, ptr %56, align 8, !tbaa !12
  %367 = fcmp oge double %365, %366
  br i1 %367, label %368, label %370

368:                                              ; preds = %357
  %369 = load double, ptr %55, align 8, !tbaa !12
  br label %372

370:                                              ; preds = %357
  %371 = load double, ptr %56, align 8, !tbaa !12
  br label %372

372:                                              ; preds = %370, %368
  %373 = phi double [ %369, %368 ], [ %371, %370 ]
  store double %373, ptr %62, align 8, !tbaa !12
  br label %374

374:                                              ; preds = %372
  %375 = load i32, ptr %60, align 4, !tbaa !9
  %376 = add nsw i32 %375, 1
  store i32 %376, ptr %60, align 4, !tbaa !9
  br label %339, !llvm.loop !16

377:                                              ; preds = %339
  %378 = load double, ptr %61, align 8, !tbaa !12
  %379 = fcmp ole double %378, 0.000000e+00
  br i1 %379, label %380, label %382

380:                                              ; preds = %377
  %381 = load ptr, ptr %44, align 8, !tbaa !5
  store i32 -12, ptr %381, align 4, !tbaa !9
  br label %408

382:                                              ; preds = %377
  %383 = load ptr, ptr %25, align 8, !tbaa !5
  %384 = load i32, ptr %383, align 4, !tbaa !9
  %385 = icmp sgt i32 %384, 0
  br i1 %385, label %386, label %406

386:                                              ; preds = %382
  %387 = load double, ptr %61, align 8, !tbaa !12
  %388 = load double, ptr %72, align 8, !tbaa !12
  %389 = fcmp oge double %387, %388
  br i1 %389, label %390, label %392

390:                                              ; preds = %386
  %391 = load double, ptr %61, align 8, !tbaa !12
  br label %394

392:                                              ; preds = %386
  %393 = load double, ptr %72, align 8, !tbaa !12
  br label %394

394:                                              ; preds = %392, %390
  %395 = phi double [ %391, %390 ], [ %393, %392 ]
  %396 = load double, ptr %62, align 8, !tbaa !12
  %397 = load double, ptr %67, align 8, !tbaa !12
  %398 = fcmp ole double %396, %397
  br i1 %398, label %399, label %401

399:                                              ; preds = %394
  %400 = load double, ptr %62, align 8, !tbaa !12
  br label %403

401:                                              ; preds = %394
  %402 = load double, ptr %67, align 8, !tbaa !12
  br label %403

403:                                              ; preds = %401, %399
  %404 = phi double [ %400, %399 ], [ %402, %401 ]
  %405 = fdiv double %395, %404
  store double %405, ptr %65, align 8, !tbaa !12
  br label %407

406:                                              ; preds = %382
  store double 1.000000e+00, ptr %65, align 8, !tbaa !12
  br label %407

407:                                              ; preds = %406, %403
  br label %408

408:                                              ; preds = %407, %380
  br label %409

409:                                              ; preds = %408, %331, %328
  %410 = load ptr, ptr %44, align 8, !tbaa !5
  %411 = load i32, ptr %410, align 4, !tbaa !9
  %412 = icmp eq i32 %411, 0
  br i1 %412, label %413, label %445

413:                                              ; preds = %409
  %414 = load ptr, ptr %36, align 8, !tbaa !5
  %415 = load i32, ptr %414, align 4, !tbaa !9
  %416 = load ptr, ptr %25, align 8, !tbaa !5
  %417 = load i32, ptr %416, align 4, !tbaa !9
  %418 = icmp sge i32 1, %417
  br i1 %418, label %419, label %420

419:                                              ; preds = %413
  br label %423

420:                                              ; preds = %413
  %421 = load ptr, ptr %25, align 8, !tbaa !5
  %422 = load i32, ptr %421, align 4, !tbaa !9
  br label %423

423:                                              ; preds = %420, %419
  %424 = phi i32 [ 1, %419 ], [ %422, %420 ]
  %425 = icmp slt i32 %415, %424
  br i1 %425, label %426, label %428

426:                                              ; preds = %423
  %427 = load ptr, ptr %44, align 8, !tbaa !5
  store i32 -14, ptr %427, align 4, !tbaa !9
  br label %444

428:                                              ; preds = %423
  %429 = load ptr, ptr %38, align 8, !tbaa !5
  %430 = load i32, ptr %429, align 4, !tbaa !9
  %431 = load ptr, ptr %25, align 8, !tbaa !5
  %432 = load i32, ptr %431, align 4, !tbaa !9
  %433 = icmp sge i32 1, %432
  br i1 %433, label %434, label %435

434:                                              ; preds = %428
  br label %438

435:                                              ; preds = %428
  %436 = load ptr, ptr %25, align 8, !tbaa !5
  %437 = load i32, ptr %436, align 4, !tbaa !9
  br label %438

438:                                              ; preds = %435, %434
  %439 = phi i32 [ 1, %434 ], [ %437, %435 ]
  %440 = icmp slt i32 %430, %439
  br i1 %440, label %441, label %443

441:                                              ; preds = %438
  %442 = load ptr, ptr %44, align 8, !tbaa !5
  store i32 -16, ptr %442, align 4, !tbaa !9
  br label %443

443:                                              ; preds = %441, %438
  br label %444

444:                                              ; preds = %443, %426
  br label %445

445:                                              ; preds = %444, %409
  br label %446

446:                                              ; preds = %445, %249
  br label %447

447:                                              ; preds = %446, %233
  br label %448

448:                                              ; preds = %447, %218
  br label %449

449:                                              ; preds = %448, %203
  br label %450

450:                                              ; preds = %449, %197
  br label %451

451:                                              ; preds = %450, %191
  br label %452

452:                                              ; preds = %451, %178
  %453 = load ptr, ptr %44, align 8, !tbaa !5
  %454 = load i32, ptr %453, align 4, !tbaa !9
  %455 = icmp ne i32 %454, 0
  br i1 %455, label %456, label %461

456:                                              ; preds = %452
  %457 = load ptr, ptr %44, align 8, !tbaa !5
  %458 = load i32, ptr %457, align 4, !tbaa !9
  %459 = sub nsw i32 0, %458
  store i32 %459, ptr %53, align 4, !tbaa !9
  %460 = call i32 @xerbla_(ptr noundef @.str.8, ptr noundef %53, i32 noundef 6)
  store i32 1, ptr %75, align 4
  br label %955

461:                                              ; preds = %452
  %462 = load i32, ptr %64, align 4, !tbaa !9
  %463 = icmp ne i32 %462, 0
  br i1 %463, label %464, label %512

464:                                              ; preds = %461
  %465 = load ptr, ptr %25, align 8, !tbaa !5
  %466 = load ptr, ptr %25, align 8, !tbaa !5
  %467 = load ptr, ptr %27, align 8, !tbaa !5
  %468 = load i32, ptr %46, align 4, !tbaa !9
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds double, ptr %467, i64 %469
  %471 = load ptr, ptr %28, align 8, !tbaa !5
  %472 = load ptr, ptr %33, align 8, !tbaa !5
  %473 = getelementptr inbounds double, ptr %472, i64 1
  %474 = load ptr, ptr %34, align 8, !tbaa !5
  %475 = getelementptr inbounds double, ptr %474, i64 1
  call void @dgeequ_(ptr noundef %465, ptr noundef %466, ptr noundef %470, ptr noundef %471, ptr noundef %473, ptr noundef %475, ptr noundef %70, ptr noundef %65, ptr noundef %57, ptr noundef %68)
  %476 = load i32, ptr %68, align 4, !tbaa !9
  %477 = icmp eq i32 %476, 0
  br i1 %477, label %478, label %511

478:                                              ; preds = %464
  %479 = load ptr, ptr %25, align 8, !tbaa !5
  %480 = load ptr, ptr %25, align 8, !tbaa !5
  %481 = load ptr, ptr %27, align 8, !tbaa !5
  %482 = load i32, ptr %46, align 4, !tbaa !9
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds double, ptr %481, i64 %483
  %485 = load ptr, ptr %28, align 8, !tbaa !5
  %486 = load ptr, ptr %33, align 8, !tbaa !5
  %487 = getelementptr inbounds double, ptr %486, i64 1
  %488 = load ptr, ptr %34, align 8, !tbaa !5
  %489 = getelementptr inbounds double, ptr %488, i64 1
  %490 = load ptr, ptr %32, align 8, !tbaa !5
  call void @dlaqge_(ptr noundef %479, ptr noundef %480, ptr noundef %484, ptr noundef %485, ptr noundef %487, ptr noundef %489, ptr noundef %70, ptr noundef %65, ptr noundef %57, ptr noundef %490)
  %491 = load ptr, ptr %32, align 8, !tbaa !5
  %492 = call i32 @lsame_(ptr noundef %491, ptr noundef @.str.2)
  %493 = icmp ne i32 %492, 0
  br i1 %493, label %498, label %494

494:                                              ; preds = %478
  %495 = load ptr, ptr %32, align 8, !tbaa !5
  %496 = call i32 @lsame_(ptr noundef %495, ptr noundef @.str.3)
  %497 = icmp ne i32 %496, 0
  br label %498

498:                                              ; preds = %494, %478
  %499 = phi i1 [ true, %478 ], [ %497, %494 ]
  %500 = zext i1 %499 to i32
  store i32 %500, ptr %73, align 4, !tbaa !9
  %501 = load ptr, ptr %32, align 8, !tbaa !5
  %502 = call i32 @lsame_(ptr noundef %501, ptr noundef @.str.4)
  %503 = icmp ne i32 %502, 0
  br i1 %503, label %508, label %504

504:                                              ; preds = %498
  %505 = load ptr, ptr %32, align 8, !tbaa !5
  %506 = call i32 @lsame_(ptr noundef %505, ptr noundef @.str.3)
  %507 = icmp ne i32 %506, 0
  br label %508

508:                                              ; preds = %504, %498
  %509 = phi i1 [ true, %498 ], [ %507, %504 ]
  %510 = zext i1 %509 to i32
  store i32 %510, ptr %69, align 4, !tbaa !9
  br label %511

511:                                              ; preds = %508, %464
  br label %512

512:                                              ; preds = %511, %461
  %513 = load i32, ptr %71, align 4, !tbaa !9
  %514 = icmp ne i32 %513, 0
  br i1 %514, label %515, label %565

515:                                              ; preds = %512
  %516 = load i32, ptr %73, align 4, !tbaa !9
  %517 = icmp ne i32 %516, 0
  br i1 %517, label %518, label %564

518:                                              ; preds = %515
  %519 = load ptr, ptr %26, align 8, !tbaa !5
  %520 = load i32, ptr %519, align 4, !tbaa !9
  store i32 %520, ptr %53, align 4, !tbaa !9
  store i32 1, ptr %60, align 4, !tbaa !9
  br label %521

521:                                              ; preds = %560, %518
  %522 = load i32, ptr %60, align 4, !tbaa !9
  %523 = load i32, ptr %53, align 4, !tbaa !9
  %524 = icmp sle i32 %522, %523
  br i1 %524, label %525, label %563

525:                                              ; preds = %521
  %526 = load ptr, ptr %25, align 8, !tbaa !5
  %527 = load i32, ptr %526, align 4, !tbaa !9
  store i32 %527, ptr %54, align 4, !tbaa !9
  store i32 1, ptr %59, align 4, !tbaa !9
  br label %528

528:                                              ; preds = %556, %525
  %529 = load i32, ptr %59, align 4, !tbaa !9
  %530 = load i32, ptr %54, align 4, !tbaa !9
  %531 = icmp sle i32 %529, %530
  br i1 %531, label %532, label %559

532:                                              ; preds = %528
  %533 = load ptr, ptr %33, align 8, !tbaa !5
  %534 = load i32, ptr %59, align 4, !tbaa !9
  %535 = sext i32 %534 to i64
  %536 = getelementptr inbounds double, ptr %533, i64 %535
  %537 = load double, ptr %536, align 8, !tbaa !12
  %538 = load ptr, ptr %35, align 8, !tbaa !5
  %539 = load i32, ptr %59, align 4, !tbaa !9
  %540 = load i32, ptr %60, align 4, !tbaa !9
  %541 = load i32, ptr %49, align 4, !tbaa !9
  %542 = mul nsw i32 %540, %541
  %543 = add nsw i32 %539, %542
  %544 = sext i32 %543 to i64
  %545 = getelementptr inbounds double, ptr %538, i64 %544
  %546 = load double, ptr %545, align 8, !tbaa !12
  %547 = fmul double %537, %546
  %548 = load ptr, ptr %35, align 8, !tbaa !5
  %549 = load i32, ptr %59, align 4, !tbaa !9
  %550 = load i32, ptr %60, align 4, !tbaa !9
  %551 = load i32, ptr %49, align 4, !tbaa !9
  %552 = mul nsw i32 %550, %551
  %553 = add nsw i32 %549, %552
  %554 = sext i32 %553 to i64
  %555 = getelementptr inbounds double, ptr %548, i64 %554
  store double %547, ptr %555, align 8, !tbaa !12
  br label %556

556:                                              ; preds = %532
  %557 = load i32, ptr %59, align 4, !tbaa !9
  %558 = add nsw i32 %557, 1
  store i32 %558, ptr %59, align 4, !tbaa !9
  br label %528, !llvm.loop !17

559:                                              ; preds = %528
  br label %560

560:                                              ; preds = %559
  %561 = load i32, ptr %60, align 4, !tbaa !9
  %562 = add nsw i32 %561, 1
  store i32 %562, ptr %60, align 4, !tbaa !9
  br label %521, !llvm.loop !18

563:                                              ; preds = %521
  br label %564

564:                                              ; preds = %563, %515
  br label %615

565:                                              ; preds = %512
  %566 = load i32, ptr %69, align 4, !tbaa !9
  %567 = icmp ne i32 %566, 0
  br i1 %567, label %568, label %614

568:                                              ; preds = %565
  %569 = load ptr, ptr %26, align 8, !tbaa !5
  %570 = load i32, ptr %569, align 4, !tbaa !9
  store i32 %570, ptr %53, align 4, !tbaa !9
  store i32 1, ptr %60, align 4, !tbaa !9
  br label %571

571:                                              ; preds = %610, %568
  %572 = load i32, ptr %60, align 4, !tbaa !9
  %573 = load i32, ptr %53, align 4, !tbaa !9
  %574 = icmp sle i32 %572, %573
  br i1 %574, label %575, label %613

575:                                              ; preds = %571
  %576 = load ptr, ptr %25, align 8, !tbaa !5
  %577 = load i32, ptr %576, align 4, !tbaa !9
  store i32 %577, ptr %54, align 4, !tbaa !9
  store i32 1, ptr %59, align 4, !tbaa !9
  br label %578

578:                                              ; preds = %606, %575
  %579 = load i32, ptr %59, align 4, !tbaa !9
  %580 = load i32, ptr %54, align 4, !tbaa !9
  %581 = icmp sle i32 %579, %580
  br i1 %581, label %582, label %609

582:                                              ; preds = %578
  %583 = load ptr, ptr %34, align 8, !tbaa !5
  %584 = load i32, ptr %59, align 4, !tbaa !9
  %585 = sext i32 %584 to i64
  %586 = getelementptr inbounds double, ptr %583, i64 %585
  %587 = load double, ptr %586, align 8, !tbaa !12
  %588 = load ptr, ptr %35, align 8, !tbaa !5
  %589 = load i32, ptr %59, align 4, !tbaa !9
  %590 = load i32, ptr %60, align 4, !tbaa !9
  %591 = load i32, ptr %49, align 4, !tbaa !9
  %592 = mul nsw i32 %590, %591
  %593 = add nsw i32 %589, %592
  %594 = sext i32 %593 to i64
  %595 = getelementptr inbounds double, ptr %588, i64 %594
  %596 = load double, ptr %595, align 8, !tbaa !12
  %597 = fmul double %587, %596
  %598 = load ptr, ptr %35, align 8, !tbaa !5
  %599 = load i32, ptr %59, align 4, !tbaa !9
  %600 = load i32, ptr %60, align 4, !tbaa !9
  %601 = load i32, ptr %49, align 4, !tbaa !9
  %602 = mul nsw i32 %600, %601
  %603 = add nsw i32 %599, %602
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds double, ptr %598, i64 %604
  store double %597, ptr %605, align 8, !tbaa !12
  br label %606

606:                                              ; preds = %582
  %607 = load i32, ptr %59, align 4, !tbaa !9
  %608 = add nsw i32 %607, 1
  store i32 %608, ptr %59, align 4, !tbaa !9
  br label %578, !llvm.loop !19

609:                                              ; preds = %578
  br label %610

610:                                              ; preds = %609
  %611 = load i32, ptr %60, align 4, !tbaa !9
  %612 = add nsw i32 %611, 1
  store i32 %612, ptr %60, align 4, !tbaa !9
  br label %571, !llvm.loop !20

613:                                              ; preds = %571
  br label %614

614:                                              ; preds = %613, %565
  br label %615

615:                                              ; preds = %614, %564
  %616 = load i32, ptr %66, align 4, !tbaa !9
  %617 = icmp ne i32 %616, 0
  br i1 %617, label %621, label %618

618:                                              ; preds = %615
  %619 = load i32, ptr %64, align 4, !tbaa !9
  %620 = icmp ne i32 %619, 0
  br i1 %620, label %621, label %681

621:                                              ; preds = %618, %615
  %622 = load ptr, ptr %25, align 8, !tbaa !5
  %623 = load ptr, ptr %25, align 8, !tbaa !5
  %624 = load ptr, ptr %27, align 8, !tbaa !5
  %625 = load i32, ptr %46, align 4, !tbaa !9
  %626 = sext i32 %625 to i64
  %627 = getelementptr inbounds double, ptr %624, i64 %626
  %628 = load ptr, ptr %28, align 8, !tbaa !5
  %629 = load ptr, ptr %29, align 8, !tbaa !5
  %630 = load i32, ptr %48, align 4, !tbaa !9
  %631 = sext i32 %630 to i64
  %632 = getelementptr inbounds double, ptr %629, i64 %631
  %633 = load ptr, ptr %30, align 8, !tbaa !5
  call void @dlacpy_(ptr noundef @.str.9, ptr noundef %622, ptr noundef %623, ptr noundef %627, ptr noundef %628, ptr noundef %632, ptr noundef %633)
  %634 = load ptr, ptr %25, align 8, !tbaa !5
  %635 = load ptr, ptr %25, align 8, !tbaa !5
  %636 = load ptr, ptr %29, align 8, !tbaa !5
  %637 = load i32, ptr %48, align 4, !tbaa !9
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds double, ptr %636, i64 %638
  %640 = load ptr, ptr %30, align 8, !tbaa !5
  %641 = load ptr, ptr %31, align 8, !tbaa !5
  %642 = getelementptr inbounds i32, ptr %641, i64 1
  %643 = load ptr, ptr %44, align 8, !tbaa !5
  %644 = call i32 @dgetrf_(ptr noundef %634, ptr noundef %635, ptr noundef %639, ptr noundef %640, ptr noundef %642, ptr noundef %643)
  %645 = load ptr, ptr %44, align 8, !tbaa !5
  %646 = load i32, ptr %645, align 4, !tbaa !9
  %647 = icmp sgt i32 %646, 0
  br i1 %647, label %648, label %680

648:                                              ; preds = %621
  %649 = load ptr, ptr %44, align 8, !tbaa !5
  %650 = load ptr, ptr %44, align 8, !tbaa !5
  %651 = load ptr, ptr %29, align 8, !tbaa !5
  %652 = load i32, ptr %48, align 4, !tbaa !9
  %653 = sext i32 %652 to i64
  %654 = getelementptr inbounds double, ptr %651, i64 %653
  %655 = load ptr, ptr %30, align 8, !tbaa !5
  %656 = load ptr, ptr %42, align 8, !tbaa !5
  %657 = getelementptr inbounds double, ptr %656, i64 1
  %658 = call double @dlantr_(ptr noundef @.str.10, ptr noundef @.str.11, ptr noundef @.str, ptr noundef %649, ptr noundef %650, ptr noundef %654, ptr noundef %655, ptr noundef %657)
  store double %658, ptr %74, align 8, !tbaa !12
  %659 = load double, ptr %74, align 8, !tbaa !12
  %660 = fcmp oeq double %659, 0.000000e+00
  br i1 %660, label %661, label %662

661:                                              ; preds = %648
  store double 1.000000e+00, ptr %74, align 8, !tbaa !12
  br label %675

662:                                              ; preds = %648
  %663 = load ptr, ptr %25, align 8, !tbaa !5
  %664 = load ptr, ptr %44, align 8, !tbaa !5
  %665 = load ptr, ptr %27, align 8, !tbaa !5
  %666 = load i32, ptr %46, align 4, !tbaa !9
  %667 = sext i32 %666 to i64
  %668 = getelementptr inbounds double, ptr %665, i64 %667
  %669 = load ptr, ptr %28, align 8, !tbaa !5
  %670 = load ptr, ptr %42, align 8, !tbaa !5
  %671 = getelementptr inbounds double, ptr %670, i64 1
  %672 = call double @dlange_(ptr noundef @.str.10, ptr noundef %663, ptr noundef %664, ptr noundef %668, ptr noundef %669, ptr noundef %671)
  %673 = load double, ptr %74, align 8, !tbaa !12
  %674 = fdiv double %672, %673
  store double %674, ptr %74, align 8, !tbaa !12
  br label %675

675:                                              ; preds = %662, %661
  %676 = load double, ptr %74, align 8, !tbaa !12
  %677 = load ptr, ptr %42, align 8, !tbaa !5
  %678 = getelementptr inbounds double, ptr %677, i64 1
  store double %676, ptr %678, align 8, !tbaa !12
  %679 = load ptr, ptr %39, align 8, !tbaa !5
  store double 0.000000e+00, ptr %679, align 8, !tbaa !12
  store i32 1, ptr %75, align 4
  br label %955

680:                                              ; preds = %621
  br label %681

681:                                              ; preds = %680, %618
  %682 = load i32, ptr %71, align 4, !tbaa !9
  %683 = icmp ne i32 %682, 0
  br i1 %683, label %684, label %686

684:                                              ; preds = %681
  %685 = getelementptr inbounds [1 x i8], ptr %58, i64 0, i64 0
  store i8 49, ptr %685, align 1, !tbaa !11
  br label %688

686:                                              ; preds = %681
  %687 = getelementptr inbounds [1 x i8], ptr %58, i64 0, i64 0
  store i8 73, ptr %687, align 1, !tbaa !11
  br label %688

688:                                              ; preds = %686, %684
  %689 = getelementptr inbounds [1 x i8], ptr %58, i64 0, i64 0
  %690 = load ptr, ptr %25, align 8, !tbaa !5
  %691 = load ptr, ptr %25, align 8, !tbaa !5
  %692 = load ptr, ptr %27, align 8, !tbaa !5
  %693 = load i32, ptr %46, align 4, !tbaa !9
  %694 = sext i32 %693 to i64
  %695 = getelementptr inbounds double, ptr %692, i64 %694
  %696 = load ptr, ptr %28, align 8, !tbaa !5
  %697 = load ptr, ptr %42, align 8, !tbaa !5
  %698 = getelementptr inbounds double, ptr %697, i64 1
  %699 = call double @dlange_(ptr noundef %689, ptr noundef %690, ptr noundef %691, ptr noundef %695, ptr noundef %696, ptr noundef %698)
  store double %699, ptr %63, align 8, !tbaa !12
  %700 = load ptr, ptr %25, align 8, !tbaa !5
  %701 = load ptr, ptr %25, align 8, !tbaa !5
  %702 = load ptr, ptr %29, align 8, !tbaa !5
  %703 = load i32, ptr %48, align 4, !tbaa !9
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds double, ptr %702, i64 %704
  %706 = load ptr, ptr %30, align 8, !tbaa !5
  %707 = load ptr, ptr %42, align 8, !tbaa !5
  %708 = getelementptr inbounds double, ptr %707, i64 1
  %709 = call double @dlantr_(ptr noundef @.str.10, ptr noundef @.str.11, ptr noundef @.str, ptr noundef %700, ptr noundef %701, ptr noundef %705, ptr noundef %706, ptr noundef %708)
  store double %709, ptr %74, align 8, !tbaa !12
  %710 = load double, ptr %74, align 8, !tbaa !12
  %711 = fcmp oeq double %710, 0.000000e+00
  br i1 %711, label %712, label %713

712:                                              ; preds = %688
  store double 1.000000e+00, ptr %74, align 8, !tbaa !12
  br label %726

713:                                              ; preds = %688
  %714 = load ptr, ptr %25, align 8, !tbaa !5
  %715 = load ptr, ptr %25, align 8, !tbaa !5
  %716 = load ptr, ptr %27, align 8, !tbaa !5
  %717 = load i32, ptr %46, align 4, !tbaa !9
  %718 = sext i32 %717 to i64
  %719 = getelementptr inbounds double, ptr %716, i64 %718
  %720 = load ptr, ptr %28, align 8, !tbaa !5
  %721 = load ptr, ptr %42, align 8, !tbaa !5
  %722 = getelementptr inbounds double, ptr %721, i64 1
  %723 = call double @dlange_(ptr noundef @.str.10, ptr noundef %714, ptr noundef %715, ptr noundef %719, ptr noundef %720, ptr noundef %722)
  %724 = load double, ptr %74, align 8, !tbaa !12
  %725 = fdiv double %723, %724
  store double %725, ptr %74, align 8, !tbaa !12
  br label %726

726:                                              ; preds = %713, %712
  %727 = getelementptr inbounds [1 x i8], ptr %58, i64 0, i64 0
  %728 = load ptr, ptr %25, align 8, !tbaa !5
  %729 = load ptr, ptr %29, align 8, !tbaa !5
  %730 = load i32, ptr %48, align 4, !tbaa !9
  %731 = sext i32 %730 to i64
  %732 = getelementptr inbounds double, ptr %729, i64 %731
  %733 = load ptr, ptr %30, align 8, !tbaa !5
  %734 = load ptr, ptr %39, align 8, !tbaa !5
  %735 = load ptr, ptr %42, align 8, !tbaa !5
  %736 = getelementptr inbounds double, ptr %735, i64 1
  %737 = load ptr, ptr %43, align 8, !tbaa !5
  %738 = getelementptr inbounds i32, ptr %737, i64 1
  %739 = load ptr, ptr %44, align 8, !tbaa !5
  call void @dgecon_(ptr noundef %727, ptr noundef %728, ptr noundef %732, ptr noundef %733, ptr noundef %63, ptr noundef %734, ptr noundef %736, ptr noundef %738, ptr noundef %739)
  %740 = load ptr, ptr %25, align 8, !tbaa !5
  %741 = load ptr, ptr %26, align 8, !tbaa !5
  %742 = load ptr, ptr %35, align 8, !tbaa !5
  %743 = load i32, ptr %50, align 4, !tbaa !9
  %744 = sext i32 %743 to i64
  %745 = getelementptr inbounds double, ptr %742, i64 %744
  %746 = load ptr, ptr %36, align 8, !tbaa !5
  %747 = load ptr, ptr %37, align 8, !tbaa !5
  %748 = load i32, ptr %52, align 4, !tbaa !9
  %749 = sext i32 %748 to i64
  %750 = getelementptr inbounds double, ptr %747, i64 %749
  %751 = load ptr, ptr %38, align 8, !tbaa !5
  call void @dlacpy_(ptr noundef @.str.9, ptr noundef %740, ptr noundef %741, ptr noundef %745, ptr noundef %746, ptr noundef %750, ptr noundef %751)
  %752 = load ptr, ptr %24, align 8, !tbaa !5
  %753 = load ptr, ptr %25, align 8, !tbaa !5
  %754 = load ptr, ptr %26, align 8, !tbaa !5
  %755 = load ptr, ptr %29, align 8, !tbaa !5
  %756 = load i32, ptr %48, align 4, !tbaa !9
  %757 = sext i32 %756 to i64
  %758 = getelementptr inbounds double, ptr %755, i64 %757
  %759 = load ptr, ptr %30, align 8, !tbaa !5
  %760 = load ptr, ptr %31, align 8, !tbaa !5
  %761 = getelementptr inbounds i32, ptr %760, i64 1
  %762 = load ptr, ptr %37, align 8, !tbaa !5
  %763 = load i32, ptr %52, align 4, !tbaa !9
  %764 = sext i32 %763 to i64
  %765 = getelementptr inbounds double, ptr %762, i64 %764
  %766 = load ptr, ptr %38, align 8, !tbaa !5
  %767 = load ptr, ptr %44, align 8, !tbaa !5
  %768 = call i32 @dgetrs_(ptr noundef %752, ptr noundef %753, ptr noundef %754, ptr noundef %758, ptr noundef %759, ptr noundef %761, ptr noundef %765, ptr noundef %766, ptr noundef %767)
  %769 = load ptr, ptr %24, align 8, !tbaa !5
  %770 = load ptr, ptr %25, align 8, !tbaa !5
  %771 = load ptr, ptr %26, align 8, !tbaa !5
  %772 = load ptr, ptr %27, align 8, !tbaa !5
  %773 = load i32, ptr %46, align 4, !tbaa !9
  %774 = sext i32 %773 to i64
  %775 = getelementptr inbounds double, ptr %772, i64 %774
  %776 = load ptr, ptr %28, align 8, !tbaa !5
  %777 = load ptr, ptr %29, align 8, !tbaa !5
  %778 = load i32, ptr %48, align 4, !tbaa !9
  %779 = sext i32 %778 to i64
  %780 = getelementptr inbounds double, ptr %777, i64 %779
  %781 = load ptr, ptr %30, align 8, !tbaa !5
  %782 = load ptr, ptr %31, align 8, !tbaa !5
  %783 = getelementptr inbounds i32, ptr %782, i64 1
  %784 = load ptr, ptr %35, align 8, !tbaa !5
  %785 = load i32, ptr %50, align 4, !tbaa !9
  %786 = sext i32 %785 to i64
  %787 = getelementptr inbounds double, ptr %784, i64 %786
  %788 = load ptr, ptr %36, align 8, !tbaa !5
  %789 = load ptr, ptr %37, align 8, !tbaa !5
  %790 = load i32, ptr %52, align 4, !tbaa !9
  %791 = sext i32 %790 to i64
  %792 = getelementptr inbounds double, ptr %789, i64 %791
  %793 = load ptr, ptr %38, align 8, !tbaa !5
  %794 = load ptr, ptr %40, align 8, !tbaa !5
  %795 = getelementptr inbounds double, ptr %794, i64 1
  %796 = load ptr, ptr %41, align 8, !tbaa !5
  %797 = getelementptr inbounds double, ptr %796, i64 1
  %798 = load ptr, ptr %42, align 8, !tbaa !5
  %799 = getelementptr inbounds double, ptr %798, i64 1
  %800 = load ptr, ptr %43, align 8, !tbaa !5
  %801 = getelementptr inbounds i32, ptr %800, i64 1
  %802 = load ptr, ptr %44, align 8, !tbaa !5
  call void @dgerfs_(ptr noundef %769, ptr noundef %770, ptr noundef %771, ptr noundef %775, ptr noundef %776, ptr noundef %780, ptr noundef %781, ptr noundef %783, ptr noundef %787, ptr noundef %788, ptr noundef %792, ptr noundef %793, ptr noundef %795, ptr noundef %797, ptr noundef %799, ptr noundef %801, ptr noundef %802)
  %803 = load i32, ptr %71, align 4, !tbaa !9
  %804 = icmp ne i32 %803, 0
  br i1 %804, label %805, label %873

805:                                              ; preds = %726
  %806 = load i32, ptr %69, align 4, !tbaa !9
  %807 = icmp ne i32 %806, 0
  br i1 %807, label %808, label %872

808:                                              ; preds = %805
  %809 = load ptr, ptr %26, align 8, !tbaa !5
  %810 = load i32, ptr %809, align 4, !tbaa !9
  store i32 %810, ptr %53, align 4, !tbaa !9
  store i32 1, ptr %60, align 4, !tbaa !9
  br label %811

811:                                              ; preds = %850, %808
  %812 = load i32, ptr %60, align 4, !tbaa !9
  %813 = load i32, ptr %53, align 4, !tbaa !9
  %814 = icmp sle i32 %812, %813
  br i1 %814, label %815, label %853

815:                                              ; preds = %811
  %816 = load ptr, ptr %25, align 8, !tbaa !5
  %817 = load i32, ptr %816, align 4, !tbaa !9
  store i32 %817, ptr %54, align 4, !tbaa !9
  store i32 1, ptr %59, align 4, !tbaa !9
  br label %818

818:                                              ; preds = %846, %815
  %819 = load i32, ptr %59, align 4, !tbaa !9
  %820 = load i32, ptr %54, align 4, !tbaa !9
  %821 = icmp sle i32 %819, %820
  br i1 %821, label %822, label %849

822:                                              ; preds = %818
  %823 = load ptr, ptr %34, align 8, !tbaa !5
  %824 = load i32, ptr %59, align 4, !tbaa !9
  %825 = sext i32 %824 to i64
  %826 = getelementptr inbounds double, ptr %823, i64 %825
  %827 = load double, ptr %826, align 8, !tbaa !12
  %828 = load ptr, ptr %37, align 8, !tbaa !5
  %829 = load i32, ptr %59, align 4, !tbaa !9
  %830 = load i32, ptr %60, align 4, !tbaa !9
  %831 = load i32, ptr %51, align 4, !tbaa !9
  %832 = mul nsw i32 %830, %831
  %833 = add nsw i32 %829, %832
  %834 = sext i32 %833 to i64
  %835 = getelementptr inbounds double, ptr %828, i64 %834
  %836 = load double, ptr %835, align 8, !tbaa !12
  %837 = fmul double %827, %836
  %838 = load ptr, ptr %37, align 8, !tbaa !5
  %839 = load i32, ptr %59, align 4, !tbaa !9
  %840 = load i32, ptr %60, align 4, !tbaa !9
  %841 = load i32, ptr %51, align 4, !tbaa !9
  %842 = mul nsw i32 %840, %841
  %843 = add nsw i32 %839, %842
  %844 = sext i32 %843 to i64
  %845 = getelementptr inbounds double, ptr %838, i64 %844
  store double %837, ptr %845, align 8, !tbaa !12
  br label %846

846:                                              ; preds = %822
  %847 = load i32, ptr %59, align 4, !tbaa !9
  %848 = add nsw i32 %847, 1
  store i32 %848, ptr %59, align 4, !tbaa !9
  br label %818, !llvm.loop !21

849:                                              ; preds = %818
  br label %850

850:                                              ; preds = %849
  %851 = load i32, ptr %60, align 4, !tbaa !9
  %852 = add nsw i32 %851, 1
  store i32 %852, ptr %60, align 4, !tbaa !9
  br label %811, !llvm.loop !22

853:                                              ; preds = %811
  %854 = load ptr, ptr %26, align 8, !tbaa !5
  %855 = load i32, ptr %854, align 4, !tbaa !9
  store i32 %855, ptr %53, align 4, !tbaa !9
  store i32 1, ptr %60, align 4, !tbaa !9
  br label %856

856:                                              ; preds = %868, %853
  %857 = load i32, ptr %60, align 4, !tbaa !9
  %858 = load i32, ptr %53, align 4, !tbaa !9
  %859 = icmp sle i32 %857, %858
  br i1 %859, label %860, label %871

860:                                              ; preds = %856
  %861 = load double, ptr %65, align 8, !tbaa !12
  %862 = load ptr, ptr %40, align 8, !tbaa !5
  %863 = load i32, ptr %60, align 4, !tbaa !9
  %864 = sext i32 %863 to i64
  %865 = getelementptr inbounds double, ptr %862, i64 %864
  %866 = load double, ptr %865, align 8, !tbaa !12
  %867 = fdiv double %866, %861
  store double %867, ptr %865, align 8, !tbaa !12
  br label %868

868:                                              ; preds = %860
  %869 = load i32, ptr %60, align 4, !tbaa !9
  %870 = add nsw i32 %869, 1
  store i32 %870, ptr %60, align 4, !tbaa !9
  br label %856, !llvm.loop !23

871:                                              ; preds = %856
  br label %872

872:                                              ; preds = %871, %805
  br label %941

873:                                              ; preds = %726
  %874 = load i32, ptr %73, align 4, !tbaa !9
  %875 = icmp ne i32 %874, 0
  br i1 %875, label %876, label %940

876:                                              ; preds = %873
  %877 = load ptr, ptr %26, align 8, !tbaa !5
  %878 = load i32, ptr %877, align 4, !tbaa !9
  store i32 %878, ptr %53, align 4, !tbaa !9
  store i32 1, ptr %60, align 4, !tbaa !9
  br label %879

879:                                              ; preds = %918, %876
  %880 = load i32, ptr %60, align 4, !tbaa !9
  %881 = load i32, ptr %53, align 4, !tbaa !9
  %882 = icmp sle i32 %880, %881
  br i1 %882, label %883, label %921

883:                                              ; preds = %879
  %884 = load ptr, ptr %25, align 8, !tbaa !5
  %885 = load i32, ptr %884, align 4, !tbaa !9
  store i32 %885, ptr %54, align 4, !tbaa !9
  store i32 1, ptr %59, align 4, !tbaa !9
  br label %886

886:                                              ; preds = %914, %883
  %887 = load i32, ptr %59, align 4, !tbaa !9
  %888 = load i32, ptr %54, align 4, !tbaa !9
  %889 = icmp sle i32 %887, %888
  br i1 %889, label %890, label %917

890:                                              ; preds = %886
  %891 = load ptr, ptr %33, align 8, !tbaa !5
  %892 = load i32, ptr %59, align 4, !tbaa !9
  %893 = sext i32 %892 to i64
  %894 = getelementptr inbounds double, ptr %891, i64 %893
  %895 = load double, ptr %894, align 8, !tbaa !12
  %896 = load ptr, ptr %37, align 8, !tbaa !5
  %897 = load i32, ptr %59, align 4, !tbaa !9
  %898 = load i32, ptr %60, align 4, !tbaa !9
  %899 = load i32, ptr %51, align 4, !tbaa !9
  %900 = mul nsw i32 %898, %899
  %901 = add nsw i32 %897, %900
  %902 = sext i32 %901 to i64
  %903 = getelementptr inbounds double, ptr %896, i64 %902
  %904 = load double, ptr %903, align 8, !tbaa !12
  %905 = fmul double %895, %904
  %906 = load ptr, ptr %37, align 8, !tbaa !5
  %907 = load i32, ptr %59, align 4, !tbaa !9
  %908 = load i32, ptr %60, align 4, !tbaa !9
  %909 = load i32, ptr %51, align 4, !tbaa !9
  %910 = mul nsw i32 %908, %909
  %911 = add nsw i32 %907, %910
  %912 = sext i32 %911 to i64
  %913 = getelementptr inbounds double, ptr %906, i64 %912
  store double %905, ptr %913, align 8, !tbaa !12
  br label %914

914:                                              ; preds = %890
  %915 = load i32, ptr %59, align 4, !tbaa !9
  %916 = add nsw i32 %915, 1
  store i32 %916, ptr %59, align 4, !tbaa !9
  br label %886, !llvm.loop !24

917:                                              ; preds = %886
  br label %918

918:                                              ; preds = %917
  %919 = load i32, ptr %60, align 4, !tbaa !9
  %920 = add nsw i32 %919, 1
  store i32 %920, ptr %60, align 4, !tbaa !9
  br label %879, !llvm.loop !25

921:                                              ; preds = %879
  %922 = load ptr, ptr %26, align 8, !tbaa !5
  %923 = load i32, ptr %922, align 4, !tbaa !9
  store i32 %923, ptr %53, align 4, !tbaa !9
  store i32 1, ptr %60, align 4, !tbaa !9
  br label %924

924:                                              ; preds = %936, %921
  %925 = load i32, ptr %60, align 4, !tbaa !9
  %926 = load i32, ptr %53, align 4, !tbaa !9
  %927 = icmp sle i32 %925, %926
  br i1 %927, label %928, label %939

928:                                              ; preds = %924
  %929 = load double, ptr %70, align 8, !tbaa !12
  %930 = load ptr, ptr %40, align 8, !tbaa !5
  %931 = load i32, ptr %60, align 4, !tbaa !9
  %932 = sext i32 %931 to i64
  %933 = getelementptr inbounds double, ptr %930, i64 %932
  %934 = load double, ptr %933, align 8, !tbaa !12
  %935 = fdiv double %934, %929
  store double %935, ptr %933, align 8, !tbaa !12
  br label %936

936:                                              ; preds = %928
  %937 = load i32, ptr %60, align 4, !tbaa !9
  %938 = add nsw i32 %937, 1
  store i32 %938, ptr %60, align 4, !tbaa !9
  br label %924, !llvm.loop !26

939:                                              ; preds = %924
  br label %940

940:                                              ; preds = %939, %873
  br label %941

941:                                              ; preds = %940, %872
  %942 = load double, ptr %74, align 8, !tbaa !12
  %943 = load ptr, ptr %42, align 8, !tbaa !5
  %944 = getelementptr inbounds double, ptr %943, i64 1
  store double %942, ptr %944, align 8, !tbaa !12
  %945 = load ptr, ptr %39, align 8, !tbaa !5
  %946 = load double, ptr %945, align 8, !tbaa !12
  %947 = call double @dlamch_(ptr noundef @.str.12)
  %948 = fcmp olt double %946, %947
  br i1 %948, label %949, label %954

949:                                              ; preds = %941
  %950 = load ptr, ptr %25, align 8, !tbaa !5
  %951 = load i32, ptr %950, align 4, !tbaa !9
  %952 = add nsw i32 %951, 1
  %953 = load ptr, ptr %44, align 8, !tbaa !5
  store i32 %952, ptr %953, align 4, !tbaa !9
  br label %954

954:                                              ; preds = %949, %941
  store i32 1, ptr %75, align 4
  br label %955

955:                                              ; preds = %954, %675, %456
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %58) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #3
  ret void
}

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

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

declare double @dlamch_(ptr noundef) #2

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

declare void @dgeequ_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @dlaqge_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @dlacpy_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

declare double @dlantr_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare double @dlange_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @dgecon_(ptr noundef, ptr noundef, 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

declare void @dgerfs_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, 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 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = distinct !{!17, !15}
!18 = distinct !{!18, !15}
!19 = distinct !{!19, !15}
!20 = distinct !{!20, !15}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15}
!23 = distinct !{!23, !15}
!24 = distinct !{!24, !15}
!25 = distinct !{!25, !15}
!26 = distinct !{!26, !15}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [8 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @dgesvx_(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, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr noundef %17, ptr noundef %18, ptr noundef %19, ptr noundef %20, ptr noundef %21) local_unnamed_addr #0 {
  %23 = alloca i32, align 4
  %24 = alloca double, align 8
  %25 = alloca [1 x i8], align 1
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca i32, align 4
  %29 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #4
  %30 = getelementptr inbounds i8, ptr %10, i64 -8
  %31 = getelementptr inbounds i8, ptr %11, i64 -8
  %32 = load i32, ptr %13, align 4, !tbaa !5
  %narrow = xor i32 %32, -1
  %33 = sext i32 %narrow to i64
  %34 = getelementptr inbounds double, ptr %12, i64 %33
  %35 = load i32, ptr %15, align 4, !tbaa !5
  %narrow393 = xor i32 %35, -1
  %36 = sext i32 %narrow393 to i64
  %37 = getelementptr inbounds double, ptr %14, i64 %36
  %38 = getelementptr inbounds i8, ptr %17, i64 -8
  store i32 0, ptr %21, align 4, !tbaa !5
  %39 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #4
  %40 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #4
  %41 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str) #4
  %42 = icmp ne i32 %39, 0
  %43 = icmp ne i32 %40, 0
  %or.cond = select i1 %42, i1 true, i1 %43
  br i1 %or.cond, label %.thread, label %44

.thread:                                          ; preds = %22
  store i8 78, ptr %9, align 1, !tbaa !9
  br label %62

44:                                               ; preds = %22
  %45 = tail call i32 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.2) #4
  %.not = icmp eq i32 %45, 0
  br i1 %.not, label %46, label %49

46:                                               ; preds = %44
  %47 = tail call i32 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.3) #4
  %48 = icmp ne i32 %47, 0
  br label %49

49:                                               ; preds = %46, %44
  %50 = phi i1 [ true, %44 ], [ %48, %46 ]
  %51 = zext i1 %50 to i32
  %52 = tail call i32 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.4) #4
  %.not376 = icmp eq i32 %52, 0
  br i1 %.not376, label %53, label %56

53:                                               ; preds = %49
  %54 = tail call i32 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.3) #4
  %55 = icmp ne i32 %54, 0
  br label %56

56:                                               ; preds = %53, %49
  %57 = phi i1 [ true, %49 ], [ %55, %53 ]
  %58 = zext i1 %57 to i32
  %59 = tail call double @dlamch_(ptr noundef nonnull @.str.5) #4
  %60 = fdiv double 1.000000e+00, %59
  %61 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.6) #4
  %.not377 = icmp eq i32 %61, 0
  br i1 %.not377, label %.thread422.sink.split, label %62

62:                                               ; preds = %.thread, %56
  %.0353415 = phi i32 [ 0, %.thread ], [ %51, %56 ]
  %.0355413 = phi double [ undef, %.thread ], [ %59, %56 ]
  %.0356412 = phi i32 [ 0, %.thread ], [ %58, %56 ]
  %.0358410 = phi double [ undef, %.thread ], [ %60, %56 ]
  %.not378 = icmp eq i32 %41, 0
  br i1 %.not378, label %63, label %67

63:                                               ; preds = %62
  %64 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.7) #4
  %.not379 = icmp eq i32 %64, 0
  br i1 %.not379, label %65, label %67

65:                                               ; preds = %63
  %66 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #4
  %.not380 = icmp eq i32 %66, 0
  br i1 %.not380, label %.thread422.sink.split, label %67

67:                                               ; preds = %65, %63, %62
  %68 = load i32, ptr %2, align 4, !tbaa !5
  %69 = icmp slt i32 %68, 0
  br i1 %69, label %.thread422.sink.split, label %70

70:                                               ; preds = %67
  %71 = load i32, ptr %3, align 4, !tbaa !5
  %72 = icmp slt i32 %71, 0
  br i1 %72, label %.thread422.sink.split, label %73

73:                                               ; preds = %70
  %74 = load i32, ptr %5, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %68, i32 1)
  %75 = icmp slt i32 %74, %spec.select
  br i1 %75, label %.thread422.sink.split, label %76

76:                                               ; preds = %73
  %77 = load i32, ptr %7, align 4, !tbaa !5
  %78 = icmp slt i32 %77, %spec.select
  br i1 %78, label %.thread422.sink.split, label %79

79:                                               ; preds = %76
  %80 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.6) #4
  %81 = icmp eq i32 %80, 0
  %82 = icmp ne i32 %.0353415, 0
  %or.cond5 = select i1 %81, i1 true, i1 %82
  %83 = icmp ne i32 %.0356412, 0
  %or.cond7 = select i1 %or.cond5, i1 true, i1 %83
  br i1 %or.cond7, label %86, label %84

84:                                               ; preds = %79
  %85 = tail call i32 @lsame_(ptr noundef %9, ptr noundef nonnull @.str) #4
  %.not381 = icmp eq i32 %85, 0
  br i1 %.not381, label %.thread422.sink.split, label %..thread417_crit_edge

..thread417_crit_edge:                            ; preds = %84
  %.pr.pre = load i32, ptr %21, align 4, !tbaa !5
  br label %.thread417

86:                                               ; preds = %79
  br i1 %82, label %87, label %119

87:                                               ; preds = %86
  %88 = load i32, ptr %2, align 4, !tbaa !5
  %.not382431 = icmp slt i32 %88, 1
  br i1 %.not382431, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %87
  %89 = zext nneg i32 %88 to i64
  %xtraiter = and i64 %89, 1
  %90 = icmp eq i32 %88, 1
  br i1 %90, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %89, 2147483646
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader.new ], [ %indvars.iv.next.1, %.lr.ph ]
  %.0359434 = phi double [ 0.000000e+00, %.lr.ph.preheader.new ], [ %102, %.lr.ph ]
  %.0361433 = phi double [ %.0358410, %.lr.ph.preheader.new ], [ %100, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %.lr.ph ]
  %91 = getelementptr inbounds double, ptr %30, i64 %indvars.iv
  %92 = load double, ptr %91, align 8, !tbaa !10
  %93 = fcmp ole double %.0361433, %92
  %94 = select i1 %93, double %.0361433, double %92
  %95 = fcmp oge double %.0359434, %92
  %96 = select i1 %95, double %.0359434, double %92
  %97 = getelementptr double, ptr %10, i64 %indvars.iv
  %98 = load double, ptr %97, align 8, !tbaa !10
  %99 = fcmp ole double %94, %98
  %100 = select i1 %99, double %94, double %98
  %101 = fcmp oge double %96, %98
  %102 = select i1 %101, double %96, double %98
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !12

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph, %.lr.ph.preheader
  %.lcssa698.ph = phi double [ poison, %.lr.ph.preheader ], [ %100, %.lr.ph ]
  %.lcssa697.ph = phi double [ poison, %.lr.ph.preheader ], [ %102, %.lr.ph ]
  %indvars.iv.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next.1, %.lr.ph ]
  %.0359434.unr = phi double [ 0.000000e+00, %.lr.ph.preheader ], [ %102, %.lr.ph ]
  %.0361433.unr = phi double [ %.0358410, %.lr.ph.preheader ], [ %100, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.loopexit.unr-lcssa
  %103 = getelementptr inbounds double, ptr %30, i64 %indvars.iv.unr
  %104 = load double, ptr %103, align 8, !tbaa !10
  %105 = fcmp ole double %.0361433.unr, %104
  %106 = select i1 %105, double %.0361433.unr, double %104
  %107 = fcmp oge double %.0359434.unr, %104
  %108 = select i1 %107, double %.0359434.unr, double %104
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.epil, %._crit_edge.loopexit.unr-lcssa, %87
  %.0361.lcssa = phi double [ %.0358410, %87 ], [ %.lcssa698.ph, %._crit_edge.loopexit.unr-lcssa ], [ %106, %.lr.ph.epil ]
  %.0359.lcssa = phi double [ 0.000000e+00, %87 ], [ %.lcssa697.ph, %._crit_edge.loopexit.unr-lcssa ], [ %108, %.lr.ph.epil ]
  %109 = fcmp ugt double %.0361.lcssa, 0.000000e+00
  br i1 %109, label %110, label %.thread422.sink.split

110:                                              ; preds = %._crit_edge
  %111 = icmp sgt i32 %88, 0
  br i1 %111, label %112, label %118

112:                                              ; preds = %110
  %113 = fcmp oge double %.0361.lcssa, %.0355413
  %114 = select i1 %113, double %.0361.lcssa, double %.0355413
  %115 = fcmp ole double %.0359.lcssa, %.0358410
  %116 = select i1 %115, double %.0359.lcssa, double %.0358410
  %117 = fdiv double %114, %116
  store double %117, ptr %29, align 8, !tbaa !10
  br label %119

118:                                              ; preds = %110
  store double 1.000000e+00, ptr %29, align 8, !tbaa !10
  br label %119

119:                                              ; preds = %118, %112, %86
  %.pr.pre556.pr = load i32, ptr %21, align 4, !tbaa !5
  br i1 %83, label %120, label %.thread417

120:                                              ; preds = %119
  %121 = icmp eq i32 %.pr.pre556.pr, 0
  br i1 %121, label %122, label %.thread422

122:                                              ; preds = %120
  %123 = load i32, ptr %2, align 4, !tbaa !5
  %.not383436 = icmp slt i32 %123, 1
  br i1 %.not383436, label %._crit_edge442, label %.lr.ph441.preheader

.lr.ph441.preheader:                              ; preds = %122
  %124 = zext nneg i32 %123 to i64
  %xtraiter701 = and i64 %124, 1
  %125 = icmp eq i32 %123, 1
  br i1 %125, label %._crit_edge442.loopexit.unr-lcssa, label %.lr.ph441.preheader.new

.lr.ph441.preheader.new:                          ; preds = %.lr.ph441.preheader
  %unroll_iter705 = and i64 %124, 2147483646
  br label %.lr.ph441

.lr.ph441:                                        ; preds = %.lr.ph441, %.lr.ph441.preheader.new
  %indvars.iv501 = phi i64 [ 1, %.lr.ph441.preheader.new ], [ %indvars.iv.next502.1, %.lr.ph441 ]
  %.1360439 = phi double [ 0.000000e+00, %.lr.ph441.preheader.new ], [ %137, %.lr.ph441 ]
  %.1362438 = phi double [ %.0358410, %.lr.ph441.preheader.new ], [ %135, %.lr.ph441 ]
  %niter706 = phi i64 [ 0, %.lr.ph441.preheader.new ], [ %niter706.next.1, %.lr.ph441 ]
  %126 = getelementptr inbounds double, ptr %31, i64 %indvars.iv501
  %127 = load double, ptr %126, align 8, !tbaa !10
  %128 = fcmp ole double %.1362438, %127
  %129 = select i1 %128, double %.1362438, double %127
  %130 = fcmp oge double %.1360439, %127
  %131 = select i1 %130, double %.1360439, double %127
  %132 = getelementptr double, ptr %11, i64 %indvars.iv501
  %133 = load double, ptr %132, align 8, !tbaa !10
  %134 = fcmp ole double %129, %133
  %135 = select i1 %134, double %129, double %133
  %136 = fcmp oge double %131, %133
  %137 = select i1 %136, double %131, double %133
  %indvars.iv.next502.1 = add nuw nsw i64 %indvars.iv501, 2
  %niter706.next.1 = add i64 %niter706, 2
  %niter706.ncmp.1 = icmp eq i64 %niter706.next.1, %unroll_iter705
  br i1 %niter706.ncmp.1, label %._crit_edge442.loopexit.unr-lcssa, label %.lr.ph441, !llvm.loop !14

._crit_edge442.loopexit.unr-lcssa:                ; preds = %.lr.ph441, %.lr.ph441.preheader
  %.lcssa696.ph = phi double [ poison, %.lr.ph441.preheader ], [ %135, %.lr.ph441 ]
  %.lcssa.ph = phi double [ poison, %.lr.ph441.preheader ], [ %137, %.lr.ph441 ]
  %indvars.iv501.unr = phi i64 [ 1, %.lr.ph441.preheader ], [ %indvars.iv.next502.1, %.lr.ph441 ]
  %.1360439.unr = phi double [ 0.000000e+00, %.lr.ph441.preheader ], [ %137, %.lr.ph441 ]
  %.1362438.unr = phi double [ %.0358410, %.lr.ph441.preheader ], [ %135, %.lr.ph441 ]
  %lcmp.mod702.not = icmp eq i64 %xtraiter701, 0
  br i1 %lcmp.mod702.not, label %._crit_edge442, label %.lr.ph441.epil

.lr.ph441.epil:                                   ; preds = %._crit_edge442.loopexit.unr-lcssa
  %138 = getelementptr inbounds double, ptr %31, i64 %indvars.iv501.unr
  %139 = load double, ptr %138, align 8, !tbaa !10
  %140 = fcmp ole double %.1362438.unr, %139
  %141 = select i1 %140, double %.1362438.unr, double %139
  %142 = fcmp oge double %.1360439.unr, %139
  %143 = select i1 %142, double %.1360439.unr, double %139
  br label %._crit_edge442

._crit_edge442:                                   ; preds = %.lr.ph441.epil, %._crit_edge442.loopexit.unr-lcssa, %122
  %.1362.lcssa = phi double [ %.0358410, %122 ], [ %.lcssa696.ph, %._crit_edge442.loopexit.unr-lcssa ], [ %141, %.lr.ph441.epil ]
  %.1360.lcssa = phi double [ 0.000000e+00, %122 ], [ %.lcssa.ph, %._crit_edge442.loopexit.unr-lcssa ], [ %143, %.lr.ph441.epil ]
  %144 = fcmp ugt double %.1362.lcssa, 0.000000e+00
  br i1 %144, label %145, label %.thread422.sink.split

145:                                              ; preds = %._crit_edge442
  %146 = icmp sgt i32 %123, 0
  br i1 %146, label %147, label %153

147:                                              ; preds = %145
  %148 = fcmp oge double %.1362.lcssa, %.0355413
  %149 = select i1 %148, double %.1362.lcssa, double %.0355413
  %150 = fcmp ole double %.1360.lcssa, %.0358410
  %151 = select i1 %150, double %.1360.lcssa, double %.0358410
  %152 = fdiv double %149, %151
  store double %152, ptr %27, align 8, !tbaa !10
  br label %.thread417.thread

153:                                              ; preds = %145
  store double 1.000000e+00, ptr %27, align 8, !tbaa !10
  br label %.thread417.thread

.thread417:                                       ; preds = %..thread417_crit_edge, %119
  %.pr420.pr = phi i32 [ %.pr.pre, %..thread417_crit_edge ], [ %.pr.pre556.pr, %119 ]
  %154 = icmp eq i32 %.pr420.pr, 0
  br i1 %154, label %.thread417.thread, label %.thread422

.thread417.thread:                                ; preds = %147, %153, %.thread417
  %155 = load i32, ptr %13, align 4, !tbaa !5
  %156 = load i32, ptr %2, align 4, !tbaa !5
  %spec.select404 = tail call i32 @llvm.smax.i32(i32 %156, i32 1)
  %157 = icmp slt i32 %155, %spec.select404
  br i1 %157, label %.thread422.sink.split, label %158

158:                                              ; preds = %.thread417.thread
  %159 = load i32, ptr %15, align 4, !tbaa !5
  %160 = icmp slt i32 %159, %spec.select404
  br i1 %160, label %.thread422.sink.split, label %.thread418

.thread422.sink.split:                            ; preds = %158, %.thread417.thread, %._crit_edge442, %._crit_edge, %84, %76, %73, %70, %67, %65, %56
  %.sink = phi i32 [ -1, %56 ], [ -2, %65 ], [ -3, %67 ], [ -4, %70 ], [ -6, %73 ], [ -8, %76 ], [ -10, %84 ], [ -11, %._crit_edge ], [ -12, %._crit_edge442 ], [ -14, %.thread417.thread ], [ -16, %158 ]
  store i32 %.sink, ptr %21, align 4, !tbaa !5
  br label %.thread422

.thread422:                                       ; preds = %.thread422.sink.split, %120, %.thread417
  %161 = phi i32 [ %.pr420.pr, %.thread417 ], [ %.pr.pre556.pr, %120 ], [ %.sink, %.thread422.sink.split ]
  %162 = sub nsw i32 0, %161
  store i32 %162, ptr %23, align 4, !tbaa !5
  %163 = call i32 @xerbla_(ptr noundef nonnull @.str.8, ptr noundef nonnull %23, i32 noundef 6) #4
  br label %435

.thread418:                                       ; preds = %158
  br i1 %43, label %164, label %182

164:                                              ; preds = %.thread418
  call void @dgeequ_(ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %10, ptr noundef %11, ptr noundef nonnull %29, ptr noundef nonnull %27, ptr noundef nonnull %24, ptr noundef nonnull %28) #4
  %165 = load i32, ptr %28, align 4, !tbaa !5
  %166 = icmp eq i32 %165, 0
  br i1 %166, label %167, label %182

167:                                              ; preds = %164
  call void @dlaqge_(ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %10, ptr noundef %11, ptr noundef nonnull %29, ptr noundef nonnull %27, ptr noundef nonnull %24, ptr noundef %9) #4
  %168 = call i32 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.2) #4
  %.not385 = icmp eq i32 %168, 0
  br i1 %.not385, label %169, label %172

169:                                              ; preds = %167
  %170 = call i32 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.3) #4
  %171 = icmp ne i32 %170, 0
  br label %172

172:                                              ; preds = %169, %167
  %173 = phi i1 [ true, %167 ], [ %171, %169 ]
  %174 = zext i1 %173 to i32
  %175 = call i32 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.4) #4
  %.not386 = icmp eq i32 %175, 0
  br i1 %.not386, label %176, label %179

176:                                              ; preds = %172
  %177 = call i32 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.3) #4
  %178 = icmp ne i32 %177, 0
  br label %179

179:                                              ; preds = %176, %172
  %180 = phi i1 [ true, %172 ], [ %178, %176 ]
  %181 = zext i1 %180 to i32
  br label %182

182:                                              ; preds = %164, %179, %.thread418
  %.1357 = phi i32 [ %181, %179 ], [ %.0356412, %164 ], [ %.0356412, %.thread418 ]
  %.1354 = phi i32 [ %174, %179 ], [ %.0353415, %164 ], [ %.0353415, %.thread418 ]
  br i1 %.not378, label %235, label %183

183:                                              ; preds = %182
  %.not391 = icmp eq i32 %.1354, 0
  br i1 %.not391, label %.loopexit429, label %184

184:                                              ; preds = %183
  %185 = load i32, ptr %3, align 4, !tbaa !5
  %.not392450 = icmp slt i32 %185, 1
  br i1 %.not392450, label %.loopexit429, label %.lr.ph453

.lr.ph453:                                        ; preds = %184
  %186 = load i32, ptr %2, align 4, !tbaa !5
  %.not402445 = icmp slt i32 %186, 1
  br i1 %.not402445, label %.loopexit429, label %.lr.ph448.preheader

.lr.ph448.preheader:                              ; preds = %.lr.ph453
  %187 = add nuw i32 %186, 1
  %188 = sext i32 %32 to i64
  %189 = add nuw i32 %185, 1
  %wide.trip.count514 = zext i32 %189 to i64
  %wide.trip.count509 = zext i32 %187 to i64
  %190 = shl nsw i64 %188, 3
  %191 = shl nsw i64 %33, 3
  %192 = getelementptr i8, ptr %12, i64 %190
  %193 = getelementptr i8, ptr %192, i64 %191
  %scevgep = getelementptr i8, ptr %193, i64 8
  %194 = shl nuw nsw i64 %wide.trip.count514, 3
  %195 = add nsw i64 %194, -8
  %196 = mul i64 %195, %188
  %197 = shl nuw nsw i64 %wide.trip.count509, 3
  %198 = getelementptr i8, ptr %12, i64 %196
  %199 = getelementptr i8, ptr %198, i64 %191
  %scevgep584 = getelementptr i8, ptr %199, i64 %197
  %200 = getelementptr i8, ptr %10, i64 %197
  %scevgep585 = getelementptr i8, ptr %200, i64 -8
  %201 = zext nneg i32 %186 to i64
  %202 = zext nneg i32 %186 to i64
  %min.iters.check = icmp ult i32 %186, 4
  %bound0 = icmp ult ptr %scevgep, %scevgep585
  %bound1 = icmp ugt ptr %scevgep584, %10
  %found.conflict = and i1 %bound0, %bound1
  %stride.check = icmp slt i32 %32, 0
  %203 = or i1 %found.conflict, %stride.check
  %n.vec = and i64 %201, 2147483644
  %ind.end = or disjoint i64 %n.vec, 1
  %cmp.n = icmp eq i64 %n.vec, %201
  br label %.lr.ph448

.lr.ph448:                                        ; preds = %.lr.ph448.preheader, %._crit_edge449
  %indvars.iv511 = phi i64 [ 1, %.lr.ph448.preheader ], [ %indvars.iv.next512, %._crit_edge449 ]
  %204 = mul nsw i64 %indvars.iv511, %188
  %invariant.gep = getelementptr double, ptr %34, i64 %204
  %brmerge = select i1 %min.iters.check, i1 true, i1 %203
  br i1 %brmerge, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.lr.ph448, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph448 ]
  %offset.idx = or disjoint i64 %index, 1
  %205 = getelementptr double, ptr %10, i64 %index
  %206 = getelementptr inbounds i8, ptr %205, i64 16
  %wide.load = load <2 x double>, ptr %205, align 8, !tbaa !10, !alias.scope !15
  %wide.load586 = load <2 x double>, ptr %206, align 8, !tbaa !10, !alias.scope !15
  %207 = getelementptr double, ptr %invariant.gep, i64 %offset.idx
  %208 = getelementptr i8, ptr %207, i64 16
  %wide.load587 = load <2 x double>, ptr %207, align 8, !tbaa !10, !alias.scope !18, !noalias !15
  %wide.load588 = load <2 x double>, ptr %208, align 8, !tbaa !10, !alias.scope !18, !noalias !15
  %209 = fmul <2 x double> %wide.load, %wide.load587
  %210 = fmul <2 x double> %wide.load586, %wide.load588
  store <2 x double> %209, ptr %207, align 8, !tbaa !10, !alias.scope !18, !noalias !15
  store <2 x double> %210, ptr %208, align 8, !tbaa !10, !alias.scope !18, !noalias !15
  %index.next = add nuw i64 %index, 4
  %211 = icmp eq i64 %index.next, %n.vec
  br i1 %211, label %middle.block, label %vector.body, !llvm.loop !20

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

scalar.ph.preheader:                              ; preds = %.lr.ph448, %middle.block
  %indvars.iv506.ph = phi i64 [ 1, %.lr.ph448 ], [ %ind.end, %middle.block ]
  %212 = sub nsw i64 %wide.trip.count509, %indvars.iv506.ph
  %213 = sub nsw i64 %202, %indvars.iv506.ph
  %xtraiter707 = and i64 %212, 3
  %lcmp.mod708.not = icmp eq i64 %xtraiter707, 0
  br i1 %lcmp.mod708.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv506.prol = phi i64 [ %indvars.iv.next507.prol, %scalar.ph.prol ], [ %indvars.iv506.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %214 = getelementptr inbounds double, ptr %30, i64 %indvars.iv506.prol
  %215 = load double, ptr %214, align 8, !tbaa !10
  %gep.prol = getelementptr double, ptr %invariant.gep, i64 %indvars.iv506.prol
  %216 = load double, ptr %gep.prol, align 8, !tbaa !10
  %217 = fmul double %215, %216
  store double %217, ptr %gep.prol, align 8, !tbaa !10
  %indvars.iv.next507.prol = add nuw nsw i64 %indvars.iv506.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter707
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !23

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv506.unr = phi i64 [ %indvars.iv506.ph, %scalar.ph.preheader ], [ %indvars.iv.next507.prol, %scalar.ph.prol ]
  %218 = icmp ult i64 %213, 3
  br i1 %218, label %._crit_edge449, label %scalar.ph.preheader.new

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

scalar.ph:                                        ; preds = %scalar.ph, %scalar.ph.preheader.new
  %indvars.iv506 = phi i64 [ %indvars.iv506.unr, %scalar.ph.preheader.new ], [ %indvars.iv.next507.3, %scalar.ph ]
  %219 = getelementptr inbounds double, ptr %30, i64 %indvars.iv506
  %220 = load double, ptr %219, align 8, !tbaa !10
  %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv506
  %221 = load double, ptr %gep, align 8, !tbaa !10
  %222 = fmul double %220, %221
  store double %222, ptr %gep, align 8, !tbaa !10
  %223 = getelementptr double, ptr %10, i64 %indvars.iv506
  %224 = load double, ptr %223, align 8, !tbaa !10
  %gep723 = getelementptr double, ptr %invariant.gep722, i64 %indvars.iv506
  %225 = load double, ptr %gep723, align 8, !tbaa !10
  %226 = fmul double %224, %225
  store double %226, ptr %gep723, align 8, !tbaa !10
  %indvars.iv.next507.1 = add nuw nsw i64 %indvars.iv506, 2
  %227 = getelementptr inbounds double, ptr %30, i64 %indvars.iv.next507.1
  %228 = load double, ptr %227, align 8, !tbaa !10
  %gep.2 = getelementptr double, ptr %invariant.gep, i64 %indvars.iv.next507.1
  %229 = load double, ptr %gep.2, align 8, !tbaa !10
  %230 = fmul double %228, %229
  store double %230, ptr %gep.2, align 8, !tbaa !10
  %indvars.iv.next507.2 = add nuw nsw i64 %indvars.iv506, 3
  %231 = getelementptr inbounds double, ptr %30, i64 %indvars.iv.next507.2
  %232 = load double, ptr %231, align 8, !tbaa !10
  %gep.3 = getelementptr double, ptr %invariant.gep, i64 %indvars.iv.next507.2
  %233 = load double, ptr %gep.3, align 8, !tbaa !10
  %234 = fmul double %232, %233
  store double %234, ptr %gep.3, align 8, !tbaa !10
  %indvars.iv.next507.3 = add nuw nsw i64 %indvars.iv506, 4
  %exitcond510.not.3 = icmp eq i64 %indvars.iv.next507.3, %wide.trip.count509
  br i1 %exitcond510.not.3, label %._crit_edge449, label %scalar.ph, !llvm.loop !25

._crit_edge449:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %indvars.iv.next512 = add nuw nsw i64 %indvars.iv511, 1
  %exitcond515.not = icmp eq i64 %indvars.iv.next512, %wide.trip.count514
  br i1 %exitcond515.not, label %.loopexit429, label %.lr.ph448, !llvm.loop !26

235:                                              ; preds = %182
  %.not388 = icmp eq i32 %.1357, 0
  br i1 %.not388, label %.loopexit429, label %236

236:                                              ; preds = %235
  %237 = load i32, ptr %3, align 4, !tbaa !5
  %.not389459 = icmp slt i32 %237, 1
  br i1 %.not389459, label %.loopexit429, label %.lr.ph462

.lr.ph462:                                        ; preds = %236
  %238 = load i32, ptr %2, align 4, !tbaa !5
  %.not390454 = icmp slt i32 %238, 1
  br i1 %.not390454, label %.loopexit429, label %.lr.ph457.preheader

.lr.ph457.preheader:                              ; preds = %.lr.ph462
  %239 = add nuw i32 %238, 1
  %240 = sext i32 %32 to i64
  %241 = add nuw i32 %237, 1
  %wide.trip.count524 = zext i32 %241 to i64
  %wide.trip.count519 = zext i32 %239 to i64
  %242 = shl nsw i64 %240, 3
  %243 = shl nsw i64 %33, 3
  %244 = getelementptr i8, ptr %12, i64 %242
  %245 = getelementptr i8, ptr %244, i64 %243
  %scevgep590 = getelementptr i8, ptr %245, i64 8
  %246 = shl nuw nsw i64 %wide.trip.count524, 3
  %247 = add nsw i64 %246, -8
  %248 = mul i64 %247, %240
  %249 = shl nuw nsw i64 %wide.trip.count519, 3
  %250 = getelementptr i8, ptr %12, i64 %248
  %251 = getelementptr i8, ptr %250, i64 %243
  %scevgep591 = getelementptr i8, ptr %251, i64 %249
  %252 = getelementptr i8, ptr %11, i64 %249
  %scevgep592 = getelementptr i8, ptr %252, i64 -8
  %253 = zext nneg i32 %238 to i64
  %254 = zext nneg i32 %238 to i64
  %min.iters.check599 = icmp ult i32 %238, 4
  %bound0593 = icmp ult ptr %scevgep590, %scevgep592
  %bound1594 = icmp ugt ptr %scevgep591, %11
  %found.conflict595 = and i1 %bound0593, %bound1594
  %stride.check596 = icmp slt i32 %32, 0
  %255 = or i1 %found.conflict595, %stride.check596
  %n.vec602 = and i64 %253, 2147483644
  %ind.end603 = or disjoint i64 %n.vec602, 1
  %cmp.n613 = icmp eq i64 %n.vec602, %253
  br label %.lr.ph457

.lr.ph457:                                        ; preds = %.lr.ph457.preheader, %._crit_edge458
  %indvars.iv521 = phi i64 [ 1, %.lr.ph457.preheader ], [ %indvars.iv.next522, %._crit_edge458 ]
  %256 = mul nsw i64 %indvars.iv521, %240
  %invariant.gep573 = getelementptr double, ptr %34, i64 %256
  %brmerge730 = select i1 %min.iters.check599, i1 true, i1 %255
  br i1 %brmerge730, label %scalar.ph598.preheader, label %vector.body605

vector.body605:                                   ; preds = %.lr.ph457, %vector.body605
  %index606 = phi i64 [ %index.next612, %vector.body605 ], [ 0, %.lr.ph457 ]
  %offset.idx607 = or disjoint i64 %index606, 1
  %257 = getelementptr double, ptr %11, i64 %index606
  %258 = getelementptr inbounds i8, ptr %257, i64 16
  %wide.load608 = load <2 x double>, ptr %257, align 8, !tbaa !10, !alias.scope !27
  %wide.load609 = load <2 x double>, ptr %258, align 8, !tbaa !10, !alias.scope !27
  %259 = getelementptr double, ptr %invariant.gep573, i64 %offset.idx607
  %260 = getelementptr i8, ptr %259, i64 16
  %wide.load610 = load <2 x double>, ptr %259, align 8, !tbaa !10, !alias.scope !30, !noalias !27
  %wide.load611 = load <2 x double>, ptr %260, align 8, !tbaa !10, !alias.scope !30, !noalias !27
  %261 = fmul <2 x double> %wide.load608, %wide.load610
  %262 = fmul <2 x double> %wide.load609, %wide.load611
  store <2 x double> %261, ptr %259, align 8, !tbaa !10, !alias.scope !30, !noalias !27
  store <2 x double> %262, ptr %260, align 8, !tbaa !10, !alias.scope !30, !noalias !27
  %index.next612 = add nuw i64 %index606, 4
  %263 = icmp eq i64 %index.next612, %n.vec602
  br i1 %263, label %middle.block597, label %vector.body605, !llvm.loop !32

middle.block597:                                  ; preds = %vector.body605
  br i1 %cmp.n613, label %._crit_edge458, label %scalar.ph598.preheader

scalar.ph598.preheader:                           ; preds = %.lr.ph457, %middle.block597
  %indvars.iv516.ph = phi i64 [ 1, %.lr.ph457 ], [ %ind.end603, %middle.block597 ]
  %264 = sub nsw i64 %wide.trip.count519, %indvars.iv516.ph
  %265 = sub nsw i64 %254, %indvars.iv516.ph
  %xtraiter709 = and i64 %264, 3
  %lcmp.mod710.not = icmp eq i64 %xtraiter709, 0
  br i1 %lcmp.mod710.not, label %scalar.ph598.prol.loopexit, label %scalar.ph598.prol

scalar.ph598.prol:                                ; preds = %scalar.ph598.preheader, %scalar.ph598.prol
  %indvars.iv516.prol = phi i64 [ %indvars.iv.next517.prol, %scalar.ph598.prol ], [ %indvars.iv516.ph, %scalar.ph598.preheader ]
  %prol.iter711 = phi i64 [ %prol.iter711.next, %scalar.ph598.prol ], [ 0, %scalar.ph598.preheader ]
  %266 = getelementptr inbounds double, ptr %31, i64 %indvars.iv516.prol
  %267 = load double, ptr %266, align 8, !tbaa !10
  %gep574.prol = getelementptr double, ptr %invariant.gep573, i64 %indvars.iv516.prol
  %268 = load double, ptr %gep574.prol, align 8, !tbaa !10
  %269 = fmul double %267, %268
  store double %269, ptr %gep574.prol, align 8, !tbaa !10
  %indvars.iv.next517.prol = add nuw nsw i64 %indvars.iv516.prol, 1
  %prol.iter711.next = add i64 %prol.iter711, 1
  %prol.iter711.cmp.not = icmp eq i64 %prol.iter711.next, %xtraiter709
  br i1 %prol.iter711.cmp.not, label %scalar.ph598.prol.loopexit, label %scalar.ph598.prol, !llvm.loop !33

scalar.ph598.prol.loopexit:                       ; preds = %scalar.ph598.prol, %scalar.ph598.preheader
  %indvars.iv516.unr = phi i64 [ %indvars.iv516.ph, %scalar.ph598.preheader ], [ %indvars.iv.next517.prol, %scalar.ph598.prol ]
  %270 = icmp ult i64 %265, 3
  br i1 %270, label %._crit_edge458, label %scalar.ph598.preheader.new

scalar.ph598.preheader.new:                       ; preds = %scalar.ph598.prol.loopexit
  %invariant.gep724 = getelementptr i8, ptr %invariant.gep573, i64 8
  br label %scalar.ph598

scalar.ph598:                                     ; preds = %scalar.ph598, %scalar.ph598.preheader.new
  %indvars.iv516 = phi i64 [ %indvars.iv516.unr, %scalar.ph598.preheader.new ], [ %indvars.iv.next517.3, %scalar.ph598 ]
  %271 = getelementptr inbounds double, ptr %31, i64 %indvars.iv516
  %272 = load double, ptr %271, align 8, !tbaa !10
  %gep574 = getelementptr double, ptr %invariant.gep573, i64 %indvars.iv516
  %273 = load double, ptr %gep574, align 8, !tbaa !10
  %274 = fmul double %272, %273
  store double %274, ptr %gep574, align 8, !tbaa !10
  %275 = getelementptr double, ptr %11, i64 %indvars.iv516
  %276 = load double, ptr %275, align 8, !tbaa !10
  %gep725 = getelementptr double, ptr %invariant.gep724, i64 %indvars.iv516
  %277 = load double, ptr %gep725, align 8, !tbaa !10
  %278 = fmul double %276, %277
  store double %278, ptr %gep725, align 8, !tbaa !10
  %indvars.iv.next517.1 = add nuw nsw i64 %indvars.iv516, 2
  %279 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next517.1
  %280 = load double, ptr %279, align 8, !tbaa !10
  %gep574.2 = getelementptr double, ptr %invariant.gep573, i64 %indvars.iv.next517.1
  %281 = load double, ptr %gep574.2, align 8, !tbaa !10
  %282 = fmul double %280, %281
  store double %282, ptr %gep574.2, align 8, !tbaa !10
  %indvars.iv.next517.2 = add nuw nsw i64 %indvars.iv516, 3
  %283 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next517.2
  %284 = load double, ptr %283, align 8, !tbaa !10
  %gep574.3 = getelementptr double, ptr %invariant.gep573, i64 %indvars.iv.next517.2
  %285 = load double, ptr %gep574.3, align 8, !tbaa !10
  %286 = fmul double %284, %285
  store double %286, ptr %gep574.3, align 8, !tbaa !10
  %indvars.iv.next517.3 = add nuw nsw i64 %indvars.iv516, 4
  %exitcond520.not.3 = icmp eq i64 %indvars.iv.next517.3, %wide.trip.count519
  br i1 %exitcond520.not.3, label %._crit_edge458, label %scalar.ph598, !llvm.loop !34

._crit_edge458:                                   ; preds = %scalar.ph598.prol.loopexit, %scalar.ph598, %middle.block597
  %indvars.iv.next522 = add nuw nsw i64 %indvars.iv521, 1
  %exitcond525.not = icmp eq i64 %indvars.iv.next522, %wide.trip.count524
  br i1 %exitcond525.not, label %.loopexit429, label %.lr.ph457, !llvm.loop !35

.loopexit429:                                     ; preds = %._crit_edge449, %._crit_edge458, %.lr.ph462, %.lr.ph453, %184, %236, %235, %183
  br i1 %or.cond, label %287, label %298

287:                                              ; preds = %.loopexit429
  call void @dlacpy_(ptr noundef nonnull @.str.9, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %6, ptr noundef nonnull %7) #4
  %288 = call i32 @dgetrf_(ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef nonnull %21) #4
  %289 = load i32, ptr %21, align 4, !tbaa !5
  %290 = icmp sgt i32 %289, 0
  br i1 %290, label %291, label %298

291:                                              ; preds = %287
  %292 = call double @dlantr_(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.11, ptr noundef nonnull @.str, ptr noundef nonnull %21, ptr noundef nonnull %21, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %19) #4
  %293 = fcmp oeq double %292, 0.000000e+00
  br i1 %293, label %297, label %294

294:                                              ; preds = %291
  %295 = call double @dlange_(ptr noundef nonnull @.str.10, ptr noundef nonnull %2, ptr noundef nonnull %21, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %19) #4
  %296 = fdiv double %295, %292
  br label %297

297:                                              ; preds = %291, %294
  %.0 = phi double [ %296, %294 ], [ 1.000000e+00, %291 ]
  store double %.0, ptr %19, align 8, !tbaa !10
  store double 0.000000e+00, ptr %16, align 8, !tbaa !10
  br label %435

298:                                              ; preds = %287, %.loopexit429
  %. = select i1 %.not378, i8 73, i8 49
  store i8 %., ptr %25, align 1, !tbaa !9
  %299 = call double @dlange_(ptr noundef nonnull %25, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %19) #4
  store double %299, ptr %26, align 8, !tbaa !10
  %300 = call double @dlantr_(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.11, ptr noundef nonnull @.str, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %19) #4
  %301 = fcmp oeq double %300, 0.000000e+00
  br i1 %301, label %305, label %302

302:                                              ; preds = %298
  %303 = call double @dlange_(ptr noundef nonnull @.str.10, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %19) #4
  %304 = fdiv double %303, %300
  br label %305

305:                                              ; preds = %298, %302
  %.1 = phi double [ %304, %302 ], [ 1.000000e+00, %298 ]
  call void @dgecon_(ptr noundef nonnull %25, ptr noundef nonnull %2, ptr noundef %6, ptr noundef nonnull %7, ptr noundef nonnull %26, ptr noundef %16, ptr noundef %19, ptr noundef %20, ptr noundef nonnull %21) #4
  call void @dlacpy_(ptr noundef nonnull @.str.9, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %12, ptr noundef nonnull %13, ptr noundef %14, ptr noundef nonnull %15) #4
  %306 = call i32 @dgetrs_(ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef %14, ptr noundef nonnull %15, ptr noundef nonnull %21) #4
  call void @dgerfs_(ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef %12, ptr noundef nonnull %13, ptr noundef %14, ptr noundef nonnull %15, ptr noundef %17, ptr noundef %18, ptr noundef %19, ptr noundef %20, ptr noundef nonnull %21) #4
  br i1 %.not378, label %368, label %307

307:                                              ; preds = %305
  %.not398 = icmp eq i32 %.1357, 0
  br i1 %.not398, label %.loopexit, label %308

308:                                              ; preds = %307
  %309 = load i32, ptr %3, align 4, !tbaa !5
  %.not399468 = icmp slt i32 %309, 1
  br i1 %.not399468, label %.loopexit, label %.lr.ph471

.lr.ph471:                                        ; preds = %308
  %310 = load i32, ptr %2, align 4, !tbaa !5
  %.not401463 = icmp slt i32 %310, 1
  br i1 %.not401463, label %.lr.ph476, label %.lr.ph466.preheader

.lr.ph466.preheader:                              ; preds = %.lr.ph471
  %311 = add nuw i32 %310, 1
  %312 = sext i32 %35 to i64
  %313 = add nuw i32 %309, 1
  %wide.trip.count534 = zext i32 %313 to i64
  %wide.trip.count529 = zext i32 %311 to i64
  %314 = shl nsw i64 %312, 3
  %315 = shl nsw i64 %36, 3
  %316 = getelementptr i8, ptr %14, i64 %314
  %317 = getelementptr i8, ptr %316, i64 %315
  %scevgep615 = getelementptr i8, ptr %317, i64 8
  %318 = shl nuw nsw i64 %wide.trip.count534, 3
  %319 = add nsw i64 %318, -8
  %320 = mul i64 %319, %312
  %321 = shl nuw nsw i64 %wide.trip.count529, 3
  %322 = getelementptr i8, ptr %14, i64 %320
  %323 = getelementptr i8, ptr %322, i64 %315
  %scevgep616 = getelementptr i8, ptr %323, i64 %321
  %324 = getelementptr i8, ptr %11, i64 %321
  %scevgep617 = getelementptr i8, ptr %324, i64 -8
  %325 = zext nneg i32 %310 to i64
  %326 = zext nneg i32 %310 to i64
  %min.iters.check624 = icmp ult i32 %310, 4
  %bound0618 = icmp ult ptr %scevgep615, %scevgep617
  %bound1619 = icmp ugt ptr %scevgep616, %11
  %found.conflict620 = and i1 %bound0618, %bound1619
  %stride.check621 = icmp slt i32 %35, 0
  %327 = or i1 %found.conflict620, %stride.check621
  %n.vec627 = and i64 %325, 2147483644
  %ind.end628 = or disjoint i64 %n.vec627, 1
  %cmp.n638 = icmp eq i64 %n.vec627, %325
  br label %.lr.ph466

.lr.ph466:                                        ; preds = %.lr.ph466.preheader, %._crit_edge467
  %indvars.iv531 = phi i64 [ 1, %.lr.ph466.preheader ], [ %indvars.iv.next532, %._crit_edge467 ]
  %328 = mul nsw i64 %indvars.iv531, %312
  %invariant.gep575 = getelementptr double, ptr %37, i64 %328
  %brmerge731 = select i1 %min.iters.check624, i1 true, i1 %327
  br i1 %brmerge731, label %scalar.ph623.preheader, label %vector.body630

vector.body630:                                   ; preds = %.lr.ph466, %vector.body630
  %index631 = phi i64 [ %index.next637, %vector.body630 ], [ 0, %.lr.ph466 ]
  %offset.idx632 = or disjoint i64 %index631, 1
  %329 = getelementptr double, ptr %11, i64 %index631
  %330 = getelementptr inbounds i8, ptr %329, i64 16
  %wide.load633 = load <2 x double>, ptr %329, align 8, !tbaa !10, !alias.scope !36
  %wide.load634 = load <2 x double>, ptr %330, align 8, !tbaa !10, !alias.scope !36
  %331 = getelementptr double, ptr %invariant.gep575, i64 %offset.idx632
  %332 = getelementptr i8, ptr %331, i64 16
  %wide.load635 = load <2 x double>, ptr %331, align 8, !tbaa !10, !alias.scope !39, !noalias !36
  %wide.load636 = load <2 x double>, ptr %332, align 8, !tbaa !10, !alias.scope !39, !noalias !36
  %333 = fmul <2 x double> %wide.load633, %wide.load635
  %334 = fmul <2 x double> %wide.load634, %wide.load636
  store <2 x double> %333, ptr %331, align 8, !tbaa !10, !alias.scope !39, !noalias !36
  store <2 x double> %334, ptr %332, align 8, !tbaa !10, !alias.scope !39, !noalias !36
  %index.next637 = add nuw i64 %index631, 4
  %335 = icmp eq i64 %index.next637, %n.vec627
  br i1 %335, label %middle.block622, label %vector.body630, !llvm.loop !41

middle.block622:                                  ; preds = %vector.body630
  br i1 %cmp.n638, label %._crit_edge467, label %scalar.ph623.preheader

scalar.ph623.preheader:                           ; preds = %.lr.ph466, %middle.block622
  %indvars.iv526.ph = phi i64 [ 1, %.lr.ph466 ], [ %ind.end628, %middle.block622 ]
  %336 = sub nsw i64 %wide.trip.count529, %indvars.iv526.ph
  %337 = sub nsw i64 %326, %indvars.iv526.ph
  %xtraiter712 = and i64 %336, 3
  %lcmp.mod713.not = icmp eq i64 %xtraiter712, 0
  br i1 %lcmp.mod713.not, label %scalar.ph623.prol.loopexit, label %scalar.ph623.prol

scalar.ph623.prol:                                ; preds = %scalar.ph623.preheader, %scalar.ph623.prol
  %indvars.iv526.prol = phi i64 [ %indvars.iv.next527.prol, %scalar.ph623.prol ], [ %indvars.iv526.ph, %scalar.ph623.preheader ]
  %prol.iter714 = phi i64 [ %prol.iter714.next, %scalar.ph623.prol ], [ 0, %scalar.ph623.preheader ]
  %338 = getelementptr inbounds double, ptr %31, i64 %indvars.iv526.prol
  %339 = load double, ptr %338, align 8, !tbaa !10
  %gep576.prol = getelementptr double, ptr %invariant.gep575, i64 %indvars.iv526.prol
  %340 = load double, ptr %gep576.prol, align 8, !tbaa !10
  %341 = fmul double %339, %340
  store double %341, ptr %gep576.prol, align 8, !tbaa !10
  %indvars.iv.next527.prol = add nuw nsw i64 %indvars.iv526.prol, 1
  %prol.iter714.next = add i64 %prol.iter714, 1
  %prol.iter714.cmp.not = icmp eq i64 %prol.iter714.next, %xtraiter712
  br i1 %prol.iter714.cmp.not, label %scalar.ph623.prol.loopexit, label %scalar.ph623.prol, !llvm.loop !42

scalar.ph623.prol.loopexit:                       ; preds = %scalar.ph623.prol, %scalar.ph623.preheader
  %indvars.iv526.unr = phi i64 [ %indvars.iv526.ph, %scalar.ph623.preheader ], [ %indvars.iv.next527.prol, %scalar.ph623.prol ]
  %342 = icmp ult i64 %337, 3
  br i1 %342, label %._crit_edge467, label %scalar.ph623.preheader.new

scalar.ph623.preheader.new:                       ; preds = %scalar.ph623.prol.loopexit
  %invariant.gep726 = getelementptr i8, ptr %invariant.gep575, i64 8
  br label %scalar.ph623

scalar.ph623:                                     ; preds = %scalar.ph623, %scalar.ph623.preheader.new
  %indvars.iv526 = phi i64 [ %indvars.iv526.unr, %scalar.ph623.preheader.new ], [ %indvars.iv.next527.3, %scalar.ph623 ]
  %343 = getelementptr inbounds double, ptr %31, i64 %indvars.iv526
  %344 = load double, ptr %343, align 8, !tbaa !10
  %gep576 = getelementptr double, ptr %invariant.gep575, i64 %indvars.iv526
  %345 = load double, ptr %gep576, align 8, !tbaa !10
  %346 = fmul double %344, %345
  store double %346, ptr %gep576, align 8, !tbaa !10
  %347 = getelementptr double, ptr %11, i64 %indvars.iv526
  %348 = load double, ptr %347, align 8, !tbaa !10
  %gep727 = getelementptr double, ptr %invariant.gep726, i64 %indvars.iv526
  %349 = load double, ptr %gep727, align 8, !tbaa !10
  %350 = fmul double %348, %349
  store double %350, ptr %gep727, align 8, !tbaa !10
  %indvars.iv.next527.1 = add nuw nsw i64 %indvars.iv526, 2
  %351 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next527.1
  %352 = load double, ptr %351, align 8, !tbaa !10
  %gep576.2 = getelementptr double, ptr %invariant.gep575, i64 %indvars.iv.next527.1
  %353 = load double, ptr %gep576.2, align 8, !tbaa !10
  %354 = fmul double %352, %353
  store double %354, ptr %gep576.2, align 8, !tbaa !10
  %indvars.iv.next527.2 = add nuw nsw i64 %indvars.iv526, 3
  %355 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next527.2
  %356 = load double, ptr %355, align 8, !tbaa !10
  %gep576.3 = getelementptr double, ptr %invariant.gep575, i64 %indvars.iv.next527.2
  %357 = load double, ptr %gep576.3, align 8, !tbaa !10
  %358 = fmul double %356, %357
  store double %358, ptr %gep576.3, align 8, !tbaa !10
  %indvars.iv.next527.3 = add nuw nsw i64 %indvars.iv526, 4
  %exitcond530.not.3 = icmp eq i64 %indvars.iv.next527.3, %wide.trip.count529
  br i1 %exitcond530.not.3, label %._crit_edge467, label %scalar.ph623, !llvm.loop !43

._crit_edge467:                                   ; preds = %scalar.ph623.prol.loopexit, %scalar.ph623, %middle.block622
  %indvars.iv.next532 = add nuw nsw i64 %indvars.iv531, 1
  %exitcond535.not = icmp eq i64 %indvars.iv.next532, %wide.trip.count534
  br i1 %exitcond535.not, label %._crit_edge472, label %.lr.ph466, !llvm.loop !44

._crit_edge472:                                   ; preds = %._crit_edge467
  br i1 %.not399468, label %.loopexit, label %.lr.ph476

.lr.ph476:                                        ; preds = %.lr.ph471, %._crit_edge472
  %359 = load double, ptr %27, align 8, !tbaa !10
  %360 = add nuw i32 %309, 1
  %wide.trip.count539 = zext i32 %360 to i64
  %361 = zext nneg i32 %309 to i64
  %min.iters.check641 = icmp eq i32 %309, 1
  br i1 %min.iters.check641, label %scalar.ph640.preheader, label %vector.ph642

vector.ph642:                                     ; preds = %.lr.ph476
  %n.vec644 = and i64 %361, 2147483646
  %ind.end645 = or i64 %361, 1
  %broadcast.splatinsert = insertelement <2 x double> poison, double %359, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body647

vector.body647:                                   ; preds = %vector.body647, %vector.ph642
  %index648 = phi i64 [ 0, %vector.ph642 ], [ %index.next651, %vector.body647 ]
  %362 = getelementptr double, ptr %17, i64 %index648
  %wide.load650 = load <2 x double>, ptr %362, align 8, !tbaa !10
  %363 = fdiv <2 x double> %wide.load650, %broadcast.splat
  store <2 x double> %363, ptr %362, align 8, !tbaa !10
  %index.next651 = add nuw i64 %index648, 2
  %364 = icmp eq i64 %index.next651, %n.vec644
  br i1 %364, label %middle.block639, label %vector.body647, !llvm.loop !45

middle.block639:                                  ; preds = %vector.body647
  %cmp.n652 = icmp eq i64 %n.vec644, %361
  br i1 %cmp.n652, label %.loopexit, label %scalar.ph640.preheader

scalar.ph640.preheader:                           ; preds = %middle.block639, %.lr.ph476
  %indvars.iv536.ph = phi i64 [ 1, %.lr.ph476 ], [ %ind.end645, %middle.block639 ]
  br label %scalar.ph640

scalar.ph640:                                     ; preds = %scalar.ph640.preheader, %scalar.ph640
  %indvars.iv536 = phi i64 [ %indvars.iv.next537, %scalar.ph640 ], [ %indvars.iv536.ph, %scalar.ph640.preheader ]
  %365 = getelementptr inbounds double, ptr %38, i64 %indvars.iv536
  %366 = load double, ptr %365, align 8, !tbaa !10
  %367 = fdiv double %366, %359
  store double %367, ptr %365, align 8, !tbaa !10
  %indvars.iv.next537 = add nuw nsw i64 %indvars.iv536, 1
  %exitcond540.not = icmp eq i64 %indvars.iv.next537, %wide.trip.count539
  br i1 %exitcond540.not, label %.loopexit, label %scalar.ph640, !llvm.loop !46

368:                                              ; preds = %305
  %.not394 = icmp eq i32 %.1354, 0
  br i1 %.not394, label %.loopexit, label %369

369:                                              ; preds = %368
  %370 = load i32, ptr %3, align 4, !tbaa !5
  %.not395482 = icmp slt i32 %370, 1
  br i1 %.not395482, label %.loopexit, label %.lr.ph485

.lr.ph485:                                        ; preds = %369
  %371 = load i32, ptr %2, align 4, !tbaa !5
  %.not397477 = icmp slt i32 %371, 1
  br i1 %.not397477, label %.lr.ph490, label %.lr.ph480.preheader

.lr.ph480.preheader:                              ; preds = %.lr.ph485
  %372 = add nuw i32 %371, 1
  %373 = sext i32 %35 to i64
  %374 = add nuw i32 %370, 1
  %wide.trip.count549 = zext i32 %374 to i64
  %wide.trip.count544 = zext i32 %372 to i64
  %375 = shl nsw i64 %373, 3
  %376 = shl nsw i64 %36, 3
  %377 = getelementptr i8, ptr %14, i64 %375
  %378 = getelementptr i8, ptr %377, i64 %376
  %scevgep654 = getelementptr i8, ptr %378, i64 8
  %379 = shl nuw nsw i64 %wide.trip.count549, 3
  %380 = add nsw i64 %379, -8
  %381 = mul i64 %380, %373
  %382 = shl nuw nsw i64 %wide.trip.count544, 3
  %383 = getelementptr i8, ptr %14, i64 %381
  %384 = getelementptr i8, ptr %383, i64 %376
  %scevgep655 = getelementptr i8, ptr %384, i64 %382
  %385 = getelementptr i8, ptr %10, i64 %382
  %scevgep656 = getelementptr i8, ptr %385, i64 -8
  %386 = zext nneg i32 %371 to i64
  %387 = zext nneg i32 %371 to i64
  %min.iters.check663 = icmp ult i32 %371, 4
  %bound0657 = icmp ult ptr %scevgep654, %scevgep656
  %bound1658 = icmp ugt ptr %scevgep655, %10
  %found.conflict659 = and i1 %bound0657, %bound1658
  %stride.check660 = icmp slt i32 %35, 0
  %388 = or i1 %found.conflict659, %stride.check660
  %n.vec666 = and i64 %386, 2147483644
  %ind.end667 = or disjoint i64 %n.vec666, 1
  %cmp.n677 = icmp eq i64 %n.vec666, %386
  br label %.lr.ph480

.lr.ph480:                                        ; preds = %.lr.ph480.preheader, %._crit_edge481
  %indvars.iv546 = phi i64 [ 1, %.lr.ph480.preheader ], [ %indvars.iv.next547, %._crit_edge481 ]
  %389 = mul nsw i64 %indvars.iv546, %373
  %invariant.gep577 = getelementptr double, ptr %37, i64 %389
  %brmerge732 = select i1 %min.iters.check663, i1 true, i1 %388
  br i1 %brmerge732, label %scalar.ph662.preheader, label %vector.body669

vector.body669:                                   ; preds = %.lr.ph480, %vector.body669
  %index670 = phi i64 [ %index.next676, %vector.body669 ], [ 0, %.lr.ph480 ]
  %offset.idx671 = or disjoint i64 %index670, 1
  %390 = getelementptr double, ptr %10, i64 %index670
  %391 = getelementptr inbounds i8, ptr %390, i64 16
  %wide.load672 = load <2 x double>, ptr %390, align 8, !tbaa !10, !alias.scope !47
  %wide.load673 = load <2 x double>, ptr %391, align 8, !tbaa !10, !alias.scope !47
  %392 = getelementptr double, ptr %invariant.gep577, i64 %offset.idx671
  %393 = getelementptr i8, ptr %392, i64 16
  %wide.load674 = load <2 x double>, ptr %392, align 8, !tbaa !10, !alias.scope !50, !noalias !47
  %wide.load675 = load <2 x double>, ptr %393, align 8, !tbaa !10, !alias.scope !50, !noalias !47
  %394 = fmul <2 x double> %wide.load672, %wide.load674
  %395 = fmul <2 x double> %wide.load673, %wide.load675
  store <2 x double> %394, ptr %392, align 8, !tbaa !10, !alias.scope !50, !noalias !47
  store <2 x double> %395, ptr %393, align 8, !tbaa !10, !alias.scope !50, !noalias !47
  %index.next676 = add nuw i64 %index670, 4
  %396 = icmp eq i64 %index.next676, %n.vec666
  br i1 %396, label %middle.block661, label %vector.body669, !llvm.loop !52

middle.block661:                                  ; preds = %vector.body669
  br i1 %cmp.n677, label %._crit_edge481, label %scalar.ph662.preheader

scalar.ph662.preheader:                           ; preds = %.lr.ph480, %middle.block661
  %indvars.iv541.ph = phi i64 [ 1, %.lr.ph480 ], [ %ind.end667, %middle.block661 ]
  %397 = sub nsw i64 %wide.trip.count544, %indvars.iv541.ph
  %398 = sub nsw i64 %387, %indvars.iv541.ph
  %xtraiter715 = and i64 %397, 3
  %lcmp.mod716.not = icmp eq i64 %xtraiter715, 0
  br i1 %lcmp.mod716.not, label %scalar.ph662.prol.loopexit, label %scalar.ph662.prol

scalar.ph662.prol:                                ; preds = %scalar.ph662.preheader, %scalar.ph662.prol
  %indvars.iv541.prol = phi i64 [ %indvars.iv.next542.prol, %scalar.ph662.prol ], [ %indvars.iv541.ph, %scalar.ph662.preheader ]
  %prol.iter717 = phi i64 [ %prol.iter717.next, %scalar.ph662.prol ], [ 0, %scalar.ph662.preheader ]
  %399 = getelementptr inbounds double, ptr %30, i64 %indvars.iv541.prol
  %400 = load double, ptr %399, align 8, !tbaa !10
  %gep578.prol = getelementptr double, ptr %invariant.gep577, i64 %indvars.iv541.prol
  %401 = load double, ptr %gep578.prol, align 8, !tbaa !10
  %402 = fmul double %400, %401
  store double %402, ptr %gep578.prol, align 8, !tbaa !10
  %indvars.iv.next542.prol = add nuw nsw i64 %indvars.iv541.prol, 1
  %prol.iter717.next = add i64 %prol.iter717, 1
  %prol.iter717.cmp.not = icmp eq i64 %prol.iter717.next, %xtraiter715
  br i1 %prol.iter717.cmp.not, label %scalar.ph662.prol.loopexit, label %scalar.ph662.prol, !llvm.loop !53

scalar.ph662.prol.loopexit:                       ; preds = %scalar.ph662.prol, %scalar.ph662.preheader
  %indvars.iv541.unr = phi i64 [ %indvars.iv541.ph, %scalar.ph662.preheader ], [ %indvars.iv.next542.prol, %scalar.ph662.prol ]
  %403 = icmp ult i64 %398, 3
  br i1 %403, label %._crit_edge481, label %scalar.ph662.preheader.new

scalar.ph662.preheader.new:                       ; preds = %scalar.ph662.prol.loopexit
  %invariant.gep728 = getelementptr i8, ptr %invariant.gep577, i64 8
  br label %scalar.ph662

scalar.ph662:                                     ; preds = %scalar.ph662, %scalar.ph662.preheader.new
  %indvars.iv541 = phi i64 [ %indvars.iv541.unr, %scalar.ph662.preheader.new ], [ %indvars.iv.next542.3, %scalar.ph662 ]
  %404 = getelementptr inbounds double, ptr %30, i64 %indvars.iv541
  %405 = load double, ptr %404, align 8, !tbaa !10
  %gep578 = getelementptr double, ptr %invariant.gep577, i64 %indvars.iv541
  %406 = load double, ptr %gep578, align 8, !tbaa !10
  %407 = fmul double %405, %406
  store double %407, ptr %gep578, align 8, !tbaa !10
  %408 = getelementptr double, ptr %10, i64 %indvars.iv541
  %409 = load double, ptr %408, align 8, !tbaa !10
  %gep729 = getelementptr double, ptr %invariant.gep728, i64 %indvars.iv541
  %410 = load double, ptr %gep729, align 8, !tbaa !10
  %411 = fmul double %409, %410
  store double %411, ptr %gep729, align 8, !tbaa !10
  %indvars.iv.next542.1 = add nuw nsw i64 %indvars.iv541, 2
  %412 = getelementptr inbounds double, ptr %30, i64 %indvars.iv.next542.1
  %413 = load double, ptr %412, align 8, !tbaa !10
  %gep578.2 = getelementptr double, ptr %invariant.gep577, i64 %indvars.iv.next542.1
  %414 = load double, ptr %gep578.2, align 8, !tbaa !10
  %415 = fmul double %413, %414
  store double %415, ptr %gep578.2, align 8, !tbaa !10
  %indvars.iv.next542.2 = add nuw nsw i64 %indvars.iv541, 3
  %416 = getelementptr inbounds double, ptr %30, i64 %indvars.iv.next542.2
  %417 = load double, ptr %416, align 8, !tbaa !10
  %gep578.3 = getelementptr double, ptr %invariant.gep577, i64 %indvars.iv.next542.2
  %418 = load double, ptr %gep578.3, align 8, !tbaa !10
  %419 = fmul double %417, %418
  store double %419, ptr %gep578.3, align 8, !tbaa !10
  %indvars.iv.next542.3 = add nuw nsw i64 %indvars.iv541, 4
  %exitcond545.not.3 = icmp eq i64 %indvars.iv.next542.3, %wide.trip.count544
  br i1 %exitcond545.not.3, label %._crit_edge481, label %scalar.ph662, !llvm.loop !54

._crit_edge481:                                   ; preds = %scalar.ph662.prol.loopexit, %scalar.ph662, %middle.block661
  %indvars.iv.next547 = add nuw nsw i64 %indvars.iv546, 1
  %exitcond550.not = icmp eq i64 %indvars.iv.next547, %wide.trip.count549
  br i1 %exitcond550.not, label %._crit_edge486, label %.lr.ph480, !llvm.loop !55

._crit_edge486:                                   ; preds = %._crit_edge481
  br i1 %.not395482, label %.loopexit, label %.lr.ph490

.lr.ph490:                                        ; preds = %.lr.ph485, %._crit_edge486
  %420 = load double, ptr %29, align 8, !tbaa !10
  %421 = add nuw i32 %370, 1
  %wide.trip.count554 = zext i32 %421 to i64
  %422 = zext nneg i32 %370 to i64
  %min.iters.check680 = icmp eq i32 %370, 1
  br i1 %min.iters.check680, label %scalar.ph679.preheader, label %vector.ph681

vector.ph681:                                     ; preds = %.lr.ph490
  %n.vec683 = and i64 %422, 2147483646
  %ind.end684 = or i64 %422, 1
  %broadcast.splatinsert690 = insertelement <2 x double> poison, double %420, i64 0
  %broadcast.splat691 = shufflevector <2 x double> %broadcast.splatinsert690, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body686

vector.body686:                                   ; preds = %vector.body686, %vector.ph681
  %index687 = phi i64 [ 0, %vector.ph681 ], [ %index.next692, %vector.body686 ]
  %423 = getelementptr double, ptr %17, i64 %index687
  %wide.load689 = load <2 x double>, ptr %423, align 8, !tbaa !10
  %424 = fdiv <2 x double> %wide.load689, %broadcast.splat691
  store <2 x double> %424, ptr %423, align 8, !tbaa !10
  %index.next692 = add nuw i64 %index687, 2
  %425 = icmp eq i64 %index.next692, %n.vec683
  br i1 %425, label %middle.block678, label %vector.body686, !llvm.loop !56

middle.block678:                                  ; preds = %vector.body686
  %cmp.n693 = icmp eq i64 %n.vec683, %422
  br i1 %cmp.n693, label %.loopexit, label %scalar.ph679.preheader

scalar.ph679.preheader:                           ; preds = %middle.block678, %.lr.ph490
  %indvars.iv551.ph = phi i64 [ 1, %.lr.ph490 ], [ %ind.end684, %middle.block678 ]
  br label %scalar.ph679

scalar.ph679:                                     ; preds = %scalar.ph679.preheader, %scalar.ph679
  %indvars.iv551 = phi i64 [ %indvars.iv.next552, %scalar.ph679 ], [ %indvars.iv551.ph, %scalar.ph679.preheader ]
  %426 = getelementptr inbounds double, ptr %38, i64 %indvars.iv551
  %427 = load double, ptr %426, align 8, !tbaa !10
  %428 = fdiv double %427, %420
  store double %428, ptr %426, align 8, !tbaa !10
  %indvars.iv.next552 = add nuw nsw i64 %indvars.iv551, 1
  %exitcond555.not = icmp eq i64 %indvars.iv.next552, %wide.trip.count554
  br i1 %exitcond555.not, label %.loopexit, label %scalar.ph679, !llvm.loop !57

.loopexit:                                        ; preds = %scalar.ph640, %scalar.ph679, %middle.block639, %middle.block678, %369, %308, %._crit_edge472, %._crit_edge486, %368, %307
  store double %.1, ptr %19, align 8, !tbaa !10
  %429 = load double, ptr %16, align 8, !tbaa !10
  %430 = call double @dlamch_(ptr noundef nonnull @.str.12) #4
  %431 = fcmp olt double %429, %430
  br i1 %431, label %432, label %435

432:                                              ; preds = %.loopexit
  %433 = load i32, ptr %2, align 4, !tbaa !5
  %434 = add nsw i32 %433, 1
  store i32 %434, ptr %21, align 4, !tbaa !5
  br label %435

435:                                              ; preds = %.loopexit, %432, %297, %.thread422
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #4
  ret void
}

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

declare void @dgeequ_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @dlaqge_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @dlacpy_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare double @dlantr_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare double @dlange_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @dgecon_(ptr noundef, ptr noundef, 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

declare void @dgerfs_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, 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 i32 @llvm.umax.i32(i32, i32) #3

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

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

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

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


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