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

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

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [8 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 [8 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@c_true = external hidden global i64, align 8
@c_false = external hidden global i64, align 8

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

145:                                              ; preds = %24
  %146 = load ptr, ptr %46, align 8, !tbaa !5
  %147 = getelementptr inbounds double, ptr %146, i64 1
  %148 = load double, ptr %147, align 8, !tbaa !11
  %149 = fcmp olt double %148, 0.000000e+00
  br i1 %149, label %150, label %153

150:                                              ; preds = %145
  %151 = load ptr, ptr %46, align 8, !tbaa !5
  %152 = getelementptr inbounds double, ptr %151, i64 1
  store double 1.000000e+00, ptr %152, align 8, !tbaa !11
  br label %158

153:                                              ; preds = %145
  %154 = load ptr, ptr %46, align 8, !tbaa !5
  %155 = getelementptr inbounds double, ptr %154, i64 1
  %156 = load double, ptr %155, align 8, !tbaa !11
  %157 = fptosi double %156 to i64
  store i64 %157, ptr %68, align 8, !tbaa !9
  br label %158

158:                                              ; preds = %153, %150
  br label %159

159:                                              ; preds = %158, %24
  %160 = load ptr, ptr %28, align 8, !tbaa !5
  %161 = load i64, ptr %160, align 8, !tbaa !9
  %162 = sitofp i64 %161 to double
  %163 = call double @dlamch_(ptr noundef @.str)
  %164 = fmul double %162, %163
  store double %164, ptr %65, align 8, !tbaa !11
  store i64 10, ptr %77, align 8, !tbaa !9
  store double 5.000000e-01, ptr %79, align 8, !tbaa !11
  store double 2.500000e-01, ptr %66, align 8, !tbaa !11
  store i64 0, ptr %74, align 8, !tbaa !9
  %165 = load ptr, ptr %45, align 8, !tbaa !5
  %166 = load i64, ptr %165, align 8, !tbaa !9
  %167 = icmp sge i64 %166, 2
  br i1 %167, label %168, label %184

168:                                              ; preds = %159
  %169 = load ptr, ptr %46, align 8, !tbaa !5
  %170 = getelementptr inbounds double, ptr %169, i64 2
  %171 = load double, ptr %170, align 8, !tbaa !11
  %172 = fcmp olt double %171, 0.000000e+00
  br i1 %172, label %173, label %178

173:                                              ; preds = %168
  %174 = load i64, ptr %77, align 8, !tbaa !9
  %175 = sitofp i64 %174 to double
  %176 = load ptr, ptr %46, align 8, !tbaa !5
  %177 = getelementptr inbounds double, ptr %176, i64 2
  store double %175, ptr %177, align 8, !tbaa !11
  br label %183

178:                                              ; preds = %168
  %179 = load ptr, ptr %46, align 8, !tbaa !5
  %180 = getelementptr inbounds double, ptr %179, i64 2
  %181 = load double, ptr %180, align 8, !tbaa !11
  %182 = fptosi double %181 to i64
  store i64 %182, ptr %77, align 8, !tbaa !9
  br label %183

183:                                              ; preds = %178, %173
  br label %184

184:                                              ; preds = %183, %159
  %185 = load ptr, ptr %45, align 8, !tbaa !5
  %186 = load i64, ptr %185, align 8, !tbaa !9
  %187 = icmp sge i64 %186, 3
  br i1 %187, label %188, label %211

188:                                              ; preds = %184
  %189 = load ptr, ptr %46, align 8, !tbaa !5
  %190 = getelementptr inbounds double, ptr %189, i64 3
  %191 = load double, ptr %190, align 8, !tbaa !11
  %192 = fcmp olt double %191, 0.000000e+00
  br i1 %192, label %193, label %203

193:                                              ; preds = %188
  %194 = load i64, ptr %74, align 8, !tbaa !9
  %195 = icmp ne i64 %194, 0
  br i1 %195, label %196, label %199

196:                                              ; preds = %193
  %197 = load ptr, ptr %46, align 8, !tbaa !5
  %198 = getelementptr inbounds double, ptr %197, i64 3
  store double 0.000000e+00, ptr %198, align 8, !tbaa !11
  br label %202

199:                                              ; preds = %193
  %200 = load ptr, ptr %46, align 8, !tbaa !5
  %201 = getelementptr inbounds double, ptr %200, i64 3
  store double 1.000000e+00, ptr %201, align 8, !tbaa !11
  br label %202

202:                                              ; preds = %199, %196
  br label %210

203:                                              ; preds = %188
  %204 = load ptr, ptr %46, align 8, !tbaa !5
  %205 = getelementptr inbounds double, ptr %204, i64 3
  %206 = load double, ptr %205, align 8, !tbaa !11
  %207 = fcmp oeq double %206, 0.000000e+00
  %208 = zext i1 %207 to i32
  %209 = sext i32 %208 to i64
  store i64 %209, ptr %74, align 8, !tbaa !9
  br label %210

210:                                              ; preds = %203, %202
  br label %211

211:                                              ; preds = %210, %184
  %212 = load i64, ptr %68, align 8, !tbaa !9
  %213 = icmp eq i64 %212, 0
  br i1 %213, label %218, label %214

214:                                              ; preds = %211
  %215 = load ptr, ptr %42, align 8, !tbaa !5
  %216 = load i64, ptr %215, align 8, !tbaa !9
  %217 = icmp eq i64 %216, 0
  br i1 %217, label %218, label %219

218:                                              ; preds = %214, %211
  store i64 0, ptr %78, align 8, !tbaa !9
  br label %225

219:                                              ; preds = %214
  %220 = load i64, ptr %74, align 8, !tbaa !9
  %221 = icmp ne i64 %220, 0
  br i1 %221, label %222, label %223

222:                                              ; preds = %219
  store i64 1, ptr %78, align 8, !tbaa !9
  br label %224

223:                                              ; preds = %219
  store i64 2, ptr %78, align 8, !tbaa !9
  br label %224

224:                                              ; preds = %223, %222
  br label %225

225:                                              ; preds = %224, %218
  %226 = load ptr, ptr %27, align 8, !tbaa !5
  %227 = call i64 @lsame_(ptr noundef %226, ptr noundef @.str.1)
  store i64 %227, ptr %76, align 8, !tbaa !9
  %228 = load ptr, ptr %26, align 8, !tbaa !5
  %229 = call i64 @lsame_(ptr noundef %228, ptr noundef @.str.2)
  %230 = icmp ne i64 %229, 0
  br i1 %230, label %237, label %231

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

235:                                              ; preds = %231
  %236 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -1, ptr %236, align 8, !tbaa !9
  br label %325

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

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

244:                                              ; preds = %240
  %245 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -2, ptr %245, align 8, !tbaa !9
  br label %324

246:                                              ; preds = %240, %237
  %247 = load ptr, ptr %28, align 8, !tbaa !5
  %248 = load i64, ptr %247, align 8, !tbaa !9
  %249 = icmp slt i64 %248, 0
  br i1 %249, label %250, label %252

250:                                              ; preds = %246
  %251 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -3, ptr %251, align 8, !tbaa !9
  br label %323

252:                                              ; preds = %246
  %253 = load ptr, ptr %29, align 8, !tbaa !5
  %254 = load i64, ptr %253, align 8, !tbaa !9
  %255 = icmp slt i64 %254, 0
  br i1 %255, label %256, label %258

256:                                              ; preds = %252
  %257 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -4, ptr %257, align 8, !tbaa !9
  br label %322

258:                                              ; preds = %252
  %259 = load ptr, ptr %31, align 8, !tbaa !5
  %260 = load i64, ptr %259, align 8, !tbaa !9
  %261 = load ptr, ptr %28, align 8, !tbaa !5
  %262 = load i64, ptr %261, align 8, !tbaa !9
  %263 = icmp sge i64 1, %262
  br i1 %263, label %264, label %265

264:                                              ; preds = %258
  br label %268

265:                                              ; preds = %258
  %266 = load ptr, ptr %28, align 8, !tbaa !5
  %267 = load i64, ptr %266, align 8, !tbaa !9
  br label %268

268:                                              ; preds = %265, %264
  %269 = phi i64 [ 1, %264 ], [ %267, %265 ]
  %270 = icmp slt i64 %260, %269
  br i1 %270, label %271, label %273

271:                                              ; preds = %268
  %272 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -6, ptr %272, align 8, !tbaa !9
  br label %321

273:                                              ; preds = %268
  %274 = load ptr, ptr %33, align 8, !tbaa !5
  %275 = load i64, ptr %274, align 8, !tbaa !9
  %276 = load ptr, ptr %28, align 8, !tbaa !5
  %277 = load i64, ptr %276, align 8, !tbaa !9
  %278 = icmp sge i64 1, %277
  br i1 %278, label %279, label %280

279:                                              ; preds = %273
  br label %283

280:                                              ; preds = %273
  %281 = load ptr, ptr %28, align 8, !tbaa !5
  %282 = load i64, ptr %281, align 8, !tbaa !9
  br label %283

283:                                              ; preds = %280, %279
  %284 = phi i64 [ 1, %279 ], [ %282, %280 ]
  %285 = icmp slt i64 %275, %284
  br i1 %285, label %286, label %288

286:                                              ; preds = %283
  %287 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -8, ptr %287, align 8, !tbaa !9
  br label %320

288:                                              ; preds = %283
  %289 = load ptr, ptr %37, align 8, !tbaa !5
  %290 = load i64, ptr %289, align 8, !tbaa !9
  %291 = load ptr, ptr %28, align 8, !tbaa !5
  %292 = load i64, ptr %291, align 8, !tbaa !9
  %293 = icmp sge i64 1, %292
  br i1 %293, label %294, label %295

294:                                              ; preds = %288
  br label %298

295:                                              ; preds = %288
  %296 = load ptr, ptr %28, align 8, !tbaa !5
  %297 = load i64, ptr %296, align 8, !tbaa !9
  br label %298

298:                                              ; preds = %295, %294
  %299 = phi i64 [ 1, %294 ], [ %297, %295 ]
  %300 = icmp slt i64 %290, %299
  br i1 %300, label %301, label %303

301:                                              ; preds = %298
  %302 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -11, ptr %302, align 8, !tbaa !9
  br label %319

303:                                              ; preds = %298
  %304 = load ptr, ptr %39, align 8, !tbaa !5
  %305 = load i64, ptr %304, align 8, !tbaa !9
  %306 = load ptr, ptr %28, align 8, !tbaa !5
  %307 = load i64, ptr %306, align 8, !tbaa !9
  %308 = icmp sge i64 1, %307
  br i1 %308, label %309, label %310

309:                                              ; preds = %303
  br label %313

310:                                              ; preds = %303
  %311 = load ptr, ptr %28, align 8, !tbaa !5
  %312 = load i64, ptr %311, align 8, !tbaa !9
  br label %313

313:                                              ; preds = %310, %309
  %314 = phi i64 [ 1, %309 ], [ %312, %310 ]
  %315 = icmp slt i64 %305, %314
  br i1 %315, label %316, label %318

316:                                              ; preds = %313
  %317 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 -13, ptr %317, align 8, !tbaa !9
  br label %318

318:                                              ; preds = %316, %313
  br label %319

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

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

321:                                              ; preds = %320, %271
  br label %322

322:                                              ; preds = %321, %256
  br label %323

323:                                              ; preds = %322, %250
  br label %324

324:                                              ; preds = %323, %244
  br label %325

325:                                              ; preds = %324, %235
  %326 = load ptr, ptr %49, align 8, !tbaa !5
  %327 = load i64, ptr %326, align 8, !tbaa !9
  %328 = icmp ne i64 %327, 0
  br i1 %328, label %329, label %334

329:                                              ; preds = %325
  %330 = load ptr, ptr %49, align 8, !tbaa !5
  %331 = load i64, ptr %330, align 8, !tbaa !9
  %332 = sub nsw i64 0, %331
  store i64 %332, ptr %62, align 8, !tbaa !9
  %333 = call i32 @xerbla_(ptr noundef @.str.5, ptr noundef %62)
  store i32 0, ptr %25, align 4
  store i32 1, ptr %80, align 4
  br label %861

334:                                              ; preds = %325
  %335 = load ptr, ptr %28, align 8, !tbaa !5
  %336 = load i64, ptr %335, align 8, !tbaa !9
  %337 = icmp eq i64 %336, 0
  br i1 %337, label %342, label %338

338:                                              ; preds = %334
  %339 = load ptr, ptr %29, align 8, !tbaa !5
  %340 = load i64, ptr %339, align 8, !tbaa !9
  %341 = icmp eq i64 %340, 0
  br i1 %341, label %342, label %409

342:                                              ; preds = %338, %334
  %343 = load ptr, ptr %40, align 8, !tbaa !5
  store double 1.000000e+00, ptr %343, align 8, !tbaa !11
  %344 = load ptr, ptr %29, align 8, !tbaa !5
  %345 = load i64, ptr %344, align 8, !tbaa !9
  store i64 %345, ptr %62, align 8, !tbaa !9
  store i64 1, ptr %69, align 8, !tbaa !9
  br label %346

346:                                              ; preds = %405, %342
  %347 = load i64, ptr %69, align 8, !tbaa !9
  %348 = load i64, ptr %62, align 8, !tbaa !9
  %349 = icmp sle i64 %347, %348
  br i1 %349, label %350, label %408

350:                                              ; preds = %346
  %351 = load ptr, ptr %41, align 8, !tbaa !5
  %352 = load i64, ptr %69, align 8, !tbaa !9
  %353 = getelementptr inbounds double, ptr %351, i64 %352
  store double 0.000000e+00, ptr %353, align 8, !tbaa !11
  %354 = load ptr, ptr %42, align 8, !tbaa !5
  %355 = load i64, ptr %354, align 8, !tbaa !9
  %356 = icmp sge i64 %355, 1
  br i1 %356, label %357, label %368

357:                                              ; preds = %350
  %358 = load ptr, ptr %43, align 8, !tbaa !5
  %359 = load i64, ptr %69, align 8, !tbaa !9
  %360 = load i64, ptr %58, align 8, !tbaa !9
  %361 = add nsw i64 %359, %360
  %362 = getelementptr inbounds double, ptr %358, i64 %361
  store double 1.000000e+00, ptr %362, align 8, !tbaa !11
  %363 = load ptr, ptr %44, align 8, !tbaa !5
  %364 = load i64, ptr %69, align 8, !tbaa !9
  %365 = load i64, ptr %60, align 8, !tbaa !9
  %366 = add nsw i64 %364, %365
  %367 = getelementptr inbounds double, ptr %363, i64 %366
  store double 1.000000e+00, ptr %367, align 8, !tbaa !11
  br label %404

368:                                              ; preds = %350
  %369 = load ptr, ptr %42, align 8, !tbaa !5
  %370 = load i64, ptr %369, align 8, !tbaa !9
  %371 = icmp sge i64 %370, 2
  br i1 %371, label %372, label %385

372:                                              ; preds = %368
  %373 = load ptr, ptr %43, align 8, !tbaa !5
  %374 = load i64, ptr %69, align 8, !tbaa !9
  %375 = load i64, ptr %58, align 8, !tbaa !9
  %376 = shl i64 %375, 1
  %377 = add nsw i64 %374, %376
  %378 = getelementptr inbounds double, ptr %373, i64 %377
  store double 0.000000e+00, ptr %378, align 8, !tbaa !11
  %379 = load ptr, ptr %44, align 8, !tbaa !5
  %380 = load i64, ptr %69, align 8, !tbaa !9
  %381 = load i64, ptr %60, align 8, !tbaa !9
  %382 = shl i64 %381, 1
  %383 = add nsw i64 %380, %382
  %384 = getelementptr inbounds double, ptr %379, i64 %383
  store double 0.000000e+00, ptr %384, align 8, !tbaa !11
  br label %403

385:                                              ; preds = %368
  %386 = load ptr, ptr %42, align 8, !tbaa !5
  %387 = load i64, ptr %386, align 8, !tbaa !9
  %388 = icmp sge i64 %387, 3
  br i1 %388, label %389, label %402

389:                                              ; preds = %385
  %390 = load ptr, ptr %43, align 8, !tbaa !5
  %391 = load i64, ptr %69, align 8, !tbaa !9
  %392 = load i64, ptr %58, align 8, !tbaa !9
  %393 = mul nsw i64 %392, 3
  %394 = add nsw i64 %391, %393
  %395 = getelementptr inbounds double, ptr %390, i64 %394
  store double 1.000000e+00, ptr %395, align 8, !tbaa !11
  %396 = load ptr, ptr %44, align 8, !tbaa !5
  %397 = load i64, ptr %69, align 8, !tbaa !9
  %398 = load i64, ptr %60, align 8, !tbaa !9
  %399 = mul nsw i64 %398, 3
  %400 = add nsw i64 %397, %399
  %401 = getelementptr inbounds double, ptr %396, i64 %400
  store double 1.000000e+00, ptr %401, align 8, !tbaa !11
  br label %402

402:                                              ; preds = %389, %385
  br label %403

403:                                              ; preds = %402, %372
  br label %404

404:                                              ; preds = %403, %357
  br label %405

405:                                              ; preds = %404
  %406 = load i64, ptr %69, align 8, !tbaa !9
  %407 = add nsw i64 %406, 1
  store i64 %407, ptr %69, align 8, !tbaa !9
  br label %346, !llvm.loop !13

408:                                              ; preds = %346
  store i32 0, ptr %25, align 4
  store i32 1, ptr %80, align 4
  br label %861

409:                                              ; preds = %338
  %410 = load ptr, ptr %40, align 8, !tbaa !5
  store double 0.000000e+00, ptr %410, align 8, !tbaa !11
  %411 = load ptr, ptr %29, align 8, !tbaa !5
  %412 = load i64, ptr %411, align 8, !tbaa !9
  store i64 %412, ptr %62, align 8, !tbaa !9
  store i64 1, ptr %69, align 8, !tbaa !9
  br label %413

413:                                              ; preds = %472, %409
  %414 = load i64, ptr %69, align 8, !tbaa !9
  %415 = load i64, ptr %62, align 8, !tbaa !9
  %416 = icmp sle i64 %414, %415
  br i1 %416, label %417, label %475

417:                                              ; preds = %413
  %418 = load ptr, ptr %41, align 8, !tbaa !5
  %419 = load i64, ptr %69, align 8, !tbaa !9
  %420 = getelementptr inbounds double, ptr %418, i64 %419
  store double 1.000000e+00, ptr %420, align 8, !tbaa !11
  %421 = load ptr, ptr %42, align 8, !tbaa !5
  %422 = load i64, ptr %421, align 8, !tbaa !9
  %423 = icmp sge i64 %422, 1
  br i1 %423, label %424, label %435

424:                                              ; preds = %417
  %425 = load ptr, ptr %43, align 8, !tbaa !5
  %426 = load i64, ptr %69, align 8, !tbaa !9
  %427 = load i64, ptr %58, align 8, !tbaa !9
  %428 = add nsw i64 %426, %427
  %429 = getelementptr inbounds double, ptr %425, i64 %428
  store double 1.000000e+00, ptr %429, align 8, !tbaa !11
  %430 = load ptr, ptr %44, align 8, !tbaa !5
  %431 = load i64, ptr %69, align 8, !tbaa !9
  %432 = load i64, ptr %60, align 8, !tbaa !9
  %433 = add nsw i64 %431, %432
  %434 = getelementptr inbounds double, ptr %430, i64 %433
  store double 1.000000e+00, ptr %434, align 8, !tbaa !11
  br label %471

435:                                              ; preds = %417
  %436 = load ptr, ptr %42, align 8, !tbaa !5
  %437 = load i64, ptr %436, align 8, !tbaa !9
  %438 = icmp sge i64 %437, 2
  br i1 %438, label %439, label %452

439:                                              ; preds = %435
  %440 = load ptr, ptr %43, align 8, !tbaa !5
  %441 = load i64, ptr %69, align 8, !tbaa !9
  %442 = load i64, ptr %58, align 8, !tbaa !9
  %443 = shl i64 %442, 1
  %444 = add nsw i64 %441, %443
  %445 = getelementptr inbounds double, ptr %440, i64 %444
  store double 1.000000e+00, ptr %445, align 8, !tbaa !11
  %446 = load ptr, ptr %44, align 8, !tbaa !5
  %447 = load i64, ptr %69, align 8, !tbaa !9
  %448 = load i64, ptr %60, align 8, !tbaa !9
  %449 = shl i64 %448, 1
  %450 = add nsw i64 %447, %449
  %451 = getelementptr inbounds double, ptr %446, i64 %450
  store double 1.000000e+00, ptr %451, align 8, !tbaa !11
  br label %470

452:                                              ; preds = %435
  %453 = load ptr, ptr %42, align 8, !tbaa !5
  %454 = load i64, ptr %453, align 8, !tbaa !9
  %455 = icmp sge i64 %454, 3
  br i1 %455, label %456, label %469

456:                                              ; preds = %452
  %457 = load ptr, ptr %43, align 8, !tbaa !5
  %458 = load i64, ptr %69, align 8, !tbaa !9
  %459 = load i64, ptr %58, align 8, !tbaa !9
  %460 = mul nsw i64 %459, 3
  %461 = add nsw i64 %458, %460
  %462 = getelementptr inbounds double, ptr %457, i64 %461
  store double 0.000000e+00, ptr %462, align 8, !tbaa !11
  %463 = load ptr, ptr %44, align 8, !tbaa !5
  %464 = load i64, ptr %69, align 8, !tbaa !9
  %465 = load i64, ptr %60, align 8, !tbaa !9
  %466 = mul nsw i64 %465, 3
  %467 = add nsw i64 %464, %466
  %468 = getelementptr inbounds double, ptr %463, i64 %467
  store double 0.000000e+00, ptr %468, align 8, !tbaa !11
  br label %469

469:                                              ; preds = %456, %452
  br label %470

470:                                              ; preds = %469, %439
  br label %471

471:                                              ; preds = %470, %424
  br label %472

472:                                              ; preds = %471
  %473 = load i64, ptr %69, align 8, !tbaa !9
  %474 = add nsw i64 %473, 1
  store i64 %474, ptr %69, align 8, !tbaa !9
  br label %413, !llvm.loop !15

475:                                              ; preds = %413
  %476 = getelementptr inbounds [1 x i8], ptr %73, i64 0, i64 0
  store i8 73, ptr %476, align 1, !tbaa !16
  %477 = getelementptr inbounds [1 x i8], ptr %73, i64 0, i64 0
  %478 = load ptr, ptr %26, align 8, !tbaa !5
  %479 = load ptr, ptr %28, align 8, !tbaa !5
  %480 = load ptr, ptr %30, align 8, !tbaa !5
  %481 = load i64, ptr %51, align 8, !tbaa !9
  %482 = getelementptr inbounds %struct.doublecomplex, ptr %480, i64 %481
  %483 = load ptr, ptr %31, align 8, !tbaa !5
  %484 = load ptr, ptr %48, align 8, !tbaa !5
  %485 = getelementptr inbounds double, ptr %484, i64 1
  %486 = call double @zlanhe_(ptr noundef %477, ptr noundef %478, ptr noundef %479, ptr noundef %482, ptr noundef %483, ptr noundef %485)
  store double %486, ptr %75, align 8, !tbaa !11
  %487 = load ptr, ptr %26, align 8, !tbaa !5
  %488 = load ptr, ptr %28, align 8, !tbaa !5
  %489 = load ptr, ptr %32, align 8, !tbaa !5
  %490 = load i64, ptr %53, align 8, !tbaa !9
  %491 = getelementptr inbounds %struct.doublecomplex, ptr %489, i64 %490
  %492 = load ptr, ptr %33, align 8, !tbaa !5
  %493 = load ptr, ptr %34, align 8, !tbaa !5
  %494 = getelementptr inbounds i64, ptr %493, i64 1
  %495 = load ptr, ptr %40, align 8, !tbaa !5
  %496 = load ptr, ptr %47, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.doublecomplex, ptr %496, i64 1
  %498 = load ptr, ptr %49, align 8, !tbaa !5
  %499 = call i32 @zhecon_(ptr noundef %487, ptr noundef %488, ptr noundef %491, ptr noundef %492, ptr noundef %494, ptr noundef %75, ptr noundef %495, ptr noundef %497, ptr noundef %498)
  %500 = load i64, ptr %68, align 8, !tbaa !9
  %501 = icmp ne i64 %500, 0
  br i1 %501, label %502, label %549

502:                                              ; preds = %475
  %503 = call i64 @ilaprec_(ptr noundef @.str.6)
  store i64 %503, ptr %71, align 8, !tbaa !9
  %504 = load ptr, ptr %26, align 8, !tbaa !5
  %505 = load ptr, ptr %28, align 8, !tbaa !5
  %506 = load ptr, ptr %29, align 8, !tbaa !5
  %507 = load ptr, ptr %30, align 8, !tbaa !5
  %508 = load i64, ptr %51, align 8, !tbaa !9
  %509 = getelementptr inbounds %struct.doublecomplex, ptr %507, i64 %508
  %510 = load ptr, ptr %31, align 8, !tbaa !5
  %511 = load ptr, ptr %32, align 8, !tbaa !5
  %512 = load i64, ptr %53, align 8, !tbaa !9
  %513 = getelementptr inbounds %struct.doublecomplex, ptr %511, i64 %512
  %514 = load ptr, ptr %33, align 8, !tbaa !5
  %515 = load ptr, ptr %34, align 8, !tbaa !5
  %516 = getelementptr inbounds i64, ptr %515, i64 1
  %517 = load ptr, ptr %35, align 8, !tbaa !5
  %518 = getelementptr inbounds double, ptr %517, i64 1
  %519 = load ptr, ptr %36, align 8, !tbaa !5
  %520 = load i64, ptr %55, align 8, !tbaa !9
  %521 = getelementptr inbounds %struct.doublecomplex, ptr %519, i64 %520
  %522 = load ptr, ptr %37, align 8, !tbaa !5
  %523 = load ptr, ptr %38, align 8, !tbaa !5
  %524 = load i64, ptr %57, align 8, !tbaa !9
  %525 = getelementptr inbounds %struct.doublecomplex, ptr %523, i64 %524
  %526 = load ptr, ptr %39, align 8, !tbaa !5
  %527 = load ptr, ptr %41, align 8, !tbaa !5
  %528 = getelementptr inbounds double, ptr %527, i64 1
  %529 = load ptr, ptr %43, align 8, !tbaa !5
  %530 = load i64, ptr %59, align 8, !tbaa !9
  %531 = getelementptr inbounds double, ptr %529, i64 %530
  %532 = load ptr, ptr %44, align 8, !tbaa !5
  %533 = load i64, ptr %61, align 8, !tbaa !9
  %534 = getelementptr inbounds double, ptr %532, i64 %533
  %535 = load ptr, ptr %47, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.doublecomplex, ptr %535, i64 1
  %537 = load ptr, ptr %48, align 8, !tbaa !5
  %538 = getelementptr inbounds double, ptr %537, i64 1
  %539 = load ptr, ptr %47, align 8, !tbaa !5
  %540 = load ptr, ptr %28, align 8, !tbaa !5
  %541 = load i64, ptr %540, align 8, !tbaa !9
  %542 = add nsw i64 %541, 1
  %543 = getelementptr inbounds %struct.doublecomplex, ptr %539, i64 %542
  %544 = load ptr, ptr %48, align 8, !tbaa !5
  %545 = getelementptr inbounds double, ptr %544, i64 1
  %546 = load ptr, ptr %40, align 8, !tbaa !5
  %547 = load ptr, ptr %49, align 8, !tbaa !5
  %548 = call i32 @zla_herfsx_extended__(ptr noundef %71, ptr noundef %504, ptr noundef %505, ptr noundef %506, ptr noundef %509, ptr noundef %510, ptr noundef %513, ptr noundef %514, ptr noundef %516, ptr noundef %76, ptr noundef %518, ptr noundef %521, ptr noundef %522, ptr noundef %525, ptr noundef %526, ptr noundef %528, ptr noundef %78, ptr noundef %531, ptr noundef %534, ptr noundef %536, ptr noundef %538, ptr noundef %543, ptr noundef %545, ptr noundef %546, ptr noundef %77, ptr noundef %79, ptr noundef %66, ptr noundef %74, ptr noundef %547, i64 noundef 1)
  br label %549

549:                                              ; preds = %502, %475
  store double 1.000000e+01, ptr %63, align 8, !tbaa !11
  %550 = load ptr, ptr %28, align 8, !tbaa !5
  %551 = load i64, ptr %550, align 8, !tbaa !9
  %552 = sitofp i64 %551 to double
  %553 = call double @sqrt(double noundef %552) #4
  store double %553, ptr %64, align 8, !tbaa !11
  %554 = load double, ptr %63, align 8, !tbaa !11
  %555 = load double, ptr %64, align 8, !tbaa !11
  %556 = fcmp oge double %554, %555
  br i1 %556, label %557, label %559

557:                                              ; preds = %549
  %558 = load double, ptr %63, align 8, !tbaa !11
  br label %561

559:                                              ; preds = %549
  %560 = load double, ptr %64, align 8, !tbaa !11
  br label %561

561:                                              ; preds = %559, %557
  %562 = phi double [ %558, %557 ], [ %560, %559 ]
  %563 = call double @dlamch_(ptr noundef @.str)
  %564 = fmul double %562, %563
  store double %564, ptr %67, align 8, !tbaa !11
  %565 = load ptr, ptr %42, align 8, !tbaa !5
  %566 = load i64, ptr %565, align 8, !tbaa !9
  %567 = icmp sge i64 %566, 1
  br i1 %567, label %568, label %712

568:                                              ; preds = %561
  %569 = load i64, ptr %78, align 8, !tbaa !9
  %570 = icmp sge i64 %569, 1
  br i1 %570, label %571, label %712

571:                                              ; preds = %568
  %572 = load i64, ptr %76, align 8, !tbaa !9
  %573 = icmp ne i64 %572, 0
  br i1 %573, label %574, label %595

574:                                              ; preds = %571
  %575 = load ptr, ptr %26, align 8, !tbaa !5
  %576 = load ptr, ptr %28, align 8, !tbaa !5
  %577 = load ptr, ptr %30, align 8, !tbaa !5
  %578 = load i64, ptr %51, align 8, !tbaa !9
  %579 = getelementptr inbounds %struct.doublecomplex, ptr %577, i64 %578
  %580 = load ptr, ptr %31, align 8, !tbaa !5
  %581 = load ptr, ptr %32, align 8, !tbaa !5
  %582 = load i64, ptr %53, align 8, !tbaa !9
  %583 = getelementptr inbounds %struct.doublecomplex, ptr %581, i64 %582
  %584 = load ptr, ptr %33, align 8, !tbaa !5
  %585 = load ptr, ptr %34, align 8, !tbaa !5
  %586 = getelementptr inbounds i64, ptr %585, i64 1
  %587 = load ptr, ptr %35, align 8, !tbaa !5
  %588 = getelementptr inbounds double, ptr %587, i64 1
  %589 = load ptr, ptr %49, align 8, !tbaa !5
  %590 = load ptr, ptr %47, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.doublecomplex, ptr %590, i64 1
  %592 = load ptr, ptr %48, align 8, !tbaa !5
  %593 = getelementptr inbounds double, ptr %592, i64 1
  %594 = call double @zla_hercond_c__(ptr noundef %575, ptr noundef %576, ptr noundef %579, ptr noundef %580, ptr noundef %583, ptr noundef %584, ptr noundef %586, ptr noundef %588, ptr noundef @c_true, ptr noundef %589, ptr noundef %591, ptr noundef %593, i64 noundef 1)
  store double %594, ptr %70, align 8, !tbaa !11
  br label %616

595:                                              ; preds = %571
  %596 = load ptr, ptr %26, align 8, !tbaa !5
  %597 = load ptr, ptr %28, align 8, !tbaa !5
  %598 = load ptr, ptr %30, align 8, !tbaa !5
  %599 = load i64, ptr %51, align 8, !tbaa !9
  %600 = getelementptr inbounds %struct.doublecomplex, ptr %598, i64 %599
  %601 = load ptr, ptr %31, align 8, !tbaa !5
  %602 = load ptr, ptr %32, align 8, !tbaa !5
  %603 = load i64, ptr %53, align 8, !tbaa !9
  %604 = getelementptr inbounds %struct.doublecomplex, ptr %602, i64 %603
  %605 = load ptr, ptr %33, align 8, !tbaa !5
  %606 = load ptr, ptr %34, align 8, !tbaa !5
  %607 = getelementptr inbounds i64, ptr %606, i64 1
  %608 = load ptr, ptr %35, align 8, !tbaa !5
  %609 = getelementptr inbounds double, ptr %608, i64 1
  %610 = load ptr, ptr %49, align 8, !tbaa !5
  %611 = load ptr, ptr %47, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.doublecomplex, ptr %611, i64 1
  %613 = load ptr, ptr %48, align 8, !tbaa !5
  %614 = getelementptr inbounds double, ptr %613, i64 1
  %615 = call double @zla_hercond_c__(ptr noundef %596, ptr noundef %597, ptr noundef %600, ptr noundef %601, ptr noundef %604, ptr noundef %605, ptr noundef %607, ptr noundef %609, ptr noundef @c_false, ptr noundef %610, ptr noundef %612, ptr noundef %614, i64 noundef 1)
  store double %615, ptr %70, align 8, !tbaa !11
  br label %616

616:                                              ; preds = %595, %574
  %617 = load ptr, ptr %29, align 8, !tbaa !5
  %618 = load i64, ptr %617, align 8, !tbaa !9
  store i64 %618, ptr %62, align 8, !tbaa !9
  store i64 1, ptr %69, align 8, !tbaa !9
  br label %619

619:                                              ; preds = %708, %616
  %620 = load i64, ptr %69, align 8, !tbaa !9
  %621 = load i64, ptr %62, align 8, !tbaa !9
  %622 = icmp sle i64 %620, %621
  br i1 %622, label %623, label %711

623:                                              ; preds = %619
  %624 = load ptr, ptr %42, align 8, !tbaa !5
  %625 = load i64, ptr %624, align 8, !tbaa !9
  %626 = icmp sge i64 %625, 2
  br i1 %626, label %627, label %643

627:                                              ; preds = %623
  %628 = load ptr, ptr %43, align 8, !tbaa !5
  %629 = load i64, ptr %69, align 8, !tbaa !9
  %630 = load i64, ptr %58, align 8, !tbaa !9
  %631 = shl i64 %630, 1
  %632 = add nsw i64 %629, %631
  %633 = getelementptr inbounds double, ptr %628, i64 %632
  %634 = load double, ptr %633, align 8, !tbaa !11
  %635 = fcmp ogt double %634, 1.000000e+00
  br i1 %635, label %636, label %643

636:                                              ; preds = %627
  %637 = load ptr, ptr %43, align 8, !tbaa !5
  %638 = load i64, ptr %69, align 8, !tbaa !9
  %639 = load i64, ptr %58, align 8, !tbaa !9
  %640 = shl i64 %639, 1
  %641 = add nsw i64 %638, %640
  %642 = getelementptr inbounds double, ptr %637, i64 %641
  store double 1.000000e+00, ptr %642, align 8, !tbaa !11
  br label %643

643:                                              ; preds = %636, %627, %623
  %644 = load double, ptr %70, align 8, !tbaa !11
  %645 = load double, ptr %65, align 8, !tbaa !11
  %646 = fcmp olt double %644, %645
  br i1 %646, label %647, label %671

647:                                              ; preds = %643
  %648 = load ptr, ptr %43, align 8, !tbaa !5
  %649 = load i64, ptr %69, align 8, !tbaa !9
  %650 = load i64, ptr %58, align 8, !tbaa !9
  %651 = shl i64 %650, 1
  %652 = add nsw i64 %649, %651
  %653 = getelementptr inbounds double, ptr %648, i64 %652
  store double 1.000000e+00, ptr %653, align 8, !tbaa !11
  %654 = load ptr, ptr %43, align 8, !tbaa !5
  %655 = load i64, ptr %69, align 8, !tbaa !9
  %656 = load i64, ptr %58, align 8, !tbaa !9
  %657 = add nsw i64 %655, %656
  %658 = getelementptr inbounds double, ptr %654, i64 %657
  store double 0.000000e+00, ptr %658, align 8, !tbaa !11
  %659 = load ptr, ptr %49, align 8, !tbaa !5
  %660 = load i64, ptr %659, align 8, !tbaa !9
  %661 = load ptr, ptr %28, align 8, !tbaa !5
  %662 = load i64, ptr %661, align 8, !tbaa !9
  %663 = icmp sle i64 %660, %662
  br i1 %663, label %664, label %670

664:                                              ; preds = %647
  %665 = load ptr, ptr %28, align 8, !tbaa !5
  %666 = load i64, ptr %665, align 8, !tbaa !9
  %667 = load i64, ptr %69, align 8, !tbaa !9
  %668 = add nsw i64 %666, %667
  %669 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 %668, ptr %669, align 8, !tbaa !9
  br label %670

670:                                              ; preds = %664, %647
  br label %695

671:                                              ; preds = %643
  %672 = load ptr, ptr %43, align 8, !tbaa !5
  %673 = load i64, ptr %69, align 8, !tbaa !9
  %674 = load i64, ptr %58, align 8, !tbaa !9
  %675 = shl i64 %674, 1
  %676 = add nsw i64 %673, %675
  %677 = getelementptr inbounds double, ptr %672, i64 %676
  %678 = load double, ptr %677, align 8, !tbaa !11
  %679 = load double, ptr %67, align 8, !tbaa !11
  %680 = fcmp olt double %678, %679
  br i1 %680, label %681, label %694

681:                                              ; preds = %671
  %682 = load double, ptr %67, align 8, !tbaa !11
  %683 = load ptr, ptr %43, align 8, !tbaa !5
  %684 = load i64, ptr %69, align 8, !tbaa !9
  %685 = load i64, ptr %58, align 8, !tbaa !9
  %686 = shl i64 %685, 1
  %687 = add nsw i64 %684, %686
  %688 = getelementptr inbounds double, ptr %683, i64 %687
  store double %682, ptr %688, align 8, !tbaa !11
  %689 = load ptr, ptr %43, align 8, !tbaa !5
  %690 = load i64, ptr %69, align 8, !tbaa !9
  %691 = load i64, ptr %58, align 8, !tbaa !9
  %692 = add nsw i64 %690, %691
  %693 = getelementptr inbounds double, ptr %689, i64 %692
  store double 1.000000e+00, ptr %693, align 8, !tbaa !11
  br label %694

694:                                              ; preds = %681, %671
  br label %695

695:                                              ; preds = %694, %670
  %696 = load ptr, ptr %42, align 8, !tbaa !5
  %697 = load i64, ptr %696, align 8, !tbaa !9
  %698 = icmp sge i64 %697, 3
  br i1 %698, label %699, label %707

699:                                              ; preds = %695
  %700 = load double, ptr %70, align 8, !tbaa !11
  %701 = load ptr, ptr %43, align 8, !tbaa !5
  %702 = load i64, ptr %69, align 8, !tbaa !9
  %703 = load i64, ptr %58, align 8, !tbaa !9
  %704 = mul nsw i64 %703, 3
  %705 = add nsw i64 %702, %704
  %706 = getelementptr inbounds double, ptr %701, i64 %705
  store double %700, ptr %706, align 8, !tbaa !11
  br label %707

707:                                              ; preds = %699, %695
  br label %708

708:                                              ; preds = %707
  %709 = load i64, ptr %69, align 8, !tbaa !9
  %710 = add nsw i64 %709, 1
  store i64 %710, ptr %69, align 8, !tbaa !9
  br label %619, !llvm.loop !17

711:                                              ; preds = %619
  br label %712

712:                                              ; preds = %711, %568, %561
  %713 = load ptr, ptr %42, align 8, !tbaa !5
  %714 = load i64, ptr %713, align 8, !tbaa !9
  %715 = icmp sge i64 %714, 1
  br i1 %715, label %716, label %860

716:                                              ; preds = %712
  %717 = load i64, ptr %78, align 8, !tbaa !9
  %718 = icmp sge i64 %717, 2
  br i1 %718, label %719, label %860

719:                                              ; preds = %716
  %720 = call double @dlamch_(ptr noundef @.str)
  %721 = call double @sqrt(double noundef %720) #4
  store double %721, ptr %72, align 8, !tbaa !11
  %722 = load ptr, ptr %29, align 8, !tbaa !5
  %723 = load i64, ptr %722, align 8, !tbaa !9
  store i64 %723, ptr %62, align 8, !tbaa !9
  store i64 1, ptr %69, align 8, !tbaa !9
  br label %724

724:                                              ; preds = %856, %719
  %725 = load i64, ptr %69, align 8, !tbaa !9
  %726 = load i64, ptr %62, align 8, !tbaa !9
  %727 = icmp sle i64 %725, %726
  br i1 %727, label %728, label %859

728:                                              ; preds = %724
  %729 = load ptr, ptr %44, align 8, !tbaa !5
  %730 = load i64, ptr %69, align 8, !tbaa !9
  %731 = load i64, ptr %60, align 8, !tbaa !9
  %732 = shl i64 %731, 1
  %733 = add nsw i64 %730, %732
  %734 = getelementptr inbounds double, ptr %729, i64 %733
  %735 = load double, ptr %734, align 8, !tbaa !11
  %736 = load double, ptr %72, align 8, !tbaa !11
  %737 = fcmp olt double %735, %736
  br i1 %737, label %738, label %763

738:                                              ; preds = %728
  %739 = load ptr, ptr %26, align 8, !tbaa !5
  %740 = load ptr, ptr %28, align 8, !tbaa !5
  %741 = load ptr, ptr %30, align 8, !tbaa !5
  %742 = load i64, ptr %51, align 8, !tbaa !9
  %743 = getelementptr inbounds %struct.doublecomplex, ptr %741, i64 %742
  %744 = load ptr, ptr %31, align 8, !tbaa !5
  %745 = load ptr, ptr %32, align 8, !tbaa !5
  %746 = load i64, ptr %53, align 8, !tbaa !9
  %747 = getelementptr inbounds %struct.doublecomplex, ptr %745, i64 %746
  %748 = load ptr, ptr %33, align 8, !tbaa !5
  %749 = load ptr, ptr %34, align 8, !tbaa !5
  %750 = getelementptr inbounds i64, ptr %749, i64 1
  %751 = load ptr, ptr %38, align 8, !tbaa !5
  %752 = load i64, ptr %69, align 8, !tbaa !9
  %753 = load i64, ptr %56, align 8, !tbaa !9
  %754 = mul nsw i64 %752, %753
  %755 = add nsw i64 %754, 1
  %756 = getelementptr inbounds %struct.doublecomplex, ptr %751, i64 %755
  %757 = load ptr, ptr %49, align 8, !tbaa !5
  %758 = load ptr, ptr %47, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.doublecomplex, ptr %758, i64 1
  %760 = load ptr, ptr %48, align 8, !tbaa !5
  %761 = getelementptr inbounds double, ptr %760, i64 1
  %762 = call double @zla_hercond_x__(ptr noundef %739, ptr noundef %740, ptr noundef %743, ptr noundef %744, ptr noundef %747, ptr noundef %748, ptr noundef %750, ptr noundef %756, ptr noundef %757, ptr noundef %759, ptr noundef %761, i64 noundef 1)
  store double %762, ptr %70, align 8, !tbaa !11
  br label %764

763:                                              ; preds = %728
  store double 0.000000e+00, ptr %70, align 8, !tbaa !11
  br label %764

764:                                              ; preds = %763, %738
  %765 = load ptr, ptr %42, align 8, !tbaa !5
  %766 = load i64, ptr %765, align 8, !tbaa !9
  %767 = icmp sge i64 %766, 2
  br i1 %767, label %768, label %784

768:                                              ; preds = %764
  %769 = load ptr, ptr %44, align 8, !tbaa !5
  %770 = load i64, ptr %69, align 8, !tbaa !9
  %771 = load i64, ptr %60, align 8, !tbaa !9
  %772 = shl i64 %771, 1
  %773 = add nsw i64 %770, %772
  %774 = getelementptr inbounds double, ptr %769, i64 %773
  %775 = load double, ptr %774, align 8, !tbaa !11
  %776 = fcmp ogt double %775, 1.000000e+00
  br i1 %776, label %777, label %784

777:                                              ; preds = %768
  %778 = load ptr, ptr %44, align 8, !tbaa !5
  %779 = load i64, ptr %69, align 8, !tbaa !9
  %780 = load i64, ptr %60, align 8, !tbaa !9
  %781 = shl i64 %780, 1
  %782 = add nsw i64 %779, %781
  %783 = getelementptr inbounds double, ptr %778, i64 %782
  store double 1.000000e+00, ptr %783, align 8, !tbaa !11
  br label %784

784:                                              ; preds = %777, %768, %764
  %785 = load double, ptr %70, align 8, !tbaa !11
  %786 = load double, ptr %65, align 8, !tbaa !11
  %787 = fcmp olt double %785, %786
  br i1 %787, label %788, label %819

788:                                              ; preds = %784
  %789 = load ptr, ptr %44, align 8, !tbaa !5
  %790 = load i64, ptr %69, align 8, !tbaa !9
  %791 = load i64, ptr %60, align 8, !tbaa !9
  %792 = shl i64 %791, 1
  %793 = add nsw i64 %790, %792
  %794 = getelementptr inbounds double, ptr %789, i64 %793
  store double 1.000000e+00, ptr %794, align 8, !tbaa !11
  %795 = load ptr, ptr %44, align 8, !tbaa !5
  %796 = load i64, ptr %69, align 8, !tbaa !9
  %797 = load i64, ptr %60, align 8, !tbaa !9
  %798 = add nsw i64 %796, %797
  %799 = getelementptr inbounds double, ptr %795, i64 %798
  store double 0.000000e+00, ptr %799, align 8, !tbaa !11
  %800 = load ptr, ptr %46, align 8, !tbaa !5
  %801 = getelementptr inbounds double, ptr %800, i64 3
  %802 = load double, ptr %801, align 8, !tbaa !11
  %803 = fcmp oeq double %802, 1.000000e+00
  br i1 %803, label %804, label %818

804:                                              ; preds = %788
  %805 = load ptr, ptr %49, align 8, !tbaa !5
  %806 = load i64, ptr %805, align 8, !tbaa !9
  %807 = load ptr, ptr %28, align 8, !tbaa !5
  %808 = load i64, ptr %807, align 8, !tbaa !9
  %809 = load i64, ptr %69, align 8, !tbaa !9
  %810 = add nsw i64 %808, %809
  %811 = icmp slt i64 %806, %810
  br i1 %811, label %812, label %818

812:                                              ; preds = %804
  %813 = load ptr, ptr %28, align 8, !tbaa !5
  %814 = load i64, ptr %813, align 8, !tbaa !9
  %815 = load i64, ptr %69, align 8, !tbaa !9
  %816 = add nsw i64 %814, %815
  %817 = load ptr, ptr %49, align 8, !tbaa !5
  store i64 %816, ptr %817, align 8, !tbaa !9
  br label %818

818:                                              ; preds = %812, %804, %788
  br label %843

819:                                              ; preds = %784
  %820 = load ptr, ptr %44, align 8, !tbaa !5
  %821 = load i64, ptr %69, align 8, !tbaa !9
  %822 = load i64, ptr %60, align 8, !tbaa !9
  %823 = shl i64 %822, 1
  %824 = add nsw i64 %821, %823
  %825 = getelementptr inbounds double, ptr %820, i64 %824
  %826 = load double, ptr %825, align 8, !tbaa !11
  %827 = load double, ptr %67, align 8, !tbaa !11
  %828 = fcmp olt double %826, %827
  br i1 %828, label %829, label %842

829:                                              ; preds = %819
  %830 = load double, ptr %67, align 8, !tbaa !11
  %831 = load ptr, ptr %44, align 8, !tbaa !5
  %832 = load i64, ptr %69, align 8, !tbaa !9
  %833 = load i64, ptr %60, align 8, !tbaa !9
  %834 = shl i64 %833, 1
  %835 = add nsw i64 %832, %834
  %836 = getelementptr inbounds double, ptr %831, i64 %835
  store double %830, ptr %836, align 8, !tbaa !11
  %837 = load ptr, ptr %44, align 8, !tbaa !5
  %838 = load i64, ptr %69, align 8, !tbaa !9
  %839 = load i64, ptr %60, align 8, !tbaa !9
  %840 = add nsw i64 %838, %839
  %841 = getelementptr inbounds double, ptr %837, i64 %840
  store double 1.000000e+00, ptr %841, align 8, !tbaa !11
  br label %842

842:                                              ; preds = %829, %819
  br label %843

843:                                              ; preds = %842, %818
  %844 = load ptr, ptr %42, align 8, !tbaa !5
  %845 = load i64, ptr %844, align 8, !tbaa !9
  %846 = icmp sge i64 %845, 3
  br i1 %846, label %847, label %855

847:                                              ; preds = %843
  %848 = load double, ptr %70, align 8, !tbaa !11
  %849 = load ptr, ptr %44, align 8, !tbaa !5
  %850 = load i64, ptr %69, align 8, !tbaa !9
  %851 = load i64, ptr %60, align 8, !tbaa !9
  %852 = mul nsw i64 %851, 3
  %853 = add nsw i64 %850, %852
  %854 = getelementptr inbounds double, ptr %849, i64 %853
  store double %848, ptr %854, align 8, !tbaa !11
  br label %855

855:                                              ; preds = %847, %843
  br label %856

856:                                              ; preds = %855
  %857 = load i64, ptr %69, align 8, !tbaa !9
  %858 = add nsw i64 %857, 1
  store i64 %858, ptr %69, align 8, !tbaa !9
  br label %724, !llvm.loop !18

859:                                              ; preds = %724
  br label %860

860:                                              ; preds = %859, %716, %712
  store i32 0, ptr %25, align 4
  store i32 1, ptr %80, align 4
  br label %861

861:                                              ; preds = %860, %408, %329
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %73) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #4
  %862 = load i32, ptr %25, align 4
  ret i32 %862
}

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

