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

132:                                              ; preds = %22
  %133 = load i64, ptr %65, align 8, !tbaa !9
  %134 = icmp ne i64 %133, 0
  br i1 %134, label %135, label %137

135:                                              ; preds = %132, %22
  %136 = load ptr, ptr %33, align 8, !tbaa !5
  store i8 78, ptr %136, align 1, !tbaa !11
  store i64 0, ptr %74, align 8, !tbaa !9
  store i64 0, ptr %70, align 8, !tbaa !9
  br label %163

137:                                              ; preds = %132
  %138 = load ptr, ptr %33, align 8, !tbaa !5
  %139 = call i64 @lsame_(ptr noundef %138, ptr noundef @.str.2)
  %140 = icmp ne i64 %139, 0
  br i1 %140, label %145, label %141

141:                                              ; preds = %137
  %142 = load ptr, ptr %33, align 8, !tbaa !5
  %143 = call i64 @lsame_(ptr noundef %142, ptr noundef @.str.3)
  %144 = icmp ne i64 %143, 0
  br label %145

145:                                              ; preds = %141, %137
  %146 = phi i1 [ true, %137 ], [ %144, %141 ]
  %147 = zext i1 %146 to i32
  %148 = sext i32 %147 to i64
  store i64 %148, ptr %74, align 8, !tbaa !9
  %149 = load ptr, ptr %33, align 8, !tbaa !5
  %150 = call i64 @lsame_(ptr noundef %149, ptr noundef @.str.4)
  %151 = icmp ne i64 %150, 0
  br i1 %151, label %156, label %152

152:                                              ; preds = %145
  %153 = load ptr, ptr %33, align 8, !tbaa !5
  %154 = call i64 @lsame_(ptr noundef %153, ptr noundef @.str.3)
  %155 = icmp ne i64 %154, 0
  br label %156

156:                                              ; preds = %152, %145
  %157 = phi i1 [ true, %145 ], [ %155, %152 ]
  %158 = zext i1 %157 to i32
  %159 = sext i32 %158 to i64
  store i64 %159, ptr %70, align 8, !tbaa !9
  %160 = call double @dlamch_(ptr noundef @.str.5)
  store double %160, ptr %73, align 8, !tbaa !12
  %161 = load double, ptr %73, align 8, !tbaa !12
  %162 = fdiv double 1.000000e+00, %161
  store double %162, ptr %68, align 8, !tbaa !12
  br label %163

163:                                              ; preds = %156, %135
  %164 = load i64, ptr %67, align 8, !tbaa !9
  %165 = icmp ne i64 %164, 0
  br i1 %165, label %175, label %166

166:                                              ; preds = %163
  %167 = load i64, ptr %65, align 8, !tbaa !9
  %168 = icmp ne i64 %167, 0
  br i1 %168, label %175, label %169

169:                                              ; preds = %166
  %170 = load ptr, ptr %24, align 8, !tbaa !5
  %171 = call i64 @lsame_(ptr noundef %170, ptr noundef @.str.6)
  %172 = icmp ne i64 %171, 0
  br i1 %172, label %175, label %173

173:                                              ; preds = %169
  %174 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -1, ptr %174, align 8, !tbaa !9
  br label %443

175:                                              ; preds = %169, %166, %163
  %176 = load i64, ptr %72, align 8, !tbaa !9
  %177 = icmp ne i64 %176, 0
  br i1 %177, label %188, label %178

178:                                              ; preds = %175
  %179 = load ptr, ptr %25, align 8, !tbaa !5
  %180 = call i64 @lsame_(ptr noundef %179, ptr noundef @.str.7)
  %181 = icmp ne i64 %180, 0
  br i1 %181, label %188, label %182

182:                                              ; preds = %178
  %183 = load ptr, ptr %25, align 8, !tbaa !5
  %184 = call i64 @lsame_(ptr noundef %183, ptr noundef @.str.4)
  %185 = icmp ne i64 %184, 0
  br i1 %185, label %188, label %186

186:                                              ; preds = %182
  %187 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -2, ptr %187, align 8, !tbaa !9
  br label %442

188:                                              ; preds = %182, %178, %175
  %189 = load ptr, ptr %26, align 8, !tbaa !5
  %190 = load i64, ptr %189, align 8, !tbaa !9
  %191 = icmp slt i64 %190, 0
  br i1 %191, label %192, label %194

192:                                              ; preds = %188
  %193 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -3, ptr %193, align 8, !tbaa !9
  br label %441

194:                                              ; preds = %188
  %195 = load ptr, ptr %27, align 8, !tbaa !5
  %196 = load i64, ptr %195, align 8, !tbaa !9
  %197 = icmp slt i64 %196, 0
  br i1 %197, label %198, label %200

198:                                              ; preds = %194
  %199 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -4, ptr %199, align 8, !tbaa !9
  br label %440

200:                                              ; preds = %194
  %201 = load ptr, ptr %29, align 8, !tbaa !5
  %202 = load i64, ptr %201, align 8, !tbaa !9
  %203 = load ptr, ptr %26, align 8, !tbaa !5
  %204 = load i64, ptr %203, align 8, !tbaa !9
  %205 = icmp sge i64 1, %204
  br i1 %205, label %206, label %207

206:                                              ; preds = %200
  br label %210

207:                                              ; preds = %200
  %208 = load ptr, ptr %26, align 8, !tbaa !5
  %209 = load i64, ptr %208, align 8, !tbaa !9
  br label %210

210:                                              ; preds = %207, %206
  %211 = phi i64 [ 1, %206 ], [ %209, %207 ]
  %212 = icmp slt i64 %202, %211
  br i1 %212, label %213, label %215

213:                                              ; preds = %210
  %214 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -6, ptr %214, align 8, !tbaa !9
  br label %439

215:                                              ; preds = %210
  %216 = load ptr, ptr %31, align 8, !tbaa !5
  %217 = load i64, ptr %216, align 8, !tbaa !9
  %218 = load ptr, ptr %26, align 8, !tbaa !5
  %219 = load i64, ptr %218, align 8, !tbaa !9
  %220 = icmp sge i64 1, %219
  br i1 %220, label %221, label %222

221:                                              ; preds = %215
  br label %225

222:                                              ; preds = %215
  %223 = load ptr, ptr %26, align 8, !tbaa !5
  %224 = load i64, ptr %223, align 8, !tbaa !9
  br label %225

225:                                              ; preds = %222, %221
  %226 = phi i64 [ 1, %221 ], [ %224, %222 ]
  %227 = icmp slt i64 %217, %226
  br i1 %227, label %228, label %230

228:                                              ; preds = %225
  %229 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -8, ptr %229, align 8, !tbaa !9
  br label %438

230:                                              ; preds = %225
  %231 = load ptr, ptr %24, align 8, !tbaa !5
  %232 = call i64 @lsame_(ptr noundef %231, ptr noundef @.str.6)
  %233 = icmp ne i64 %232, 0
  br i1 %233, label %234, label %246

234:                                              ; preds = %230
  %235 = load i64, ptr %74, align 8, !tbaa !9
  %236 = icmp ne i64 %235, 0
  br i1 %236, label %246, label %237

237:                                              ; preds = %234
  %238 = load i64, ptr %70, align 8, !tbaa !9
  %239 = icmp ne i64 %238, 0
  br i1 %239, label %246, label %240

240:                                              ; preds = %237
  %241 = load ptr, ptr %33, align 8, !tbaa !5
  %242 = call i64 @lsame_(ptr noundef %241, ptr noundef @.str)
  %243 = icmp ne i64 %242, 0
  br i1 %243, label %246, label %244

244:                                              ; preds = %240
  %245 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -10, ptr %245, align 8, !tbaa !9
  br label %437

246:                                              ; preds = %240, %237, %234, %230
  %247 = load i64, ptr %74, align 8, !tbaa !9
  %248 = icmp ne i64 %247, 0
  br i1 %248, label %249, label %321

249:                                              ; preds = %246
  %250 = load double, ptr %68, align 8, !tbaa !12
  store double %250, ptr %62, align 8, !tbaa !12
  store double 0.000000e+00, ptr %63, align 8, !tbaa !12
  %251 = load ptr, ptr %26, align 8, !tbaa !5
  %252 = load i64, ptr %251, align 8, !tbaa !9
  store i64 %252, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %253

253:                                              ; preds = %286, %249
  %254 = load i64, ptr %59, align 8, !tbaa !9
  %255 = load i64, ptr %54, align 8, !tbaa !9
  %256 = icmp sle i64 %254, %255
  br i1 %256, label %257, label %289

257:                                              ; preds = %253
  %258 = load double, ptr %62, align 8, !tbaa !12
  store double %258, ptr %56, align 8, !tbaa !12
  %259 = load ptr, ptr %34, align 8, !tbaa !5
  %260 = load i64, ptr %59, align 8, !tbaa !9
  %261 = getelementptr inbounds double, ptr %259, i64 %260
  %262 = load double, ptr %261, align 8, !tbaa !12
  store double %262, ptr %57, align 8, !tbaa !12
  %263 = load double, ptr %56, align 8, !tbaa !12
  %264 = load double, ptr %57, align 8, !tbaa !12
  %265 = fcmp ole double %263, %264
  br i1 %265, label %266, label %268

266:                                              ; preds = %257
  %267 = load double, ptr %56, align 8, !tbaa !12
  br label %270

268:                                              ; preds = %257
  %269 = load double, ptr %57, align 8, !tbaa !12
  br label %270

270:                                              ; preds = %268, %266
  %271 = phi double [ %267, %266 ], [ %269, %268 ]
  store double %271, ptr %62, align 8, !tbaa !12
  %272 = load double, ptr %63, align 8, !tbaa !12
  store double %272, ptr %56, align 8, !tbaa !12
  %273 = load ptr, ptr %34, align 8, !tbaa !5
  %274 = load i64, ptr %59, align 8, !tbaa !9
  %275 = getelementptr inbounds double, ptr %273, i64 %274
  %276 = load double, ptr %275, align 8, !tbaa !12
  store double %276, ptr %57, align 8, !tbaa !12
  %277 = load double, ptr %56, align 8, !tbaa !12
  %278 = load double, ptr %57, align 8, !tbaa !12
  %279 = fcmp oge double %277, %278
  br i1 %279, label %280, label %282

280:                                              ; preds = %270
  %281 = load double, ptr %56, align 8, !tbaa !12
  br label %284

282:                                              ; preds = %270
  %283 = load double, ptr %57, align 8, !tbaa !12
  br label %284

284:                                              ; preds = %282, %280
  %285 = phi double [ %281, %280 ], [ %283, %282 ]
  store double %285, ptr %63, align 8, !tbaa !12
  br label %286

286:                                              ; preds = %284
  %287 = load i64, ptr %59, align 8, !tbaa !9
  %288 = add nsw i64 %287, 1
  store i64 %288, ptr %59, align 8, !tbaa !9
  br label %253, !llvm.loop !14

289:                                              ; preds = %253
  %290 = load double, ptr %62, align 8, !tbaa !12
  %291 = fcmp ole double %290, 0.000000e+00
  br i1 %291, label %292, label %294

292:                                              ; preds = %289
  %293 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -11, ptr %293, align 8, !tbaa !9
  br label %320

294:                                              ; preds = %289
  %295 = load ptr, ptr %26, align 8, !tbaa !5
  %296 = load i64, ptr %295, align 8, !tbaa !9
  %297 = icmp sgt i64 %296, 0
  br i1 %297, label %298, label %318

298:                                              ; preds = %294
  %299 = load double, ptr %62, align 8, !tbaa !12
  %300 = load double, ptr %73, align 8, !tbaa !12
  %301 = fcmp oge double %299, %300
  br i1 %301, label %302, label %304

302:                                              ; preds = %298
  %303 = load double, ptr %62, align 8, !tbaa !12
  br label %306

304:                                              ; preds = %298
  %305 = load double, ptr %73, align 8, !tbaa !12
  br label %306

306:                                              ; preds = %304, %302
  %307 = phi double [ %303, %302 ], [ %305, %304 ]
  %308 = load double, ptr %63, align 8, !tbaa !12
  %309 = load double, ptr %68, align 8, !tbaa !12
  %310 = fcmp ole double %308, %309
  br i1 %310, label %311, label %313

311:                                              ; preds = %306
  %312 = load double, ptr %63, align 8, !tbaa !12
  br label %315

313:                                              ; preds = %306
  %314 = load double, ptr %68, align 8, !tbaa !12
  br label %315

315:                                              ; preds = %313, %311
  %316 = phi double [ %312, %311 ], [ %314, %313 ]
  %317 = fdiv double %307, %316
  store double %317, ptr %71, align 8, !tbaa !12
  br label %319

318:                                              ; preds = %294
  store double 1.000000e+00, ptr %71, align 8, !tbaa !12
  br label %319

319:                                              ; preds = %318, %315
  br label %320

320:                                              ; preds = %319, %292
  br label %321

321:                                              ; preds = %320, %246
  %322 = load i64, ptr %70, align 8, !tbaa !9
  %323 = icmp ne i64 %322, 0
  br i1 %323, label %324, label %400

324:                                              ; preds = %321
  %325 = load ptr, ptr %45, align 8, !tbaa !5
  %326 = load i64, ptr %325, align 8, !tbaa !9
  %327 = icmp eq i64 %326, 0
  br i1 %327, label %328, label %400

328:                                              ; preds = %324
  %329 = load double, ptr %68, align 8, !tbaa !12
  store double %329, ptr %62, align 8, !tbaa !12
  store double 0.000000e+00, ptr %63, align 8, !tbaa !12
  %330 = load ptr, ptr %26, align 8, !tbaa !5
  %331 = load i64, ptr %330, align 8, !tbaa !9
  store i64 %331, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %332

