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

; 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 [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b16 = external hidden global double, align 8
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i64, align 8
@c_b2 = external hidden global %struct.doublecomplex, align 8
@c_b1 = external hidden global %struct.doublecomplex, align 8

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

142:                                              ; preds = %23
  %143 = load ptr, ptr %25, align 8, !tbaa !5
  %144 = call i64 @lsame_(ptr noundef %143, ptr noundef @.str.4)
  %145 = icmp ne i64 %144, 0
  br i1 %145, label %148, label %146

146:                                              ; preds = %142
  %147 = load ptr, ptr %47, align 8, !tbaa !5
  store i64 -1, ptr %147, align 8, !tbaa !9
  br label %280

148:                                              ; preds = %142, %23
  %149 = load i64, ptr %80, align 8, !tbaa !9
  %150 = icmp ne i64 %149, 0
  br i1 %150, label %159, label %151

151:                                              ; preds = %148
  %152 = load i64, ptr %84, align 8, !tbaa !9
  %153 = icmp ne i64 %152, 0
  br i1 %153, label %159, label %154

154:                                              ; preds = %151
  %155 = load i64, ptr %81, align 8, !tbaa !9
  %156 = icmp ne i64 %155, 0
  br i1 %156, label %159, label %157

157:                                              ; preds = %154
  %158 = load ptr, ptr %47, align 8, !tbaa !5
  store i64 -2, ptr %158, align 8, !tbaa !9
  br label %279

159:                                              ; preds = %154, %151, %148
  %160 = load i64, ptr %78, align 8, !tbaa !9
  %161 = icmp ne i64 %160, 0
  br i1 %161, label %168, label %162

162:                                              ; preds = %159
  %163 = load ptr, ptr %27, align 8, !tbaa !5
  %164 = call i64 @lsame_(ptr noundef %163, ptr noundef @.str.5)
  %165 = icmp ne i64 %164, 0
  br i1 %165, label %168, label %166

166:                                              ; preds = %162
  %167 = load ptr, ptr %47, align 8, !tbaa !5
  store i64 -3, ptr %167, align 8, !tbaa !9
  br label %278

168:                                              ; preds = %162, %159
  %169 = load ptr, ptr %28, align 8, !tbaa !5
  %170 = load i64, ptr %169, align 8, !tbaa !9
  %171 = icmp slt i64 %170, 0
  br i1 %171, label %172, label %174

172:                                              ; preds = %168
  %173 = load ptr, ptr %47, align 8, !tbaa !5
  store i64 -4, ptr %173, align 8, !tbaa !9
  br label %277

174:                                              ; preds = %168
  %175 = load ptr, ptr %29, align 8, !tbaa !5
  %176 = load i64, ptr %175, align 8, !tbaa !9
  %177 = icmp slt i64 %176, 0
  br i1 %177, label %178, label %180

178:                                              ; preds = %174
  %179 = load ptr, ptr %47, align 8, !tbaa !5
  store i64 -5, ptr %179, align 8, !tbaa !9
  br label %276

180:                                              ; preds = %174
  %181 = load ptr, ptr %31, align 8, !tbaa !5
  %182 = load i64, ptr %181, align 8, !tbaa !9
  %183 = load ptr, ptr %29, align 8, !tbaa !5
  %184 = load i64, ptr %183, align 8, !tbaa !9
  %185 = add nsw i64 %184, 1
  %186 = icmp slt i64 %182, %185
  br i1 %186, label %187, label %189

187:                                              ; preds = %180
  %188 = load ptr, ptr %47, align 8, !tbaa !5
  store i64 -7, ptr %188, align 8, !tbaa !9
  br label %275

189:                                              ; preds = %180
  %190 = load i64, ptr %79, align 8, !tbaa !9
  %191 = icmp ne i64 %190, 0
  br i1 %191, label %192, label %207

192:                                              ; preds = %189
  %193 = load ptr, ptr %33, align 8, !tbaa !5
  %194 = load i64, ptr %193, align 8, !tbaa !9
  %195 = load ptr, ptr %28, align 8, !tbaa !5
  %196 = load i64, ptr %195, align 8, !tbaa !9
  %197 = icmp sge i64 1, %196
  br i1 %197, label %198, label %199

198:                                              ; preds = %192
  br label %202

199:                                              ; preds = %192
  %200 = load ptr, ptr %28, align 8, !tbaa !5
  %201 = load i64, ptr %200, align 8, !tbaa !9
  br label %202

202:                                              ; preds = %199, %198
  %203 = phi i64 [ 1, %198 ], [ %201, %199 ]
  %204 = icmp slt i64 %194, %203
  br i1 %204, label %205, label %207

205:                                              ; preds = %202
  %206 = load ptr, ptr %47, align 8, !tbaa !5
  store i64 -9, ptr %206, align 8, !tbaa !9
  br label %274

207:                                              ; preds = %202, %189
  %208 = load i64, ptr %84, align 8, !tbaa !9
  %209 = icmp ne i64 %208, 0
  br i1 %209, label %210, label %223

210:                                              ; preds = %207
  %211 = load ptr, ptr %28, align 8, !tbaa !5
  %212 = load i64, ptr %211, align 8, !tbaa !9
  %213 = icmp sgt i64 %212, 0
  br i1 %213, label %214, label %222

214:                                              ; preds = %210
  %215 = load ptr, ptr %35, align 8, !tbaa !5
  %216 = load double, ptr %215, align 8, !tbaa !11
  %217 = load ptr, ptr %34, align 8, !tbaa !5
  %218 = load double, ptr %217, align 8, !tbaa !11
  %219 = fcmp ole double %216, %218
  br i1 %219, label %220, label %222

220:                                              ; preds = %214
  %221 = load ptr, ptr %47, align 8, !tbaa !5
  store i64 -11, ptr %221, align 8, !tbaa !9
  br label %222

222:                                              ; preds = %220, %214, %210
  br label %273

223:                                              ; preds = %207
  %224 = load i64, ptr %81, align 8, !tbaa !9
  %225 = icmp ne i64 %224, 0
  br i1 %225, label %226, label %272

226:                                              ; preds = %223
  %227 = load ptr, ptr %36, align 8, !tbaa !5
  %228 = load i64, ptr %227, align 8, !tbaa !9
  %229 = icmp slt i64 %228, 1
  br i1 %229, label %243, label %230

230:                                              ; preds = %226
  %231 = load ptr, ptr %36, align 8, !tbaa !5
  %232 = load i64, ptr %231, align 8, !tbaa !9
  %233 = load ptr, ptr %28, align 8, !tbaa !5
  %234 = load i64, ptr %233, align 8, !tbaa !9
  %235 = icmp sge i64 1, %234
  br i1 %235, label %236, label %237

236:                                              ; preds = %230
  br label %240

237:                                              ; preds = %230
  %238 = load ptr, ptr %28, align 8, !tbaa !5
  %239 = load i64, ptr %238, align 8, !tbaa !9
  br label %240

240:                                              ; preds = %237, %236
  %241 = phi i64 [ 1, %236 ], [ %239, %237 ]
  %242 = icmp sgt i64 %232, %241
  br i1 %242, label %243, label %245

243:                                              ; preds = %240, %226
  %244 = load ptr, ptr %47, align 8, !tbaa !5
  store i64 -12, ptr %244, align 8, !tbaa !9
  br label %271

245:                                              ; preds = %240
  %246 = load ptr, ptr %37, align 8, !tbaa !5
  %247 = load i64, ptr %246, align 8, !tbaa !9
  %248 = load ptr, ptr %28, align 8, !tbaa !5
  %249 = load i64, ptr %248, align 8, !tbaa !9
  %250 = load ptr, ptr %36, align 8, !tbaa !5
  %251 = load i64, ptr %250, align 8, !tbaa !9
  %252 = icmp sle i64 %249, %251
  br i1 %252, label %253, label %256

253:                                              ; preds = %245
  %254 = load ptr, ptr %28, align 8, !tbaa !5
  %255 = load i64, ptr %254, align 8, !tbaa !9
  br label %259

256:                                              ; preds = %245
  %257 = load ptr, ptr %36, align 8, !tbaa !5
  %258 = load i64, ptr %257, align 8, !tbaa !9
  br label %259

259:                                              ; preds = %256, %253
  %260 = phi i64 [ %255, %253 ], [ %258, %256 ]
  %261 = icmp slt i64 %247, %260
  br i1 %261, label %268, label %262

262:                                              ; preds = %259
  %263 = load ptr, ptr %37, align 8, !tbaa !5
  %264 = load i64, ptr %263, align 8, !tbaa !9
  %265 = load ptr, ptr %28, align 8, !tbaa !5
  %266 = load i64, ptr %265, align 8, !tbaa !9
  %267 = icmp sgt i64 %264, %266
  br i1 %267, label %268, label %270

268:                                              ; preds = %262, %259
  %269 = load ptr, ptr %47, align 8, !tbaa !5
  store i64 -13, ptr %269, align 8, !tbaa !9
  br label %270

270:                                              ; preds = %268, %262
  br label %271

271:                                              ; preds = %270, %243
  br label %272

272:                                              ; preds = %271, %223
  br label %273

273:                                              ; preds = %272, %222
  br label %274

274:                                              ; preds = %273, %205
  br label %275

275:                                              ; preds = %274, %187
  br label %276

276:                                              ; preds = %275, %178
  br label %277

277:                                              ; preds = %276, %172
  br label %278

278:                                              ; preds = %277, %166
  br label %279

279:                                              ; preds = %278, %157
  br label %280

280:                                              ; preds = %279, %146
  %281 = load ptr, ptr %47, align 8, !tbaa !5
  %282 = load i64, ptr %281, align 8, !tbaa !9
  %283 = icmp eq i64 %282, 0
  br i1 %283, label %284, label %300

284:                                              ; preds = %280
  %285 = load ptr, ptr %42, align 8, !tbaa !5
  %286 = load i64, ptr %285, align 8, !tbaa !9
  %287 = icmp slt i64 %286, 1
  br i1 %287, label %297, label %288

288:                                              ; preds = %284
  %289 = load i64, ptr %79, align 8, !tbaa !9
  %290 = icmp ne i64 %289, 0
  br i1 %290, label %291, label %299

291:                                              ; preds = %288
  %292 = load ptr, ptr %42, align 8, !tbaa !5
  %293 = load i64, ptr %292, align 8, !tbaa !9
  %294 = load ptr, ptr %28, align 8, !tbaa !5
  %295 = load i64, ptr %294, align 8, !tbaa !9
  %296 = icmp slt i64 %293, %295
  br i1 %296, label %297, label %299

297:                                              ; preds = %291, %284
  %298 = load ptr, ptr %47, align 8, !tbaa !5
  store i64 -18, ptr %298, align 8, !tbaa !9
  br label %299

299:                                              ; preds = %297, %291, %288
  br label %300

300:                                              ; preds = %299, %280
  %301 = load ptr, ptr %47, align 8, !tbaa !5
  %302 = load i64, ptr %301, align 8, !tbaa !9
  %303 = icmp ne i64 %302, 0
  br i1 %303, label %304, label %309

304:                                              ; preds = %300
  %305 = load ptr, ptr %47, align 8, !tbaa !5
  %306 = load i64, ptr %305, align 8, !tbaa !9
  %307 = sub nsw i64 0, %306
  store i64 %307, ptr %54, align 8, !tbaa !9
  %308 = call i32 @xerbla_(ptr noundef @.str.6, ptr noundef %54)
  store i32 0, ptr %24, align 4
  store i32 1, ptr %94, align 4
  br label %926

309:                                              ; preds = %300
  %310 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 0, ptr %310, align 8, !tbaa !9
  %311 = load ptr, ptr %28, align 8, !tbaa !5
  %312 = load i64, ptr %311, align 8, !tbaa !9
  %313 = icmp eq i64 %312, 0
  br i1 %313, label %314, label %315

314:                                              ; preds = %309
  store i32 0, ptr %24, align 4
  store i32 1, ptr %94, align 4
  br label %926

315:                                              ; preds = %309
  %316 = load ptr, ptr %28, align 8, !tbaa !5
  %317 = load i64, ptr %316, align 8, !tbaa !9
  %318 = icmp eq i64 %317, 1
  br i1 %318, label %319, label %398

319:                                              ; preds = %315
  %320 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 1, ptr %320, align 8, !tbaa !9
  %321 = load i64, ptr %78, align 8, !tbaa !9
  %322 = icmp ne i64 %321, 0
  br i1 %322, label %323, label %338

323:                                              ; preds = %319
  %324 = load i64, ptr %48, align 8, !tbaa !9
  %325 = add nsw i64 %324, 1
  store i64 %325, ptr %54, align 8, !tbaa !9
  %326 = load ptr, ptr %30, align 8, !tbaa !5
  %327 = load i64, ptr %54, align 8, !tbaa !9
  %328 = getelementptr inbounds %struct.doublecomplex, ptr %326, i64 %327
  %329 = getelementptr inbounds %struct.doublecomplex, ptr %328, i32 0, i32 0
  %330 = load double, ptr %329, align 8, !tbaa !13
  %331 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  store double %330, ptr %331, align 8, !tbaa !13
  %332 = load ptr, ptr %30, align 8, !tbaa !5
  %333 = load i64, ptr %54, align 8, !tbaa !9
  %334 = getelementptr inbounds %struct.doublecomplex, ptr %332, i64 %333
  %335 = getelementptr inbounds %struct.doublecomplex, ptr %334, i32 0, i32 1
  %336 = load double, ptr %335, align 8, !tbaa !15
  %337 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 1
  store double %336, ptr %337, align 8, !tbaa !15
  br label %356

338:                                              ; preds = %319
  %339 = load ptr, ptr %29, align 8, !tbaa !5
  %340 = load i64, ptr %339, align 8, !tbaa !9
  %341 = add nsw i64 %340, 1
  %342 = load i64, ptr %48, align 8, !tbaa !9
  %343 = add nsw i64 %341, %342
  store i64 %343, ptr %54, align 8, !tbaa !9
  %344 = load ptr, ptr %30, align 8, !tbaa !5
  %345 = load i64, ptr %54, align 8, !tbaa !9
  %346 = getelementptr inbounds %struct.doublecomplex, ptr %344, i64 %345
  %347 = getelementptr inbounds %struct.doublecomplex, ptr %346, i32 0, i32 0
  %348 = load double, ptr %347, align 8, !tbaa !13
  %349 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  store double %348, ptr %349, align 8, !tbaa !13
  %350 = load ptr, ptr %30, align 8, !tbaa !5
  %351 = load i64, ptr %54, align 8, !tbaa !9
  %352 = getelementptr inbounds %struct.doublecomplex, ptr %350, i64 %351
  %353 = getelementptr inbounds %struct.doublecomplex, ptr %352, i32 0, i32 1
  %354 = load double, ptr %353, align 8, !tbaa !15
  %355 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 1
  store double %354, ptr %355, align 8, !tbaa !15
  br label %356

356:                                              ; preds = %338, %323
  %357 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  %358 = load double, ptr %357, align 8, !tbaa !13
  store double %358, ptr %64, align 8, !tbaa !11
  %359 = load i64, ptr %84, align 8, !tbaa !9
  %360 = icmp ne i64 %359, 0
  br i1 %360, label %361, label %374

361:                                              ; preds = %356
  %362 = load ptr, ptr %34, align 8, !tbaa !5
  %363 = load double, ptr %362, align 8, !tbaa !11
  %364 = load double, ptr %64, align 8, !tbaa !11
  %365 = fcmp olt double %363, %364
  br i1 %365, label %366, label %371

366:                                              ; preds = %361
  %367 = load ptr, ptr %35, align 8, !tbaa !5
  %368 = load double, ptr %367, align 8, !tbaa !11
  %369 = load double, ptr %64, align 8, !tbaa !11
  %370 = fcmp oge double %368, %369
  br i1 %370, label %373, label %371

371:                                              ; preds = %366, %361
  %372 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 0, ptr %372, align 8, !tbaa !9
  br label %373

373:                                              ; preds = %371, %366
  br label %374

374:                                              ; preds = %373, %356
  %375 = load ptr, ptr %39, align 8, !tbaa !5
  %376 = load i64, ptr %375, align 8, !tbaa !9
  %377 = icmp eq i64 %376, 1
  br i1 %377, label %378, label %397

378:                                              ; preds = %374
  %379 = getelementptr inbounds %struct.doublecomplex, ptr %72, i32 0, i32 0
  %380 = load double, ptr %379, align 8, !tbaa !13
  %381 = load ptr, ptr %40, align 8, !tbaa !5
  %382 = getelementptr inbounds double, ptr %381, i64 1
  store double %380, ptr %382, align 8, !tbaa !11
  %383 = load i64, ptr %79, align 8, !tbaa !9
  %384 = icmp ne i64 %383, 0
  br i1 %384, label %385, label %396

385:                                              ; preds = %378
  %386 = load i64, ptr %52, align 8, !tbaa !9
  %387 = add nsw i64 %386, 1
  store i64 %387, ptr %54, align 8, !tbaa !9
  %388 = load ptr, ptr %41, align 8, !tbaa !5
  %389 = load i64, ptr %54, align 8, !tbaa !9
  %390 = getelementptr inbounds %struct.doublecomplex, ptr %388, i64 %389
  %391 = getelementptr inbounds %struct.doublecomplex, ptr %390, i32 0, i32 0
  store double 1.000000e+00, ptr %391, align 8, !tbaa !13
  %392 = load ptr, ptr %41, align 8, !tbaa !5
  %393 = load i64, ptr %54, align 8, !tbaa !9
  %394 = getelementptr inbounds %struct.doublecomplex, ptr %392, i64 %393
  %395 = getelementptr inbounds %struct.doublecomplex, ptr %394, i32 0, i32 1
  store double 0.000000e+00, ptr %395, align 8, !tbaa !15
  br label %396

396:                                              ; preds = %385, %378
  br label %397

397:                                              ; preds = %396, %374
  store i32 0, ptr %24, align 4
  store i32 1, ptr %94, align 4
  br label %926

398:                                              ; preds = %315
  %399 = call double @dlamch_(ptr noundef @.str.7)
  store double %399, ptr %85, align 8, !tbaa !11
  %400 = call double @dlamch_(ptr noundef @.str.8)
  store double %400, ptr %61, align 8, !tbaa !11
  %401 = load double, ptr %85, align 8, !tbaa !11
  %402 = load double, ptr %61, align 8, !tbaa !11
  %403 = fdiv double %401, %402
  store double %403, ptr %93, align 8, !tbaa !11
  %404 = load double, ptr %93, align 8, !tbaa !11
  %405 = fdiv double 1.000000e+00, %404
  store double %405, ptr %87, align 8, !tbaa !11
  %406 = load double, ptr %93, align 8, !tbaa !11
  %407 = call double @sqrt(double noundef %406) #4
  store double %407, ptr %69, align 8, !tbaa !11
  %408 = load double, ptr %87, align 8, !tbaa !11
  %409 = call double @sqrt(double noundef %408) #4
  store double %409, ptr %56, align 8, !tbaa !11
  %410 = load double, ptr %85, align 8, !tbaa !11
  %411 = call double @sqrt(double noundef %410) #4
  %412 = call double @sqrt(double noundef %411) #4
  %413 = fdiv double 1.000000e+00, %412
  store double %413, ptr %57, align 8, !tbaa !11
  %414 = load double, ptr %56, align 8, !tbaa !11
  %415 = load double, ptr %57, align 8, !tbaa !11
  %416 = fcmp ole double %414, %415
  br i1 %416, label %417, label %419

417:                                              ; preds = %398
  %418 = load double, ptr %56, align 8, !tbaa !11
  br label %421

419:                                              ; preds = %398
  %420 = load double, ptr %57, align 8, !tbaa !11
  br label %421

421:                                              ; preds = %419, %417
  %422 = phi double [ %418, %417 ], [ %420, %419 ]
  store double %422, ptr %70, align 8, !tbaa !11
  store i64 0, ptr %82, align 8, !tbaa !9
  %423 = load ptr, ptr %38, align 8, !tbaa !5
  %424 = load double, ptr %423, align 8, !tbaa !11
  store double %424, ptr %86, align 8, !tbaa !11
  %425 = load i64, ptr %84, align 8, !tbaa !9
  %426 = icmp ne i64 %425, 0
  br i1 %426, label %427, label %432

427:                                              ; preds = %421
  %428 = load ptr, ptr %34, align 8, !tbaa !5
  %429 = load double, ptr %428, align 8, !tbaa !11
  store double %429, ptr %62, align 8, !tbaa !11
  %430 = load ptr, ptr %35, align 8, !tbaa !5
  %431 = load double, ptr %430, align 8, !tbaa !11
  store double %431, ptr %63, align 8, !tbaa !11
  br label %433

432:                                              ; preds = %421
  store double 0.000000e+00, ptr %62, align 8, !tbaa !11
  store double 0.000000e+00, ptr %63, align 8, !tbaa !11
  br label %433

433:                                              ; preds = %432, %427
  %434 = load ptr, ptr %27, align 8, !tbaa !5
  %435 = load ptr, ptr %28, align 8, !tbaa !5
  %436 = load ptr, ptr %29, align 8, !tbaa !5
  %437 = load ptr, ptr %30, align 8, !tbaa !5
  %438 = load i64, ptr %49, align 8, !tbaa !9
  %439 = getelementptr inbounds %struct.doublecomplex, ptr %437, i64 %438
  %440 = load ptr, ptr %31, align 8, !tbaa !5
  %441 = load ptr, ptr %44, align 8, !tbaa !5
  %442 = getelementptr inbounds double, ptr %441, i64 1
  %443 = call double @zlanhb_(ptr noundef @.str.9, ptr noundef %434, ptr noundef %435, ptr noundef %436, ptr noundef %439, ptr noundef %440, ptr noundef %442)
  store double %443, ptr %67, align 8, !tbaa !11
  %444 = load double, ptr %67, align 8, !tbaa !11
  %445 = fcmp ogt double %444, 0.000000e+00
  br i1 %445, label %446, label %454

446:                                              ; preds = %433
  %447 = load double, ptr %67, align 8, !tbaa !11
  %448 = load double, ptr %69, align 8, !tbaa !11
  %449 = fcmp olt double %447, %448
  br i1 %449, label %450, label %454

450:                                              ; preds = %446
  store i64 1, ptr %82, align 8, !tbaa !9
  %451 = load double, ptr %69, align 8, !tbaa !11
  %452 = load double, ptr %67, align 8, !tbaa !11
  %453 = fdiv double %451, %452
  store double %453, ptr %75, align 8, !tbaa !11
  br label %463

454:                                              ; preds = %446, %433
  %455 = load double, ptr %67, align 8, !tbaa !11
  %456 = load double, ptr %70, align 8, !tbaa !11
  %457 = fcmp ogt double %455, %456
  br i1 %457, label %458, label %462

458:                                              ; preds = %454
  store i64 1, ptr %82, align 8, !tbaa !9
  %459 = load double, ptr %70, align 8, !tbaa !11
  %460 = load double, ptr %67, align 8, !tbaa !11
  %461 = fdiv double %459, %460
  store double %461, ptr %75, align 8, !tbaa !11
  br label %462

462:                                              ; preds = %458, %454
  br label %463

463:                                              ; preds = %462, %450
  %464 = load i64, ptr %82, align 8, !tbaa !9
  %465 = icmp eq i64 %464, 1
  br i1 %465, label %466, label %513

466:                                              ; preds = %463
  %467 = load i64, ptr %78, align 8, !tbaa !9
  %468 = icmp ne i64 %467, 0
  br i1 %468, label %469, label %480

469:                                              ; preds = %466
  %470 = load ptr, ptr %29, align 8, !tbaa !5
  %471 = load ptr, ptr %29, align 8, !tbaa !5
  %472 = load ptr, ptr %28, align 8, !tbaa !5
  %473 = load ptr, ptr %28, align 8, !tbaa !5
  %474 = load ptr, ptr %30, align 8, !tbaa !5
  %475 = load i64, ptr %49, align 8, !tbaa !9
  %476 = getelementptr inbounds %struct.doublecomplex, ptr %474, i64 %475
  %477 = load ptr, ptr %31, align 8, !tbaa !5
  %478 = load ptr, ptr %47, align 8, !tbaa !5
  %479 = call i32 @zlascl_(ptr noundef @.str.10, ptr noundef %470, ptr noundef %471, ptr noundef @c_b16, ptr noundef %75, ptr noundef %472, ptr noundef %473, ptr noundef %476, ptr noundef %477, ptr noundef %478)
  br label %491

480:                                              ; preds = %466
  %481 = load ptr, ptr %29, align 8, !tbaa !5
  %482 = load ptr, ptr %29, align 8, !tbaa !5
  %483 = load ptr, ptr %28, align 8, !tbaa !5
  %484 = load ptr, ptr %28, align 8, !tbaa !5
  %485 = load ptr, ptr %30, align 8, !tbaa !5
  %486 = load i64, ptr %49, align 8, !tbaa !9
  %487 = getelementptr inbounds %struct.doublecomplex, ptr %485, i64 %486
  %488 = load ptr, ptr %31, align 8, !tbaa !5
  %489 = load ptr, ptr %47, align 8, !tbaa !5
  %490 = call i32 @zlascl_(ptr noundef @.str.11, ptr noundef %481, ptr noundef %482, ptr noundef @c_b16, ptr noundef %75, ptr noundef %483, ptr noundef %484, ptr noundef %487, ptr noundef %488, ptr noundef %489)
  br label %491

491:                                              ; preds = %480, %469
  %492 = load ptr, ptr %38, align 8, !tbaa !5
  %493 = load double, ptr %492, align 8, !tbaa !11
  %494 = fcmp ogt double %493, 0.000000e+00
  br i1 %494, label %495, label %500

495:                                              ; preds = %491
  %496 = load ptr, ptr %38, align 8, !tbaa !5
  %497 = load double, ptr %496, align 8, !tbaa !11
  %498 = load double, ptr %75, align 8, !tbaa !11
  %499 = fmul double %497, %498
  store double %499, ptr %86, align 8, !tbaa !11
  br label %500

500:                                              ; preds = %495, %491
  %501 = load i64, ptr %84, align 8, !tbaa !9
  %502 = icmp ne i64 %501, 0
  br i1 %502, label %503, label %512

503:                                              ; preds = %500
  %504 = load ptr, ptr %34, align 8, !tbaa !5
  %505 = load double, ptr %504, align 8, !tbaa !11
  %506 = load double, ptr %75, align 8, !tbaa !11
  %507 = fmul double %505, %506
  store double %507, ptr %62, align 8, !tbaa !11
  %508 = load ptr, ptr %35, align 8, !tbaa !5
  %509 = load double, ptr %508, align 8, !tbaa !11
  %510 = load double, ptr %75, align 8, !tbaa !11
  %511 = fmul double %509, %510
  store double %511, ptr %63, align 8, !tbaa !11
  br label %512

512:                                              ; preds = %503, %500
  br label %513

513:                                              ; preds = %512, %463
  store i64 1, ptr %65, align 8, !tbaa !9
  %514 = load i64, ptr %65, align 8, !tbaa !9
  %515 = load ptr, ptr %28, align 8, !tbaa !5
  %516 = load i64, ptr %515, align 8, !tbaa !9
  %517 = add nsw i64 %514, %516
  store i64 %517, ptr %66, align 8, !tbaa !9
  %518 = load i64, ptr %66, align 8, !tbaa !9
  %519 = load ptr, ptr %28, align 8, !tbaa !5
  %520 = load i64, ptr %519, align 8, !tbaa !9
  %521 = add nsw i64 %518, %520
  store i64 %521, ptr %90, align 8, !tbaa !9
  store i64 1, ptr %91, align 8, !tbaa !9
  %522 = load ptr, ptr %25, align 8, !tbaa !5
  %523 = load ptr, ptr %27, align 8, !tbaa !5
  %524 = load ptr, ptr %28, align 8, !tbaa !5
  %525 = load ptr, ptr %29, align 8, !tbaa !5
  %526 = load ptr, ptr %30, align 8, !tbaa !5
  %527 = load i64, ptr %49, align 8, !tbaa !9
  %528 = getelementptr inbounds %struct.doublecomplex, ptr %526, i64 %527
  %529 = load ptr, ptr %31, align 8, !tbaa !5
  %530 = load ptr, ptr %44, align 8, !tbaa !5
  %531 = load i64, ptr %65, align 8, !tbaa !9
  %532 = getelementptr inbounds double, ptr %530, i64 %531
  %533 = load ptr, ptr %44, align 8, !tbaa !5
  %534 = load i64, ptr %66, align 8, !tbaa !9
  %535 = getelementptr inbounds double, ptr %533, i64 %534
  %536 = load ptr, ptr %32, align 8, !tbaa !5
  %537 = load i64, ptr %51, align 8, !tbaa !9
  %538 = getelementptr inbounds %struct.doublecomplex, ptr %536, i64 %537
  %539 = load ptr, ptr %33, align 8, !tbaa !5
  %540 = load ptr, ptr %43, align 8, !tbaa !5
  %541 = load i64, ptr %91, align 8, !tbaa !9
  %542 = getelementptr inbounds %struct.doublecomplex, ptr %540, i64 %541
  %543 = call i32 @zhbtrd_(ptr noundef %522, ptr noundef %523, ptr noundef %524, ptr noundef %525, ptr noundef %528, ptr noundef %529, ptr noundef %532, ptr noundef %535, ptr noundef %538, ptr noundef %539, ptr noundef %542, ptr noundef %76)
  store i64 0, ptr %71, align 8, !tbaa !9
  %544 = load i64, ptr %81, align 8, !tbaa !9
  %545 = icmp ne i64 %544, 0
  br i1 %545, label %546, label %558

546:                                              ; preds = %513
  %547 = load ptr, ptr %36, align 8, !tbaa !5
  %548 = load i64, ptr %547, align 8, !tbaa !9
  %549 = icmp eq i64 %548, 1
  br i1 %549, label %550, label %557

550:                                              ; preds = %546
  %551 = load ptr, ptr %37, align 8, !tbaa !5
  %552 = load i64, ptr %551, align 8, !tbaa !9
  %553 = load ptr, ptr %28, align 8, !tbaa !5
  %554 = load i64, ptr %553, align 8, !tbaa !9
  %555 = icmp eq i64 %552, %554
  br i1 %555, label %556, label %557

556:                                              ; preds = %550
  store i64 1, ptr %71, align 8, !tbaa !9
  br label %557

557:                                              ; preds = %556, %550, %546
  br label %558

558:                                              ; preds = %557, %513
  %559 = load i64, ptr %80, align 8, !tbaa !9
  %560 = icmp ne i64 %559, 0
  br i1 %560, label %564, label %561

561:                                              ; preds = %558
  %562 = load i64, ptr %71, align 8, !tbaa !9
  %563 = icmp ne i64 %562, 0
  br i1 %563, label %564, label %669

564:                                              ; preds = %561, %558
  %565 = load ptr, ptr %38, align 8, !tbaa !5
  %566 = load double, ptr %565, align 8, !tbaa !11
  %567 = fcmp ole double %566, 0.000000e+00
  br i1 %567, label %568, label %669

568:                                              ; preds = %564
  %569 = load ptr, ptr %28, align 8, !tbaa !5
  %570 = load ptr, ptr %44, align 8, !tbaa !5
  %571 = load i64, ptr %65, align 8, !tbaa !9
  %572 = getelementptr inbounds double, ptr %570, i64 %571
  %573 = load ptr, ptr %40, align 8, !tbaa !5
  %574 = getelementptr inbounds double, ptr %573, i64 1
  %575 = call i32 @f2c_dcopy(ptr noundef %569, ptr noundef %572, ptr noundef @c__1, ptr noundef %574, ptr noundef @c__1)
  %576 = load i64, ptr %90, align 8, !tbaa !9
  %577 = load ptr, ptr %28, align 8, !tbaa !5
  %578 = load i64, ptr %577, align 8, !tbaa !9
  %579 = shl i64 %578, 1
  %580 = add nsw i64 %576, %579
  store i64 %580, ptr %74, align 8, !tbaa !9
  %581 = load i64, ptr %79, align 8, !tbaa !9
  %582 = icmp ne i64 %581, 0
  br i1 %582, label %602, label %583

583:                                              ; preds = %568
  %584 = load ptr, ptr %28, align 8, !tbaa !5
  %585 = load i64, ptr %584, align 8, !tbaa !9
  %586 = sub nsw i64 %585, 1
  store i64 %586, ptr %54, align 8, !tbaa !9
  %587 = load ptr, ptr %44, align 8, !tbaa !5
  %588 = load i64, ptr %66, align 8, !tbaa !9
  %589 = getelementptr inbounds double, ptr %587, i64 %588
  %590 = load ptr, ptr %44, align 8, !tbaa !5
  %591 = load i64, ptr %74, align 8, !tbaa !9
  %592 = getelementptr inbounds double, ptr %590, i64 %591
  %593 = call i32 @f2c_dcopy(ptr noundef %54, ptr noundef %589, ptr noundef @c__1, ptr noundef %592, ptr noundef @c__1)
  %594 = load ptr, ptr %28, align 8, !tbaa !5
  %595 = load ptr, ptr %40, align 8, !tbaa !5
  %596 = getelementptr inbounds double, ptr %595, i64 1
  %597 = load ptr, ptr %44, align 8, !tbaa !5
  %598 = load i64, ptr %74, align 8, !tbaa !9
  %599 = getelementptr inbounds double, ptr %597, i64 %598
  %600 = load ptr, ptr %47, align 8, !tbaa !5
  %601 = call i32 @dsterf_(ptr noundef %594, ptr noundef %596, ptr noundef %599, ptr noundef %600)
  br label %659

602:                                              ; preds = %568
  %603 = load ptr, ptr %28, align 8, !tbaa !5
  %604 = load ptr, ptr %28, align 8, !tbaa !5
  %605 = load ptr, ptr %32, align 8, !tbaa !5
  %606 = load i64, ptr %51, align 8, !tbaa !9
  %607 = getelementptr inbounds %struct.doublecomplex, ptr %605, i64 %606
  %608 = load ptr, ptr %33, align 8, !tbaa !5
  %609 = load ptr, ptr %41, align 8, !tbaa !5
  %610 = load i64, ptr %53, align 8, !tbaa !9
  %611 = getelementptr inbounds %struct.doublecomplex, ptr %609, i64 %610
  %612 = load ptr, ptr %42, align 8, !tbaa !5
  %613 = call i32 @zlacpy_(ptr noundef @.str.1, ptr noundef %603, ptr noundef %604, ptr noundef %607, ptr noundef %608, ptr noundef %611, ptr noundef %612)
  %614 = load ptr, ptr %28, align 8, !tbaa !5
  %615 = load i64, ptr %614, align 8, !tbaa !9
  %616 = sub nsw i64 %615, 1
  store i64 %616, ptr %54, align 8, !tbaa !9
  %617 = load ptr, ptr %44, align 8, !tbaa !5
  %618 = load i64, ptr %66, align 8, !tbaa !9
  %619 = getelementptr inbounds double, ptr %617, i64 %618
  %620 = load ptr, ptr %44, align 8, !tbaa !5
  %621 = load i64, ptr %74, align 8, !tbaa !9
  %622 = getelementptr inbounds double, ptr %620, i64 %621
  %623 = call i32 @f2c_dcopy(ptr noundef %54, ptr noundef %619, ptr noundef @c__1, ptr noundef %622, ptr noundef @c__1)
  %624 = load ptr, ptr %25, align 8, !tbaa !5
  %625 = load ptr, ptr %28, align 8, !tbaa !5
  %626 = load ptr, ptr %40, align 8, !tbaa !5
  %627 = getelementptr inbounds double, ptr %626, i64 1
  %628 = load ptr, ptr %44, align 8, !tbaa !5
  %629 = load i64, ptr %74, align 8, !tbaa !9
  %630 = getelementptr inbounds double, ptr %628, i64 %629
  %631 = load ptr, ptr %41, align 8, !tbaa !5
  %632 = load i64, ptr %53, align 8, !tbaa !9
  %633 = getelementptr inbounds %struct.doublecomplex, ptr %631, i64 %632
  %634 = load ptr, ptr %42, align 8, !tbaa !5
  %635 = load ptr, ptr %44, align 8, !tbaa !5
  %636 = load i64, ptr %90, align 8, !tbaa !9
  %637 = getelementptr inbounds double, ptr %635, i64 %636
  %638 = load ptr, ptr %47, align 8, !tbaa !5
  %639 = call i32 @zsteqr_(ptr noundef %624, ptr noundef %625, ptr noundef %627, ptr noundef %630, ptr noundef %633, ptr noundef %634, ptr noundef %637, ptr noundef %638)
  %640 = load ptr, ptr %47, align 8, !tbaa !5
  %641 = load i64, ptr %640, align 8, !tbaa !9
  %642 = icmp eq i64 %641, 0
  br i1 %642, label %643, label %658

643:                                              ; preds = %602
  %644 = load ptr, ptr %28, align 8, !tbaa !5
  %645 = load i64, ptr %644, align 8, !tbaa !9
  store i64 %645, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %58, align 8, !tbaa !9
  br label %646

646:                                              ; preds = %654, %643
  %647 = load i64, ptr %58, align 8, !tbaa !9
  %648 = load i64, ptr %54, align 8, !tbaa !9
  %649 = icmp sle i64 %647, %648
  br i1 %649, label %650, label %657

650:                                              ; preds = %646
  %651 = load ptr, ptr %46, align 8, !tbaa !5
  %652 = load i64, ptr %58, align 8, !tbaa !9
  %653 = getelementptr inbounds i64, ptr %651, i64 %652
  store i64 0, ptr %653, align 8, !tbaa !9
  br label %654

654:                                              ; preds = %650
  %655 = load i64, ptr %58, align 8, !tbaa !9
  %656 = add nsw i64 %655, 1
  store i64 %656, ptr %58, align 8, !tbaa !9
  br label %646, !llvm.loop !16

657:                                              ; preds = %646
  br label %658

658:                                              ; preds = %657, %602
  br label %659

659:                                              ; preds = %658, %583
  %660 = load ptr, ptr %47, align 8, !tbaa !5
  %661 = load i64, ptr %660, align 8, !tbaa !9
  %662 = icmp eq i64 %661, 0
  br i1 %662, label %663, label %667

663:                                              ; preds = %659
  %664 = load ptr, ptr %28, align 8, !tbaa !5
  %665 = load i64, ptr %664, align 8, !tbaa !9
  %666 = load ptr, ptr %39, align 8, !tbaa !5
  store i64 %665, ptr %666, align 8, !tbaa !9
  br label %783

667:                                              ; preds = %659
  %668 = load ptr, ptr %47, align 8, !tbaa !5
  store i64 0, ptr %668, align 8, !tbaa !9
  br label %669

669:                                              ; preds = %667, %564, %561
  %670 = load i64, ptr %79, align 8, !tbaa !9
  %671 = icmp ne i64 %670, 0
  br i1 %671, label %672, label %674

672:                                              ; preds = %669
  %673 = getelementptr inbounds [1 x i8], ptr %77, i64 0, i64 0
  store i8 66, ptr %673, align 1, !tbaa !18
  br label %676

674:                                              ; preds = %669
  %675 = getelementptr inbounds [1 x i8], ptr %77, i64 0, i64 0
  store i8 69, ptr %675, align 1, !tbaa !18
  br label %676

676:                                              ; preds = %674, %672
  store i64 1, ptr %83, align 8, !tbaa !9
  %677 = load i64, ptr %83, align 8, !tbaa !9
  %678 = load ptr, ptr %28, align 8, !tbaa !5
  %679 = load i64, ptr %678, align 8, !tbaa !9
  %680 = add nsw i64 %677, %679
  store i64 %680, ptr %89, align 8, !tbaa !9
  %681 = load i64, ptr %89, align 8, !tbaa !9
  %682 = load ptr, ptr %28, align 8, !tbaa !5
  %683 = load i64, ptr %682, align 8, !tbaa !9
  %684 = add nsw i64 %681, %683
  store i64 %684, ptr %88, align 8, !tbaa !9
  %685 = load ptr, ptr %26, align 8, !tbaa !5
  %686 = getelementptr inbounds [1 x i8], ptr %77, i64 0, i64 0
  %687 = load ptr, ptr %28, align 8, !tbaa !5
  %688 = load ptr, ptr %36, align 8, !tbaa !5
  %689 = load ptr, ptr %37, align 8, !tbaa !5
  %690 = load ptr, ptr %44, align 8, !tbaa !5
  %691 = load i64, ptr %65, align 8, !tbaa !9
  %692 = getelementptr inbounds double, ptr %690, i64 %691
  %693 = load ptr, ptr %44, align 8, !tbaa !5
  %694 = load i64, ptr %66, align 8, !tbaa !9
  %695 = getelementptr inbounds double, ptr %693, i64 %694
  %696 = load ptr, ptr %39, align 8, !tbaa !5
  %697 = load ptr, ptr %40, align 8, !tbaa !5
  %698 = getelementptr inbounds double, ptr %697, i64 1
  %699 = load ptr, ptr %45, align 8, !tbaa !5
  %700 = load i64, ptr %83, align 8, !tbaa !9
  %701 = getelementptr inbounds i64, ptr %699, i64 %700
  %702 = load ptr, ptr %45, align 8, !tbaa !5
  %703 = load i64, ptr %89, align 8, !tbaa !9
  %704 = getelementptr inbounds i64, ptr %702, i64 %703
  %705 = load ptr, ptr %44, align 8, !tbaa !5
  %706 = load i64, ptr %90, align 8, !tbaa !9
  %707 = getelementptr inbounds double, ptr %705, i64 %706
  %708 = load ptr, ptr %45, align 8, !tbaa !5
  %709 = load i64, ptr %88, align 8, !tbaa !9
  %710 = getelementptr inbounds i64, ptr %708, i64 %709
  %711 = load ptr, ptr %47, align 8, !tbaa !5
  %712 = call i32 @dstebz_(ptr noundef %685, ptr noundef %686, ptr noundef %687, ptr noundef %62, ptr noundef %63, ptr noundef %688, ptr noundef %689, ptr noundef %86, ptr noundef %692, ptr noundef %695, ptr noundef %696, ptr noundef %92, ptr noundef %698, ptr noundef %701, ptr noundef %704, ptr noundef %707, ptr noundef %710, ptr noundef %711)
  %713 = load i64, ptr %79, align 8, !tbaa !9
  %714 = icmp ne i64 %713, 0
  br i1 %714, label %715, label %782

715:                                              ; preds = %676
  %716 = load ptr, ptr %28, align 8, !tbaa !5
  %717 = load ptr, ptr %44, align 8, !tbaa !5
  %718 = load i64, ptr %65, align 8, !tbaa !9
  %719 = getelementptr inbounds double, ptr %717, i64 %718
  %720 = load ptr, ptr %44, align 8, !tbaa !5
  %721 = load i64, ptr %66, align 8, !tbaa !9
  %722 = getelementptr inbounds double, ptr %720, i64 %721
  %723 = load ptr, ptr %39, align 8, !tbaa !5
  %724 = load ptr, ptr %40, align 8, !tbaa !5
  %725 = getelementptr inbounds double, ptr %724, i64 1
  %726 = load ptr, ptr %45, align 8, !tbaa !5
  %727 = load i64, ptr %83, align 8, !tbaa !9
  %728 = getelementptr inbounds i64, ptr %726, i64 %727
  %729 = load ptr, ptr %45, align 8, !tbaa !5
  %730 = load i64, ptr %89, align 8, !tbaa !9
  %731 = getelementptr inbounds i64, ptr %729, i64 %730
  %732 = load ptr, ptr %41, align 8, !tbaa !5
  %733 = load i64, ptr %53, align 8, !tbaa !9
  %734 = getelementptr inbounds %struct.doublecomplex, ptr %732, i64 %733
  %735 = load ptr, ptr %42, align 8, !tbaa !5
  %736 = load ptr, ptr %44, align 8, !tbaa !5
  %737 = load i64, ptr %90, align 8, !tbaa !9
  %738 = getelementptr inbounds double, ptr %736, i64 %737
  %739 = load ptr, ptr %45, align 8, !tbaa !5
  %740 = load i64, ptr %88, align 8, !tbaa !9
  %741 = getelementptr inbounds i64, ptr %739, i64 %740
  %742 = load ptr, ptr %46, align 8, !tbaa !5
  %743 = getelementptr inbounds i64, ptr %742, i64 1
  %744 = load ptr, ptr %47, align 8, !tbaa !5
  %745 = call i32 @zstein_(ptr noundef %716, ptr noundef %719, ptr noundef %722, ptr noundef %723, ptr noundef %725, ptr noundef %728, ptr noundef %731, ptr noundef %734, ptr noundef %735, ptr noundef %738, ptr noundef %741, ptr noundef %743, ptr noundef %744)
  %746 = load ptr, ptr %39, align 8, !tbaa !5
  %747 = load i64, ptr %746, align 8, !tbaa !9
  store i64 %747, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %748

748:                                              ; preds = %778, %715
  %749 = load i64, ptr %59, align 8, !tbaa !9
  %750 = load i64, ptr %54, align 8, !tbaa !9
  %751 = icmp sle i64 %749, %750
  br i1 %751, label %752, label %781

752:                                              ; preds = %748
  %753 = load ptr, ptr %28, align 8, !tbaa !5
  %754 = load ptr, ptr %41, align 8, !tbaa !5
  %755 = load i64, ptr %59, align 8, !tbaa !9
  %756 = load i64, ptr %52, align 8, !tbaa !9
  %757 = mul nsw i64 %755, %756
  %758 = add nsw i64 %757, 1
  %759 = getelementptr inbounds %struct.doublecomplex, ptr %754, i64 %758
  %760 = load ptr, ptr %43, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.doublecomplex, ptr %760, i64 1
  %762 = call i32 @f2c_zcopy(ptr noundef %753, ptr noundef %759, ptr noundef @c__1, ptr noundef %761, ptr noundef @c__1)
  %763 = load ptr, ptr %28, align 8, !tbaa !5
  %764 = load ptr, ptr %28, align 8, !tbaa !5
  %765 = load ptr, ptr %32, align 8, !tbaa !5
  %766 = load i64, ptr %51, align 8, !tbaa !9
  %767 = getelementptr inbounds %struct.doublecomplex, ptr %765, i64 %766
  %768 = load ptr, ptr %33, align 8, !tbaa !5
  %769 = load ptr, ptr %43, align 8, !tbaa !5
  %770 = getelementptr inbounds %struct.doublecomplex, ptr %769, i64 1
  %771 = load ptr, ptr %41, align 8, !tbaa !5
  %772 = load i64, ptr %59, align 8, !tbaa !9
  %773 = load i64, ptr %52, align 8, !tbaa !9
  %774 = mul nsw i64 %772, %773
  %775 = add nsw i64 %774, 1
  %776 = getelementptr inbounds %struct.doublecomplex, ptr %771, i64 %775
  %777 = call i32 @f2c_zgemv(ptr noundef @.str.4, ptr noundef %763, ptr noundef %764, ptr noundef @c_b2, ptr noundef %767, ptr noundef %768, ptr noundef %770, ptr noundef @c__1, ptr noundef @c_b1, ptr noundef %776, ptr noundef @c__1)
  br label %778

778:                                              ; preds = %752
  %779 = load i64, ptr %59, align 8, !tbaa !9
  %780 = add nsw i64 %779, 1
  store i64 %780, ptr %59, align 8, !tbaa !9
  br label %748, !llvm.loop !19

781:                                              ; preds = %748
  br label %782

782:                                              ; preds = %781, %676
  br label %783

783:                                              ; preds = %782, %663
  %784 = load i64, ptr %82, align 8, !tbaa !9
  %785 = icmp eq i64 %784, 1
  br i1 %785, label %786, label %803

786:                                              ; preds = %783
  %787 = load ptr, ptr %47, align 8, !tbaa !5
  %788 = load i64, ptr %787, align 8, !tbaa !9
  %789 = icmp eq i64 %788, 0
  br i1 %789, label %790, label %793

790:                                              ; preds = %786
  %791 = load ptr, ptr %39, align 8, !tbaa !5
  %792 = load i64, ptr %791, align 8, !tbaa !9
  store i64 %792, ptr %68, align 8, !tbaa !9
  br label %797

793:                                              ; preds = %786
  %794 = load ptr, ptr %47, align 8, !tbaa !5
  %795 = load i64, ptr %794, align 8, !tbaa !9
  %796 = sub nsw i64 %795, 1
  store i64 %796, ptr %68, align 8, !tbaa !9
  br label %797

797:                                              ; preds = %793, %790
  %798 = load double, ptr %75, align 8, !tbaa !11
  %799 = fdiv double 1.000000e+00, %798
  store double %799, ptr %56, align 8, !tbaa !11
  %800 = load ptr, ptr %40, align 8, !tbaa !5
  %801 = getelementptr inbounds double, ptr %800, i64 1
  %802 = call i32 @f2c_dscal(ptr noundef %68, ptr noundef %56, ptr noundef %801, ptr noundef @c__1)
  br label %803

803:                                              ; preds = %797, %783
  %804 = load i64, ptr %79, align 8, !tbaa !9
  %805 = icmp ne i64 %804, 0
  br i1 %805, label %806, label %925

806:                                              ; preds = %803
  %807 = load ptr, ptr %39, align 8, !tbaa !5
  %808 = load i64, ptr %807, align 8, !tbaa !9
  %809 = sub nsw i64 %808, 1
  store i64 %809, ptr %54, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %810

810:                                              ; preds = %921, %806
  %811 = load i64, ptr %59, align 8, !tbaa !9
  %812 = load i64, ptr %54, align 8, !tbaa !9
  %813 = icmp sle i64 %811, %812
  br i1 %813, label %814, label %924

814:                                              ; preds = %810
  store i64 0, ptr %58, align 8, !tbaa !9
  %815 = load ptr, ptr %40, align 8, !tbaa !5
  %816 = load i64, ptr %59, align 8, !tbaa !9
  %817 = getelementptr inbounds double, ptr %815, i64 %816
  %818 = load double, ptr %817, align 8, !tbaa !11
  store double %818, ptr %64, align 8, !tbaa !11
  %819 = load ptr, ptr %39, align 8, !tbaa !5
  %820 = load i64, ptr %819, align 8, !tbaa !9
  store i64 %820, ptr %55, align 8, !tbaa !9
  %821 = load i64, ptr %59, align 8, !tbaa !9
  %822 = add nsw i64 %821, 1
  store i64 %822, ptr %60, align 8, !tbaa !9
  br label %823

823:                                              ; preds = %841, %814
  %824 = load i64, ptr %60, align 8, !tbaa !9
  %825 = load i64, ptr %55, align 8, !tbaa !9
  %826 = icmp sle i64 %824, %825
  br i1 %826, label %827, label %844

827:                                              ; preds = %823
  %828 = load ptr, ptr %40, align 8, !tbaa !5
  %829 = load i64, ptr %60, align 8, !tbaa !9
  %830 = getelementptr inbounds double, ptr %828, i64 %829
  %831 = load double, ptr %830, align 8, !tbaa !11
  %832 = load double, ptr %64, align 8, !tbaa !11
  %833 = fcmp olt double %831, %832
  br i1 %833, label %834, label %840

834:                                              ; preds = %827
  %835 = load i64, ptr %60, align 8, !tbaa !9
  store i64 %835, ptr %58, align 8, !tbaa !9
  %836 = load ptr, ptr %40, align 8, !tbaa !5
  %837 = load i64, ptr %60, align 8, !tbaa !9
  %838 = getelementptr inbounds double, ptr %836, i64 %837
  %839 = load double, ptr %838, align 8, !tbaa !11
  store double %839, ptr %64, align 8, !tbaa !11
  br label %840

840:                                              ; preds = %834, %827
  br label %841

841:                                              ; preds = %840
  %842 = load i64, ptr %60, align 8, !tbaa !9
  %843 = add nsw i64 %842, 1
  store i64 %843, ptr %60, align 8, !tbaa !9
  br label %823, !llvm.loop !20

844:                                              ; preds = %823
  %845 = load i64, ptr %58, align 8, !tbaa !9
  %846 = icmp ne i64 %845, 0
  br i1 %846, label %847, label %920

847:                                              ; preds = %844
  %848 = load ptr, ptr %45, align 8, !tbaa !5
  %849 = load i64, ptr %83, align 8, !tbaa !9
  %850 = load i64, ptr %58, align 8, !tbaa !9
  %851 = add nsw i64 %849, %850
  %852 = sub nsw i64 %851, 1
  %853 = getelementptr inbounds i64, ptr %848, i64 %852
  %854 = load i64, ptr %853, align 8, !tbaa !9
  store i64 %854, ptr %73, align 8, !tbaa !9
  %855 = load ptr, ptr %40, align 8, !tbaa !5
  %856 = load i64, ptr %59, align 8, !tbaa !9
  %857 = getelementptr inbounds double, ptr %855, i64 %856
  %858 = load double, ptr %857, align 8, !tbaa !11
  %859 = load ptr, ptr %40, align 8, !tbaa !5
  %860 = load i64, ptr %58, align 8, !tbaa !9
  %861 = getelementptr inbounds double, ptr %859, i64 %860
  store double %858, ptr %861, align 8, !tbaa !11
  %862 = load ptr, ptr %45, align 8, !tbaa !5
  %863 = load i64, ptr %83, align 8, !tbaa !9
  %864 = load i64, ptr %59, align 8, !tbaa !9
  %865 = add nsw i64 %863, %864
  %866 = sub nsw i64 %865, 1
  %867 = getelementptr inbounds i64, ptr %862, i64 %866
  %868 = load i64, ptr %867, align 8, !tbaa !9
  %869 = load ptr, ptr %45, align 8, !tbaa !5
  %870 = load i64, ptr %83, align 8, !tbaa !9
  %871 = load i64, ptr %58, align 8, !tbaa !9
  %872 = add nsw i64 %870, %871
  %873 = sub nsw i64 %872, 1
  %874 = getelementptr inbounds i64, ptr %869, i64 %873
  store i64 %868, ptr %874, align 8, !tbaa !9
  %875 = load double, ptr %64, align 8, !tbaa !11
  %876 = load ptr, ptr %40, align 8, !tbaa !5
  %877 = load i64, ptr %59, align 8, !tbaa !9
  %878 = getelementptr inbounds double, ptr %876, i64 %877
  store double %875, ptr %878, align 8, !tbaa !11
  %879 = load i64, ptr %73, align 8, !tbaa !9
  %880 = load ptr, ptr %45, align 8, !tbaa !5
  %881 = load i64, ptr %83, align 8, !tbaa !9
  %882 = load i64, ptr %59, align 8, !tbaa !9
  %883 = add nsw i64 %881, %882
  %884 = sub nsw i64 %883, 1
  %885 = getelementptr inbounds i64, ptr %880, i64 %884
  store i64 %879, ptr %885, align 8, !tbaa !9
  %886 = load ptr, ptr %28, align 8, !tbaa !5
  %887 = load ptr, ptr %41, align 8, !tbaa !5
  %888 = load i64, ptr %58, align 8, !tbaa !9
  %889 = load i64, ptr %52, align 8, !tbaa !9
  %890 = mul nsw i64 %888, %889
  %891 = add nsw i64 %890, 1
  %892 = getelementptr inbounds %struct.doublecomplex, ptr %887, i64 %891
  %893 = load ptr, ptr %41, align 8, !tbaa !5
  %894 = load i64, ptr %59, align 8, !tbaa !9
  %895 = load i64, ptr %52, align 8, !tbaa !9
  %896 = mul nsw i64 %894, %895
  %897 = add nsw i64 %896, 1
  %898 = getelementptr inbounds %struct.doublecomplex, ptr %893, i64 %897
  %899 = call i32 @f2c_zswap(ptr noundef %886, ptr noundef %892, ptr noundef @c__1, ptr noundef %898, ptr noundef @c__1)
  %900 = load ptr, ptr %47, align 8, !tbaa !5
  %901 = load i64, ptr %900, align 8, !tbaa !9
  %902 = icmp ne i64 %901, 0
  br i1 %902, label %903, label %919

903:                                              ; preds = %847
  %904 = load ptr, ptr %46, align 8, !tbaa !5
  %905 = load i64, ptr %58, align 8, !tbaa !9
  %906 = getelementptr inbounds i64, ptr %904, i64 %905
  %907 = load i64, ptr %906, align 8, !tbaa !9
  store i64 %907, ptr %73, align 8, !tbaa !9
  %908 = load ptr, ptr %46, align 8, !tbaa !5
  %909 = load i64, ptr %59, align 8, !tbaa !9
  %910 = getelementptr inbounds i64, ptr %908, i64 %909
  %911 = load i64, ptr %910, align 8, !tbaa !9
  %912 = load ptr, ptr %46, align 8, !tbaa !5
  %913 = load i64, ptr %58, align 8, !tbaa !9
  %914 = getelementptr inbounds i64, ptr %912, i64 %913
  store i64 %911, ptr %914, align 8, !tbaa !9
  %915 = load i64, ptr %73, align 8, !tbaa !9
  %916 = load ptr, ptr %46, align 8, !tbaa !5
  %917 = load i64, ptr %59, align 8, !tbaa !9
  %918 = getelementptr inbounds i64, ptr %916, i64 %917
  store i64 %915, ptr %918, align 8, !tbaa !9
  br label %919

919:                                              ; preds = %903, %847
  br label %920

920:                                              ; preds = %919, %844
  br label %921

921:                                              ; preds = %920
  %922 = load i64, ptr %59, align 8, !tbaa !9
  %923 = add nsw i64 %922, 1
  store i64 %923, ptr %59, align 8, !tbaa !9
  br label %810, !llvm.loop !21

924:                                              ; preds = %810
  br label %925

925:                                              ; preds = %924, %803
  store i32 0, ptr %24, align 4
  store i32 1, ptr %94, align 4
  br label %926

926:                                              ; preds = %925, %397, %314, %304
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #4
  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 1, 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 8, ptr %73) #4
  call void @llvm.lifetime.end.p0(i64 16, 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
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  %927 = load i32, ptr %24, align 4
  ret i32 %927
}

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

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

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