declare double @dlamch_(ptr noundef) #2

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

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

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

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

declare i64 @ilaprec_(ptr noundef) #2

declare i32 @zla_herfsx_extended__(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, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) #2

; Function Attrs: nounwind
declare double @sqrt(double noundef) #3

declare double @zla_hercond_c__(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) #2

declare double @zla_hercond_x__(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 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 "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 #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = !{!7, !7, i64 0}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}


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

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [8 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 [8 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@c_true = external hidden global i64, align 8
@c_false = external hidden global i64, align 8

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @zherfsx_(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 nocapture noundef readonly %16, ptr noundef %17, ptr noundef %18, ptr nocapture noundef readonly %19, ptr nocapture noundef %20, ptr noundef %21, ptr noundef %22, ptr noundef %23) local_unnamed_addr #0 {
  %25 = ptrtoint ptr %18 to i64
  %26 = ptrtoint ptr %15 to i64
  %27 = ptrtoint ptr %17 to i64
  %28 = ptrtoint ptr %18 to i64
  %29 = ptrtoint ptr %15 to i64
  %30 = ptrtoint ptr %17 to i64
  %31 = alloca i64, align 8
  %32 = alloca double, align 8
  %33 = alloca i64, align 8
  %34 = alloca [1 x i8], align 1
  %35 = alloca i64, align 8
  %36 = alloca double, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %34) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #6
  %41 = load i64, ptr %3, align 8, !tbaa !5
  %42 = xor i64 %41, -1
  %43 = getelementptr inbounds double, ptr %18, i64 %42
  %44 = getelementptr inbounds double, ptr %17, i64 %42
  %45 = load i64, ptr %13, align 8, !tbaa !5
  %46 = xor i64 %45, -1
  %47 = getelementptr inbounds %struct.doublecomplex, ptr %12, i64 %46
  %48 = getelementptr inbounds i8, ptr %15, i64 -8
  store i64 0, ptr %23, align 8, !tbaa !5
  %49 = load i64, ptr %19, align 8, !tbaa !5
  %50 = icmp sgt i64 %49, 0
  br i1 %50, label %51, label %57

51:                                               ; preds = %24
  %52 = load double, ptr %20, align 8, !tbaa !9
  %53 = fcmp olt double %52, 0.000000e+00
  br i1 %53, label %54, label %55

54:                                               ; preds = %51
  store double 1.000000e+00, ptr %20, align 8, !tbaa !9
  br label %57

55:                                               ; preds = %51
  %56 = fptosi double %52 to i64
  br label %57

57:                                               ; preds = %54, %55, %24
  %.0314 = phi i64 [ 1, %54 ], [ %56, %55 ], [ 1, %24 ]
  %58 = load i64, ptr %2, align 8, !tbaa !5
  %59 = sitofp i64 %58 to double
  %60 = tail call double @dlamch_(ptr noundef nonnull @.str) #6
  %61 = fmul double %60, %59
  store i64 10, ptr %38, align 8, !tbaa !5
  store double 5.000000e-01, ptr %40, align 8, !tbaa !9
  store double 2.500000e-01, ptr %32, align 8, !tbaa !9
  store i64 0, ptr %35, align 8, !tbaa !5
  %62 = load i64, ptr %19, align 8, !tbaa !5
  %63 = icmp sgt i64 %62, 1
  br i1 %63, label %64, label %.thread

64:                                               ; preds = %57
  %65 = getelementptr inbounds i8, ptr %20, i64 8
  %66 = load double, ptr %65, align 8, !tbaa !9
  %67 = fcmp olt double %66, 0.000000e+00
  br i1 %67, label %68, label %69

68:                                               ; preds = %64
  store double 1.000000e+01, ptr %65, align 8, !tbaa !9
  br label %71

69:                                               ; preds = %64
  %70 = fptosi double %66 to i64
  store i64 %70, ptr %38, align 8, !tbaa !5
  br label %71

71:                                               ; preds = %68, %69
  %.not = icmp eq i64 %62, 2
  br i1 %.not, label %.thread, label %72

72:                                               ; preds = %71
  %73 = getelementptr inbounds i8, ptr %20, i64 16
  %74 = load double, ptr %73, align 8, !tbaa !9
  %75 = fcmp olt double %74, 0.000000e+00
  br i1 %75, label %76, label %77

76:                                               ; preds = %72
  store double 1.000000e+00, ptr %73, align 8, !tbaa !9
  br label %.thread

77:                                               ; preds = %72
  %78 = fcmp oeq double %74, 0.000000e+00
  %79 = zext i1 %78 to i64
  store i64 %79, ptr %35, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %57, %77, %76, %71
  %80 = phi i64 [ 0, %57 ], [ %79, %77 ], [ 0, %76 ], [ 0, %71 ]
  %81 = icmp eq i64 %.0314, 0
  br i1 %81, label %85, label %82

82:                                               ; preds = %.thread
  %83 = load i64, ptr %16, align 8, !tbaa !5
  %84 = icmp eq i64 %83, 0
  br i1 %84, label %85, label %86

85:                                               ; preds = %82, %.thread
  store i64 0, ptr %39, align 8, !tbaa !5
  br label %89

86:                                               ; preds = %82
  %.not328 = icmp eq i64 %80, 0
  br i1 %.not328, label %88, label %87

87:                                               ; preds = %86
  store i64 1, ptr %39, align 8, !tbaa !5
  br label %89

88:                                               ; preds = %86
  store i64 2, ptr %39, align 8, !tbaa !5
  br label %89

89:                                               ; preds = %87, %88, %85
  %90 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #6
  store i64 %90, ptr %37, align 8, !tbaa !5
  %91 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #6
  %.not329 = icmp eq i64 %91, 0
  br i1 %.not329, label %92, label %94

92:                                               ; preds = %89
  %93 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.3) #6
  %.not330 = icmp eq i64 %93, 0
  br i1 %.not330, label %.thread349.sink.split, label %94

94:                                               ; preds = %92, %89
  %.not331 = icmp eq i64 %90, 0
  br i1 %.not331, label %95, label %97

95:                                               ; preds = %94
  %96 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #6
  %.not332 = icmp eq i64 %96, 0
  br i1 %.not332, label %.thread349.sink.split, label %97

97:                                               ; preds = %95, %94
  %98 = load i64, ptr %2, align 8, !tbaa !5
  %99 = icmp slt i64 %98, 0
  br i1 %99, label %.thread349.sink.split, label %100

100:                                              ; preds = %97
  %101 = load i64, ptr %3, align 8, !tbaa !5
  %102 = icmp slt i64 %101, 0
  br i1 %102, label %.thread349.sink.split, label %103

103:                                              ; preds = %100
  %104 = load i64, ptr %5, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %98, i64 1)
  %105 = icmp slt i64 %104, %spec.select
  br i1 %105, label %.thread349.sink.split, label %106