332:                                              ; preds = %365, %328
  %333 = load i64, ptr %59, align 8, !tbaa !9
  %334 = load i64, ptr %54, align 8, !tbaa !9
  %335 = icmp sle i64 %333, %334
  br i1 %335, label %336, label %368

336:                                              ; preds = %332
  %337 = load double, ptr %62, align 8, !tbaa !12
  store double %337, ptr %56, align 8, !tbaa !12
  %338 = load ptr, ptr %35, align 8, !tbaa !5
  %339 = load i64, ptr %59, align 8, !tbaa !9
  %340 = getelementptr inbounds double, ptr %338, i64 %339
  %341 = load double, ptr %340, align 8, !tbaa !12
  store double %341, ptr %57, align 8, !tbaa !12
  %342 = load double, ptr %56, align 8, !tbaa !12
  %343 = load double, ptr %57, align 8, !tbaa !12
  %344 = fcmp ole double %342, %343
  br i1 %344, label %345, label %347

345:                                              ; preds = %336
  %346 = load double, ptr %56, align 8, !tbaa !12
  br label %349

347:                                              ; preds = %336
  %348 = load double, ptr %57, align 8, !tbaa !12
  br label %349

349:                                              ; preds = %347, %345
  %350 = phi double [ %346, %345 ], [ %348, %347 ]
  store double %350, ptr %62, align 8, !tbaa !12
  %351 = load double, ptr %63, align 8, !tbaa !12
  store double %351, ptr %56, align 8, !tbaa !12
  %352 = load ptr, ptr %35, align 8, !tbaa !5
  %353 = load i64, ptr %59, align 8, !tbaa !9
  %354 = getelementptr inbounds double, ptr %352, i64 %353
  %355 = load double, ptr %354, align 8, !tbaa !12
  store double %355, ptr %57, align 8, !tbaa !12
  %356 = load double, ptr %56, align 8, !tbaa !12
  %357 = load double, ptr %57, align 8, !tbaa !12
  %358 = fcmp oge double %356, %357
  br i1 %358, label %359, label %361

359:                                              ; preds = %349
  %360 = load double, ptr %56, align 8, !tbaa !12
  br label %363

361:                                              ; preds = %349
  %362 = load double, ptr %57, align 8, !tbaa !12
  br label %363

363:                                              ; preds = %361, %359
  %364 = phi double [ %360, %359 ], [ %362, %361 ]
  store double %364, ptr %63, align 8, !tbaa !12
  br label %365

365:                                              ; preds = %363
  %366 = load i64, ptr %59, align 8, !tbaa !9
  %367 = add nsw i64 %366, 1
  store i64 %367, ptr %59, align 8, !tbaa !9
  br label %332, !llvm.loop !16

368:                                              ; preds = %332
  %369 = load double, ptr %62, align 8, !tbaa !12
  %370 = fcmp ole double %369, 0.000000e+00
  br i1 %370, label %371, label %373

371:                                              ; preds = %368
  %372 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -12, ptr %372, align 8, !tbaa !9
  br label %399

373:                                              ; preds = %368
  %374 = load ptr, ptr %26, align 8, !tbaa !5
  %375 = load i64, ptr %374, align 8, !tbaa !9
  %376 = icmp sgt i64 %375, 0
  br i1 %376, label %377, label %397

377:                                              ; preds = %373
  %378 = load double, ptr %62, align 8, !tbaa !12
  %379 = load double, ptr %73, align 8, !tbaa !12
  %380 = fcmp oge double %378, %379
  br i1 %380, label %381, label %383

381:                                              ; preds = %377
  %382 = load double, ptr %62, align 8, !tbaa !12
  br label %385

383:                                              ; preds = %377
  %384 = load double, ptr %73, align 8, !tbaa !12
  br label %385

385:                                              ; preds = %383, %381
  %386 = phi double [ %382, %381 ], [ %384, %383 ]
  %387 = load double, ptr %63, align 8, !tbaa !12
  %388 = load double, ptr %68, align 8, !tbaa !12
  %389 = fcmp ole double %387, %388
  br i1 %389, label %390, label %392

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

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

394:                                              ; preds = %392, %390
  %395 = phi double [ %391, %390 ], [ %393, %392 ]
  %396 = fdiv double %386, %395
  store double %396, ptr %66, align 8, !tbaa !12
  br label %398

397:                                              ; preds = %373
  store double 1.000000e+00, ptr %66, align 8, !tbaa !12
  br label %398

398:                                              ; preds = %397, %394
  br label %399

399:                                              ; preds = %398, %371
  br label %400

400:                                              ; preds = %399, %324, %321
  %401 = load ptr, ptr %45, align 8, !tbaa !5
  %402 = load i64, ptr %401, align 8, !tbaa !9
  %403 = icmp eq i64 %402, 0
  br i1 %403, label %404, label %436

404:                                              ; preds = %400
  %405 = load ptr, ptr %37, align 8, !tbaa !5
  %406 = load i64, ptr %405, align 8, !tbaa !9
  %407 = load ptr, ptr %26, align 8, !tbaa !5
  %408 = load i64, ptr %407, align 8, !tbaa !9
  %409 = icmp sge i64 1, %408
  br i1 %409, label %410, label %411

410:                                              ; preds = %404
  br label %414

411:                                              ; preds = %404
  %412 = load ptr, ptr %26, align 8, !tbaa !5
  %413 = load i64, ptr %412, align 8, !tbaa !9
  br label %414

414:                                              ; preds = %411, %410
  %415 = phi i64 [ 1, %410 ], [ %413, %411 ]
  %416 = icmp slt i64 %406, %415
  br i1 %416, label %417, label %419

417:                                              ; preds = %414
  %418 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -14, ptr %418, align 8, !tbaa !9
  br label %435

419:                                              ; preds = %414
  %420 = load ptr, ptr %39, align 8, !tbaa !5
  %421 = load i64, ptr %420, align 8, !tbaa !9
  %422 = load ptr, ptr %26, align 8, !tbaa !5
  %423 = load i64, ptr %422, align 8, !tbaa !9
  %424 = icmp sge i64 1, %423
  br i1 %424, label %425, label %426

425:                                              ; preds = %419
  br label %429

426:                                              ; preds = %419
  %427 = load ptr, ptr %26, align 8, !tbaa !5
  %428 = load i64, ptr %427, align 8, !tbaa !9
  br label %429

429:                                              ; preds = %426, %425
  %430 = phi i64 [ 1, %425 ], [ %428, %426 ]
  %431 = icmp slt i64 %421, %430
  br i1 %431, label %432, label %434

432:                                              ; preds = %429
  %433 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -16, ptr %433, align 8, !tbaa !9
  br label %434

434:                                              ; preds = %432, %429
  br label %435

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

436:                                              ; preds = %435, %400
  br label %437

437:                                              ; preds = %436, %244
  br label %438

438:                                              ; preds = %437, %228
  br label %439

439:                                              ; preds = %438, %213
  br label %440

440:                                              ; preds = %439, %198
  br label %441

441:                                              ; preds = %440, %192
  br label %442

442:                                              ; preds = %441, %186
  br label %443

443:                                              ; preds = %442, %173
  %444 = load ptr, ptr %45, align 8, !tbaa !5
  %445 = load i64, ptr %444, align 8, !tbaa !9
  %446 = icmp ne i64 %445, 0
  br i1 %446, label %447, label %452

447:                                              ; preds = %443
  %448 = load ptr, ptr %45, align 8, !tbaa !5
  %449 = load i64, ptr %448, align 8, !tbaa !9
  %450 = sub nsw i64 0, %449
  store i64 %450, ptr %54, align 8, !tbaa !9
  %451 = call i32 @xerbla_(ptr noundef @.str.8, ptr noundef %54)
  store i32 0, ptr %23, align 4
  store i32 1, ptr %76, align 4
  br label %921

452:                                              ; preds = %443
  %453 = load i64, ptr %65, align 8, !tbaa !9
  %454 = icmp ne i64 %453, 0
  br i1 %454, label %455, label %505

455:                                              ; preds = %452
  %456 = load ptr, ptr %26, align 8, !tbaa !5
  %457 = load ptr, ptr %26, align 8, !tbaa !5
  %458 = load ptr, ptr %28, align 8, !tbaa !5
  %459 = load i64, ptr %47, align 8, !tbaa !9
  %460 = getelementptr inbounds double, ptr %458, i64 %459
  %461 = load ptr, ptr %29, align 8, !tbaa !5
  %462 = load ptr, ptr %34, align 8, !tbaa !5
  %463 = getelementptr inbounds double, ptr %462, i64 1
  %464 = load ptr, ptr %35, align 8, !tbaa !5
  %465 = getelementptr inbounds double, ptr %464, i64 1
  %466 = call i32 @dgeequ_(ptr noundef %456, ptr noundef %457, ptr noundef %460, ptr noundef %461, ptr noundef %463, ptr noundef %465, ptr noundef %71, ptr noundef %66, ptr noundef %60, ptr noundef %69)
  %467 = load i64, ptr %69, align 8, !tbaa !9
  %468 = icmp eq i64 %467, 0
  br i1 %468, label %469, label %504

469:                                              ; preds = %455
  %470 = load ptr, ptr %26, align 8, !tbaa !5
  %471 = load ptr, ptr %26, align 8, !tbaa !5
  %472 = load ptr, ptr %28, align 8, !tbaa !5
  %473 = load i64, ptr %47, align 8, !tbaa !9
  %474 = getelementptr inbounds double, ptr %472, i64 %473
  %475 = load ptr, ptr %29, align 8, !tbaa !5
  %476 = load ptr, ptr %34, align 8, !tbaa !5
  %477 = getelementptr inbounds double, ptr %476, i64 1
  %478 = load ptr, ptr %35, align 8, !tbaa !5
  %479 = getelementptr inbounds double, ptr %478, i64 1
  %480 = load ptr, ptr %33, align 8, !tbaa !5
  %481 = call i32 @dlaqge_(ptr noundef %470, ptr noundef %471, ptr noundef %474, ptr noundef %475, ptr noundef %477, ptr noundef %479, ptr noundef %71, ptr noundef %66, ptr noundef %60, ptr noundef %480)
  %482 = load ptr, ptr %33, align 8, !tbaa !5
  %483 = call i64 @lsame_(ptr noundef %482, ptr noundef @.str.2)
  %484 = icmp ne i64 %483, 0
  br i1 %484, label %489, label %485

485:                                              ; preds = %469
  %486 = load ptr, ptr %33, align 8, !tbaa !5
  %487 = call i64 @lsame_(ptr noundef %486, ptr noundef @.str.3)
  %488 = icmp ne i64 %487, 0
  br label %489

489:                                              ; preds = %485, %469
  %490 = phi i1 [ true, %469 ], [ %488, %485 ]
  %491 = zext i1 %490 to i32
  %492 = sext i32 %491 to i64
  store i64 %492, ptr %74, align 8, !tbaa !9
  %493 = load ptr, ptr %33, align 8, !tbaa !5
  %494 = call i64 @lsame_(ptr noundef %493, ptr noundef @.str.4)
  %495 = icmp ne i64 %494, 0
  br i1 %495, label %500, label %496

496:                                              ; preds = %489
  %497 = load ptr, ptr %33, align 8, !tbaa !5
  %498 = call i64 @lsame_(ptr noundef %497, ptr noundef @.str.3)
  %499 = icmp ne i64 %498, 0
  br label %500

500:                                              ; preds = %496, %489
  %501 = phi i1 [ true, %489 ], [ %499, %496 ]
  %502 = zext i1 %501 to i32
  %503 = sext i32 %502 to i64
  store i64 %503, ptr %70, align 8, !tbaa !9
  br label %504

504:                                              ; preds = %500, %455
  br label %505

505:                                              ; preds = %504, %452
  %506 = load i64, ptr %72, align 8, !tbaa !9
  %507 = icmp ne i64 %506, 0
  br i1 %507, label %508, label %555

508:                                              ; preds = %505
  %509 = load i64, ptr %74, align 8, !tbaa !9
  %510 = icmp ne i64 %509, 0
  br i1 %510, label %511, label %554

511:                                              ; preds = %508
  %512 = load ptr, ptr %27, align 8, !tbaa !5
  %513 = load i64, ptr %512, align 8, !tbaa !9
  store i64 %513, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %514

514:                                              ; preds = %550, %511
  %515 = load i64, ptr %59, align 8, !tbaa !9
  %516 = load i64, ptr %54, align 8, !tbaa !9
  %517 = icmp sle i64 %515, %516
  br i1 %517, label %518, label %553

518:                                              ; preds = %514
  %519 = load ptr, ptr %26, align 8, !tbaa !5
  %520 = load i64, ptr %519, align 8, !tbaa !9
  store i64 %520, ptr %55, align 8, !tbaa !9
  store i64 1, ptr %58, align 8, !tbaa !9
  br label %521

521:                                              ; preds = %546, %518
  %522 = load i64, ptr %58, align 8, !tbaa !9
  %523 = load i64, ptr %55, align 8, !tbaa !9
  %524 = icmp sle i64 %522, %523
  br i1 %524, label %525, label %549

525:                                              ; preds = %521
  %526 = load ptr, ptr %34, align 8, !tbaa !5
  %527 = load i64, ptr %58, align 8, !tbaa !9
  %528 = getelementptr inbounds double, ptr %526, i64 %527
  %529 = load double, ptr %528, align 8, !tbaa !12
  %530 = load ptr, ptr %36, align 8, !tbaa !5
  %531 = load i64, ptr %58, align 8, !tbaa !9
  %532 = load i64, ptr %59, align 8, !tbaa !9
  %533 = load i64, ptr %50, align 8, !tbaa !9
  %534 = mul nsw i64 %532, %533
  %535 = add nsw i64 %531, %534
  %536 = getelementptr inbounds double, ptr %530, i64 %535
  %537 = load double, ptr %536, align 8, !tbaa !12
  %538 = fmul double %529, %537
  %539 = load ptr, ptr %36, align 8, !tbaa !5
  %540 = load i64, ptr %58, align 8, !tbaa !9
  %541 = load i64, ptr %59, align 8, !tbaa !9
  %542 = load i64, ptr %50, align 8, !tbaa !9
  %543 = mul nsw i64 %541, %542
  %544 = add nsw i64 %540, %543
  %545 = getelementptr inbounds double, ptr %539, i64 %544
  store double %538, ptr %545, align 8, !tbaa !12
  br label %546