declare double @dlamch_(ptr noundef) #2

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

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

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

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

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

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

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

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

declare i32 @dstebz_(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) #2

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

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

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

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "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 = !{!14, !12, i64 0}
!14 = !{!"", !12, i64 0, !12, i64 8}
!15 = !{!14, !12, i64 8}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!7, !7, i64 0}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !17}
!21 = distinct !{!21, !17}


; 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 [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b16 = external hidden global double, align 8
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i64, align 8
@c_b2 = external hidden global %struct.doublecomplex, align 8
@c_b1 = external hidden global %struct.doublecomplex, align 8

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

46:                                               ; preds = %23
  %47 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.4) #6
  %.not376 = icmp eq i64 %47, 0
  br i1 %.not376, label %.thread403.sink.split, label %48

48:                                               ; preds = %46, %23
  %49 = icmp ne i64 %42, 0
  %50 = icmp ne i64 %43, 0
  %or.cond = select i1 %49, i1 true, i1 %50
  %51 = icmp ne i64 %44, 0
  %or.cond3 = select i1 %or.cond, i1 true, i1 %51
  br i1 %or.cond3, label %52, label %.thread403.sink.split

52:                                               ; preds = %48
  %.not377 = icmp eq i64 %45, 0
  br i1 %.not377, label %53, label %55