106:                                              ; preds = %103
  %107 = load i64, ptr %7, align 8, !tbaa !5
  %108 = icmp slt i64 %107, %spec.select
  br i1 %108, label %.thread349.sink.split, label %109

109:                                              ; preds = %106
  %110 = load i64, ptr %11, align 8, !tbaa !5
  %111 = icmp slt i64 %110, %spec.select
  br i1 %111, label %.thread349.sink.split, label %112

112:                                              ; preds = %109
  %113 = load i64, ptr %13, align 8, !tbaa !5
  %114 = icmp slt i64 %113, %spec.select
  br i1 %114, label %.thread349.sink.split, label %115

115:                                              ; preds = %112
  %.pr = load i64, ptr %23, align 8, !tbaa !5
  %.not333 = icmp eq i64 %.pr, 0
  br i1 %.not333, label %119, label %.thread349

.thread349.sink.split:                            ; preds = %112, %109, %106, %103, %100, %97, %95, %92
  %.sink = phi i64 [ -1, %92 ], [ -2, %95 ], [ -3, %97 ], [ -4, %100 ], [ -6, %103 ], [ -8, %106 ], [ -11, %109 ], [ -13, %112 ]
  store i64 %.sink, ptr %23, align 8, !tbaa !5
  br label %.thread349