546:                                              ; preds = %525
  %547 = load i64, ptr %58, align 8, !tbaa !9
  %548 = add nsw i64 %547, 1
  store i64 %548, ptr %58, align 8, !tbaa !9
  br label %521, !llvm.loop !17

549:                                              ; preds = %521
  br label %550

550:                                              ; preds = %549
  %551 = load i64, ptr %59, align 8, !tbaa !9
  %552 = add nsw i64 %551, 1
  store i64 %552, ptr %59, align 8, !tbaa !9
  br label %514, !llvm.loop !18

553:                                              ; preds = %514
  br label %554

554:                                              ; preds = %553, %508
  br label %602

555:                                              ; preds = %505
  %556 = load i64, ptr %70, align 8, !tbaa !9
  %557 = icmp ne i64 %556, 0
  br i1 %557, label %558, label %601

558:                                              ; preds = %555
  %559 = load ptr, ptr %27, align 8, !tbaa !5
  %560 = load i64, ptr %559, align 8, !tbaa !9
  store i64 %560, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %561

561:                                              ; preds = %597, %558
  %562 = load i64, ptr %59, align 8, !tbaa !9
  %563 = load i64, ptr %54, align 8, !tbaa !9
  %564 = icmp sle i64 %562, %563
  br i1 %564, label %565, label %600

565:                                              ; preds = %561
  %566 = load ptr, ptr %26, align 8, !tbaa !5
  %567 = load i64, ptr %566, align 8, !tbaa !9
  store i64 %567, ptr %55, align 8, !tbaa !9
  store i64 1, ptr %58, align 8, !tbaa !9
  br label %568

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

572:                                              ; preds = %568
  %573 = load ptr, ptr %35, align 8, !tbaa !5
  %574 = load i64, ptr %58, align 8, !tbaa !9
  %575 = getelementptr inbounds double, ptr %573, i64 %574
  %576 = load double, ptr %575, align 8, !tbaa !12
  %577 = load ptr, ptr %36, align 8, !tbaa !5
  %578 = load i64, ptr %58, align 8, !tbaa !9
  %579 = load i64, ptr %59, align 8, !tbaa !9
  %580 = load i64, ptr %50, align 8, !tbaa !9
  %581 = mul nsw i64 %579, %580
  %582 = add nsw i64 %578, %581
  %583 = getelementptr inbounds double, ptr %577, i64 %582
  %584 = load double, ptr %583, align 8, !tbaa !12
  %585 = fmul double %576, %584
  %586 = load ptr, ptr %36, align 8, !tbaa !5
  %587 = load i64, ptr %58, align 8, !tbaa !9
  %588 = load i64, ptr %59, align 8, !tbaa !9
  %589 = load i64, ptr %50, align 8, !tbaa !9
  %590 = mul nsw i64 %588, %589
  %591 = add nsw i64 %587, %590
  %592 = getelementptr inbounds double, ptr %586, i64 %591
  store double %585, ptr %592, align 8, !tbaa !12
  br label %593

593:                                              ; preds = %572
  %594 = load i64, ptr %58, align 8, !tbaa !9
  %595 = add nsw i64 %594, 1
  store i64 %595, ptr %58, align 8, !tbaa !9
  br label %568, !llvm.loop !19

596:                                              ; preds = %568
  br label %597

597:                                              ; preds = %596
  %598 = load i64, ptr %59, align 8, !tbaa !9
  %599 = add nsw i64 %598, 1
  store i64 %599, ptr %59, align 8, !tbaa !9
  br label %561, !llvm.loop !20

600:                                              ; preds = %561
  br label %601

601:                                              ; preds = %600, %555
  br label %602

602:                                              ; preds = %601, %554
  %603 = load i64, ptr %67, align 8, !tbaa !9
  %604 = icmp ne i64 %603, 0
  br i1 %604, label %608, label %605

605:                                              ; preds = %602
  %606 = load i64, ptr %65, align 8, !tbaa !9
  %607 = icmp ne i64 %606, 0
  br i1 %607, label %608, label %664

608:                                              ; preds = %605, %602
  %609 = load ptr, ptr %26, align 8, !tbaa !5
  %610 = load ptr, ptr %26, align 8, !tbaa !5
  %611 = load ptr, ptr %28, align 8, !tbaa !5
  %612 = load i64, ptr %47, align 8, !tbaa !9
  %613 = getelementptr inbounds double, ptr %611, i64 %612
  %614 = load ptr, ptr %29, align 8, !tbaa !5
  %615 = load ptr, ptr %30, align 8, !tbaa !5
  %616 = load i64, ptr %49, align 8, !tbaa !9
  %617 = getelementptr inbounds double, ptr %615, i64 %616
  %618 = load ptr, ptr %31, align 8, !tbaa !5
  %619 = call i32 @dlacpy_(ptr noundef @.str.9, ptr noundef %609, ptr noundef %610, ptr noundef %613, ptr noundef %614, ptr noundef %617, ptr noundef %618)
  %620 = load ptr, ptr %26, align 8, !tbaa !5
  %621 = load ptr, ptr %26, align 8, !tbaa !5
  %622 = load ptr, ptr %30, align 8, !tbaa !5
  %623 = load i64, ptr %49, align 8, !tbaa !9
  %624 = getelementptr inbounds double, ptr %622, i64 %623
  %625 = load ptr, ptr %31, align 8, !tbaa !5
  %626 = load ptr, ptr %32, align 8, !tbaa !5
  %627 = getelementptr inbounds i64, ptr %626, i64 1
  %628 = load ptr, ptr %45, align 8, !tbaa !5
  %629 = call i32 @dgetrf_(ptr noundef %620, ptr noundef %621, ptr noundef %624, ptr noundef %625, ptr noundef %627, ptr noundef %628)
  %630 = load ptr, ptr %45, align 8, !tbaa !5
  %631 = load i64, ptr %630, align 8, !tbaa !9
  %632 = icmp sgt i64 %631, 0
  br i1 %632, label %633, label %663

633:                                              ; preds = %608
  %634 = load ptr, ptr %45, align 8, !tbaa !5
  %635 = load ptr, ptr %45, align 8, !tbaa !5
  %636 = load ptr, ptr %30, align 8, !tbaa !5
  %637 = load i64, ptr %49, align 8, !tbaa !9
  %638 = getelementptr inbounds double, ptr %636, i64 %637
  %639 = load ptr, ptr %31, align 8, !tbaa !5
  %640 = load ptr, ptr %43, align 8, !tbaa !5
  %641 = getelementptr inbounds double, ptr %640, i64 1
  %642 = call double @dlantr_(ptr noundef @.str.10, ptr noundef @.str.11, ptr noundef @.str, ptr noundef %634, ptr noundef %635, ptr noundef %638, ptr noundef %639, ptr noundef %641)
  store double %642, ptr %75, align 8, !tbaa !12
  %643 = load double, ptr %75, align 8, !tbaa !12
  %644 = fcmp oeq double %643, 0.000000e+00
  br i1 %644, label %645, label %646

645:                                              ; preds = %633
  store double 1.000000e+00, ptr %75, align 8, !tbaa !12
  br label %658

646:                                              ; preds = %633
  %647 = load ptr, ptr %26, align 8, !tbaa !5
  %648 = load ptr, ptr %45, align 8, !tbaa !5
  %649 = load ptr, ptr %28, align 8, !tbaa !5
  %650 = load i64, ptr %47, align 8, !tbaa !9
  %651 = getelementptr inbounds double, ptr %649, i64 %650
  %652 = load ptr, ptr %29, align 8, !tbaa !5
  %653 = load ptr, ptr %43, align 8, !tbaa !5
  %654 = getelementptr inbounds double, ptr %653, i64 1
  %655 = call double @dlange_(ptr noundef @.str.10, ptr noundef %647, ptr noundef %648, ptr noundef %651, ptr noundef %652, ptr noundef %654)
  %656 = load double, ptr %75, align 8, !tbaa !12
  %657 = fdiv double %655, %656
  store double %657, ptr %75, align 8, !tbaa !12
  br label %658

658:                                              ; preds = %646, %645
  %659 = load double, ptr %75, align 8, !tbaa !12
  %660 = load ptr, ptr %43, align 8, !tbaa !5
  %661 = getelementptr inbounds double, ptr %660, i64 1
  store double %659, ptr %661, align 8, !tbaa !12
  %662 = load ptr, ptr %40, align 8, !tbaa !5
  store double 0.000000e+00, ptr %662, align 8, !tbaa !12
  store i32 0, ptr %23, align 4
  store i32 1, ptr %76, align 4
  br label %921

663:                                              ; preds = %608
  br label %664

664:                                              ; preds = %663, %605
  %665 = load i64, ptr %72, align 8, !tbaa !9
  %666 = icmp ne i64 %665, 0
  br i1 %666, label %667, label %669

667:                                              ; preds = %664
  %668 = getelementptr inbounds [1 x i8], ptr %61, i64 0, i64 0
  store i8 49, ptr %668, align 1, !tbaa !11
  br label %671

669:                                              ; preds = %664
  %670 = getelementptr inbounds [1 x i8], ptr %61, i64 0, i64 0
  store i8 73, ptr %670, align 1, !tbaa !11
  br label %671

671:                                              ; preds = %669, %667
  %672 = getelementptr inbounds [1 x i8], ptr %61, i64 0, i64 0
  %673 = load ptr, ptr %26, align 8, !tbaa !5
  %674 = load ptr, ptr %26, align 8, !tbaa !5
  %675 = load ptr, ptr %28, align 8, !tbaa !5
  %676 = load i64, ptr %47, align 8, !tbaa !9
  %677 = getelementptr inbounds double, ptr %675, i64 %676
  %678 = load ptr, ptr %29, align 8, !tbaa !5
  %679 = load ptr, ptr %43, align 8, !tbaa !5
  %680 = getelementptr inbounds double, ptr %679, i64 1
  %681 = call double @dlange_(ptr noundef %672, ptr noundef %673, ptr noundef %674, ptr noundef %677, ptr noundef %678, ptr noundef %680)
  store double %681, ptr %64, align 8, !tbaa !12
  %682 = load ptr, ptr %26, align 8, !tbaa !5
  %683 = load ptr, ptr %26, align 8, !tbaa !5
  %684 = load ptr, ptr %30, align 8, !tbaa !5
  %685 = load i64, ptr %49, align 8, !tbaa !9
  %686 = getelementptr inbounds double, ptr %684, i64 %685
  %687 = load ptr, ptr %31, align 8, !tbaa !5
  %688 = load ptr, ptr %43, align 8, !tbaa !5
  %689 = getelementptr inbounds double, ptr %688, i64 1
  %690 = call double @dlantr_(ptr noundef @.str.10, ptr noundef @.str.11, ptr noundef @.str, ptr noundef %682, ptr noundef %683, ptr noundef %686, ptr noundef %687, ptr noundef %689)
  store double %690, ptr %75, align 8, !tbaa !12
  %691 = load double, ptr %75, align 8, !tbaa !12
  %692 = fcmp oeq double %691, 0.000000e+00
  br i1 %692, label %693, label %694

693:                                              ; preds = %671
  store double 1.000000e+00, ptr %75, align 8, !tbaa !12
  br label %706

694:                                              ; preds = %671
  %695 = load ptr, ptr %26, align 8, !tbaa !5
  %696 = load ptr, ptr %26, align 8, !tbaa !5
  %697 = load ptr, ptr %28, align 8, !tbaa !5
  %698 = load i64, ptr %47, align 8, !tbaa !9
  %699 = getelementptr inbounds double, ptr %697, i64 %698
  %700 = load ptr, ptr %29, align 8, !tbaa !5
  %701 = load ptr, ptr %43, align 8, !tbaa !5
  %702 = getelementptr inbounds double, ptr %701, i64 1
  %703 = call double @dlange_(ptr noundef @.str.10, ptr noundef %695, ptr noundef %696, ptr noundef %699, ptr noundef %700, ptr noundef %702)
  %704 = load double, ptr %75, align 8, !tbaa !12
  %705 = fdiv double %703, %704
  store double %705, ptr %75, align 8, !tbaa !12
  br label %706