53:                                               ; preds = %52
  %54 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #6
  %.not378 = icmp eq i64 %54, 0
  br i1 %.not378, label %.thread403.sink.split, label %55

55:                                               ; preds = %53, %52
  %56 = load i64, ptr %3, align 8, !tbaa !5
  %57 = icmp slt i64 %56, 0
  br i1 %57, label %.thread403.sink.split, label %58

58:                                               ; preds = %55
  %59 = load i64, ptr %4, align 8, !tbaa !5
  %60 = icmp slt i64 %59, 0
  br i1 %60, label %.thread403.sink.split, label %61

61:                                               ; preds = %58
  %62 = load i64, ptr %6, align 8, !tbaa !5
  %.not379 = icmp sgt i64 %62, %59
  br i1 %.not379, label %63, label %.thread403.sink.split

63:                                               ; preds = %61
  br i1 %.not, label %64, label %67

64:                                               ; preds = %63
  %65 = load i64, ptr %8, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %56, i64 1)
  %66 = icmp slt i64 %65, %spec.select
  br i1 %66, label %.thread403.sink.split, label %67

67:                                               ; preds = %64, %63
  br i1 %50, label %68, label %73

68:                                               ; preds = %67
  %.not416 = icmp eq i64 %56, 0
  br i1 %.not416, label %82, label %69