.thread349:                                       ; preds = %.thread349.sink.split, %115
  %116 = phi i64 [ %.pr, %115 ], [ %.sink, %.thread349.sink.split ]
  %117 = sub nsw i64 0, %116
  store i64 %117, ptr %31, align 8, !tbaa !5
  %118 = call i32 @xerbla_(ptr noundef nonnull @.str.5, ptr noundef nonnull %31) #6
  br label %.loopexit

119:                                              ; preds = %115
  %120 = icmp eq i64 %98, 0
  br i1 %120, label %123, label %121

121:                                              ; preds = %119
  %122 = icmp eq i64 %101, 0
  br i1 %122, label %.thread385, label %.lr.ph

.thread385:                                       ; preds = %121
  store double 1.000000e+00, ptr %14, align 8, !tbaa !9
  br label %.loopexit

123:                                              ; preds = %119
  store double 1.000000e+00, ptr %14, align 8, !tbaa !9
  %.not345367 = icmp eq i64 %101, 0
  br i1 %.not345367, label %.loopexit, label %.lr.ph370

.lr.ph370:                                        ; preds = %123
  %124 = load i64, ptr %16, align 8, !tbaa !5
  %125 = icmp sgt i64 %124, 0
  br i1 %125, label %.lr.ph370.split.us.preheader, label %.lr.ph370.split.preheader