706:                                              ; preds = %694, %693
  %707 = getelementptr inbounds [1 x i8], ptr %61, i64 0, i64 0
  %708 = load ptr, ptr %26, align 8, !tbaa !5
  %709 = load ptr, ptr %30, align 8, !tbaa !5
  %710 = load i64, ptr %49, align 8, !tbaa !9
  %711 = getelementptr inbounds double, ptr %709, i64 %710
  %712 = load ptr, ptr %31, align 8, !tbaa !5
  %713 = load ptr, ptr %40, align 8, !tbaa !5
  %714 = load ptr, ptr %43, align 8, !tbaa !5
  %715 = getelementptr inbounds double, ptr %714, i64 1
  %716 = load ptr, ptr %44, align 8, !tbaa !5
  %717 = getelementptr inbounds i64, ptr %716, i64 1
  %718 = load ptr, ptr %45, align 8, !tbaa !5
  %719 = call i32 @dgecon_(ptr noundef %707, ptr noundef %708, ptr noundef %711, ptr noundef %712, ptr noundef %64, ptr noundef %713, ptr noundef %715, ptr noundef %717, ptr noundef %718)
  %720 = load ptr, ptr %26, align 8, !tbaa !5
  %721 = load ptr, ptr %27, align 8, !tbaa !5
  %722 = load ptr, ptr %36, align 8, !tbaa !5
  %723 = load i64, ptr %51, align 8, !tbaa !9
  %724 = getelementptr inbounds double, ptr %722, i64 %723
  %725 = load ptr, ptr %37, align 8, !tbaa !5
  %726 = load ptr, ptr %38, align 8, !tbaa !5
  %727 = load i64, ptr %53, align 8, !tbaa !9
  %728 = getelementptr inbounds double, ptr %726, i64 %727
  %729 = load ptr, ptr %39, align 8, !tbaa !5
  %730 = call i32 @dlacpy_(ptr noundef @.str.9, ptr noundef %720, ptr noundef %721, ptr noundef %724, ptr noundef %725, ptr noundef %728, ptr noundef %729)
  %731 = load ptr, ptr %25, align 8, !tbaa !5
  %732 = load ptr, ptr %26, align 8, !tbaa !5
  %733 = load ptr, ptr %27, align 8, !tbaa !5
  %734 = load ptr, ptr %30, align 8, !tbaa !5
  %735 = load i64, ptr %49, align 8, !tbaa !9
  %736 = getelementptr inbounds double, ptr %734, i64 %735
  %737 = load ptr, ptr %31, align 8, !tbaa !5
  %738 = load ptr, ptr %32, align 8, !tbaa !5
  %739 = getelementptr inbounds i64, ptr %738, i64 1
  %740 = load ptr, ptr %38, align 8, !tbaa !5
  %741 = load i64, ptr %53, align 8, !tbaa !9
  %742 = getelementptr inbounds double, ptr %740, i64 %741
  %743 = load ptr, ptr %39, align 8, !tbaa !5
  %744 = load ptr, ptr %45, align 8, !tbaa !5
  %745 = call i32 @dgetrs_(ptr noundef %731, ptr noundef %732, ptr noundef %733, ptr noundef %736, ptr noundef %737, ptr noundef %739, ptr noundef %742, ptr noundef %743, ptr noundef %744)
  %746 = load ptr, ptr %25, align 8, !tbaa !5
  %747 = load ptr, ptr %26, align 8, !tbaa !5
  %748 = load ptr, ptr %27, align 8, !tbaa !5
  %749 = load ptr, ptr %28, align 8, !tbaa !5
  %750 = load i64, ptr %47, align 8, !tbaa !9
  %751 = getelementptr inbounds double, ptr %749, i64 %750
  %752 = load ptr, ptr %29, align 8, !tbaa !5
  %753 = load ptr, ptr %30, align 8, !tbaa !5
  %754 = load i64, ptr %49, align 8, !tbaa !9
  %755 = getelementptr inbounds double, ptr %753, i64 %754
  %756 = load ptr, ptr %31, align 8, !tbaa !5
  %757 = load ptr, ptr %32, align 8, !tbaa !5
  %758 = getelementptr inbounds i64, ptr %757, i64 1
  %759 = load ptr, ptr %36, align 8, !tbaa !5
  %760 = load i64, ptr %51, align 8, !tbaa !9
  %761 = getelementptr inbounds double, ptr %759, i64 %760
  %762 = load ptr, ptr %37, align 8, !tbaa !5
  %763 = load ptr, ptr %38, align 8, !tbaa !5
  %764 = load i64, ptr %53, align 8, !tbaa !9
  %765 = getelementptr inbounds double, ptr %763, i64 %764
  %766 = load ptr, ptr %39, align 8, !tbaa !5
  %767 = load ptr, ptr %41, align 8, !tbaa !5
  %768 = getelementptr inbounds double, ptr %767, i64 1
  %769 = load ptr, ptr %42, align 8, !tbaa !5
  %770 = getelementptr inbounds double, ptr %769, i64 1
  %771 = load ptr, ptr %43, align 8, !tbaa !5
  %772 = getelementptr inbounds double, ptr %771, i64 1
  %773 = load ptr, ptr %44, align 8, !tbaa !5
  %774 = getelementptr inbounds i64, ptr %773, i64 1
  %775 = load ptr, ptr %45, align 8, !tbaa !5
  %776 = call i32 @dgerfs_(ptr noundef %746, ptr noundef %747, ptr noundef %748, ptr noundef %751, ptr noundef %752, ptr noundef %755, ptr noundef %756, ptr noundef %758, ptr noundef %761, ptr noundef %762, ptr noundef %765, ptr noundef %766, ptr noundef %768, ptr noundef %770, ptr noundef %772, ptr noundef %774, ptr noundef %775)
  %777 = load i64, ptr %72, align 8, !tbaa !9
  %778 = icmp ne i64 %777, 0
  br i1 %778, label %779, label %843

779:                                              ; preds = %706
  %780 = load i64, ptr %70, align 8, !tbaa !9
  %781 = icmp ne i64 %780, 0
  br i1 %781, label %782, label %842

782:                                              ; preds = %779
  %783 = load ptr, ptr %27, align 8, !tbaa !5
  %784 = load i64, ptr %783, align 8, !tbaa !9
  store i64 %784, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %785

785:                                              ; preds = %821, %782
  %786 = load i64, ptr %59, align 8, !tbaa !9
  %787 = load i64, ptr %54, align 8, !tbaa !9
  %788 = icmp sle i64 %786, %787
  br i1 %788, label %789, label %824

789:                                              ; preds = %785
  %790 = load ptr, ptr %26, align 8, !tbaa !5
  %791 = load i64, ptr %790, align 8, !tbaa !9
  store i64 %791, ptr %55, align 8, !tbaa !9
  store i64 1, ptr %58, align 8, !tbaa !9
  br label %792

792:                                              ; preds = %817, %789
  %793 = load i64, ptr %58, align 8, !tbaa !9
  %794 = load i64, ptr %55, align 8, !tbaa !9
  %795 = icmp sle i64 %793, %794
  br i1 %795, label %796, label %820

796:                                              ; preds = %792
  %797 = load ptr, ptr %35, align 8, !tbaa !5
  %798 = load i64, ptr %58, align 8, !tbaa !9
  %799 = getelementptr inbounds double, ptr %797, i64 %798
  %800 = load double, ptr %799, align 8, !tbaa !12
  %801 = load ptr, ptr %38, align 8, !tbaa !5
  %802 = load i64, ptr %58, align 8, !tbaa !9
  %803 = load i64, ptr %59, align 8, !tbaa !9
  %804 = load i64, ptr %52, align 8, !tbaa !9
  %805 = mul nsw i64 %803, %804
  %806 = add nsw i64 %802, %805
  %807 = getelementptr inbounds double, ptr %801, i64 %806
  %808 = load double, ptr %807, align 8, !tbaa !12
  %809 = fmul double %800, %808
  %810 = load ptr, ptr %38, align 8, !tbaa !5
  %811 = load i64, ptr %58, align 8, !tbaa !9
  %812 = load i64, ptr %59, align 8, !tbaa !9
  %813 = load i64, ptr %52, align 8, !tbaa !9
  %814 = mul nsw i64 %812, %813
  %815 = add nsw i64 %811, %814
  %816 = getelementptr inbounds double, ptr %810, i64 %815
  store double %809, ptr %816, align 8, !tbaa !12
  br label %817

817:                                              ; preds = %796
  %818 = load i64, ptr %58, align 8, !tbaa !9
  %819 = add nsw i64 %818, 1
  store i64 %819, ptr %58, align 8, !tbaa !9
  br label %792, !llvm.loop !21

820:                                              ; preds = %792
  br label %821

821:                                              ; preds = %820
  %822 = load i64, ptr %59, align 8, !tbaa !9
  %823 = add nsw i64 %822, 1
  store i64 %823, ptr %59, align 8, !tbaa !9
  br label %785, !llvm.loop !22

824:                                              ; preds = %785
  %825 = load ptr, ptr %27, align 8, !tbaa !5
  %826 = load i64, ptr %825, align 8, !tbaa !9
  store i64 %826, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %827

827:                                              ; preds = %838, %824
  %828 = load i64, ptr %59, align 8, !tbaa !9
  %829 = load i64, ptr %54, align 8, !tbaa !9
  %830 = icmp sle i64 %828, %829
  br i1 %830, label %831, label %841

831:                                              ; preds = %827
  %832 = load double, ptr %66, align 8, !tbaa !12
  %833 = load ptr, ptr %41, align 8, !tbaa !5
  %834 = load i64, ptr %59, align 8, !tbaa !9
  %835 = getelementptr inbounds double, ptr %833, i64 %834
  %836 = load double, ptr %835, align 8, !tbaa !12
  %837 = fdiv double %836, %832
  store double %837, ptr %835, align 8, !tbaa !12
  br label %838

838:                                              ; preds = %831
  %839 = load i64, ptr %59, align 8, !tbaa !9
  %840 = add nsw i64 %839, 1
  store i64 %840, ptr %59, align 8, !tbaa !9
  br label %827, !llvm.loop !23

841:                                              ; preds = %827
  br label %842

842:                                              ; preds = %841, %779
  br label %907

843:                                              ; preds = %706
  %844 = load i64, ptr %74, align 8, !tbaa !9
  %845 = icmp ne i64 %844, 0
  br i1 %845, label %846, label %906

846:                                              ; preds = %843
  %847 = load ptr, ptr %27, align 8, !tbaa !5
  %848 = load i64, ptr %847, align 8, !tbaa !9
  store i64 %848, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %849

849:                                              ; preds = %885, %846
  %850 = load i64, ptr %59, align 8, !tbaa !9
  %851 = load i64, ptr %54, align 8, !tbaa !9
  %852 = icmp sle i64 %850, %851
  br i1 %852, label %853, label %888

853:                                              ; preds = %849
  %854 = load ptr, ptr %26, align 8, !tbaa !5
  %855 = load i64, ptr %854, align 8, !tbaa !9
  store i64 %855, ptr %55, align 8, !tbaa !9
  store i64 1, ptr %58, align 8, !tbaa !9
  br label %856

856:                                              ; preds = %881, %853
  %857 = load i64, ptr %58, align 8, !tbaa !9
  %858 = load i64, ptr %55, align 8, !tbaa !9
  %859 = icmp sle i64 %857, %858
  br i1 %859, label %860, label %884

860:                                              ; preds = %856
  %861 = load ptr, ptr %34, align 8, !tbaa !5
  %862 = load i64, ptr %58, align 8, !tbaa !9
  %863 = getelementptr inbounds double, ptr %861, i64 %862
  %864 = load double, ptr %863, align 8, !tbaa !12
  %865 = load ptr, ptr %38, align 8, !tbaa !5
  %866 = load i64, ptr %58, align 8, !tbaa !9
  %867 = load i64, ptr %59, align 8, !tbaa !9
  %868 = load i64, ptr %52, align 8, !tbaa !9
  %869 = mul nsw i64 %867, %868
  %870 = add nsw i64 %866, %869
  %871 = getelementptr inbounds double, ptr %865, i64 %870
  %872 = load double, ptr %871, align 8, !tbaa !12
  %873 = fmul double %864, %872
  %874 = load ptr, ptr %38, align 8, !tbaa !5
  %875 = load i64, ptr %58, align 8, !tbaa !9
  %876 = load i64, ptr %59, align 8, !tbaa !9
  %877 = load i64, ptr %52, align 8, !tbaa !9
  %878 = mul nsw i64 %876, %877
  %879 = add nsw i64 %875, %878
  %880 = getelementptr inbounds double, ptr %874, i64 %879
  store double %873, ptr %880, align 8, !tbaa !12
  br label %881

881:                                              ; preds = %860
  %882 = load i64, ptr %58, align 8, !tbaa !9
  %883 = add nsw i64 %882, 1
  store i64 %883, ptr %58, align 8, !tbaa !9
  br label %856, !llvm.loop !24

884:                                              ; preds = %856
  br label %885

885:                                              ; preds = %884
  %886 = load i64, ptr %59, align 8, !tbaa !9
  %887 = add nsw i64 %886, 1
  store i64 %887, ptr %59, align 8, !tbaa !9
  br label %849, !llvm.loop !25

888:                                              ; preds = %849
  %889 = load ptr, ptr %27, align 8, !tbaa !5
  %890 = load i64, ptr %889, align 8, !tbaa !9
  store i64 %890, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %891

891:                                              ; preds = %902, %888
  %892 = load i64, ptr %59, align 8, !tbaa !9
  %893 = load i64, ptr %54, align 8, !tbaa !9
  %894 = icmp sle i64 %892, %893
  br i1 %894, label %895, label %905

895:                                              ; preds = %891
  %896 = load double, ptr %71, align 8, !tbaa !12
  %897 = load ptr, ptr %41, align 8, !tbaa !5
  %898 = load i64, ptr %59, align 8, !tbaa !9
  %899 = getelementptr inbounds double, ptr %897, i64 %898
  %900 = load double, ptr %899, align 8, !tbaa !12
  %901 = fdiv double %900, %896
  store double %901, ptr %899, align 8, !tbaa !12
  br label %902

902:                                              ; preds = %895
  %903 = load i64, ptr %59, align 8, !tbaa !9
  %904 = add nsw i64 %903, 1
  store i64 %904, ptr %59, align 8, !tbaa !9
  br label %891, !llvm.loop !26

905:                                              ; preds = %891
  br label %906

906:                                              ; preds = %905, %843
  br label %907

907:                                              ; preds = %906, %842
  %908 = load double, ptr %75, align 8, !tbaa !12
  %909 = load ptr, ptr %43, align 8, !tbaa !5
  %910 = getelementptr inbounds double, ptr %909, i64 1
  store double %908, ptr %910, align 8, !tbaa !12
  %911 = load ptr, ptr %40, align 8, !tbaa !5
  %912 = load double, ptr %911, align 8, !tbaa !12
  %913 = call double @dlamch_(ptr noundef @.str.12)
  %914 = fcmp olt double %912, %913
  br i1 %914, label %915, label %920