69:                                               ; preds = %68
  %70 = load double, ptr %10, align 8, !tbaa !9
  %71 = load double, ptr %9, align 8, !tbaa !9
  %72 = fcmp ugt double %70, %71
  br i1 %72, label %82, label %.thread403.sink.split

73:                                               ; preds = %67
  br i1 %51, label %74, label %82

74:                                               ; preds = %73
  %75 = load i64, ptr %11, align 8, !tbaa !5
  %76 = icmp slt i64 %75, 1
  %spec.select396 = tail call i64 @llvm.umax.i64(i64 %56, i64 1)
  %77 = icmp ugt i64 %75, %spec.select396
  %or.cond418 = or i1 %76, %77
  br i1 %or.cond418, label %.thread403.sink.split, label %78

78:                                               ; preds = %74
  %79 = load i64, ptr %12, align 8, !tbaa !5
  %. = tail call i64 @llvm.umin.i64(i64 %56, i64 %75)
  %80 = icmp slt i64 %79, %.
  %81 = icmp ugt i64 %79, %56
  %or.cond415 = or i1 %80, %81
  br i1 %or.cond415, label %.thread403.sink.split, label %82

82:                                               ; preds = %78, %69, %68, %73
  %.pr = load i64, ptr %22, align 8, !tbaa !5
  %83 = icmp eq i64 %.pr, 0
  br i1 %83, label %84, label %.thread403