.lr.ph370.split.us.preheader:                     ; preds = %.lr.ph370
  %min.iters.check419 = icmp ult i64 %101, 10
  br i1 %min.iters.check419, label %.lr.ph370.split.us.preheader430, label %vector.memcheck411

.lr.ph370.split.us.preheader430:                  ; preds = %middle.block417, %vector.memcheck411, %.lr.ph370.split.us.preheader
  %.0312368.us.ph = phi i64 [ 1, %vector.memcheck411 ], [ 1, %.lr.ph370.split.us.preheader ], [ %ind.end423, %middle.block417 ]
  %xtraiter436 = and i64 %101, 1
  %lcmp.mod437.not = icmp eq i64 %xtraiter436, 0
  br i1 %lcmp.mod437.not, label %.lr.ph370.split.us.prol.loopexit, label %.lr.ph370.split.us.prol

.lr.ph370.split.us.prol:                          ; preds = %.lr.ph370.split.us.preheader430
  %126 = getelementptr inbounds double, ptr %48, i64 %.0312368.us.ph
  store double 0.000000e+00, ptr %126, align 8, !tbaa !9
  %127 = add nsw i64 %.0312368.us.ph, %41
  %128 = getelementptr inbounds double, ptr %44, i64 %127
  store double 1.000000e+00, ptr %128, align 8, !tbaa !9
  %129 = getelementptr inbounds double, ptr %43, i64 %127
  store double 1.000000e+00, ptr %129, align 8, !tbaa !9
  %130 = add nuw i64 %.0312368.us.ph, 1
  br label %.lr.ph370.split.us.prol.loopexit