915:                                              ; preds = %907
  %916 = load ptr, ptr %26, align 8, !tbaa !5
  %917 = load i64, ptr %916, align 8, !tbaa !9
  %918 = add nsw i64 %917, 1
  %919 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 %918, ptr %919, align 8, !tbaa !9
  br label %920

920:                                              ; preds = %915, %907
  store i32 0, ptr %23, align 4
  store i32 1, ptr %76, align 4
  br label %921

921:                                              ; preds = %920, %658, %447
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #3
  call void @llvm.lifetime.end.p0(i64 8, 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 1, ptr %61) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #3
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr %54) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  %922 = load i32, ptr %23, align 4
  ret i32 %922
}

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

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

declare double @dlamch_(ptr noundef) #2

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

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

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

declare i32 @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 i32 @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 i32 @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 = !{!"long", !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 noundef i32 @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 i64, align 8
  %24 = alloca double, align 8
  %25 = alloca [1 x i8], align 1
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca i64, align 8
  %29 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, 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 8, 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 i64, ptr %13, align 8, !tbaa !5
  %33 = xor i64 %32, -1
  %34 = getelementptr inbounds double, ptr %12, i64 %33
  %35 = load i64, ptr %15, align 8, !tbaa !5
  %36 = xor i64 %35, -1
  %37 = getelementptr inbounds double, ptr %14, i64 %36
  %38 = getelementptr inbounds i8, ptr %17, i64 -8
  store i64 0, ptr %21, align 8, !tbaa !5
  %39 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #4
  %40 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #4
  %41 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str) #4
  %42 = icmp ne i64 %39, 0
  %43 = icmp ne i64 %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 i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.2) #4
  %.not = icmp eq i64 %45, 0
  br i1 %.not, label %46, label %49

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

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

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

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

62:                                               ; preds = %.thread, %56
  %.0354416 = phi i64 [ 0, %.thread ], [ %51, %56 ]
  %.0356414 = phi double [ undef, %.thread ], [ %59, %56 ]
  %.0358413 = phi i64 [ 0, %.thread ], [ %58, %56 ]
  %.0360411 = phi double [ undef, %.thread ], [ %60, %56 ]
  %.not380 = icmp eq i64 %41, 0
  br i1 %.not380, label %63, label %67

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

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

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

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

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

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

79:                                               ; preds = %76
  %80 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.6) #4
  %81 = icmp eq i64 %80, 0
  %82 = icmp ne i64 %.0354416, 0
  %or.cond5 = select i1 %81, i1 true, i1 %82
  %83 = icmp ne i64 %.0358413, 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 i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str) #4
  %.not383 = icmp eq i64 %85, 0
  br i1 %.not383, label %.thread423.sink.split, label %..thread418_crit_edge

..thread418_crit_edge:                            ; preds = %84
  %.pr.pre = load i64, ptr %21, align 8, !tbaa !5
  br label %.thread418

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

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

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

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

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %.0361435 = phi double [ 0.000000e+00, %.lr.ph.preheader.new ], [ %101, %.lr.ph ]
  %.0363434 = phi double [ %.0360411, %.lr.ph.preheader.new ], [ %99, %.lr.ph ]
  %.0365433 = phi i64 [ 1, %.lr.ph.preheader.new ], [ %102, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %.lr.ph ]
  %90 = getelementptr inbounds double, ptr %30, i64 %.0365433
  %91 = load double, ptr %90, align 8, !tbaa !10
  %92 = fcmp ole double %.0363434, %91
  %93 = select i1 %92, double %.0363434, double %91
  %94 = fcmp oge double %.0361435, %91
  %95 = select i1 %94, double %.0361435, double %91
  %96 = getelementptr double, ptr %10, i64 %.0365433
  %97 = load double, ptr %96, align 8, !tbaa !10
  %98 = fcmp ole double %93, %97
  %99 = select i1 %98, double %93, double %97
  %100 = fcmp oge double %95, %97
  %101 = select i1 %100, double %95, double %97
  %102 = add nuw i64 %.0365433, 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
  %.lcssa653.ph = phi double [ poison, %.lr.ph.preheader ], [ %99, %.lr.ph ]
  %.lcssa652.ph = phi double [ poison, %.lr.ph.preheader ], [ %101, %.lr.ph ]
  %.0361435.unr = phi double [ 0.000000e+00, %.lr.ph.preheader ], [ %101, %.lr.ph ]
  %.0363434.unr = phi double [ %.0360411, %.lr.ph.preheader ], [ %99, %.lr.ph ]
  %.0365433.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %102, %.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 %.0365433.unr
  %104 = load double, ptr %103, align 8, !tbaa !10
  %105 = fcmp ole double %.0363434.unr, %104
  %106 = select i1 %105, double %.0363434.unr, double %104
  %107 = fcmp oge double %.0361435.unr, %104
  %108 = select i1 %107, double %.0361435.unr, double %104
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.epil, %._crit_edge.loopexit.unr-lcssa, %87
  %.0363.lcssa = phi double [ %.0360411, %87 ], [ %.lcssa653.ph, %._crit_edge.loopexit.unr-lcssa ], [ %106, %.lr.ph.epil ]
  %.0361.lcssa = phi double [ 0.000000e+00, %87 ], [ %.lcssa652.ph, %._crit_edge.loopexit.unr-lcssa ], [ %108, %.lr.ph.epil ]
  %109 = fcmp ugt double %.0363.lcssa, 0.000000e+00
  br i1 %109, label %110, label %.thread423.sink.split

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

112:                                              ; preds = %110
  %113 = fcmp oge double %.0363.lcssa, %.0356414
  %114 = select i1 %113, double %.0363.lcssa, double %.0356414
  %115 = fcmp ole double %.0361.lcssa, %.0360411
  %116 = select i1 %115, double %.0361.lcssa, double %.0360411
  %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.pre518.pr = load i64, ptr %21, align 8, !tbaa !5
  br i1 %83, label %120, label %.thread418

120:                                              ; preds = %119
  %121 = icmp eq i64 %.pr.pre518.pr, 0
  br i1 %121, label %122, label %.thread423

122:                                              ; preds = %120
  %123 = load i64, ptr %2, align 8, !tbaa !5
  %.not385437 = icmp slt i64 %123, 1
  br i1 %.not385437, label %._crit_edge443, label %.lr.ph442.preheader

.lr.ph442.preheader:                              ; preds = %122
  %xtraiter656 = and i64 %123, 1
  %124 = icmp eq i64 %123, 1
  br i1 %124, label %._crit_edge443.loopexit.unr-lcssa, label %.lr.ph442.preheader.new

.lr.ph442.preheader.new:                          ; preds = %.lr.ph442.preheader
  %unroll_iter660 = and i64 %123, 9223372036854775806
  br label %.lr.ph442

.lr.ph442:                                        ; preds = %.lr.ph442, %.lr.ph442.preheader.new
  %.1362440 = phi double [ 0.000000e+00, %.lr.ph442.preheader.new ], [ %136, %.lr.ph442 ]
  %.1364439 = phi double [ %.0360411, %.lr.ph442.preheader.new ], [ %134, %.lr.ph442 ]
  %.1366438 = phi i64 [ 1, %.lr.ph442.preheader.new ], [ %137, %.lr.ph442 ]
  %niter661 = phi i64 [ 0, %.lr.ph442.preheader.new ], [ %niter661.next.1, %.lr.ph442 ]
  %125 = getelementptr inbounds double, ptr %31, i64 %.1366438
  %126 = load double, ptr %125, align 8, !tbaa !10
  %127 = fcmp ole double %.1364439, %126
  %128 = select i1 %127, double %.1364439, double %126
  %129 = fcmp oge double %.1362440, %126
  %130 = select i1 %129, double %.1362440, double %126
  %131 = getelementptr double, ptr %11, i64 %.1366438
  %132 = load double, ptr %131, align 8, !tbaa !10
  %133 = fcmp ole double %128, %132
  %134 = select i1 %133, double %128, double %132
  %135 = fcmp oge double %130, %132
  %136 = select i1 %135, double %130, double %132
  %137 = add nuw i64 %.1366438, 2
  %niter661.next.1 = add i64 %niter661, 2
  %niter661.ncmp.1 = icmp eq i64 %niter661.next.1, %unroll_iter660
  br i1 %niter661.ncmp.1, label %._crit_edge443.loopexit.unr-lcssa, label %.lr.ph442, !llvm.loop !14

._crit_edge443.loopexit.unr-lcssa:                ; preds = %.lr.ph442, %.lr.ph442.preheader
  %.lcssa651.ph = phi double [ poison, %.lr.ph442.preheader ], [ %134, %.lr.ph442 ]
  %.lcssa.ph = phi double [ poison, %.lr.ph442.preheader ], [ %136, %.lr.ph442 ]
  %.1362440.unr = phi double [ 0.000000e+00, %.lr.ph442.preheader ], [ %136, %.lr.ph442 ]
  %.1364439.unr = phi double [ %.0360411, %.lr.ph442.preheader ], [ %134, %.lr.ph442 ]
  %.1366438.unr = phi i64 [ 1, %.lr.ph442.preheader ], [ %137, %.lr.ph442 ]
  %lcmp.mod657.not = icmp eq i64 %xtraiter656, 0
  br i1 %lcmp.mod657.not, label %._crit_edge443, label %.lr.ph442.epil

.lr.ph442.epil:                                   ; preds = %._crit_edge443.loopexit.unr-lcssa
  %138 = getelementptr inbounds double, ptr %31, i64 %.1366438.unr
  %139 = load double, ptr %138, align 8, !tbaa !10
  %140 = fcmp ole double %.1364439.unr, %139
  %141 = select i1 %140, double %.1364439.unr, double %139
  %142 = fcmp oge double %.1362440.unr, %139
  %143 = select i1 %142, double %.1362440.unr, double %139
  br label %._crit_edge443

._crit_edge443:                                   ; preds = %.lr.ph442.epil, %._crit_edge443.loopexit.unr-lcssa, %122
  %.1364.lcssa = phi double [ %.0360411, %122 ], [ %.lcssa651.ph, %._crit_edge443.loopexit.unr-lcssa ], [ %141, %.lr.ph442.epil ]
  %.1362.lcssa = phi double [ 0.000000e+00, %122 ], [ %.lcssa.ph, %._crit_edge443.loopexit.unr-lcssa ], [ %143, %.lr.ph442.epil ]
  %144 = fcmp ugt double %.1364.lcssa, 0.000000e+00
  br i1 %144, label %145, label %.thread423.sink.split

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

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

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

.thread418:                                       ; preds = %..thread418_crit_edge, %119
  %.pr421.pr = phi i64 [ %.pr.pre, %..thread418_crit_edge ], [ %.pr.pre518.pr, %119 ]
  %154 = icmp eq i64 %.pr421.pr, 0
  br i1 %154, label %.thread418.thread, label %.thread423

.thread418.thread:                                ; preds = %147, %153, %.thread418
  %155 = load i64, ptr %13, align 8, !tbaa !5
  %156 = load i64, ptr %2, align 8, !tbaa !5
  %spec.select405 = tail call i64 @llvm.smax.i64(i64 %156, i64 1)
  %157 = icmp slt i64 %155, %spec.select405
  br i1 %157, label %.thread423.sink.split, label %158

158:                                              ; preds = %.thread418.thread
  %159 = load i64, ptr %15, align 8, !tbaa !5
  %160 = icmp slt i64 %159, %spec.select405
  br i1 %160, label %.thread423.sink.split, label %.thread419

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

.thread423:                                       ; preds = %.thread423.sink.split, %120, %.thread418
  %161 = phi i64 [ %.pr421.pr, %.thread418 ], [ %.pr.pre518.pr, %120 ], [ %.sink, %.thread423.sink.split ]
  %162 = sub nsw i64 0, %161
  store i64 %162, ptr %23, align 8, !tbaa !5
  %163 = call i32 @xerbla_(ptr noundef nonnull @.str.8, ptr noundef nonnull %23) #4
  br label %419

.thread419:                                       ; preds = %158
  br i1 %43, label %164, label %184

164:                                              ; preds = %.thread419
  %165 = call i32 @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
  %166 = load i64, ptr %28, align 8, !tbaa !5
  %167 = icmp eq i64 %166, 0
  br i1 %167, label %168, label %184

168:                                              ; preds = %164
  %169 = call i32 @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
  %170 = call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.2) #4
  %.not387 = icmp eq i64 %170, 0
  br i1 %.not387, label %171, label %174

171:                                              ; preds = %168
  %172 = call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.3) #4
  %173 = icmp ne i64 %172, 0
  br label %174

174:                                              ; preds = %171, %168
  %175 = phi i1 [ true, %168 ], [ %173, %171 ]
  %176 = zext i1 %175 to i64
  %177 = call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.4) #4
  %.not388 = icmp eq i64 %177, 0
  br i1 %.not388, label %178, label %181

178:                                              ; preds = %174
  %179 = call i64 @lsame_(ptr noundef %9, ptr noundef nonnull @.str.3) #4
  %180 = icmp ne i64 %179, 0
  br label %181

181:                                              ; preds = %178, %174
  %182 = phi i1 [ true, %174 ], [ %180, %178 ]
  %183 = zext i1 %182 to i64
  br label %184

184:                                              ; preds = %164, %181, %.thread419
  %.1359 = phi i64 [ %183, %181 ], [ %.0358413, %164 ], [ %.0358413, %.thread419 ]
  %.1355 = phi i64 [ %176, %181 ], [ %.0354416, %164 ], [ %.0354416, %.thread419 ]
  br i1 %.not380, label %232, label %185