84:                                               ; preds = %82
  %85 = load i64, ptr %17, align 8, !tbaa !5
  %86 = icmp slt i64 %85, 1
  %87 = icmp ult i64 %85, %56
  %or.cond444 = and i1 %.not, %87
  %or.cond445 = or i1 %86, %or.cond444
  br i1 %or.cond445, label %.thread403.sink.split, label %.thread

.thread403.sink.split:                            ; preds = %84, %78, %74, %69, %64, %61, %58, %55, %53, %48, %46
  %.sink = phi i64 [ -1, %46 ], [ -2, %48 ], [ -3, %53 ], [ -4, %55 ], [ -5, %58 ], [ -7, %61 ], [ -9, %64 ], [ -11, %69 ], [ -12, %74 ], [ -13, %78 ], [ -18, %84 ]
  store i64 %.sink, ptr %22, align 8, !tbaa !5
  br label %.thread403

.thread403:                                       ; preds = %.thread403.sink.split, %82
  %88 = phi i64 [ %.pr, %82 ], [ %.sink, %.thread403.sink.split ]
  %89 = sub nsw i64 0, %88
  store i64 %89, ptr %24, align 8, !tbaa !5
  %90 = call i32 @xerbla_(ptr noundef nonnull @.str.6, ptr noundef nonnull %24) #6
  br label %.loopexit