.lr.ph370.split.us.prol.loopexit:                 ; preds = %.lr.ph370.split.us.prol, %.lr.ph370.split.us.preheader430
  %.0312368.us.unr = phi i64 [ %.0312368.us.ph, %.lr.ph370.split.us.preheader430 ], [ %130, %.lr.ph370.split.us.prol ]
  %131 = icmp eq i64 %101, %.0312368.us.ph
  br i1 %131, label %.loopexit, label %.lr.ph370.split.us

vector.memcheck411:                               ; preds = %.lr.ph370.split.us.preheader
  %132 = sub i64 %27, %26
  %diff.check412 = icmp ult i64 %132, 32
  %133 = sub i64 %25, %26
  %diff.check413 = icmp ult i64 %133, 32
  %conflict.rdx414 = or i1 %diff.check412, %diff.check413
  %134 = sub i64 %25, %27
  %diff.check415 = icmp ult i64 %134, 32
  %conflict.rdx416 = or i1 %conflict.rdx414, %diff.check415
  br i1 %conflict.rdx416, label %.lr.ph370.split.us.preheader430, label %vector.ph420

vector.ph420:                                     ; preds = %vector.memcheck411
  %n.vec422 = and i64 %101, 9223372036854775804
  %ind.end423 = or disjoint i64 %n.vec422, 1
  br label %vector.body425

vector.body425:                                   ; preds = %vector.body425, %vector.ph420
  %index426 = phi i64 [ 0, %vector.ph420 ], [ %index.next428, %vector.body425 ]
  %offset.idx427 = or disjoint i64 %index426, 1
  %135 = getelementptr double, ptr %15, i64 %index426
  %136 = getelementptr inbounds i8, ptr %135, i64 16
  store <2 x double> zeroinitializer, ptr %135, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %136, align 8, !tbaa !9
  %137 = add nsw i64 %offset.idx427, %41
  %138 = getelementptr inbounds double, ptr %44, i64 %137
  %139 = getelementptr inbounds i8, ptr %138, i64 16
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %138, align 8, !tbaa !9
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %139, align 8, !tbaa !9
  %140 = getelementptr inbounds double, ptr %43, i64 %137
  %141 = getelementptr inbounds i8, ptr %140, i64 16
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %140, align 8, !tbaa !9
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %141, align 8, !tbaa !9
  %index.next428 = add nuw i64 %index426, 4
  %142 = icmp eq i64 %index.next428, %n.vec422
  br i1 %142, label %middle.block417, label %vector.body425, !llvm.loop !11

middle.block417:                                  ; preds = %vector.body425
  %cmp.n429 = icmp eq i64 %101, %n.vec422
  br i1 %cmp.n429, label %.loopexit, label %.lr.ph370.split.us.preheader430

.lr.ph370.split.preheader:                        ; preds = %.lr.ph370
  %143 = shl nuw i64 %101, 3
  tail call void @llvm.memset.p0.i64(ptr align 8 %15, i8 0, i64 %143, i1 false), !tbaa !9
  br label %.loopexit

.lr.ph370.split.us:                               ; preds = %.lr.ph370.split.us.prol.loopexit, %.lr.ph370.split.us
  %.0312368.us = phi i64 [ %152, %.lr.ph370.split.us ], [ %.0312368.us.unr, %.lr.ph370.split.us.prol.loopexit ]
  %144 = getelementptr inbounds double, ptr %48, i64 %.0312368.us
  store double 0.000000e+00, ptr %144, align 8, !tbaa !9
  %145 = add nsw i64 %.0312368.us, %41
  %146 = getelementptr inbounds double, ptr %44, i64 %145
  store double 1.000000e+00, ptr %146, align 8, !tbaa !9
  %147 = getelementptr inbounds double, ptr %43, i64 %145
  store double 1.000000e+00, ptr %147, align 8, !tbaa !9
  %148 = add nuw i64 %.0312368.us, 1
  %149 = getelementptr double, ptr %15, i64 %.0312368.us
  store double 0.000000e+00, ptr %149, align 8, !tbaa !9
  %150 = getelementptr inbounds double, ptr %17, i64 %.0312368.us
  store double 1.000000e+00, ptr %150, align 8, !tbaa !9
  %151 = getelementptr inbounds double, ptr %18, i64 %.0312368.us
  store double 1.000000e+00, ptr %151, align 8, !tbaa !9
  %152 = add nuw i64 %.0312368.us, 2
  %exitcond378.not.1 = icmp eq i64 %148, %101
  br i1 %exitcond378.not.1, label %.loopexit, label %.lr.ph370.split.us, !llvm.loop !15