185:                                              ; preds = %184
  %.not393 = icmp eq i64 %.1355, 0
  br i1 %.not393, label %.loopexit430, label %186

186:                                              ; preds = %185
  %187 = load i64, ptr %3, align 8, !tbaa !5
  %.not394451 = icmp slt i64 %187, 1
  br i1 %.not394451, label %.loopexit430, label %.lr.ph454

.lr.ph454:                                        ; preds = %186
  %188 = load i64, ptr %2, align 8, !tbaa !5
  %.not403446 = icmp slt i64 %188, 1
  br i1 %.not403446, label %.loopexit430, label %.lr.ph449.preheader

.lr.ph449.preheader:                              ; preds = %.lr.ph454
  %189 = add nuw i64 %187, 2305843009213693951
  %190 = mul i64 %32, %189
  %191 = shl i64 %188, 3
  %192 = add i64 %190, %188
  %193 = shl i64 %192, 3
  %scevgep = getelementptr i8, ptr %12, i64 %193
  %scevgep540 = getelementptr i8, ptr %10, i64 %191
  %194 = add nuw i64 %188, 1
  %min.iters.check = icmp ult i64 %188, 4
  %bound0 = icmp ugt ptr %scevgep540, %12
  %bound1 = icmp ugt ptr %scevgep, %10
  %found.conflict = and i1 %bound0, %bound1
  %.mask = and i64 %32, 1152921504606846976
  %stride.check = icmp ne i64 %.mask, 0
  %195 = or i1 %found.conflict, %stride.check
  %n.vec = and i64 %188, 9223372036854775804
  %ind.end = or disjoint i64 %n.vec, 1
  %cmp.n = icmp eq i64 %188, %n.vec
  br label %.lr.ph449

.lr.ph449:                                        ; preds = %.lr.ph449.preheader, %._crit_edge450
  %.2452 = phi i64 [ %231, %._crit_edge450 ], [ 1, %.lr.ph449.preheader ]
  %196 = mul nsw i64 %.2452, %32
  %invariant.gep = getelementptr double, ptr %34, i64 %196
  %brmerge = select i1 %min.iters.check, i1 true, i1 %195
  br i1 %brmerge, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.lr.ph449, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph449 ]
  %offset.idx = or disjoint i64 %index, 1
  %197 = getelementptr double, ptr %10, i64 %index
  %198 = getelementptr inbounds i8, ptr %197, i64 16
  %wide.load = load <2 x double>, ptr %197, align 8, !tbaa !10, !alias.scope !15
  %wide.load541 = load <2 x double>, ptr %198, align 8, !tbaa !10, !alias.scope !15
  %199 = getelementptr double, ptr %invariant.gep, i64 %offset.idx
  %200 = getelementptr i8, ptr %199, i64 16
  %wide.load542 = load <2 x double>, ptr %199, align 8, !tbaa !10, !alias.scope !18, !noalias !15
  %wide.load543 = load <2 x double>, ptr %200, align 8, !tbaa !10, !alias.scope !18, !noalias !15
  %201 = fmul <2 x double> %wide.load, %wide.load542
  %202 = fmul <2 x double> %wide.load541, %wide.load543
  store <2 x double> %201, ptr %199, align 8, !tbaa !10, !alias.scope !18, !noalias !15
  store <2 x double> %202, ptr %200, align 8, !tbaa !10, !alias.scope !18, !noalias !15
  %index.next = add nuw i64 %index, 4
  %203 = icmp eq i64 %index.next, %n.vec
  br i1 %203, label %middle.block, label %vector.body, !llvm.loop !20

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