.thread:                                          ; preds = %84
  store i64 0, ptr %14, align 8, !tbaa !5
  %91 = load i64, ptr %3, align 8, !tbaa !5
  switch i64 %91, label %105 [
    i64 0, label %.loopexit
    i64 1, label %92
  ]

92:                                               ; preds = %.thread
  store i64 1, ptr %14, align 8, !tbaa !5
  br i1 %.not377, label %93, label %96

93:                                               ; preds = %92
  %94 = load i64, ptr %4, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.doublecomplex, ptr %5, i64 %94
  br label %96

96:                                               ; preds = %92, %93
  %.sroa.0.0.in = phi ptr [ %95, %93 ], [ %5, %92 ]
  %.sroa.0.0 = load double, ptr %.sroa.0.0.in, align 8, !tbaa !11
  %.not395 = icmp eq i64 %43, 0
  br i1 %.not395, label %103, label %97

97:                                               ; preds = %96
  %98 = load double, ptr %9, align 8, !tbaa !9
  %99 = fcmp olt double %98, %.sroa.0.0
  br i1 %99, label %100, label %.thread407

100:                                              ; preds = %97
  %101 = load double, ptr %10, align 8, !tbaa !9
  %102 = fcmp ult double %101, %.sroa.0.0
  br i1 %102, label %.thread407, label %103