.lr.ph:                                           ; preds = %121
  store double 0.000000e+00, ptr %14, align 8, !tbaa !9
  %153 = load i64, ptr %16, align 8, !tbaa !5
  %154 = icmp sgt i64 %153, 0
  br i1 %154, label %.lr.ph.split.us.preheader, label %.lr.ph.split.preheader

.lr.ph.split.preheader:                           ; preds = %.lr.ph
  %min.iters.check = icmp ult i64 %101, 4
  br i1 %min.iters.check, label %.lr.ph.split.preheader434, label %vector.ph

.lr.ph.split.preheader434:                        ; preds = %middle.block, %.lr.ph.split.preheader
  %.1313354.ph = phi i64 [ 1, %.lr.ph.split.preheader ], [ %ind.end, %middle.block ]
  br label %.lr.ph.split

vector.ph:                                        ; preds = %.lr.ph.split.preheader
  %n.vec = and i64 %101, 9223372036854775804
  %ind.end = or disjoint i64 %n.vec, 1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %155 = getelementptr double, ptr %15, i64 %index
  %156 = getelementptr inbounds i8, ptr %155, i64 16
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %155, align 8, !tbaa !9
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %156, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 4
  %157 = icmp eq i64 %index.next, %n.vec
  br i1 %157, label %middle.block, label %vector.body, !llvm.loop !16

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %101, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.split.preheader434

.lr.ph.split.us.preheader:                        ; preds = %.lr.ph
  %min.iters.check400 = icmp ult i64 %101, 10
  br i1 %min.iters.check400, label %.lr.ph.split.us.preheader433, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph.split.us.preheader
  %158 = sub i64 %30, %29
  %diff.check = icmp ult i64 %158, 32
  %159 = sub i64 %28, %29
  %diff.check395 = icmp ult i64 %159, 32
  %conflict.rdx = or i1 %diff.check, %diff.check395
  %160 = sub i64 %28, %30
  %diff.check396 = icmp ult i64 %160, 32
  %conflict.rdx397 = or i1 %conflict.rdx, %diff.check396
  br i1 %conflict.rdx397, label %.lr.ph.split.us.preheader433, label %vector.ph401

vector.ph401:                                     ; preds = %vector.memcheck
  %n.vec403 = and i64 %101, 9223372036854775804
  %ind.end404 = or disjoint i64 %n.vec403, 1
  br label %vector.body406

vector.body406:                                   ; preds = %vector.body406, %vector.ph401
  %index407 = phi i64 [ 0, %vector.ph401 ], [ %index.next409, %vector.body406 ]
  %offset.idx408 = or disjoint i64 %index407, 1
  %161 = getelementptr double, ptr %15, i64 %index407
  %162 = getelementptr inbounds i8, ptr %161, i64 16
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %161, align 8, !tbaa !9
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %162, align 8, !tbaa !9
  %163 = add nsw i64 %offset.idx408, %41
  %164 = getelementptr inbounds double, ptr %44, i64 %163
  %165 = getelementptr inbounds i8, ptr %164, i64 16
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %164, align 8, !tbaa !9
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %165, align 8, !tbaa !9
  %166 = getelementptr inbounds double, ptr %43, i64 %163
  %167 = getelementptr inbounds i8, ptr %166, i64 16
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %166, align 8, !tbaa !9
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %167, align 8, !tbaa !9
  %index.next409 = add nuw i64 %index407, 4
  %168 = icmp eq i64 %index.next409, %n.vec403
  br i1 %168, label %middle.block398, label %vector.body406, !llvm.loop !17

middle.block398:                                  ; preds = %vector.body406
  %cmp.n410 = icmp eq i64 %101, %n.vec403
  br i1 %cmp.n410, label %._crit_edge, label %.lr.ph.split.us.preheader433

.lr.ph.split.us.preheader433:                     ; preds = %middle.block398, %vector.memcheck, %.lr.ph.split.us.preheader
  %.1313354.us.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph.split.us.preheader ], [ %ind.end404, %middle.block398 ]
  %xtraiter = and i64 %101, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.split.us.prol.loopexit, label %.lr.ph.split.us.prol

.lr.ph.split.us.prol:                             ; preds = %.lr.ph.split.us.preheader433
  %169 = getelementptr inbounds double, ptr %48, i64 %.1313354.us.ph
  store double 1.000000e+00, ptr %169, align 8, !tbaa !9
  %170 = add nsw i64 %.1313354.us.ph, %41
  %171 = getelementptr inbounds double, ptr %44, i64 %170
  store double 1.000000e+00, ptr %171, align 8, !tbaa !9
  %172 = getelementptr inbounds double, ptr %43, i64 %170
  store double 1.000000e+00, ptr %172, align 8, !tbaa !9
  %173 = add nuw i64 %.1313354.us.ph, 1
  br label %.lr.ph.split.us.prol.loopexit

.lr.ph.split.us.prol.loopexit:                    ; preds = %.lr.ph.split.us.prol, %.lr.ph.split.us.preheader433
  %.1313354.us.unr = phi i64 [ %.1313354.us.ph, %.lr.ph.split.us.preheader433 ], [ %173, %.lr.ph.split.us.prol ]
  %174 = icmp eq i64 %101, %.1313354.us.ph
  br i1 %174, label %._crit_edge, label %.lr.ph.split.us

.lr.ph.split.us:                                  ; preds = %.lr.ph.split.us.prol.loopexit, %.lr.ph.split.us
  %.1313354.us = phi i64 [ %183, %.lr.ph.split.us ], [ %.1313354.us.unr, %.lr.ph.split.us.prol.loopexit ]
  %175 = getelementptr inbounds double, ptr %48, i64 %.1313354.us
  store double 1.000000e+00, ptr %175, align 8, !tbaa !9
  %176 = add nsw i64 %.1313354.us, %41
  %177 = getelementptr inbounds double, ptr %44, i64 %176
  store double 1.000000e+00, ptr %177, align 8, !tbaa !9
  %178 = getelementptr inbounds double, ptr %43, i64 %176
  store double 1.000000e+00, ptr %178, align 8, !tbaa !9
  %179 = add nuw i64 %.1313354.us, 1
  %180 = getelementptr double, ptr %15, i64 %.1313354.us
  store double 1.000000e+00, ptr %180, align 8, !tbaa !9
  %181 = getelementptr inbounds double, ptr %17, i64 %.1313354.us
  store double 1.000000e+00, ptr %181, align 8, !tbaa !9
  %182 = getelementptr inbounds double, ptr %18, i64 %.1313354.us
  store double 1.000000e+00, ptr %182, align 8, !tbaa !9
  %183 = add nuw i64 %.1313354.us, 2
  %exitcond375.not.1 = icmp eq i64 %179, %101
  br i1 %exitcond375.not.1, label %._crit_edge, label %.lr.ph.split.us, !llvm.loop !18

.lr.ph.split:                                     ; preds = %.lr.ph.split.preheader434, %.lr.ph.split
  %.1313354 = phi i64 [ %185, %.lr.ph.split ], [ %.1313354.ph, %.lr.ph.split.preheader434 ]
  %184 = getelementptr inbounds double, ptr %48, i64 %.1313354
  store double 1.000000e+00, ptr %184, align 8, !tbaa !9
  %185 = add nuw i64 %.1313354, 1
  %exitcond.not = icmp eq i64 %.1313354, %101
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph.split, !llvm.loop !19

._crit_edge:                                      ; preds = %.lr.ph.split, %.lr.ph.split.us.prol.loopexit, %.lr.ph.split.us, %middle.block, %middle.block398
  store i8 73, ptr %34, align 1, !tbaa !20
  %186 = call double @zlanhe_(ptr noundef nonnull %34, ptr noundef %0, ptr noundef nonnull %2, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %22) #6
  store double %186, ptr %36, align 8, !tbaa !9
  %187 = call i32 @zhecon_(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef nonnull %36, ptr noundef nonnull %14, ptr noundef %21, ptr noundef nonnull %23) #6
  br i1 %81, label %193, label %188

188:                                              ; preds = %._crit_edge
  %189 = call i64 @ilaprec_(ptr noundef nonnull @.str.6) #6
  store i64 %189, ptr %33, align 8, !tbaa !5
  %190 = load i64, ptr %2, align 8, !tbaa !5
  %191 = getelementptr %struct.doublecomplex, ptr %21, i64 %190
  %192 = call i32 @zla_herfsx_extended__(ptr noundef nonnull %33, ptr noundef %0, 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 nonnull %37, ptr noundef %9, ptr noundef %10, ptr noundef nonnull %11, ptr noundef %12, ptr noundef nonnull %13, ptr noundef nonnull %15, ptr noundef nonnull %39, ptr noundef %17, ptr noundef %18, ptr noundef %21, ptr noundef %22, ptr noundef %191, ptr noundef %22, ptr noundef nonnull %14, ptr noundef nonnull %38, ptr noundef nonnull %40, ptr noundef nonnull %32, ptr noundef nonnull %35, ptr noundef nonnull %23, i64 noundef 1) #6
  br label %193

193:                                              ; preds = %188, %._crit_edge
  %194 = load i64, ptr %2, align 8, !tbaa !5
  %195 = sitofp i64 %194 to double
  %196 = call double @sqrt(double noundef %195) #6
  %197 = fcmp ole double %196, 1.000000e+01
  %198 = select i1 %197, double 1.000000e+01, double %196
  %199 = call double @dlamch_(ptr noundef nonnull @.str) #6
  %200 = fmul double %199, %198
  %201 = load i64, ptr %16, align 8, !tbaa !5
  %202 = icmp sgt i64 %201, 0
  %203 = load i64, ptr %39, align 8
  %204 = icmp sgt i64 %203, 0
  %or.cond = select i1 %202, i1 %204, i1 false
  br i1 %or.cond, label %205, label %.loopexit352

205:                                              ; preds = %193
  %206 = load i64, ptr %37, align 8, !tbaa !5
  %.not336 = icmp eq i64 %206, 0
  %c_false.c_true = select i1 %.not336, ptr @c_false, ptr @c_true
  %207 = call double @zla_hercond_c__(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef %9, ptr noundef nonnull %c_false.c_true, ptr noundef nonnull %23, ptr noundef %21, ptr noundef %22, i64 noundef 1) #6
  %208 = load i64, ptr %3, align 8, !tbaa !5
  %.not337355 = icmp slt i64 %208, 1
  br i1 %.not337355, label %..loopexit352_crit_edge, label %.lr.ph358