scalar.ph.preheader:                              ; preds = %.lr.ph449, %middle.block
  %.0367447.ph = phi i64 [ 1, %.lr.ph449 ], [ %ind.end, %middle.block ]
  %204 = sub i64 %194, %.0367447.ph
  %205 = sub i64 %188, %.0367447.ph
  %xtraiter662 = and i64 %204, 3
  %lcmp.mod663.not = icmp eq i64 %xtraiter662, 0
  br i1 %lcmp.mod663.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %.0367447.prol = phi i64 [ %210, %scalar.ph.prol ], [ %.0367447.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %206 = getelementptr inbounds double, ptr %30, i64 %.0367447.prol
  %207 = load double, ptr %206, align 8, !tbaa !10
  %gep.prol = getelementptr double, ptr %invariant.gep, i64 %.0367447.prol
  %208 = load double, ptr %gep.prol, align 8, !tbaa !10
  %209 = fmul double %207, %208
  store double %209, ptr %gep.prol, align 8, !tbaa !10
  %210 = add nuw i64 %.0367447.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter662
  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
  %.0367447.unr = phi i64 [ %.0367447.ph, %scalar.ph.preheader ], [ %210, %scalar.ph.prol ]
  %211 = icmp ult i64 %205, 3
  br i1 %211, label %._crit_edge450, label %scalar.ph.preheader.new

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

scalar.ph:                                        ; preds = %scalar.ph, %scalar.ph.preheader.new
  %.0367447 = phi i64 [ %.0367447.unr, %scalar.ph.preheader.new ], [ %230, %scalar.ph ]
  %212 = getelementptr inbounds double, ptr %30, i64 %.0367447
  %213 = load double, ptr %212, align 8, !tbaa !10
  %gep = getelementptr double, ptr %invariant.gep, i64 %.0367447
  %214 = load double, ptr %gep, align 8, !tbaa !10
  %215 = fmul double %213, %214
  store double %215, ptr %gep, align 8, !tbaa !10
  %216 = getelementptr double, ptr %10, i64 %.0367447
  %217 = load double, ptr %216, align 8, !tbaa !10
  %gep684 = getelementptr double, ptr %invariant.gep683, i64 %.0367447
  %218 = load double, ptr %gep684, align 8, !tbaa !10
  %219 = fmul double %217, %218
  store double %219, ptr %gep684, align 8, !tbaa !10
  %220 = add nuw i64 %.0367447, 2
  %221 = getelementptr inbounds double, ptr %30, i64 %220
  %222 = load double, ptr %221, align 8, !tbaa !10
  %gep.2 = getelementptr double, ptr %invariant.gep, i64 %220
  %223 = load double, ptr %gep.2, align 8, !tbaa !10
  %224 = fmul double %222, %223
  store double %224, ptr %gep.2, align 8, !tbaa !10
  %225 = add nuw i64 %.0367447, 3
  %226 = getelementptr inbounds double, ptr %30, i64 %225
  %227 = load double, ptr %226, align 8, !tbaa !10
  %gep.3 = getelementptr double, ptr %invariant.gep, i64 %225
  %228 = load double, ptr %gep.3, align 8, !tbaa !10
  %229 = fmul double %227, %228
  store double %229, ptr %gep.3, align 8, !tbaa !10
  %230 = add nuw i64 %.0367447, 4
  %exitcond508.not.3 = icmp eq i64 %225, %188
  br i1 %exitcond508.not.3, label %._crit_edge450, label %scalar.ph, !llvm.loop !25

._crit_edge450:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %231 = add nuw i64 %.2452, 1
  %exitcond509.not = icmp eq i64 %.2452, %187
  br i1 %exitcond509.not, label %.loopexit430, label %.lr.ph449, !llvm.loop !26

232:                                              ; preds = %184
  %.not390 = icmp eq i64 %.1359, 0
  br i1 %.not390, label %.loopexit430, label %233

233:                                              ; preds = %232
  %234 = load i64, ptr %3, align 8, !tbaa !5
  %.not391462 = icmp slt i64 %234, 1
  br i1 %.not391462, label %.loopexit430, label %.lr.ph465

.lr.ph465:                                        ; preds = %233
  %235 = load i64, ptr %2, align 8, !tbaa !5
  %.not392455 = icmp slt i64 %235, 1
  br i1 %.not392455, label %.loopexit430, label %.lr.ph458.preheader

.lr.ph458.preheader:                              ; preds = %.lr.ph465
  %236 = add nuw i64 %234, 2305843009213693951
  %237 = mul i64 %32, %236
  %238 = shl i64 %235, 3
  %239 = add i64 %237, %235
  %240 = shl i64 %239, 3
  %scevgep545 = getelementptr i8, ptr %12, i64 %240
  %scevgep546 = getelementptr i8, ptr %11, i64 %238
  %241 = add nuw i64 %235, 1
  %min.iters.check553 = icmp ult i64 %235, 4
  %bound0547 = icmp ugt ptr %scevgep546, %12
  %bound1548 = icmp ugt ptr %scevgep545, %11
  %found.conflict549 = and i1 %bound0547, %bound1548
  %.mask646 = and i64 %32, 1152921504606846976
  %stride.check550 = icmp ne i64 %.mask646, 0
  %242 = or i1 %found.conflict549, %stride.check550
  %n.vec556 = and i64 %235, 9223372036854775804
  %ind.end557 = or disjoint i64 %n.vec556, 1
  %cmp.n567 = icmp eq i64 %235, %n.vec556
  br label %.lr.ph458

.lr.ph458:                                        ; preds = %.lr.ph458.preheader, %._crit_edge459
  %.3463 = phi i64 [ %278, %._crit_edge459 ], [ 1, %.lr.ph458.preheader ]
  %243 = mul nsw i64 %.3463, %32
  %invariant.gep460 = getelementptr double, ptr %34, i64 %243
  %brmerge691 = select i1 %min.iters.check553, i1 true, i1 %242
  br i1 %brmerge691, label %scalar.ph552.preheader, label %vector.body559

vector.body559:                                   ; preds = %.lr.ph458, %vector.body559
  %index560 = phi i64 [ %index.next566, %vector.body559 ], [ 0, %.lr.ph458 ]
  %offset.idx561 = or disjoint i64 %index560, 1
  %244 = getelementptr double, ptr %11, i64 %index560
  %245 = getelementptr inbounds i8, ptr %244, i64 16
  %wide.load562 = load <2 x double>, ptr %244, align 8, !tbaa !10, !alias.scope !27
  %wide.load563 = load <2 x double>, ptr %245, align 8, !tbaa !10, !alias.scope !27
  %246 = getelementptr double, ptr %invariant.gep460, i64 %offset.idx561
  %247 = getelementptr i8, ptr %246, i64 16
  %wide.load564 = load <2 x double>, ptr %246, align 8, !tbaa !10, !alias.scope !30, !noalias !27
  %wide.load565 = load <2 x double>, ptr %247, align 8, !tbaa !10, !alias.scope !30, !noalias !27
  %248 = fmul <2 x double> %wide.load562, %wide.load564
  %249 = fmul <2 x double> %wide.load563, %wide.load565
  store <2 x double> %248, ptr %246, align 8, !tbaa !10, !alias.scope !30, !noalias !27
  store <2 x double> %249, ptr %247, align 8, !tbaa !10, !alias.scope !30, !noalias !27
  %index.next566 = add nuw i64 %index560, 4
  %250 = icmp eq i64 %index.next566, %n.vec556
  br i1 %250, label %middle.block551, label %vector.body559, !llvm.loop !32

middle.block551:                                  ; preds = %vector.body559
  br i1 %cmp.n567, label %._crit_edge459, label %scalar.ph552.preheader

scalar.ph552.preheader:                           ; preds = %.lr.ph458, %middle.block551
  %.1368456.ph = phi i64 [ 1, %.lr.ph458 ], [ %ind.end557, %middle.block551 ]
  %251 = sub i64 %241, %.1368456.ph
  %252 = sub i64 %235, %.1368456.ph
  %xtraiter664 = and i64 %251, 3
  %lcmp.mod665.not = icmp eq i64 %xtraiter664, 0
  br i1 %lcmp.mod665.not, label %scalar.ph552.prol.loopexit, label %scalar.ph552.prol

scalar.ph552.prol:                                ; preds = %scalar.ph552.preheader, %scalar.ph552.prol
  %.1368456.prol = phi i64 [ %257, %scalar.ph552.prol ], [ %.1368456.ph, %scalar.ph552.preheader ]
  %prol.iter666 = phi i64 [ %prol.iter666.next, %scalar.ph552.prol ], [ 0, %scalar.ph552.preheader ]
  %253 = getelementptr inbounds double, ptr %31, i64 %.1368456.prol
  %254 = load double, ptr %253, align 8, !tbaa !10
  %gep461.prol = getelementptr double, ptr %invariant.gep460, i64 %.1368456.prol
  %255 = load double, ptr %gep461.prol, align 8, !tbaa !10
  %256 = fmul double %254, %255
  store double %256, ptr %gep461.prol, align 8, !tbaa !10
  %257 = add nuw i64 %.1368456.prol, 1
  %prol.iter666.next = add i64 %prol.iter666, 1
  %prol.iter666.cmp.not = icmp eq i64 %prol.iter666.next, %xtraiter664
  br i1 %prol.iter666.cmp.not, label %scalar.ph552.prol.loopexit, label %scalar.ph552.prol, !llvm.loop !33

scalar.ph552.prol.loopexit:                       ; preds = %scalar.ph552.prol, %scalar.ph552.preheader
  %.1368456.unr = phi i64 [ %.1368456.ph, %scalar.ph552.preheader ], [ %257, %scalar.ph552.prol ]
  %258 = icmp ult i64 %252, 3
  br i1 %258, label %._crit_edge459, label %scalar.ph552.preheader.new

scalar.ph552.preheader.new:                       ; preds = %scalar.ph552.prol.loopexit
  %invariant.gep685 = getelementptr i8, ptr %invariant.gep460, i64 8
  br label %scalar.ph552

scalar.ph552:                                     ; preds = %scalar.ph552, %scalar.ph552.preheader.new
  %.1368456 = phi i64 [ %.1368456.unr, %scalar.ph552.preheader.new ], [ %277, %scalar.ph552 ]
  %259 = getelementptr inbounds double, ptr %31, i64 %.1368456
  %260 = load double, ptr %259, align 8, !tbaa !10
  %gep461 = getelementptr double, ptr %invariant.gep460, i64 %.1368456
  %261 = load double, ptr %gep461, align 8, !tbaa !10
  %262 = fmul double %260, %261
  store double %262, ptr %gep461, align 8, !tbaa !10
  %263 = getelementptr double, ptr %11, i64 %.1368456
  %264 = load double, ptr %263, align 8, !tbaa !10
  %gep686 = getelementptr double, ptr %invariant.gep685, i64 %.1368456
  %265 = load double, ptr %gep686, align 8, !tbaa !10
  %266 = fmul double %264, %265
  store double %266, ptr %gep686, align 8, !tbaa !10
  %267 = add nuw i64 %.1368456, 2
  %268 = getelementptr inbounds double, ptr %31, i64 %267
  %269 = load double, ptr %268, align 8, !tbaa !10
  %gep461.2 = getelementptr double, ptr %invariant.gep460, i64 %267
  %270 = load double, ptr %gep461.2, align 8, !tbaa !10
  %271 = fmul double %269, %270
  store double %271, ptr %gep461.2, align 8, !tbaa !10
  %272 = add nuw i64 %.1368456, 3
  %273 = getelementptr inbounds double, ptr %31, i64 %272
  %274 = load double, ptr %273, align 8, !tbaa !10
  %gep461.3 = getelementptr double, ptr %invariant.gep460, i64 %272
  %275 = load double, ptr %gep461.3, align 8, !tbaa !10
  %276 = fmul double %274, %275
  store double %276, ptr %gep461.3, align 8, !tbaa !10
  %277 = add nuw i64 %.1368456, 4
  %exitcond510.not.3 = icmp eq i64 %272, %235
  br i1 %exitcond510.not.3, label %._crit_edge459, label %scalar.ph552, !llvm.loop !34

._crit_edge459:                                   ; preds = %scalar.ph552.prol.loopexit, %scalar.ph552, %middle.block551
  %278 = add nuw i64 %.3463, 1
  %exitcond511.not = icmp eq i64 %.3463, %234
  br i1 %exitcond511.not, label %.loopexit430, label %.lr.ph458, !llvm.loop !35

.loopexit430:                                     ; preds = %._crit_edge450, %._crit_edge459, %.lr.ph465, %.lr.ph454, %186, %233, %232, %185
  br i1 %or.cond, label %279, label %291

279:                                              ; preds = %.loopexit430
  %280 = call i32 @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
  %281 = 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
  %282 = load i64, ptr %21, align 8, !tbaa !5
  %283 = icmp sgt i64 %282, 0
  br i1 %283, label %284, label %291

284:                                              ; preds = %279
  %285 = 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
  %286 = fcmp oeq double %285, 0.000000e+00
  br i1 %286, label %290, label %287

287:                                              ; preds = %284
  %288 = 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
  %289 = fdiv double %288, %285
  br label %290

290:                                              ; preds = %284, %287
  %.0 = phi double [ %289, %287 ], [ 1.000000e+00, %284 ]
  store double %.0, ptr %19, align 8, !tbaa !10
  store double 0.000000e+00, ptr %16, align 8, !tbaa !10
  br label %419

291:                                              ; preds = %279, %.loopexit430
  %. = select i1 %.not380, i8 73, i8 49
  store i8 %., ptr %25, align 1, !tbaa !9
  %292 = 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 %292, ptr %26, align 8, !tbaa !10
  %293 = 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
  %294 = fcmp oeq double %293, 0.000000e+00
  br i1 %294, label %298, label %295

295:                                              ; preds = %291
  %296 = 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
  %297 = fdiv double %296, %293
  br label %298

298:                                              ; preds = %291, %295
  %.1 = phi double [ %297, %295 ], [ 1.000000e+00, %291 ]
  %299 = call i32 @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
  %300 = call i32 @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
  %301 = 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
  %302 = call i32 @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 %.not380, label %358, label %303

303:                                              ; preds = %298
  %.not399 = icmp eq i64 %.1359, 0
  br i1 %.not399, label %.loopexit, label %304

304:                                              ; preds = %303
  %305 = load i64, ptr %3, align 8, !tbaa !5
  %.not400473 = icmp slt i64 %305, 1
  br i1 %.not400473, label %.loopexit, label %.lr.ph476

.lr.ph476:                                        ; preds = %304
  %306 = load i64, ptr %2, align 8, !tbaa !5
  %.not402466 = icmp slt i64 %306, 1
  br i1 %.not402466, label %.lr.ph481, label %.lr.ph469.preheader

.lr.ph469.preheader:                              ; preds = %.lr.ph476
  %307 = add nuw i64 %305, 2305843009213693951
  %308 = mul i64 %35, %307
  %309 = shl i64 %306, 3
  %310 = add i64 %308, %306
  %311 = shl i64 %310, 3
  %scevgep569 = getelementptr i8, ptr %14, i64 %311
  %scevgep570 = getelementptr i8, ptr %11, i64 %309
  %312 = add nuw i64 %306, 1
  %min.iters.check577 = icmp ult i64 %306, 4
  %bound0571 = icmp ugt ptr %scevgep570, %14
  %bound1572 = icmp ugt ptr %scevgep569, %11
  %found.conflict573 = and i1 %bound0571, %bound1572
  %.mask647 = and i64 %35, 1152921504606846976
  %stride.check574 = icmp ne i64 %.mask647, 0
  %313 = or i1 %found.conflict573, %stride.check574
  %n.vec580 = and i64 %306, 9223372036854775804
  %ind.end581 = or disjoint i64 %n.vec580, 1
  %cmp.n591 = icmp eq i64 %306, %n.vec580
  br label %.lr.ph469

.lr.ph469:                                        ; preds = %.lr.ph469.preheader, %._crit_edge470
  %.4474 = phi i64 [ %349, %._crit_edge470 ], [ 1, %.lr.ph469.preheader ]
  %314 = mul nsw i64 %.4474, %35
  %invariant.gep471 = getelementptr double, ptr %37, i64 %314
  %brmerge692 = select i1 %min.iters.check577, i1 true, i1 %313
  br i1 %brmerge692, label %scalar.ph576.preheader, label %vector.body583

vector.body583:                                   ; preds = %.lr.ph469, %vector.body583
  %index584 = phi i64 [ %index.next590, %vector.body583 ], [ 0, %.lr.ph469 ]
  %offset.idx585 = or disjoint i64 %index584, 1
  %315 = getelementptr double, ptr %11, i64 %index584
  %316 = getelementptr inbounds i8, ptr %315, i64 16
  %wide.load586 = load <2 x double>, ptr %315, align 8, !tbaa !10, !alias.scope !36
  %wide.load587 = load <2 x double>, ptr %316, align 8, !tbaa !10, !alias.scope !36
  %317 = getelementptr double, ptr %invariant.gep471, i64 %offset.idx585
  %318 = getelementptr i8, ptr %317, i64 16
  %wide.load588 = load <2 x double>, ptr %317, align 8, !tbaa !10, !alias.scope !39, !noalias !36
  %wide.load589 = load <2 x double>, ptr %318, align 8, !tbaa !10, !alias.scope !39, !noalias !36
  %319 = fmul <2 x double> %wide.load586, %wide.load588
  %320 = fmul <2 x double> %wide.load587, %wide.load589
  store <2 x double> %319, ptr %317, align 8, !tbaa !10, !alias.scope !39, !noalias !36
  store <2 x double> %320, ptr %318, align 8, !tbaa !10, !alias.scope !39, !noalias !36
  %index.next590 = add nuw i64 %index584, 4
  %321 = icmp eq i64 %index.next590, %n.vec580
  br i1 %321, label %middle.block575, label %vector.body583, !llvm.loop !41

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

scalar.ph576.preheader:                           ; preds = %.lr.ph469, %middle.block575
  %.2369467.ph = phi i64 [ 1, %.lr.ph469 ], [ %ind.end581, %middle.block575 ]
  %322 = sub i64 %312, %.2369467.ph
  %323 = sub i64 %306, %.2369467.ph
  %xtraiter667 = and i64 %322, 3
  %lcmp.mod668.not = icmp eq i64 %xtraiter667, 0
  br i1 %lcmp.mod668.not, label %scalar.ph576.prol.loopexit, label %scalar.ph576.prol

scalar.ph576.prol:                                ; preds = %scalar.ph576.preheader, %scalar.ph576.prol
  %.2369467.prol = phi i64 [ %328, %scalar.ph576.prol ], [ %.2369467.ph, %scalar.ph576.preheader ]
  %prol.iter669 = phi i64 [ %prol.iter669.next, %scalar.ph576.prol ], [ 0, %scalar.ph576.preheader ]
  %324 = getelementptr inbounds double, ptr %31, i64 %.2369467.prol
  %325 = load double, ptr %324, align 8, !tbaa !10
  %gep472.prol = getelementptr double, ptr %invariant.gep471, i64 %.2369467.prol
  %326 = load double, ptr %gep472.prol, align 8, !tbaa !10
  %327 = fmul double %325, %326
  store double %327, ptr %gep472.prol, align 8, !tbaa !10
  %328 = add nuw i64 %.2369467.prol, 1
  %prol.iter669.next = add i64 %prol.iter669, 1
  %prol.iter669.cmp.not = icmp eq i64 %prol.iter669.next, %xtraiter667
  br i1 %prol.iter669.cmp.not, label %scalar.ph576.prol.loopexit, label %scalar.ph576.prol, !llvm.loop !42

scalar.ph576.prol.loopexit:                       ; preds = %scalar.ph576.prol, %scalar.ph576.preheader
  %.2369467.unr = phi i64 [ %.2369467.ph, %scalar.ph576.preheader ], [ %328, %scalar.ph576.prol ]
  %329 = icmp ult i64 %323, 3
  br i1 %329, label %._crit_edge470, label %scalar.ph576.preheader.new

scalar.ph576.preheader.new:                       ; preds = %scalar.ph576.prol.loopexit
  %invariant.gep687 = getelementptr i8, ptr %invariant.gep471, i64 8
  br label %scalar.ph576

scalar.ph576:                                     ; preds = %scalar.ph576, %scalar.ph576.preheader.new
  %.2369467 = phi i64 [ %.2369467.unr, %scalar.ph576.preheader.new ], [ %348, %scalar.ph576 ]
  %330 = getelementptr inbounds double, ptr %31, i64 %.2369467
  %331 = load double, ptr %330, align 8, !tbaa !10
  %gep472 = getelementptr double, ptr %invariant.gep471, i64 %.2369467
  %332 = load double, ptr %gep472, align 8, !tbaa !10
  %333 = fmul double %331, %332
  store double %333, ptr %gep472, align 8, !tbaa !10
  %334 = getelementptr double, ptr %11, i64 %.2369467
  %335 = load double, ptr %334, align 8, !tbaa !10
  %gep688 = getelementptr double, ptr %invariant.gep687, i64 %.2369467
  %336 = load double, ptr %gep688, align 8, !tbaa !10
  %337 = fmul double %335, %336
  store double %337, ptr %gep688, align 8, !tbaa !10
  %338 = add nuw i64 %.2369467, 2
  %339 = getelementptr inbounds double, ptr %31, i64 %338
  %340 = load double, ptr %339, align 8, !tbaa !10
  %gep472.2 = getelementptr double, ptr %invariant.gep471, i64 %338
  %341 = load double, ptr %gep472.2, align 8, !tbaa !10
  %342 = fmul double %340, %341
  store double %342, ptr %gep472.2, align 8, !tbaa !10
  %343 = add nuw i64 %.2369467, 3
  %344 = getelementptr inbounds double, ptr %31, i64 %343
  %345 = load double, ptr %344, align 8, !tbaa !10
  %gep472.3 = getelementptr double, ptr %invariant.gep471, i64 %343
  %346 = load double, ptr %gep472.3, align 8, !tbaa !10
  %347 = fmul double %345, %346
  store double %347, ptr %gep472.3, align 8, !tbaa !10
  %348 = add nuw i64 %.2369467, 4
  %exitcond512.not.3 = icmp eq i64 %343, %306
  br i1 %exitcond512.not.3, label %._crit_edge470, label %scalar.ph576, !llvm.loop !43

._crit_edge470:                                   ; preds = %scalar.ph576.prol.loopexit, %scalar.ph576, %middle.block575
  %349 = add nuw i64 %.4474, 1
  %exitcond513.not = icmp eq i64 %.4474, %305
  br i1 %exitcond513.not, label %._crit_edge477, label %.lr.ph469, !llvm.loop !44

._crit_edge477:                                   ; preds = %._crit_edge470
  br i1 %.not400473, label %.loopexit, label %.lr.ph481

.lr.ph481:                                        ; preds = %.lr.ph476, %._crit_edge477
  %350 = load double, ptr %27, align 8, !tbaa !10
  %min.iters.check594 = icmp eq i64 %305, 1
  br i1 %min.iters.check594, label %scalar.ph593.preheader, label %vector.ph595

vector.ph595:                                     ; preds = %.lr.ph481
  %n.vec597 = and i64 %305, 9223372036854775806
  %ind.end598 = or i64 %305, 1
  %broadcast.splatinsert = insertelement <2 x double> poison, double %350, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body600

vector.body600:                                   ; preds = %vector.body600, %vector.ph595
  %index601 = phi i64 [ 0, %vector.ph595 ], [ %index.next604, %vector.body600 ]
  %351 = getelementptr double, ptr %17, i64 %index601
  %wide.load603 = load <2 x double>, ptr %351, align 8, !tbaa !10
  %352 = fdiv <2 x double> %wide.load603, %broadcast.splat
  store <2 x double> %352, ptr %351, align 8, !tbaa !10
  %index.next604 = add nuw i64 %index601, 2
  %353 = icmp eq i64 %index.next604, %n.vec597
  br i1 %353, label %middle.block592, label %vector.body600, !llvm.loop !45

middle.block592:                                  ; preds = %vector.body600
  %cmp.n605 = icmp eq i64 %305, %n.vec597
  br i1 %cmp.n605, label %.loopexit, label %scalar.ph593.preheader

scalar.ph593.preheader:                           ; preds = %middle.block592, %.lr.ph481
  %.5479.ph = phi i64 [ 1, %.lr.ph481 ], [ %ind.end598, %middle.block592 ]
  br label %scalar.ph593

scalar.ph593:                                     ; preds = %scalar.ph593.preheader, %scalar.ph593
  %.5479 = phi i64 [ %357, %scalar.ph593 ], [ %.5479.ph, %scalar.ph593.preheader ]
  %354 = getelementptr inbounds double, ptr %38, i64 %.5479
  %355 = load double, ptr %354, align 8, !tbaa !10
  %356 = fdiv double %355, %350
  store double %356, ptr %354, align 8, !tbaa !10
  %357 = add nuw i64 %.5479, 1
  %exitcond514.not = icmp eq i64 %.5479, %305
  br i1 %exitcond514.not, label %.loopexit, label %scalar.ph593, !llvm.loop !46

358:                                              ; preds = %298
  %.not395 = icmp eq i64 %.1355, 0
  br i1 %.not395, label %.loopexit, label %359

359:                                              ; preds = %358
  %360 = load i64, ptr %3, align 8, !tbaa !5
  %.not396489 = icmp slt i64 %360, 1
  br i1 %.not396489, label %.loopexit, label %.lr.ph492

.lr.ph492:                                        ; preds = %359
  %361 = load i64, ptr %2, align 8, !tbaa !5
  %.not398482 = icmp slt i64 %361, 1
  br i1 %.not398482, label %.lr.ph497, label %.lr.ph485.preheader

.lr.ph485.preheader:                              ; preds = %.lr.ph492
  %362 = add nuw i64 %360, 2305843009213693951
  %363 = mul i64 %35, %362
  %364 = shl i64 %361, 3
  %365 = add i64 %363, %361
  %366 = shl i64 %365, 3
  %scevgep607 = getelementptr i8, ptr %14, i64 %366
  %scevgep608 = getelementptr i8, ptr %10, i64 %364
  %367 = add nuw i64 %361, 1
  %min.iters.check615 = icmp ult i64 %361, 4
  %bound0609 = icmp ugt ptr %scevgep608, %14
  %bound1610 = icmp ugt ptr %scevgep607, %10
  %found.conflict611 = and i1 %bound0609, %bound1610
  %.mask648 = and i64 %35, 1152921504606846976
  %stride.check612 = icmp ne i64 %.mask648, 0
  %368 = or i1 %found.conflict611, %stride.check612
  %n.vec618 = and i64 %361, 9223372036854775804
  %ind.end619 = or disjoint i64 %n.vec618, 1
  %cmp.n629 = icmp eq i64 %361, %n.vec618
  br label %.lr.ph485

.lr.ph485:                                        ; preds = %.lr.ph485.preheader, %._crit_edge486
  %.6490 = phi i64 [ %404, %._crit_edge486 ], [ 1, %.lr.ph485.preheader ]
  %369 = mul nsw i64 %.6490, %35
  %invariant.gep487 = getelementptr double, ptr %37, i64 %369
  %brmerge693 = select i1 %min.iters.check615, i1 true, i1 %368
  br i1 %brmerge693, label %scalar.ph614.preheader, label %vector.body621

vector.body621:                                   ; preds = %.lr.ph485, %vector.body621
  %index622 = phi i64 [ %index.next628, %vector.body621 ], [ 0, %.lr.ph485 ]
  %offset.idx623 = or disjoint i64 %index622, 1
  %370 = getelementptr double, ptr %10, i64 %index622
  %371 = getelementptr inbounds i8, ptr %370, i64 16
  %wide.load624 = load <2 x double>, ptr %370, align 8, !tbaa !10, !alias.scope !47
  %wide.load625 = load <2 x double>, ptr %371, align 8, !tbaa !10, !alias.scope !47
  %372 = getelementptr double, ptr %invariant.gep487, i64 %offset.idx623
  %373 = getelementptr i8, ptr %372, i64 16
  %wide.load626 = load <2 x double>, ptr %372, align 8, !tbaa !10, !alias.scope !50, !noalias !47
  %wide.load627 = load <2 x double>, ptr %373, align 8, !tbaa !10, !alias.scope !50, !noalias !47
  %374 = fmul <2 x double> %wide.load624, %wide.load626
  %375 = fmul <2 x double> %wide.load625, %wide.load627
  store <2 x double> %374, ptr %372, align 8, !tbaa !10, !alias.scope !50, !noalias !47
  store <2 x double> %375, ptr %373, align 8, !tbaa !10, !alias.scope !50, !noalias !47
  %index.next628 = add nuw i64 %index622, 4
  %376 = icmp eq i64 %index.next628, %n.vec618
  br i1 %376, label %middle.block613, label %vector.body621, !llvm.loop !52

middle.block613:                                  ; preds = %vector.body621
  br i1 %cmp.n629, label %._crit_edge486, label %scalar.ph614.preheader

scalar.ph614.preheader:                           ; preds = %.lr.ph485, %middle.block613
  %.3370483.ph = phi i64 [ 1, %.lr.ph485 ], [ %ind.end619, %middle.block613 ]
  %377 = sub i64 %367, %.3370483.ph
  %378 = sub i64 %361, %.3370483.ph
  %xtraiter670 = and i64 %377, 3
  %lcmp.mod671.not = icmp eq i64 %xtraiter670, 0
  br i1 %lcmp.mod671.not, label %scalar.ph614.prol.loopexit, label %scalar.ph614.prol

scalar.ph614.prol:                                ; preds = %scalar.ph614.preheader, %scalar.ph614.prol
  %.3370483.prol = phi i64 [ %383, %scalar.ph614.prol ], [ %.3370483.ph, %scalar.ph614.preheader ]
  %prol.iter672 = phi i64 [ %prol.iter672.next, %scalar.ph614.prol ], [ 0, %scalar.ph614.preheader ]
  %379 = getelementptr inbounds double, ptr %30, i64 %.3370483.prol
  %380 = load double, ptr %379, align 8, !tbaa !10
  %gep488.prol = getelementptr double, ptr %invariant.gep487, i64 %.3370483.prol
  %381 = load double, ptr %gep488.prol, align 8, !tbaa !10
  %382 = fmul double %380, %381
  store double %382, ptr %gep488.prol, align 8, !tbaa !10
  %383 = add nuw i64 %.3370483.prol, 1
  %prol.iter672.next = add i64 %prol.iter672, 1
  %prol.iter672.cmp.not = icmp eq i64 %prol.iter672.next, %xtraiter670
  br i1 %prol.iter672.cmp.not, label %scalar.ph614.prol.loopexit, label %scalar.ph614.prol, !llvm.loop !53

scalar.ph614.prol.loopexit:                       ; preds = %scalar.ph614.prol, %scalar.ph614.preheader
  %.3370483.unr = phi i64 [ %.3370483.ph, %scalar.ph614.preheader ], [ %383, %scalar.ph614.prol ]
  %384 = icmp ult i64 %378, 3
  br i1 %384, label %._crit_edge486, label %scalar.ph614.preheader.new

scalar.ph614.preheader.new:                       ; preds = %scalar.ph614.prol.loopexit
  %invariant.gep689 = getelementptr i8, ptr %invariant.gep487, i64 8
  br label %scalar.ph614

scalar.ph614:                                     ; preds = %scalar.ph614, %scalar.ph614.preheader.new
  %.3370483 = phi i64 [ %.3370483.unr, %scalar.ph614.preheader.new ], [ %403, %scalar.ph614 ]
  %385 = getelementptr inbounds double, ptr %30, i64 %.3370483
  %386 = load double, ptr %385, align 8, !tbaa !10
  %gep488 = getelementptr double, ptr %invariant.gep487, i64 %.3370483
  %387 = load double, ptr %gep488, align 8, !tbaa !10
  %388 = fmul double %386, %387
  store double %388, ptr %gep488, align 8, !tbaa !10
  %389 = getelementptr double, ptr %10, i64 %.3370483
  %390 = load double, ptr %389, align 8, !tbaa !10
  %gep690 = getelementptr double, ptr %invariant.gep689, i64 %.3370483
  %391 = load double, ptr %gep690, align 8, !tbaa !10
  %392 = fmul double %390, %391
  store double %392, ptr %gep690, align 8, !tbaa !10
  %393 = add nuw i64 %.3370483, 2
  %394 = getelementptr inbounds double, ptr %30, i64 %393
  %395 = load double, ptr %394, align 8, !tbaa !10
  %gep488.2 = getelementptr double, ptr %invariant.gep487, i64 %393
  %396 = load double, ptr %gep488.2, align 8, !tbaa !10
  %397 = fmul double %395, %396
  store double %397, ptr %gep488.2, align 8, !tbaa !10
  %398 = add nuw i64 %.3370483, 3
  %399 = getelementptr inbounds double, ptr %30, i64 %398
  %400 = load double, ptr %399, align 8, !tbaa !10
  %gep488.3 = getelementptr double, ptr %invariant.gep487, i64 %398
  %401 = load double, ptr %gep488.3, align 8, !tbaa !10
  %402 = fmul double %400, %401
  store double %402, ptr %gep488.3, align 8, !tbaa !10
  %403 = add nuw i64 %.3370483, 4
  %exitcond515.not.3 = icmp eq i64 %398, %361
  br i1 %exitcond515.not.3, label %._crit_edge486, label %scalar.ph614, !llvm.loop !54

._crit_edge486:                                   ; preds = %scalar.ph614.prol.loopexit, %scalar.ph614, %middle.block613
  %404 = add nuw i64 %.6490, 1
  %exitcond516.not = icmp eq i64 %.6490, %360
  br i1 %exitcond516.not, label %._crit_edge493, label %.lr.ph485, !llvm.loop !55

._crit_edge493:                                   ; preds = %._crit_edge486
  br i1 %.not396489, label %.loopexit, label %.lr.ph497

.lr.ph497:                                        ; preds = %.lr.ph492, %._crit_edge493
  %405 = load double, ptr %29, align 8, !tbaa !10
  %min.iters.check632 = icmp eq i64 %360, 1
  br i1 %min.iters.check632, label %scalar.ph631.preheader, label %vector.ph633

vector.ph633:                                     ; preds = %.lr.ph497
  %n.vec635 = and i64 %360, 9223372036854775806
  %ind.end636 = or i64 %360, 1
  %broadcast.splatinsert642 = insertelement <2 x double> poison, double %405, i64 0
  %broadcast.splat643 = shufflevector <2 x double> %broadcast.splatinsert642, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body638

vector.body638:                                   ; preds = %vector.body638, %vector.ph633
  %index639 = phi i64 [ 0, %vector.ph633 ], [ %index.next644, %vector.body638 ]
  %406 = getelementptr double, ptr %17, i64 %index639
  %wide.load641 = load <2 x double>, ptr %406, align 8, !tbaa !10
  %407 = fdiv <2 x double> %wide.load641, %broadcast.splat643
  store <2 x double> %407, ptr %406, align 8, !tbaa !10
  %index.next644 = add nuw i64 %index639, 2
  %408 = icmp eq i64 %index.next644, %n.vec635
  br i1 %408, label %middle.block630, label %vector.body638, !llvm.loop !56

middle.block630:                                  ; preds = %vector.body638
  %cmp.n645 = icmp eq i64 %360, %n.vec635
  br i1 %cmp.n645, label %.loopexit, label %scalar.ph631.preheader

scalar.ph631.preheader:                           ; preds = %middle.block630, %.lr.ph497
  %.7495.ph = phi i64 [ 1, %.lr.ph497 ], [ %ind.end636, %middle.block630 ]
  br label %scalar.ph631

scalar.ph631:                                     ; preds = %scalar.ph631.preheader, %scalar.ph631
  %.7495 = phi i64 [ %412, %scalar.ph631 ], [ %.7495.ph, %scalar.ph631.preheader ]
  %409 = getelementptr inbounds double, ptr %38, i64 %.7495
  %410 = load double, ptr %409, align 8, !tbaa !10
  %411 = fdiv double %410, %405
  store double %411, ptr %409, align 8, !tbaa !10
  %412 = add nuw i64 %.7495, 1
  %exitcond517.not = icmp eq i64 %.7495, %360
  br i1 %exitcond517.not, label %.loopexit, label %scalar.ph631, !llvm.loop !57

.loopexit:                                        ; preds = %scalar.ph593, %scalar.ph631, %middle.block592, %middle.block630, %359, %304, %._crit_edge477, %._crit_edge493, %358, %303
  store double %.1, ptr %19, align 8, !tbaa !10
  %413 = load double, ptr %16, align 8, !tbaa !10
  %414 = call double @dlamch_(ptr noundef nonnull @.str.12) #4
  %415 = fcmp olt double %413, %414
  br i1 %415, label %416, label %419

416:                                              ; preds = %.loopexit
  %417 = load i64, ptr %2, align 8, !tbaa !5
  %418 = add nsw i64 %417, 1
  store i64 %418, ptr %21, align 8, !tbaa !5
  br label %419

419:                                              ; preds = %.loopexit, %416, %290, %.thread423
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #4
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr nonnull %23) #4
  ret i32 0
}

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

declare i32 @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 i32 @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 i32 @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 i32 @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 i32 @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 i64 @llvm.umax.i64(i64, i64) #3

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

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

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

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