.thread407:                                       ; preds = %97, %100
  store i64 0, ptr %14, align 8, !tbaa !5
  br label %.loopexit

103:                                              ; preds = %96, %100
  store double %.sroa.0.0, ptr %15, align 8, !tbaa !9
  br i1 %.not, label %104, label %.loopexit

104:                                              ; preds = %103
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %16, align 8, !tbaa !9
  br label %.loopexit

105:                                              ; preds = %.thread
  %106 = tail call double @dlamch_(ptr noundef nonnull @.str.7) #6
  %107 = tail call double @dlamch_(ptr noundef nonnull @.str.8) #6
  %108 = fdiv double %106, %107
  %109 = fdiv double 1.000000e+00, %108
  %110 = tail call double @sqrt(double noundef %108) #6
  %111 = tail call double @sqrt(double noundef %109) #6
  store double %111, ptr %25, align 8, !tbaa !9
  %112 = tail call double @sqrt(double noundef %106) #6
  %113 = tail call double @sqrt(double noundef %112) #6
  %114 = fdiv double 1.000000e+00, %113
  %115 = fcmp ole double %111, %114
  %116 = select i1 %115, double %111, double %114
  %117 = load double, ptr %13, align 8, !tbaa !9
  store double %117, ptr %32, align 8, !tbaa !9
  %.not382 = icmp eq i64 %43, 0
  br i1 %.not382, label %121, label %118

118:                                              ; preds = %105
  %119 = load double, ptr %9, align 8, !tbaa !9
  %120 = load double, ptr %10, align 8, !tbaa !9
  br label %121

121:                                              ; preds = %105, %118
  %.sink440 = phi double [ %119, %118 ], [ 0.000000e+00, %105 ]
  %storemerge = phi double [ %120, %118 ], [ 0.000000e+00, %105 ]
  store double %.sink440, ptr %26, align 8
  store double %storemerge, ptr %27, align 8, !tbaa !9
  %122 = tail call double @zlanhb_(ptr noundef nonnull @.str.9, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %19) #6
  %123 = fcmp ogt double %122, 0.000000e+00
  %124 = fcmp olt double %122, %110
  %or.cond397 = select i1 %123, i1 %124, i1 false
  br i1 %or.cond397, label %127, label %125

125:                                              ; preds = %121
  %126 = fcmp ogt double %122, %116
  br i1 %126, label %127, label %141

127:                                              ; preds = %125, %121
  %.pn = phi double [ %110, %121 ], [ %116, %125 ]
  %storemerge417 = fdiv double %.pn, %122
  store double %storemerge417, ptr %29, align 8, !tbaa !9
  %.str.11..str.10 = select i1 %.not377, ptr @.str.11, ptr @.str.10
  %128 = call i32 @zlascl_(ptr noundef nonnull %.str.11..str.10, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef nonnull @c_b16, ptr noundef nonnull %29, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %22) #6
  %129 = load double, ptr %13, align 8, !tbaa !9
  %130 = fcmp ogt double %129, 0.000000e+00
  br i1 %130, label %131, label %134

131:                                              ; preds = %127
  %132 = load double, ptr %29, align 8, !tbaa !9
  %133 = fmul double %129, %132
  store double %133, ptr %32, align 8, !tbaa !9
  br label %134

134:                                              ; preds = %131, %127
  br i1 %.not382, label %141, label %135

135:                                              ; preds = %134
  %136 = load double, ptr %9, align 8, !tbaa !9
  %137 = load double, ptr %29, align 8, !tbaa !9
  %138 = fmul double %136, %137
  store double %138, ptr %26, align 8, !tbaa !9
  %139 = load double, ptr %10, align 8, !tbaa !9
  %140 = fmul double %137, %139
  store double %140, ptr %27, align 8, !tbaa !9
  br label %141

141:                                              ; preds = %125, %134, %135
  %142 = phi i1 [ true, %134 ], [ true, %135 ], [ false, %125 ]
  %143 = load i64, ptr %3, align 8, !tbaa !5
  %reass.add = shl i64 %143, 1
  %144 = or disjoint i64 %reass.add, 1
  %145 = getelementptr double, ptr %19, i64 %143
  %146 = call i32 @zhbtrd_(ptr noundef %0, ptr noundef %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %19, ptr noundef %145, ptr noundef %7, ptr noundef %8, ptr noundef %18, ptr noundef nonnull %30) #6
  %.not384 = icmp eq i64 %44, 0
  br i1 %.not384, label %154, label %147

147:                                              ; preds = %141
  %148 = load i64, ptr %11, align 8, !tbaa !5
  %149 = icmp eq i64 %148, 1
  br i1 %149, label %150, label %154

150:                                              ; preds = %147
  %151 = load i64, ptr %12, align 8, !tbaa !5
  %152 = load i64, ptr %3, align 8, !tbaa !5
  %153 = icmp eq i64 %151, %152
  br label %154

154:                                              ; preds = %150, %147, %141
  %155 = phi i1 [ false, %147 ], [ false, %141 ], [ %153, %150 ]
  %or.cond5 = or i1 %49, %155
  br i1 %or.cond5, label %156, label %185

156:                                              ; preds = %154
  %157 = load double, ptr %13, align 8, !tbaa !9
  %158 = fcmp ugt double %157, 0.000000e+00
  br i1 %158, label %185, label %159

159:                                              ; preds = %156
  %160 = call i32 @f2c_dcopy(ptr noundef nonnull %3, ptr noundef %19, ptr noundef nonnull @c__1, ptr noundef %15, ptr noundef nonnull @c__1) #6
  %161 = load i64, ptr %3, align 8, !tbaa !5
  %162 = shl i64 %161, 1
  %163 = add nsw i64 %162, %144
  br i1 %.not, label %169, label %164

164:                                              ; preds = %159
  %165 = add nsw i64 %161, -1
  store i64 %165, ptr %24, align 8, !tbaa !5
  %166 = getelementptr inbounds double, ptr %38, i64 %163
  %167 = call i32 @f2c_dcopy(ptr noundef nonnull %24, ptr noundef %145, ptr noundef nonnull @c__1, ptr noundef nonnull %166, ptr noundef nonnull @c__1) #6
  %168 = call i32 @dsterf_(ptr noundef nonnull %3, ptr noundef %15, ptr noundef nonnull %166, ptr noundef nonnull %22) #6
  br label %.loopexit420