..loopexit352_crit_edge:                          ; preds = %205
  %.pre383 = load i64, ptr %16, align 8, !tbaa !5
  br label %.loopexit352

.lr.ph358:                                        ; preds = %205
  %.idx340 = shl i64 %41, 4
  %invariant.gep = getelementptr i8, ptr %44, i64 %.idx340
  %209 = fcmp olt double %207, %61
  %.idx344 = mul i64 %41, 24
  %invariant.gep359 = getelementptr i8, ptr %44, i64 %.idx344
  %.pre381 = load i64, ptr %16, align 8, !tbaa !5
  br i1 %209, label %.lr.ph358.split.us, label %.lr.ph358.split.preheader

.lr.ph358.split.preheader:                        ; preds = %.lr.ph358
  %210 = icmp sgt i64 %.pre381, 1
  %invariant.gep390 = getelementptr i8, ptr %44, i64 %.idx340
  %211 = icmp sgt i64 %.pre381, 2
  br label %.lr.ph358.split

.lr.ph358.split.us:                               ; preds = %.lr.ph358, %224
  %212 = phi i64 [ %221, %224 ], [ %.pre381, %.lr.ph358 ]
  %.2356.us = phi i64 [ %225, %224 ], [ 1, %.lr.ph358 ]
  %213 = getelementptr double, ptr %44, i64 %.2356.us
  %214 = getelementptr i8, ptr %213, i64 %.idx340
  store double 1.000000e+00, ptr %214, align 8, !tbaa !9
  %215 = getelementptr double, ptr %213, i64 %41
  store double 0.000000e+00, ptr %215, align 8, !tbaa !9
  %216 = load i64, ptr %23, align 8, !tbaa !5
  %217 = load i64, ptr %2, align 8, !tbaa !5
  %.not343.us = icmp sgt i64 %216, %217
  br i1 %.not343.us, label %220, label %218

218:                                              ; preds = %.lr.ph358.split.us
  %219 = add nsw i64 %217, %.2356.us
  store i64 %219, ptr %23, align 8, !tbaa !5
  %.pre382 = load i64, ptr %16, align 8, !tbaa !5
  br label %220

220:                                              ; preds = %218, %.lr.ph358.split.us
  %221 = phi i64 [ %.pre382, %218 ], [ %212, %.lr.ph358.split.us ]
  %222 = icmp sgt i64 %221, 2
  br i1 %222, label %223, label %224

223:                                              ; preds = %220
  %gep360.us = getelementptr double, ptr %invariant.gep359, i64 %.2356.us
  store double %207, ptr %gep360.us, align 8, !tbaa !9
  br label %224

224:                                              ; preds = %223, %220
  %225 = add nuw i64 %.2356.us, 1
  %exitcond377.not = icmp eq i64 %.2356.us, %208
  br i1 %exitcond377.not, label %.loopexit352, label %.lr.ph358.split.us, !llvm.loop !21

.lr.ph358.split:                                  ; preds = %.lr.ph358.split.preheader, %239
  %.2356 = phi i64 [ %240, %239 ], [ 1, %.lr.ph358.split.preheader ]
  br i1 %210, label %226, label %.lr.ph358.split._crit_edge

.lr.ph358.split._crit_edge:                       ; preds = %.lr.ph358.split
  %gep391 = getelementptr double, ptr %invariant.gep390, i64 %.2356
  %.pre380 = load double, ptr %gep391, align 8, !tbaa !9
  br label %230

226:                                              ; preds = %.lr.ph358.split
  %gep = getelementptr double, ptr %invariant.gep, i64 %.2356
  %227 = load double, ptr %gep, align 8, !tbaa !9
  %228 = fcmp ogt double %227, 1.000000e+00
  br i1 %228, label %229, label %230

229:                                              ; preds = %226
  store double 1.000000e+00, ptr %gep, align 8, !tbaa !9
  br label %230

230:                                              ; preds = %.lr.ph358.split._crit_edge, %229, %226
  %231 = phi double [ %.pre380, %.lr.ph358.split._crit_edge ], [ 1.000000e+00, %229 ], [ %227, %226 ]
  %232 = fcmp olt double %231, %200
  br i1 %232, label %233, label %237

233:                                              ; preds = %230
  %234 = getelementptr double, ptr %44, i64 %.2356
  %235 = getelementptr i8, ptr %234, i64 %.idx340
  store double %200, ptr %235, align 8, !tbaa !9
  %236 = getelementptr double, ptr %234, i64 %41
  store double 1.000000e+00, ptr %236, align 8, !tbaa !9
  br label %237

237:                                              ; preds = %230, %233
  br i1 %211, label %238, label %239

238:                                              ; preds = %237
  %gep360 = getelementptr double, ptr %invariant.gep359, i64 %.2356
  store double %207, ptr %gep360, align 8, !tbaa !9
  br label %239

239:                                              ; preds = %237, %238
  %240 = add nuw i64 %.2356, 1
  %exitcond376.not = icmp eq i64 %.2356, %208
  br i1 %exitcond376.not, label %.loopexit352, label %.lr.ph358.split, !llvm.loop !21

.loopexit352:                                     ; preds = %239, %224, %..loopexit352_crit_edge, %193
  %241 = phi i64 [ %.pre383, %..loopexit352_crit_edge ], [ %201, %193 ], [ %221, %224 ], [ %.pre381, %239 ]
  %242 = icmp sgt i64 %241, 0
  %243 = load i64, ptr %39, align 8
  %244 = icmp sgt i64 %243, 1
  %or.cond3 = select i1 %242, i1 %244, i1 false
  br i1 %or.cond3, label %245, label %.loopexit

245:                                              ; preds = %.loopexit352
  %246 = call double @dlamch_(ptr noundef nonnull @.str) #6
  %247 = call double @sqrt(double noundef %246) #6
  %248 = load i64, ptr %3, align 8, !tbaa !5
  %invariant.gep361 = getelementptr i8, ptr %47, i64 16
  %.not338363 = icmp slt i64 %248, 1
  br i1 %.not338363, label %.loopexit, label %.lr.ph366

.lr.ph366:                                        ; preds = %245
  %.idx = shl i64 %41, 4
  %249 = getelementptr inbounds i8, ptr %20, i64 16
  %.idx339 = mul i64 %41, 24
  br label %250

250:                                              ; preds = %.lr.ph366, %287
  %.3364 = phi i64 [ 1, %.lr.ph366 ], [ %288, %287 ]
  %251 = getelementptr double, ptr %43, i64 %.3364
  %252 = getelementptr i8, ptr %251, i64 %.idx
  %253 = load double, ptr %252, align 8, !tbaa !9
  %254 = fcmp olt double %253, %247
  br i1 %254, label %255, label %258

255:                                              ; preds = %250
  %256 = mul nsw i64 %.3364, %45
  %gep362 = getelementptr %struct.doublecomplex, ptr %invariant.gep361, i64 %256
  %257 = call double @zla_hercond_x__(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef %gep362, ptr noundef nonnull %23, ptr noundef %21, ptr noundef %22, i64 noundef 1) #6
  br label %258

258:                                              ; preds = %250, %255
  %.1 = phi double [ %257, %255 ], [ 0.000000e+00, %250 ]
  %259 = load i64, ptr %16, align 8, !tbaa !5
  %260 = icmp sgt i64 %259, 1
  br i1 %260, label %261, label %265

261:                                              ; preds = %258
  %262 = load double, ptr %252, align 8, !tbaa !9
  %263 = fcmp ogt double %262, 1.000000e+00
  br i1 %263, label %264, label %265

264:                                              ; preds = %261
  store double 1.000000e+00, ptr %252, align 8, !tbaa !9
  br label %265

265:                                              ; preds = %264, %261, %258
  %266 = fcmp olt double %.1, %61
  br i1 %266, label %267, label %277

267:                                              ; preds = %265
  store double 1.000000e+00, ptr %252, align 8, !tbaa !9
  %268 = getelementptr double, ptr %251, i64 %41
  store double 0.000000e+00, ptr %268, align 8, !tbaa !9
  %269 = load double, ptr %249, align 8, !tbaa !9
  %270 = fcmp oeq double %269, 1.000000e+00
  br i1 %270, label %271, label %282

271:                                              ; preds = %267
  %272 = load i64, ptr %23, align 8, !tbaa !5
  %273 = load i64, ptr %2, align 8, !tbaa !5
  %274 = add nsw i64 %273, %.3364
  %275 = icmp slt i64 %272, %274
  br i1 %275, label %276, label %282

276:                                              ; preds = %271
  store i64 %274, ptr %23, align 8, !tbaa !5
  %.pre384 = load i64, ptr %16, align 8, !tbaa !5
  br label %282

277:                                              ; preds = %265
  %278 = load double, ptr %252, align 8, !tbaa !9
  %279 = fcmp olt double %278, %200
  br i1 %279, label %280, label %282

280:                                              ; preds = %277
  store double %200, ptr %252, align 8, !tbaa !9
  %281 = getelementptr double, ptr %251, i64 %41
  store double 1.000000e+00, ptr %281, align 8, !tbaa !9
  br label %282

282:                                              ; preds = %277, %280, %267, %271, %276
  %283 = phi i64 [ %259, %277 ], [ %259, %280 ], [ %259, %267 ], [ %259, %271 ], [ %.pre384, %276 ]
  %284 = icmp sgt i64 %283, 2
  br i1 %284, label %285, label %287

285:                                              ; preds = %282
  %286 = getelementptr i8, ptr %251, i64 %.idx339
  store double %.1, ptr %286, align 8, !tbaa !9
  br label %287

287:                                              ; preds = %282, %285
  %288 = add nuw nsw i64 %.3364, 1
  %.not338.not = icmp slt i64 %.3364, %248
  br i1 %.not338.not, label %250, label %.loopexit, !llvm.loop !22

.loopexit:                                        ; preds = %287, %.lr.ph370.split.us.prol.loopexit, %.lr.ph370.split.us, %middle.block417, %.thread385, %.lr.ph370.split.preheader, %245, %123, %.loopexit352, %.thread349
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #6
  ret i32 0
}

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

declare i64 @ilaprec_(ptr noundef) local_unnamed_addr #2

declare i32 @zla_herfsx_extended__(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, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #3

declare double @zla_hercond_c__(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

declare double @zla_hercond_x__(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 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) #4

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = distinct !{!11, !12, !13, !14}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = distinct !{!15, !12, !13}
!16 = distinct !{!16, !12, !13, !14}
!17 = distinct !{!17, !12, !13, !14}
!18 = distinct !{!18, !12, !13}
!19 = distinct !{!19, !12, !14, !13}
!20 = !{!7, !7, i64 0}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}


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