169:                                              ; preds = %159
  %170 = call i32 @zlacpy_(ptr noundef nonnull @.str.1, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %7, ptr noundef %8, ptr noundef %16, ptr noundef nonnull %17) #6
  %171 = load i64, ptr %3, align 8, !tbaa !5
  %172 = add nsw i64 %171, -1
  store i64 %172, ptr %24, align 8, !tbaa !5
  %173 = getelementptr inbounds double, ptr %38, i64 %163
  %174 = call i32 @f2c_dcopy(ptr noundef nonnull %24, ptr noundef %145, ptr noundef nonnull @c__1, ptr noundef nonnull %173, ptr noundef nonnull @c__1) #6
  %175 = getelementptr double, ptr %19, i64 %reass.add
  %176 = call i32 @zsteqr_(ptr noundef %0, ptr noundef nonnull %3, ptr noundef %15, ptr noundef nonnull %173, ptr noundef %16, ptr noundef nonnull %17, ptr noundef %175, ptr noundef nonnull %22) #6
  %177 = load i64, ptr %22, align 8, !tbaa !5
  %178 = icmp eq i64 %177, 0
  br i1 %178, label %179, label %.thread412

179:                                              ; preds = %169
  %180 = load i64, ptr %3, align 8, !tbaa !5
  store i64 %180, ptr %24, align 8, !tbaa !5
  %.not385421 = icmp slt i64 %180, 1
  br i1 %.not385421, label %.loopexit420, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %179
  %181 = shl nuw i64 %180, 3
  call void @llvm.memset.p0.i64(ptr align 8 %21, i8 0, i64 %181, i1 false), !tbaa !5
  br label %.loopexit420

.loopexit420:                                     ; preds = %.lr.ph.preheader, %179, %164
  %.pr411 = load i64, ptr %22, align 8, !tbaa !5
  %182 = icmp eq i64 %.pr411, 0
  br i1 %182, label %183, label %.thread412

183:                                              ; preds = %.loopexit420
  %184 = load i64, ptr %3, align 8, !tbaa !5
  store i64 %184, ptr %14, align 8, !tbaa !5
  br label %.loopexit419

.thread412:                                       ; preds = %169, %.loopexit420
  store i64 0, ptr %22, align 8, !tbaa !5
  br label %185

185:                                              ; preds = %154, %.thread412, %156
  %.399 = select i1 %.not, i8 66, i8 69
  store i8 %.399, ptr %31, align 1, !tbaa !13
  %186 = load i64, ptr %3, align 8, !tbaa !5
  %187 = getelementptr i64, ptr %20, i64 %186
  %188 = getelementptr double, ptr %19, i64 %reass.add
  %.idx = shl i64 %186, 4
  %189 = getelementptr i8, ptr %20, i64 %.idx
  %190 = call i32 @dstebz_(ptr noundef %1, ptr noundef nonnull %31, ptr noundef nonnull %3, ptr noundef nonnull %26, ptr noundef nonnull %27, ptr noundef %11, ptr noundef %12, ptr noundef nonnull %32, ptr noundef %19, ptr noundef %145, ptr noundef nonnull %14, ptr noundef nonnull %33, ptr noundef %15, ptr noundef %20, ptr noundef %187, ptr noundef %188, ptr noundef %189, ptr noundef nonnull %22) #6
  br i1 %.not, label %191, label %.loopexit419

191:                                              ; preds = %185
  %192 = call i32 @zstein_(ptr noundef nonnull %3, ptr noundef %19, ptr noundef %145, ptr noundef nonnull %14, ptr noundef %15, ptr noundef %20, ptr noundef %187, ptr noundef %16, ptr noundef nonnull %17, ptr noundef %188, ptr noundef %189, ptr noundef %21, ptr noundef nonnull %22) #6
  %193 = load i64, ptr %14, align 8, !tbaa !5
  store i64 %193, ptr %24, align 8, !tbaa !5
  %invariant.gep = getelementptr i8, ptr %37, i64 16
  %.not388423 = icmp slt i64 %193, 1
  br i1 %.not388423, label %.loopexit419, label %.lr.ph425

.lr.ph425:                                        ; preds = %191, %.lr.ph425
  %.0355424 = phi i64 [ %197, %.lr.ph425 ], [ 1, %191 ]
  %194 = mul nsw i64 %.0355424, %35
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %194
  %195 = call i32 @f2c_zcopy(ptr noundef nonnull %3, ptr noundef %gep, ptr noundef nonnull @c__1, ptr noundef %18, ptr noundef nonnull @c__1) #6
  %196 = call i32 @f2c_zgemv(ptr noundef nonnull @.str.4, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef nonnull @c_b2, ptr noundef %7, ptr noundef %8, ptr noundef %18, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b1, ptr noundef %gep, ptr noundef nonnull @c__1) #6
  %197 = add nuw nsw i64 %.0355424, 1
  %198 = load i64, ptr %24, align 8, !tbaa !5
  %.not388.not = icmp slt i64 %.0355424, %198
  br i1 %.not388.not, label %.lr.ph425, label %.loopexit419, !llvm.loop !14

.loopexit419:                                     ; preds = %.lr.ph425, %191, %185, %183
  br i1 %142, label %199, label %210

199:                                              ; preds = %.loopexit419
  %200 = load i64, ptr %22, align 8, !tbaa !5
  %201 = icmp eq i64 %200, 0
  br i1 %201, label %202, label %204

202:                                              ; preds = %199
  %203 = load i64, ptr %14, align 8, !tbaa !5
  br label %206

204:                                              ; preds = %199
  %205 = add nsw i64 %200, -1
  br label %206

206:                                              ; preds = %204, %202
  %storemerge389 = phi i64 [ %205, %204 ], [ %203, %202 ]
  store i64 %storemerge389, ptr %28, align 8, !tbaa !5
  %207 = load double, ptr %29, align 8, !tbaa !9
  %208 = fdiv double 1.000000e+00, %207
  store double %208, ptr %25, align 8, !tbaa !9
  %209 = call i32 @f2c_dscal(ptr noundef nonnull %28, ptr noundef nonnull %25, ptr noundef %15, ptr noundef nonnull @c__1) #6
  br label %210

210:                                              ; preds = %206, %.loopexit419
  br i1 %.not, label %211, label %.loopexit

211:                                              ; preds = %210
  %212 = load i64, ptr %14, align 8, !tbaa !5
  %213 = add nsw i64 %212, -1
  store i64 %213, ptr %24, align 8, !tbaa !5
  %invariant.gep432 = getelementptr i8, ptr %37, i64 16
  %.not390436 = icmp slt i64 %212, 2
  br i1 %.not390436, label %.loopexit, label %.lr.ph439

.lr.ph439:                                        ; preds = %211, %._crit_edge.thread
  %.1356437 = phi i64 [ %217, %._crit_edge.thread ], [ 1, %211 ]
  %214 = getelementptr inbounds double, ptr %34, i64 %.1356437
  %215 = load double, ptr %214, align 8, !tbaa !9
  %216 = load i64, ptr %14, align 8, !tbaa !5
  %217 = add nuw nsw i64 %.1356437, 1
  %.not391426.not = icmp slt i64 %.1356437, %216
  br i1 %.not391426.not, label %.lr.ph430, label %._crit_edge.thread

.lr.ph430:                                        ; preds = %.lr.ph439, %.lr.ph430
  %.1429 = phi i64 [ %.2, %.lr.ph430 ], [ 0, %.lr.ph439 ]
  %.0357428 = phi i64 [ %221, %.lr.ph430 ], [ %217, %.lr.ph439 ]
  %.0358427 = phi double [ %.1359, %.lr.ph430 ], [ %215, %.lr.ph439 ]
  %218 = getelementptr inbounds double, ptr %34, i64 %.0357428
  %219 = load double, ptr %218, align 8, !tbaa !9
  %220 = fcmp olt double %219, %.0358427
  %.1359 = select i1 %220, double %219, double %.0358427
  %.2 = select i1 %220, i64 %.0357428, i64 %.1429
  %221 = add nuw nsw i64 %.0357428, 1
  %.not391.not = icmp slt i64 %.0357428, %216
  br i1 %.not391.not, label %.lr.ph430, label %._crit_edge, !llvm.loop !16

._crit_edge:                                      ; preds = %.lr.ph430
  %.not392 = icmp eq i64 %.2, 0
  br i1 %.not392, label %._crit_edge.thread, label %222

222:                                              ; preds = %._crit_edge
  %223 = getelementptr inbounds i64, ptr %39, i64 %.2
  %224 = load i64, ptr %223, align 8, !tbaa !5
  %225 = getelementptr inbounds double, ptr %34, i64 %.2
  store double %215, ptr %225, align 8, !tbaa !9
  %226 = getelementptr inbounds i64, ptr %39, i64 %.1356437
  %227 = load i64, ptr %226, align 8, !tbaa !5
  store i64 %227, ptr %223, align 8, !tbaa !5
  store double %.1359, ptr %214, align 8, !tbaa !9
  store i64 %224, ptr %226, align 8, !tbaa !5
  %228 = mul nsw i64 %.2, %35
  %gep433 = getelementptr %struct.doublecomplex, ptr %invariant.gep432, i64 %228
  %229 = mul nsw i64 %.1356437, %35
  %gep435 = getelementptr %struct.doublecomplex, ptr %invariant.gep432, i64 %229
  %230 = call i32 @f2c_zswap(ptr noundef nonnull %3, ptr noundef %gep433, ptr noundef nonnull @c__1, ptr noundef %gep435, ptr noundef nonnull @c__1) #6
  %231 = load i64, ptr %22, align 8, !tbaa !5
  %.not393 = icmp eq i64 %231, 0
  br i1 %.not393, label %._crit_edge.thread, label %232

232:                                              ; preds = %222
  %233 = getelementptr inbounds i64, ptr %40, i64 %.2
  %234 = load i64, ptr %233, align 8, !tbaa !5
  %235 = getelementptr inbounds i64, ptr %40, i64 %.1356437
  %236 = load i64, ptr %235, align 8, !tbaa !5
  store i64 %236, ptr %233, align 8, !tbaa !5
  store i64 %234, ptr %235, align 8, !tbaa !5
  br label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %.lr.ph439, %._crit_edge, %232, %222
  %237 = load i64, ptr %24, align 8, !tbaa !5
  %.not390.not = icmp slt i64 %.1356437, %237
  br i1 %.not390.not, label %.lr.ph439, label %.loopexit, !llvm.loop !17

.loopexit:                                        ; preds = %._crit_edge.thread, %211, %.thread407, %210, %104, %103, %.thread, %.thread403
  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 1, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #6
  ret i32 0
}

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

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

declare i32 @dstebz_(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) local_unnamed_addr #2

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

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

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

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umin.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 = !{!12, !10, i64 0}
!12 = !{!"", !10, i64 0, !10, i64 8}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = distinct !{!17, !15}


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