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

; 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
@c__1 = external hidden global i64, align 8
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@c__0 = external hidden global i64, align 8
@c_n1 = external hidden global i64, align 8
@.str.8 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1

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

146:                                              ; preds = %22
  %147 = load ptr, ptr %24, align 8, !tbaa !5
  %148 = call i64 @lsame_(ptr noundef %147, ptr noundef @.str.4)
  %149 = icmp ne i64 %148, 0
  br i1 %149, label %160, label %150

150:                                              ; preds = %146
  %151 = load ptr, ptr %24, align 8, !tbaa !5
  %152 = call i64 @lsame_(ptr noundef %151, ptr noundef @.str.5)
  %153 = icmp ne i64 %152, 0
  br i1 %153, label %160, label %154

154:                                              ; preds = %150
  %155 = load ptr, ptr %24, align 8, !tbaa !5
  %156 = call i64 @lsame_(ptr noundef %155, ptr noundef @.str.3)
  %157 = icmp ne i64 %156, 0
  br i1 %157, label %160, label %158

158:                                              ; preds = %154
  %159 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -1, ptr %159, align 8, !tbaa !9
  br label %262

160:                                              ; preds = %154, %150, %146, %22
  %161 = load i64, ptr %79, align 8, !tbaa !9
  %162 = icmp ne i64 %161, 0
  br i1 %162, label %169, label %163

163:                                              ; preds = %160
  %164 = load ptr, ptr %25, align 8, !tbaa !5
  %165 = call i64 @lsame_(ptr noundef %164, ptr noundef @.str.1)
  %166 = icmp ne i64 %165, 0
  br i1 %166, label %169, label %167

167:                                              ; preds = %163
  %168 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -2, ptr %168, align 8, !tbaa !9
  br label %261

169:                                              ; preds = %163, %160
  %170 = load i64, ptr %85, align 8, !tbaa !9
  %171 = icmp ne i64 %170, 0
  br i1 %171, label %178, label %172

172:                                              ; preds = %169
  %173 = load ptr, ptr %26, align 8, !tbaa !5
  %174 = call i64 @lsame_(ptr noundef %173, ptr noundef @.str.1)
  %175 = icmp ne i64 %174, 0
  br i1 %175, label %178, label %176

176:                                              ; preds = %172
  %177 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -3, ptr %177, align 8, !tbaa !9
  br label %260

178:                                              ; preds = %172, %169
  %179 = load i64, ptr %86, align 8, !tbaa !9
  %180 = icmp ne i64 %179, 0
  br i1 %180, label %190, label %181

181:                                              ; preds = %178
  %182 = load i64, ptr %82, align 8, !tbaa !9
  %183 = icmp ne i64 %182, 0
  br i1 %183, label %190, label %184

184:                                              ; preds = %181
  %185 = load i64, ptr %80, align 8, !tbaa !9
  %186 = icmp ne i64 %185, 0
  br i1 %186, label %190, label %187

187:                                              ; preds = %184
  %188 = load i64, ptr %87, align 8, !tbaa !9
  %189 = icmp ne i64 %188, 0
  br i1 %189, label %190, label %202

190:                                              ; preds = %187, %184, %181, %178
  %191 = load i64, ptr %82, align 8, !tbaa !9
  %192 = icmp ne i64 %191, 0
  br i1 %192, label %196, label %193

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

196:                                              ; preds = %193, %190
  %197 = load i64, ptr %79, align 8, !tbaa !9
  %198 = icmp ne i64 %197, 0
  br i1 %198, label %199, label %202

199:                                              ; preds = %196
  %200 = load i64, ptr %85, align 8, !tbaa !9
  %201 = icmp ne i64 %200, 0
  br i1 %201, label %204, label %202

202:                                              ; preds = %199, %196, %187
  %203 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -4, ptr %203, align 8, !tbaa !9
  br label %259

204:                                              ; preds = %199, %193
  %205 = load ptr, ptr %28, align 8, !tbaa !5
  %206 = load i64, ptr %205, align 8, !tbaa !9
  %207 = icmp slt i64 %206, 0
  br i1 %207, label %208, label %210

208:                                              ; preds = %204
  %209 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -5, ptr %209, align 8, !tbaa !9
  br label %258

210:                                              ; preds = %204
  %211 = load ptr, ptr %30, align 8, !tbaa !5
  %212 = load i64, ptr %211, align 8, !tbaa !9
  %213 = load ptr, ptr %28, align 8, !tbaa !5
  %214 = load i64, ptr %213, align 8, !tbaa !9
  %215 = icmp sge i64 1, %214
  br i1 %215, label %216, label %217

216:                                              ; preds = %210
  br label %220

217:                                              ; preds = %210
  %218 = load ptr, ptr %28, align 8, !tbaa !5
  %219 = load i64, ptr %218, align 8, !tbaa !9
  br label %220

220:                                              ; preds = %217, %216
  %221 = phi i64 [ 1, %216 ], [ %219, %217 ]
  %222 = icmp slt i64 %212, %221
  br i1 %222, label %223, label %225

223:                                              ; preds = %220
  %224 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -7, ptr %224, align 8, !tbaa !9
  br label %257

225:                                              ; preds = %220
  %226 = load ptr, ptr %33, align 8, !tbaa !5
  %227 = load i64, ptr %226, align 8, !tbaa !9
  %228 = icmp slt i64 %227, 1
  br i1 %228, label %238, label %229

229:                                              ; preds = %225
  %230 = load i64, ptr %79, align 8, !tbaa !9
  %231 = icmp ne i64 %230, 0
  br i1 %231, label %232, label %240

232:                                              ; preds = %229
  %233 = load ptr, ptr %33, align 8, !tbaa !5
  %234 = load i64, ptr %233, align 8, !tbaa !9
  %235 = load ptr, ptr %28, align 8, !tbaa !5
  %236 = load i64, ptr %235, align 8, !tbaa !9
  %237 = icmp slt i64 %234, %236
  br i1 %237, label %238, label %240

238:                                              ; preds = %232, %225
  %239 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -10, ptr %239, align 8, !tbaa !9
  br label %256

240:                                              ; preds = %232, %229
  %241 = load ptr, ptr %35, align 8, !tbaa !5
  %242 = load i64, ptr %241, align 8, !tbaa !9
  %243 = icmp slt i64 %242, 1
  br i1 %243, label %253, label %244

244:                                              ; preds = %240
  %245 = load i64, ptr %85, align 8, !tbaa !9
  %246 = icmp ne i64 %245, 0
  br i1 %246, label %247, label %255

247:                                              ; preds = %244
  %248 = load ptr, ptr %35, align 8, !tbaa !5
  %249 = load i64, ptr %248, align 8, !tbaa !9
  %250 = load ptr, ptr %28, align 8, !tbaa !5
  %251 = load i64, ptr %250, align 8, !tbaa !9
  %252 = icmp slt i64 %249, %251
  br i1 %252, label %253, label %255

253:                                              ; preds = %247, %240
  %254 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -12, ptr %254, align 8, !tbaa !9
  br label %255

255:                                              ; preds = %253, %247, %244
  br label %256

256:                                              ; preds = %255, %238
  br label %257

257:                                              ; preds = %256, %223
  br label %258

258:                                              ; preds = %257, %208
  br label %259

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

260:                                              ; preds = %259, %176
  br label %261

261:                                              ; preds = %260, %167
  br label %262

262:                                              ; preds = %261, %158
  %263 = load ptr, ptr %45, align 8, !tbaa !5
  %264 = load i64, ptr %263, align 8, !tbaa !9
  %265 = icmp eq i64 %264, 0
  br i1 %265, label %266, label %562

266:                                              ; preds = %262
  %267 = load ptr, ptr %28, align 8, !tbaa !5
  %268 = load i64, ptr %267, align 8, !tbaa !9
  %269 = icmp eq i64 %268, 0
  br i1 %269, label %270, label %271

270:                                              ; preds = %266
  store i64 1, ptr %77, align 8, !tbaa !9
  store i64 1, ptr %78, align 8, !tbaa !9
  br label %543

271:                                              ; preds = %266
  %272 = load ptr, ptr %28, align 8, !tbaa !5
  %273 = load i64, ptr %272, align 8, !tbaa !9
  %274 = load ptr, ptr %28, align 8, !tbaa !5
  %275 = load i64, ptr %274, align 8, !tbaa !9
  %276 = load ptr, ptr %28, align 8, !tbaa !5
  %277 = load ptr, ptr %28, align 8, !tbaa !5
  %278 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.6, ptr noundef @.str.7, ptr noundef %276, ptr noundef @c__1, ptr noundef %277, ptr noundef @c__0)
  %279 = mul nsw i64 %275, %278
  %280 = add nsw i64 %273, %279
  store i64 %280, ptr %78, align 8, !tbaa !9
  %281 = load i64, ptr %79, align 8, !tbaa !9
  %282 = icmp ne i64 %281, 0
  br i1 %282, label %283, label %300

283:                                              ; preds = %271
  %284 = load ptr, ptr %28, align 8, !tbaa !5
  %285 = load ptr, ptr %28, align 8, !tbaa !5
  %286 = load ptr, ptr %29, align 8, !tbaa !5
  %287 = load i64, ptr %47, align 8, !tbaa !9
  %288 = getelementptr inbounds %struct.doublecomplex, ptr %286, i64 %287
  %289 = load ptr, ptr %30, align 8, !tbaa !5
  %290 = load ptr, ptr %31, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.doublecomplex, ptr %290, i64 1
  %292 = load ptr, ptr %32, align 8, !tbaa !5
  %293 = load i64, ptr %49, align 8, !tbaa !9
  %294 = getelementptr inbounds %struct.doublecomplex, ptr %292, i64 %293
  %295 = load ptr, ptr %33, align 8, !tbaa !5
  %296 = load ptr, ptr %42, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.doublecomplex, ptr %296, i64 1
  %298 = load ptr, ptr %45, align 8, !tbaa !5
  %299 = call i32 @zhseqr_(ptr noundef @.str.4, ptr noundef @.str, ptr noundef %284, ptr noundef @c__1, ptr noundef %285, ptr noundef %288, ptr noundef %289, ptr noundef %291, ptr noundef %294, ptr noundef %295, ptr noundef %297, ptr noundef @c_n1, ptr noundef %298)
  br label %359

300:                                              ; preds = %271
  %301 = load i64, ptr %85, align 8, !tbaa !9
  %302 = icmp ne i64 %301, 0
  br i1 %302, label %303, label %320

303:                                              ; preds = %300
  %304 = load ptr, ptr %28, align 8, !tbaa !5
  %305 = load ptr, ptr %28, align 8, !tbaa !5
  %306 = load ptr, ptr %29, align 8, !tbaa !5
  %307 = load i64, ptr %47, align 8, !tbaa !9
  %308 = getelementptr inbounds %struct.doublecomplex, ptr %306, i64 %307
  %309 = load ptr, ptr %30, align 8, !tbaa !5
  %310 = load ptr, ptr %31, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.doublecomplex, ptr %310, i64 1
  %312 = load ptr, ptr %34, align 8, !tbaa !5
  %313 = load i64, ptr %51, align 8, !tbaa !9
  %314 = getelementptr inbounds %struct.doublecomplex, ptr %312, i64 %313
  %315 = load ptr, ptr %35, align 8, !tbaa !5
  %316 = load ptr, ptr %42, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.doublecomplex, ptr %316, i64 1
  %318 = load ptr, ptr %45, align 8, !tbaa !5
  %319 = call i32 @zhseqr_(ptr noundef @.str.4, ptr noundef @.str, ptr noundef %304, ptr noundef @c__1, ptr noundef %305, ptr noundef %308, ptr noundef %309, ptr noundef %311, ptr noundef %314, ptr noundef %315, ptr noundef %317, ptr noundef @c_n1, ptr noundef %318)
  br label %358

320:                                              ; preds = %300
  %321 = load i64, ptr %86, align 8, !tbaa !9
  %322 = icmp ne i64 %321, 0
  br i1 %322, label %323, label %340

323:                                              ; preds = %320
  %324 = load ptr, ptr %28, align 8, !tbaa !5
  %325 = load ptr, ptr %28, align 8, !tbaa !5
  %326 = load ptr, ptr %29, align 8, !tbaa !5
  %327 = load i64, ptr %47, align 8, !tbaa !9
  %328 = getelementptr inbounds %struct.doublecomplex, ptr %326, i64 %327
  %329 = load ptr, ptr %30, align 8, !tbaa !5
  %330 = load ptr, ptr %31, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.doublecomplex, ptr %330, i64 1
  %332 = load ptr, ptr %34, align 8, !tbaa !5
  %333 = load i64, ptr %51, align 8, !tbaa !9
  %334 = getelementptr inbounds %struct.doublecomplex, ptr %332, i64 %333
  %335 = load ptr, ptr %35, align 8, !tbaa !5
  %336 = load ptr, ptr %42, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.doublecomplex, ptr %336, i64 1
  %338 = load ptr, ptr %45, align 8, !tbaa !5
  %339 = call i32 @zhseqr_(ptr noundef @.str.2, ptr noundef @.str.1, ptr noundef %324, ptr noundef @c__1, ptr noundef %325, ptr noundef %328, ptr noundef %329, ptr noundef %331, ptr noundef %334, ptr noundef %335, ptr noundef %337, ptr noundef @c_n1, ptr noundef %338)
  br label %357

340:                                              ; preds = %320
  %341 = load ptr, ptr %28, align 8, !tbaa !5
  %342 = load ptr, ptr %28, align 8, !tbaa !5
  %343 = load ptr, ptr %29, align 8, !tbaa !5
  %344 = load i64, ptr %47, align 8, !tbaa !9
  %345 = getelementptr inbounds %struct.doublecomplex, ptr %343, i64 %344
  %346 = load ptr, ptr %30, align 8, !tbaa !5
  %347 = load ptr, ptr %31, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.doublecomplex, ptr %347, i64 1
  %349 = load ptr, ptr %34, align 8, !tbaa !5
  %350 = load i64, ptr %51, align 8, !tbaa !9
  %351 = getelementptr inbounds %struct.doublecomplex, ptr %349, i64 %350
  %352 = load ptr, ptr %35, align 8, !tbaa !5
  %353 = load ptr, ptr %42, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.doublecomplex, ptr %353, i64 1
  %355 = load ptr, ptr %45, align 8, !tbaa !5
  %356 = call i32 @zhseqr_(ptr noundef @.str.4, ptr noundef @.str.1, ptr noundef %341, ptr noundef @c__1, ptr noundef %342, ptr noundef %345, ptr noundef %346, ptr noundef %348, ptr noundef %351, ptr noundef %352, ptr noundef %354, ptr noundef @c_n1, ptr noundef %355)
  br label %357

357:                                              ; preds = %340, %323
  br label %358

358:                                              ; preds = %357, %303
  br label %359

359:                                              ; preds = %358, %283
  %360 = load ptr, ptr %42, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.doublecomplex, ptr %360, i64 1
  %362 = getelementptr inbounds %struct.doublecomplex, ptr %361, i32 0, i32 0
  %363 = load double, ptr %362, align 8, !tbaa !11
  %364 = fptosi double %363 to i64
  store i64 %364, ptr %81, align 8, !tbaa !9
  %365 = load i64, ptr %79, align 8, !tbaa !9
  %366 = icmp ne i64 %365, 0
  br i1 %366, label %435, label %367

367:                                              ; preds = %359
  %368 = load i64, ptr %85, align 8, !tbaa !9
  %369 = icmp ne i64 %368, 0
  br i1 %369, label %435, label %370

370:                                              ; preds = %367
  %371 = load ptr, ptr %28, align 8, !tbaa !5
  %372 = load i64, ptr %371, align 8, !tbaa !9
  %373 = shl i64 %372, 1
  store i64 %373, ptr %77, align 8, !tbaa !9
  %374 = load i64, ptr %86, align 8, !tbaa !9
  %375 = icmp ne i64 %374, 0
  br i1 %375, label %399, label %376

376:                                              ; preds = %370
  %377 = load i64, ptr %82, align 8, !tbaa !9
  %378 = icmp ne i64 %377, 0
  br i1 %378, label %399, label %379

379:                                              ; preds = %376
  %380 = load i64, ptr %77, align 8, !tbaa !9
  store i64 %380, ptr %52, align 8, !tbaa !9
  %381 = load ptr, ptr %28, align 8, !tbaa !5
  %382 = load i64, ptr %381, align 8, !tbaa !9
  %383 = load ptr, ptr %28, align 8, !tbaa !5
  %384 = load i64, ptr %383, align 8, !tbaa !9
  %385 = mul nsw i64 %382, %384
  %386 = load ptr, ptr %28, align 8, !tbaa !5
  %387 = load i64, ptr %386, align 8, !tbaa !9
  %388 = shl i64 %387, 1
  %389 = add nsw i64 %385, %388
  store i64 %389, ptr %53, align 8, !tbaa !9
  %390 = load i64, ptr %52, align 8, !tbaa !9
  %391 = load i64, ptr %53, align 8, !tbaa !9
  %392 = icmp sge i64 %390, %391
  br i1 %392, label %393, label %395

393:                                              ; preds = %379
  %394 = load i64, ptr %52, align 8, !tbaa !9
  br label %397

395:                                              ; preds = %379
  %396 = load i64, ptr %53, align 8, !tbaa !9
  br label %397

397:                                              ; preds = %395, %393
  %398 = phi i64 [ %394, %393 ], [ %396, %395 ]
  store i64 %398, ptr %77, align 8, !tbaa !9
  br label %399

399:                                              ; preds = %397, %376, %370
  %400 = load i64, ptr %78, align 8, !tbaa !9
  %401 = load i64, ptr %81, align 8, !tbaa !9
  %402 = icmp sge i64 %400, %401
  br i1 %402, label %403, label %405

403:                                              ; preds = %399
  %404 = load i64, ptr %78, align 8, !tbaa !9
  br label %407

405:                                              ; preds = %399
  %406 = load i64, ptr %81, align 8, !tbaa !9
  br label %407

407:                                              ; preds = %405, %403
  %408 = phi i64 [ %404, %403 ], [ %406, %405 ]
  store i64 %408, ptr %78, align 8, !tbaa !9
  %409 = load i64, ptr %86, align 8, !tbaa !9
  %410 = icmp ne i64 %409, 0
  br i1 %410, label %434, label %411

411:                                              ; preds = %407
  %412 = load i64, ptr %82, align 8, !tbaa !9
  %413 = icmp ne i64 %412, 0
  br i1 %413, label %434, label %414

414:                                              ; preds = %411
  %415 = load i64, ptr %78, align 8, !tbaa !9
  store i64 %415, ptr %52, align 8, !tbaa !9
  %416 = load ptr, ptr %28, align 8, !tbaa !5
  %417 = load i64, ptr %416, align 8, !tbaa !9
  %418 = load ptr, ptr %28, align 8, !tbaa !5
  %419 = load i64, ptr %418, align 8, !tbaa !9
  %420 = mul nsw i64 %417, %419
  %421 = load ptr, ptr %28, align 8, !tbaa !5
  %422 = load i64, ptr %421, align 8, !tbaa !9
  %423 = shl i64 %422, 1
  %424 = add nsw i64 %420, %423
  store i64 %424, ptr %53, align 8, !tbaa !9
  %425 = load i64, ptr %52, align 8, !tbaa !9
  %426 = load i64, ptr %53, align 8, !tbaa !9
  %427 = icmp sge i64 %425, %426
  br i1 %427, label %428, label %430

428:                                              ; preds = %414
  %429 = load i64, ptr %52, align 8, !tbaa !9
  br label %432

430:                                              ; preds = %414
  %431 = load i64, ptr %53, align 8, !tbaa !9
  br label %432

432:                                              ; preds = %430, %428
  %433 = phi i64 [ %429, %428 ], [ %431, %430 ]
  store i64 %433, ptr %78, align 8, !tbaa !9
  br label %434

434:                                              ; preds = %432, %411, %407
  br label %533

435:                                              ; preds = %367, %359
  %436 = load ptr, ptr %28, align 8, !tbaa !5
  %437 = load i64, ptr %436, align 8, !tbaa !9
  %438 = shl i64 %437, 1
  store i64 %438, ptr %77, align 8, !tbaa !9
  %439 = load i64, ptr %86, align 8, !tbaa !9
  %440 = icmp ne i64 %439, 0
  br i1 %440, label %464, label %441

441:                                              ; preds = %435
  %442 = load i64, ptr %82, align 8, !tbaa !9
  %443 = icmp ne i64 %442, 0
  br i1 %443, label %464, label %444

444:                                              ; preds = %441
  %445 = load i64, ptr %77, align 8, !tbaa !9
  store i64 %445, ptr %52, align 8, !tbaa !9
  %446 = load ptr, ptr %28, align 8, !tbaa !5
  %447 = load i64, ptr %446, align 8, !tbaa !9
  %448 = load ptr, ptr %28, align 8, !tbaa !5
  %449 = load i64, ptr %448, align 8, !tbaa !9
  %450 = mul nsw i64 %447, %449
  %451 = load ptr, ptr %28, align 8, !tbaa !5
  %452 = load i64, ptr %451, align 8, !tbaa !9
  %453 = shl i64 %452, 1
  %454 = add nsw i64 %450, %453
  store i64 %454, ptr %53, align 8, !tbaa !9
  %455 = load i64, ptr %52, align 8, !tbaa !9
  %456 = load i64, ptr %53, align 8, !tbaa !9
  %457 = icmp sge i64 %455, %456
  br i1 %457, label %458, label %460

458:                                              ; preds = %444
  %459 = load i64, ptr %52, align 8, !tbaa !9
  br label %462

460:                                              ; preds = %444
  %461 = load i64, ptr %53, align 8, !tbaa !9
  br label %462

462:                                              ; preds = %460, %458
  %463 = phi i64 [ %459, %458 ], [ %461, %460 ]
  store i64 %463, ptr %77, align 8, !tbaa !9
  br label %464

464:                                              ; preds = %462, %441, %435
  %465 = load i64, ptr %78, align 8, !tbaa !9
  %466 = load i64, ptr %81, align 8, !tbaa !9
  %467 = icmp sge i64 %465, %466
  br i1 %467, label %468, label %470

468:                                              ; preds = %464
  %469 = load i64, ptr %78, align 8, !tbaa !9
  br label %472

470:                                              ; preds = %464
  %471 = load i64, ptr %81, align 8, !tbaa !9
  br label %472

472:                                              ; preds = %470, %468
  %473 = phi i64 [ %469, %468 ], [ %471, %470 ]
  store i64 %473, ptr %78, align 8, !tbaa !9
  %474 = load i64, ptr %78, align 8, !tbaa !9
  store i64 %474, ptr %52, align 8, !tbaa !9
  %475 = load ptr, ptr %28, align 8, !tbaa !5
  %476 = load i64, ptr %475, align 8, !tbaa !9
  %477 = load ptr, ptr %28, align 8, !tbaa !5
  %478 = load i64, ptr %477, align 8, !tbaa !9
  %479 = sub nsw i64 %478, 1
  %480 = load ptr, ptr %28, align 8, !tbaa !5
  %481 = load ptr, ptr %28, align 8, !tbaa !5
  %482 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.8, ptr noundef @.str.7, ptr noundef %480, ptr noundef @c__1, ptr noundef %481, ptr noundef @c_n1)
  %483 = mul nsw i64 %479, %482
  %484 = add nsw i64 %476, %483
  store i64 %484, ptr %53, align 8, !tbaa !9
  %485 = load i64, ptr %52, align 8, !tbaa !9
  %486 = load i64, ptr %53, align 8, !tbaa !9
  %487 = icmp sge i64 %485, %486
  br i1 %487, label %488, label %490

488:                                              ; preds = %472
  %489 = load i64, ptr %52, align 8, !tbaa !9
  br label %492

490:                                              ; preds = %472
  %491 = load i64, ptr %53, align 8, !tbaa !9
  br label %492

492:                                              ; preds = %490, %488
  %493 = phi i64 [ %489, %488 ], [ %491, %490 ]
  store i64 %493, ptr %78, align 8, !tbaa !9
  %494 = load i64, ptr %86, align 8, !tbaa !9
  %495 = icmp ne i64 %494, 0
  br i1 %495, label %519, label %496

496:                                              ; preds = %492
  %497 = load i64, ptr %82, align 8, !tbaa !9
  %498 = icmp ne i64 %497, 0
  br i1 %498, label %519, label %499

499:                                              ; preds = %496
  %500 = load i64, ptr %78, align 8, !tbaa !9
  store i64 %500, ptr %52, align 8, !tbaa !9
  %501 = load ptr, ptr %28, align 8, !tbaa !5
  %502 = load i64, ptr %501, align 8, !tbaa !9
  %503 = load ptr, ptr %28, align 8, !tbaa !5
  %504 = load i64, ptr %503, align 8, !tbaa !9
  %505 = mul nsw i64 %502, %504
  %506 = load ptr, ptr %28, align 8, !tbaa !5
  %507 = load i64, ptr %506, align 8, !tbaa !9
  %508 = shl i64 %507, 1
  %509 = add nsw i64 %505, %508
  store i64 %509, ptr %53, align 8, !tbaa !9
  %510 = load i64, ptr %52, align 8, !tbaa !9
  %511 = load i64, ptr %53, align 8, !tbaa !9
  %512 = icmp sge i64 %510, %511
  br i1 %512, label %513, label %515

513:                                              ; preds = %499
  %514 = load i64, ptr %52, align 8, !tbaa !9
  br label %517

515:                                              ; preds = %499
  %516 = load i64, ptr %53, align 8, !tbaa !9
  br label %517

517:                                              ; preds = %515, %513
  %518 = phi i64 [ %514, %513 ], [ %516, %515 ]
  store i64 %518, ptr %78, align 8, !tbaa !9
  br label %519

519:                                              ; preds = %517, %496, %492
  %520 = load i64, ptr %78, align 8, !tbaa !9
  store i64 %520, ptr %52, align 8, !tbaa !9
  %521 = load ptr, ptr %28, align 8, !tbaa !5
  %522 = load i64, ptr %521, align 8, !tbaa !9
  %523 = shl i64 %522, 1
  store i64 %523, ptr %53, align 8, !tbaa !9
  %524 = load i64, ptr %52, align 8, !tbaa !9
  %525 = load i64, ptr %53, align 8, !tbaa !9
  %526 = icmp sge i64 %524, %525
  br i1 %526, label %527, label %529

527:                                              ; preds = %519
  %528 = load i64, ptr %52, align 8, !tbaa !9
  br label %531

529:                                              ; preds = %519
  %530 = load i64, ptr %53, align 8, !tbaa !9
  br label %531

531:                                              ; preds = %529, %527
  %532 = phi i64 [ %528, %527 ], [ %530, %529 ]
  store i64 %532, ptr %78, align 8, !tbaa !9
  br label %533

533:                                              ; preds = %531, %434
  %534 = load i64, ptr %78, align 8, !tbaa !9
  %535 = load i64, ptr %77, align 8, !tbaa !9
  %536 = icmp sge i64 %534, %535
  br i1 %536, label %537, label %539

537:                                              ; preds = %533
  %538 = load i64, ptr %78, align 8, !tbaa !9
  br label %541

539:                                              ; preds = %533
  %540 = load i64, ptr %77, align 8, !tbaa !9
  br label %541

541:                                              ; preds = %539, %537
  %542 = phi i64 [ %538, %537 ], [ %540, %539 ]
  store i64 %542, ptr %78, align 8, !tbaa !9
  br label %543

543:                                              ; preds = %541, %270
  %544 = load i64, ptr %78, align 8, !tbaa !9
  %545 = sitofp i64 %544 to double
  %546 = load ptr, ptr %42, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.doublecomplex, ptr %546, i64 1
  %548 = getelementptr inbounds %struct.doublecomplex, ptr %547, i32 0, i32 0
  store double %545, ptr %548, align 8, !tbaa !11
  %549 = load ptr, ptr %42, align 8, !tbaa !5
  %550 = getelementptr inbounds %struct.doublecomplex, ptr %549, i64 1
  %551 = getelementptr inbounds %struct.doublecomplex, ptr %550, i32 0, i32 1
  store double 0.000000e+00, ptr %551, align 8, !tbaa !14
  %552 = load ptr, ptr %43, align 8, !tbaa !5
  %553 = load i64, ptr %552, align 8, !tbaa !9
  %554 = load i64, ptr %77, align 8, !tbaa !9
  %555 = icmp slt i64 %553, %554
  br i1 %555, label %556, label %561

556:                                              ; preds = %543
  %557 = load i64, ptr %84, align 8, !tbaa !9
  %558 = icmp ne i64 %557, 0
  br i1 %558, label %561, label %559

559:                                              ; preds = %556
  %560 = load ptr, ptr %45, align 8, !tbaa !5
  store i64 -20, ptr %560, align 8, !tbaa !9
  br label %561

561:                                              ; preds = %559, %556, %543
  br label %562

562:                                              ; preds = %561, %262
  %563 = load ptr, ptr %45, align 8, !tbaa !5
  %564 = load i64, ptr %563, align 8, !tbaa !9
  %565 = icmp ne i64 %564, 0
  br i1 %565, label %566, label %571

566:                                              ; preds = %562
  %567 = load ptr, ptr %45, align 8, !tbaa !5
  %568 = load i64, ptr %567, align 8, !tbaa !9
  %569 = sub nsw i64 0, %568
  store i64 %569, ptr %52, align 8, !tbaa !9
  %570 = call i32 @xerbla_(ptr noundef @.str.9, ptr noundef %52)
  store i32 0, ptr %23, align 4
  store i32 1, ptr %88, align 4
  br label %1284

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

574:                                              ; preds = %571
  store i32 0, ptr %23, align 4
  store i32 1, ptr %88, align 4
  br label %1284

575:                                              ; preds = %571
  br label %576

576:                                              ; preds = %575
  %577 = load ptr, ptr %28, align 8, !tbaa !5
  %578 = load i64, ptr %577, align 8, !tbaa !9
  %579 = icmp eq i64 %578, 0
  br i1 %579, label %580, label %581

580:                                              ; preds = %576
  store i32 0, ptr %23, align 4
  store i32 1, ptr %88, align 4
  br label %1284

581:                                              ; preds = %576
  %582 = call double @dlamch_(ptr noundef @.str.5)
  store double %582, ptr %64, align 8, !tbaa !15
  %583 = call double @dlamch_(ptr noundef @.str.4)
  store double %583, ptr %83, align 8, !tbaa !15
  %584 = load double, ptr %83, align 8, !tbaa !15
  %585 = fdiv double 1.000000e+00, %584
  store double %585, ptr %76, align 8, !tbaa !15
  %586 = call i32 @dlabad_(ptr noundef %83, ptr noundef %76)
  %587 = load double, ptr %83, align 8, !tbaa !15
  %588 = call double @sqrt(double noundef %587) #5
  %589 = load double, ptr %64, align 8, !tbaa !15
  %590 = fdiv double %588, %589
  store double %590, ptr %83, align 8, !tbaa !15
  %591 = load double, ptr %83, align 8, !tbaa !15
  %592 = fdiv double 1.000000e+00, %591
  store double %592, ptr %76, align 8, !tbaa !15
  store i64 0, ptr %72, align 8, !tbaa !9
  %593 = load ptr, ptr %28, align 8, !tbaa !5
  %594 = load ptr, ptr %28, align 8, !tbaa !5
  %595 = load ptr, ptr %29, align 8, !tbaa !5
  %596 = load i64, ptr %47, align 8, !tbaa !9
  %597 = getelementptr inbounds %struct.doublecomplex, ptr %595, i64 %596
  %598 = load ptr, ptr %30, align 8, !tbaa !5
  %599 = getelementptr inbounds [1 x double], ptr %63, i64 0, i64 0
  %600 = call double @zlange_(ptr noundef @.str.10, ptr noundef %593, ptr noundef %594, ptr noundef %597, ptr noundef %598, ptr noundef %599)
  store double %600, ptr %67, align 8, !tbaa !15
  store i64 0, ptr %73, align 8, !tbaa !9
  %601 = load double, ptr %67, align 8, !tbaa !15
  %602 = fcmp ogt double %601, 0.000000e+00
  br i1 %602, label %603, label %609

603:                                              ; preds = %581
  %604 = load double, ptr %67, align 8, !tbaa !15
  %605 = load double, ptr %83, align 8, !tbaa !15
  %606 = fcmp olt double %604, %605
  br i1 %606, label %607, label %609

607:                                              ; preds = %603
  store i64 1, ptr %73, align 8, !tbaa !9
  %608 = load double, ptr %83, align 8, !tbaa !15
  store double %608, ptr %74, align 8, !tbaa !15
  br label %616

609:                                              ; preds = %603, %581
  %610 = load double, ptr %67, align 8, !tbaa !15
  %611 = load double, ptr %76, align 8, !tbaa !15
  %612 = fcmp ogt double %610, %611
  br i1 %612, label %613, label %615

613:                                              ; preds = %609
  store i64 1, ptr %73, align 8, !tbaa !9
  %614 = load double, ptr %76, align 8, !tbaa !15
  store double %614, ptr %74, align 8, !tbaa !15
  br label %615

615:                                              ; preds = %613, %609
  br label %616

616:                                              ; preds = %615, %607
  %617 = load i64, ptr %73, align 8, !tbaa !9
  %618 = icmp ne i64 %617, 0
  br i1 %618, label %619, label %627

619:                                              ; preds = %616
  %620 = load ptr, ptr %28, align 8, !tbaa !5
  %621 = load ptr, ptr %28, align 8, !tbaa !5
  %622 = load ptr, ptr %29, align 8, !tbaa !5
  %623 = load i64, ptr %47, align 8, !tbaa !9
  %624 = getelementptr inbounds %struct.doublecomplex, ptr %622, i64 %623
  %625 = load ptr, ptr %30, align 8, !tbaa !5
  %626 = call i32 @zlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %67, ptr noundef %74, ptr noundef %620, ptr noundef %621, ptr noundef %624, ptr noundef %625, ptr noundef %68)
  br label %627

627:                                              ; preds = %619, %616
  %628 = load ptr, ptr %24, align 8, !tbaa !5
  %629 = load ptr, ptr %28, align 8, !tbaa !5
  %630 = load ptr, ptr %29, align 8, !tbaa !5
  %631 = load i64, ptr %47, align 8, !tbaa !9
  %632 = getelementptr inbounds %struct.doublecomplex, ptr %630, i64 %631
  %633 = load ptr, ptr %30, align 8, !tbaa !5
  %634 = load ptr, ptr %36, align 8, !tbaa !5
  %635 = load ptr, ptr %37, align 8, !tbaa !5
  %636 = load ptr, ptr %38, align 8, !tbaa !5
  %637 = getelementptr inbounds double, ptr %636, i64 1
  %638 = call i32 @zgebal_(ptr noundef %628, ptr noundef %629, ptr noundef %632, ptr noundef %633, ptr noundef %634, ptr noundef %635, ptr noundef %637, ptr noundef %68)
  %639 = load ptr, ptr %28, align 8, !tbaa !5
  %640 = load ptr, ptr %28, align 8, !tbaa !5
  %641 = load ptr, ptr %29, align 8, !tbaa !5
  %642 = load i64, ptr %47, align 8, !tbaa !9
  %643 = getelementptr inbounds %struct.doublecomplex, ptr %641, i64 %642
  %644 = load ptr, ptr %30, align 8, !tbaa !5
  %645 = getelementptr inbounds [1 x double], ptr %63, i64 0, i64 0
  %646 = call double @zlange_(ptr noundef @.str.12, ptr noundef %639, ptr noundef %640, ptr noundef %643, ptr noundef %644, ptr noundef %645)
  %647 = load ptr, ptr %39, align 8, !tbaa !5
  store double %646, ptr %647, align 8, !tbaa !15
  %648 = load i64, ptr %73, align 8, !tbaa !9
  %649 = icmp ne i64 %648, 0
  br i1 %649, label %650, label %659

650:                                              ; preds = %627
  %651 = load ptr, ptr %39, align 8, !tbaa !5
  %652 = load double, ptr %651, align 8, !tbaa !15
  %653 = getelementptr inbounds [1 x double], ptr %63, i64 0, i64 0
  store double %652, ptr %653, align 8, !tbaa !15
  %654 = getelementptr inbounds [1 x double], ptr %63, i64 0, i64 0
  %655 = call i32 @dlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %74, ptr noundef %67, ptr noundef @c__1, ptr noundef @c__1, ptr noundef %654, ptr noundef @c__1, ptr noundef %68)
  %656 = getelementptr inbounds [1 x double], ptr %63, i64 0, i64 0
  %657 = load double, ptr %656, align 8, !tbaa !15
  %658 = load ptr, ptr %39, align 8, !tbaa !5
  store double %657, ptr %658, align 8, !tbaa !15
  br label %659

659:                                              ; preds = %650, %627
  store i64 1, ptr %69, align 8, !tbaa !9
  %660 = load i64, ptr %69, align 8, !tbaa !9
  %661 = load ptr, ptr %28, align 8, !tbaa !5
  %662 = load i64, ptr %661, align 8, !tbaa !9
  %663 = add nsw i64 %660, %662
  store i64 %663, ptr %70, align 8, !tbaa !9
  %664 = load ptr, ptr %43, align 8, !tbaa !5
  %665 = load i64, ptr %664, align 8, !tbaa !9
  %666 = load i64, ptr %70, align 8, !tbaa !9
  %667 = sub nsw i64 %665, %666
  %668 = add nsw i64 %667, 1
  store i64 %668, ptr %52, align 8, !tbaa !9
  %669 = load ptr, ptr %28, align 8, !tbaa !5
  %670 = load ptr, ptr %36, align 8, !tbaa !5
  %671 = load ptr, ptr %37, align 8, !tbaa !5
  %672 = load ptr, ptr %29, align 8, !tbaa !5
  %673 = load i64, ptr %47, align 8, !tbaa !9
  %674 = getelementptr inbounds %struct.doublecomplex, ptr %672, i64 %673
  %675 = load ptr, ptr %30, align 8, !tbaa !5
  %676 = load ptr, ptr %42, align 8, !tbaa !5
  %677 = load i64, ptr %69, align 8, !tbaa !9
  %678 = getelementptr inbounds %struct.doublecomplex, ptr %676, i64 %677
  %679 = load ptr, ptr %42, align 8, !tbaa !5
  %680 = load i64, ptr %70, align 8, !tbaa !9
  %681 = getelementptr inbounds %struct.doublecomplex, ptr %679, i64 %680
  %682 = call i32 @zgehrd_(ptr noundef %669, ptr noundef %670, ptr noundef %671, ptr noundef %674, ptr noundef %675, ptr noundef %678, ptr noundef %681, ptr noundef %52, ptr noundef %68)
  %683 = load i64, ptr %79, align 8, !tbaa !9
  %684 = icmp ne i64 %683, 0
  br i1 %684, label %685, label %757

685:                                              ; preds = %659
  %686 = getelementptr inbounds [1 x i8], ptr %66, i64 0, i64 0
  store i8 76, ptr %686, align 1, !tbaa !16
  %687 = load ptr, ptr %28, align 8, !tbaa !5
  %688 = load ptr, ptr %28, align 8, !tbaa !5
  %689 = load ptr, ptr %29, align 8, !tbaa !5
  %690 = load i64, ptr %47, align 8, !tbaa !9
  %691 = getelementptr inbounds %struct.doublecomplex, ptr %689, i64 %690
  %692 = load ptr, ptr %30, align 8, !tbaa !5
  %693 = load ptr, ptr %32, align 8, !tbaa !5
  %694 = load i64, ptr %49, align 8, !tbaa !9
  %695 = getelementptr inbounds %struct.doublecomplex, ptr %693, i64 %694
  %696 = load ptr, ptr %33, align 8, !tbaa !5
  %697 = call i32 @zlacpy_(ptr noundef @.str.13, ptr noundef %687, ptr noundef %688, ptr noundef %691, ptr noundef %692, ptr noundef %695, ptr noundef %696)
  %698 = load ptr, ptr %43, align 8, !tbaa !5
  %699 = load i64, ptr %698, align 8, !tbaa !9
  %700 = load i64, ptr %70, align 8, !tbaa !9
  %701 = sub nsw i64 %699, %700
  %702 = add nsw i64 %701, 1
  store i64 %702, ptr %52, align 8, !tbaa !9
  %703 = load ptr, ptr %28, align 8, !tbaa !5
  %704 = load ptr, ptr %36, align 8, !tbaa !5
  %705 = load ptr, ptr %37, align 8, !tbaa !5
  %706 = load ptr, ptr %32, align 8, !tbaa !5
  %707 = load i64, ptr %49, align 8, !tbaa !9
  %708 = getelementptr inbounds %struct.doublecomplex, ptr %706, i64 %707
  %709 = load ptr, ptr %33, align 8, !tbaa !5
  %710 = load ptr, ptr %42, align 8, !tbaa !5
  %711 = load i64, ptr %69, align 8, !tbaa !9
  %712 = getelementptr inbounds %struct.doublecomplex, ptr %710, i64 %711
  %713 = load ptr, ptr %42, align 8, !tbaa !5
  %714 = load i64, ptr %70, align 8, !tbaa !9
  %715 = getelementptr inbounds %struct.doublecomplex, ptr %713, i64 %714
  %716 = call i32 @zunghr_(ptr noundef %703, ptr noundef %704, ptr noundef %705, ptr noundef %708, ptr noundef %709, ptr noundef %712, ptr noundef %715, ptr noundef %52, ptr noundef %68)
  %717 = load i64, ptr %69, align 8, !tbaa !9
  store i64 %717, ptr %70, align 8, !tbaa !9
  %718 = load ptr, ptr %43, align 8, !tbaa !5
  %719 = load i64, ptr %718, align 8, !tbaa !9
  %720 = load i64, ptr %70, align 8, !tbaa !9
  %721 = sub nsw i64 %719, %720
  %722 = add nsw i64 %721, 1
  store i64 %722, ptr %52, align 8, !tbaa !9
  %723 = load ptr, ptr %28, align 8, !tbaa !5
  %724 = load ptr, ptr %36, align 8, !tbaa !5
  %725 = load ptr, ptr %37, align 8, !tbaa !5
  %726 = load ptr, ptr %29, align 8, !tbaa !5
  %727 = load i64, ptr %47, align 8, !tbaa !9
  %728 = getelementptr inbounds %struct.doublecomplex, ptr %726, i64 %727
  %729 = load ptr, ptr %30, align 8, !tbaa !5
  %730 = load ptr, ptr %31, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.doublecomplex, ptr %730, i64 1
  %732 = load ptr, ptr %32, align 8, !tbaa !5
  %733 = load i64, ptr %49, align 8, !tbaa !9
  %734 = getelementptr inbounds %struct.doublecomplex, ptr %732, i64 %733
  %735 = load ptr, ptr %33, align 8, !tbaa !5
  %736 = load ptr, ptr %42, align 8, !tbaa !5
  %737 = load i64, ptr %70, align 8, !tbaa !9
  %738 = getelementptr inbounds %struct.doublecomplex, ptr %736, i64 %737
  %739 = load ptr, ptr %45, align 8, !tbaa !5
  %740 = call i32 @zhseqr_(ptr noundef @.str.4, ptr noundef @.str, ptr noundef %723, ptr noundef %724, ptr noundef %725, ptr noundef %728, ptr noundef %729, ptr noundef %731, ptr noundef %734, ptr noundef %735, ptr noundef %738, ptr noundef %52, ptr noundef %739)
  %741 = load i64, ptr %85, align 8, !tbaa !9
  %742 = icmp ne i64 %741, 0
  br i1 %742, label %743, label %756

743:                                              ; preds = %685
  %744 = getelementptr inbounds [1 x i8], ptr %66, i64 0, i64 0
  store i8 66, ptr %744, align 1, !tbaa !16
  %745 = load ptr, ptr %28, align 8, !tbaa !5
  %746 = load ptr, ptr %28, align 8, !tbaa !5
  %747 = load ptr, ptr %32, align 8, !tbaa !5
  %748 = load i64, ptr %49, align 8, !tbaa !9
  %749 = getelementptr inbounds %struct.doublecomplex, ptr %747, i64 %748
  %750 = load ptr, ptr %33, align 8, !tbaa !5
  %751 = load ptr, ptr %34, align 8, !tbaa !5
  %752 = load i64, ptr %51, align 8, !tbaa !9
  %753 = getelementptr inbounds %struct.doublecomplex, ptr %751, i64 %752
  %754 = load ptr, ptr %35, align 8, !tbaa !5
  %755 = call i32 @zlacpy_(ptr noundef @.str.14, ptr noundef %745, ptr noundef %746, ptr noundef %749, ptr noundef %750, ptr noundef %753, ptr noundef %754)
  br label %756

756:                                              ; preds = %743, %685
  br label %850

757:                                              ; preds = %659
  %758 = load i64, ptr %85, align 8, !tbaa !9
  %759 = icmp ne i64 %758, 0
  br i1 %759, label %760, label %816

760:                                              ; preds = %757
  %761 = getelementptr inbounds [1 x i8], ptr %66, i64 0, i64 0
  store i8 82, ptr %761, align 1, !tbaa !16
  %762 = load ptr, ptr %28, align 8, !tbaa !5
  %763 = load ptr, ptr %28, align 8, !tbaa !5
  %764 = load ptr, ptr %29, align 8, !tbaa !5
  %765 = load i64, ptr %47, align 8, !tbaa !9
  %766 = getelementptr inbounds %struct.doublecomplex, ptr %764, i64 %765
  %767 = load ptr, ptr %30, align 8, !tbaa !5
  %768 = load ptr, ptr %34, align 8, !tbaa !5
  %769 = load i64, ptr %51, align 8, !tbaa !9
  %770 = getelementptr inbounds %struct.doublecomplex, ptr %768, i64 %769
  %771 = load ptr, ptr %35, align 8, !tbaa !5
  %772 = call i32 @zlacpy_(ptr noundef @.str.13, ptr noundef %762, ptr noundef %763, ptr noundef %766, ptr noundef %767, ptr noundef %770, ptr noundef %771)
  %773 = load ptr, ptr %43, align 8, !tbaa !5
  %774 = load i64, ptr %773, align 8, !tbaa !9
  %775 = load i64, ptr %70, align 8, !tbaa !9
  %776 = sub nsw i64 %774, %775
  %777 = add nsw i64 %776, 1
  store i64 %777, ptr %52, align 8, !tbaa !9
  %778 = load ptr, ptr %28, align 8, !tbaa !5
  %779 = load ptr, ptr %36, align 8, !tbaa !5
  %780 = load ptr, ptr %37, align 8, !tbaa !5
  %781 = load ptr, ptr %34, align 8, !tbaa !5
  %782 = load i64, ptr %51, align 8, !tbaa !9
  %783 = getelementptr inbounds %struct.doublecomplex, ptr %781, i64 %782
  %784 = load ptr, ptr %35, align 8, !tbaa !5
  %785 = load ptr, ptr %42, align 8, !tbaa !5
  %786 = load i64, ptr %69, align 8, !tbaa !9
  %787 = getelementptr inbounds %struct.doublecomplex, ptr %785, i64 %786
  %788 = load ptr, ptr %42, align 8, !tbaa !5
  %789 = load i64, ptr %70, align 8, !tbaa !9
  %790 = getelementptr inbounds %struct.doublecomplex, ptr %788, i64 %789
  %791 = call i32 @zunghr_(ptr noundef %778, ptr noundef %779, ptr noundef %780, ptr noundef %783, ptr noundef %784, ptr noundef %787, ptr noundef %790, ptr noundef %52, ptr noundef %68)
  %792 = load i64, ptr %69, align 8, !tbaa !9
  store i64 %792, ptr %70, align 8, !tbaa !9
  %793 = load ptr, ptr %43, align 8, !tbaa !5
  %794 = load i64, ptr %793, align 8, !tbaa !9
  %795 = load i64, ptr %70, align 8, !tbaa !9
  %796 = sub nsw i64 %794, %795
  %797 = add nsw i64 %796, 1
  store i64 %797, ptr %52, align 8, !tbaa !9
  %798 = load ptr, ptr %28, align 8, !tbaa !5
  %799 = load ptr, ptr %36, align 8, !tbaa !5
  %800 = load ptr, ptr %37, align 8, !tbaa !5
  %801 = load ptr, ptr %29, align 8, !tbaa !5
  %802 = load i64, ptr %47, align 8, !tbaa !9
  %803 = getelementptr inbounds %struct.doublecomplex, ptr %801, i64 %802
  %804 = load ptr, ptr %30, align 8, !tbaa !5
  %805 = load ptr, ptr %31, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.doublecomplex, ptr %805, i64 1
  %807 = load ptr, ptr %34, align 8, !tbaa !5
  %808 = load i64, ptr %51, align 8, !tbaa !9
  %809 = getelementptr inbounds %struct.doublecomplex, ptr %807, i64 %808
  %810 = load ptr, ptr %35, align 8, !tbaa !5
  %811 = load ptr, ptr %42, align 8, !tbaa !5
  %812 = load i64, ptr %70, align 8, !tbaa !9
  %813 = getelementptr inbounds %struct.doublecomplex, ptr %811, i64 %812
  %814 = load ptr, ptr %45, align 8, !tbaa !5
  %815 = call i32 @zhseqr_(ptr noundef @.str.4, ptr noundef @.str, ptr noundef %798, ptr noundef %799, ptr noundef %800, ptr noundef %803, ptr noundef %804, ptr noundef %806, ptr noundef %809, ptr noundef %810, ptr noundef %813, ptr noundef %52, ptr noundef %814)
  br label %849

816:                                              ; preds = %757
  %817 = load i64, ptr %86, align 8, !tbaa !9
  %818 = icmp ne i64 %817, 0
  br i1 %818, label %819, label %821

819:                                              ; preds = %816
  %820 = getelementptr inbounds [1 x i8], ptr %61, i64 0, i64 0
  store i8 69, ptr %820, align 1, !tbaa !16
  br label %823

821:                                              ; preds = %816
  %822 = getelementptr inbounds [1 x i8], ptr %61, i64 0, i64 0
  store i8 83, ptr %822, align 1, !tbaa !16
  br label %823

823:                                              ; preds = %821, %819
  %824 = load i64, ptr %69, align 8, !tbaa !9
  store i64 %824, ptr %70, align 8, !tbaa !9
  %825 = load ptr, ptr %43, align 8, !tbaa !5
  %826 = load i64, ptr %825, align 8, !tbaa !9
  %827 = load i64, ptr %70, align 8, !tbaa !9
  %828 = sub nsw i64 %826, %827
  %829 = add nsw i64 %828, 1
  store i64 %829, ptr %52, align 8, !tbaa !9
  %830 = getelementptr inbounds [1 x i8], ptr %61, i64 0, i64 0
  %831 = load ptr, ptr %28, align 8, !tbaa !5
  %832 = load ptr, ptr %36, align 8, !tbaa !5
  %833 = load ptr, ptr %37, align 8, !tbaa !5
  %834 = load ptr, ptr %29, align 8, !tbaa !5
  %835 = load i64, ptr %47, align 8, !tbaa !9
  %836 = getelementptr inbounds %struct.doublecomplex, ptr %834, i64 %835
  %837 = load ptr, ptr %30, align 8, !tbaa !5
  %838 = load ptr, ptr %31, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.doublecomplex, ptr %838, i64 1
  %840 = load ptr, ptr %34, align 8, !tbaa !5
  %841 = load i64, ptr %51, align 8, !tbaa !9
  %842 = getelementptr inbounds %struct.doublecomplex, ptr %840, i64 %841
  %843 = load ptr, ptr %35, align 8, !tbaa !5
  %844 = load ptr, ptr %42, align 8, !tbaa !5
  %845 = load i64, ptr %70, align 8, !tbaa !9
  %846 = getelementptr inbounds %struct.doublecomplex, ptr %844, i64 %845
  %847 = load ptr, ptr %45, align 8, !tbaa !5
  %848 = call i32 @zhseqr_(ptr noundef %830, ptr noundef @.str.1, ptr noundef %831, ptr noundef %832, ptr noundef %833, ptr noundef %836, ptr noundef %837, ptr noundef %839, ptr noundef %842, ptr noundef %843, ptr noundef %846, ptr noundef %52, ptr noundef %847)
  br label %849

849:                                              ; preds = %823, %760
  br label %850

850:                                              ; preds = %849, %756
  %851 = load ptr, ptr %45, align 8, !tbaa !5
  %852 = load i64, ptr %851, align 8, !tbaa !9
  %853 = icmp sgt i64 %852, 0
  br i1 %853, label %854, label %855

854:                                              ; preds = %850
  br label %1220

855:                                              ; preds = %850
  %856 = load i64, ptr %79, align 8, !tbaa !9
  %857 = icmp ne i64 %856, 0
  br i1 %857, label %861, label %858

858:                                              ; preds = %855
  %859 = load i64, ptr %85, align 8, !tbaa !9
  %860 = icmp ne i64 %859, 0
  br i1 %860, label %861, label %884

861:                                              ; preds = %858, %855
  %862 = getelementptr inbounds [1 x i8], ptr %66, i64 0, i64 0
  %863 = getelementptr inbounds [1 x i64], ptr %75, i64 0, i64 0
  %864 = load ptr, ptr %28, align 8, !tbaa !5
  %865 = load ptr, ptr %29, align 8, !tbaa !5
  %866 = load i64, ptr %47, align 8, !tbaa !9
  %867 = getelementptr inbounds %struct.doublecomplex, ptr %865, i64 %866
  %868 = load ptr, ptr %30, align 8, !tbaa !5
  %869 = load ptr, ptr %32, align 8, !tbaa !5
  %870 = load i64, ptr %49, align 8, !tbaa !9
  %871 = getelementptr inbounds %struct.doublecomplex, ptr %869, i64 %870
  %872 = load ptr, ptr %33, align 8, !tbaa !5
  %873 = load ptr, ptr %34, align 8, !tbaa !5
  %874 = load i64, ptr %51, align 8, !tbaa !9
  %875 = getelementptr inbounds %struct.doublecomplex, ptr %873, i64 %874
  %876 = load ptr, ptr %35, align 8, !tbaa !5
  %877 = load ptr, ptr %28, align 8, !tbaa !5
  %878 = load ptr, ptr %42, align 8, !tbaa !5
  %879 = load i64, ptr %70, align 8, !tbaa !9
  %880 = getelementptr inbounds %struct.doublecomplex, ptr %878, i64 %879
  %881 = load ptr, ptr %44, align 8, !tbaa !5
  %882 = getelementptr inbounds double, ptr %881, i64 1
  %883 = call i32 @ztrevc_(ptr noundef %862, ptr noundef @.str.3, ptr noundef %863, ptr noundef %864, ptr noundef %867, ptr noundef %868, ptr noundef %871, ptr noundef %872, ptr noundef %875, ptr noundef %876, ptr noundef %877, ptr noundef %71, ptr noundef %880, ptr noundef %882, ptr noundef %68)
  br label %884

884:                                              ; preds = %861, %858
  %885 = load i64, ptr %86, align 8, !tbaa !9
  %886 = icmp ne i64 %885, 0
  br i1 %886, label %915, label %887

887:                                              ; preds = %884
  %888 = load ptr, ptr %27, align 8, !tbaa !5
  %889 = getelementptr inbounds [1 x i64], ptr %75, i64 0, i64 0
  %890 = load ptr, ptr %28, align 8, !tbaa !5
  %891 = load ptr, ptr %29, align 8, !tbaa !5
  %892 = load i64, ptr %47, align 8, !tbaa !9
  %893 = getelementptr inbounds %struct.doublecomplex, ptr %891, i64 %892
  %894 = load ptr, ptr %30, align 8, !tbaa !5
  %895 = load ptr, ptr %32, align 8, !tbaa !5
  %896 = load i64, ptr %49, align 8, !tbaa !9
  %897 = getelementptr inbounds %struct.doublecomplex, ptr %895, i64 %896
  %898 = load ptr, ptr %33, align 8, !tbaa !5
  %899 = load ptr, ptr %34, align 8, !tbaa !5
  %900 = load i64, ptr %51, align 8, !tbaa !9
  %901 = getelementptr inbounds %struct.doublecomplex, ptr %899, i64 %900
  %902 = load ptr, ptr %35, align 8, !tbaa !5
  %903 = load ptr, ptr %40, align 8, !tbaa !5
  %904 = getelementptr inbounds double, ptr %903, i64 1
  %905 = load ptr, ptr %41, align 8, !tbaa !5
  %906 = getelementptr inbounds double, ptr %905, i64 1
  %907 = load ptr, ptr %28, align 8, !tbaa !5
  %908 = load ptr, ptr %42, align 8, !tbaa !5
  %909 = load i64, ptr %70, align 8, !tbaa !9
  %910 = getelementptr inbounds %struct.doublecomplex, ptr %908, i64 %909
  %911 = load ptr, ptr %28, align 8, !tbaa !5
  %912 = load ptr, ptr %44, align 8, !tbaa !5
  %913 = getelementptr inbounds double, ptr %912, i64 1
  %914 = call i32 @ztrsna_(ptr noundef %888, ptr noundef @.str.15, ptr noundef %889, ptr noundef %890, ptr noundef %893, ptr noundef %894, ptr noundef %897, ptr noundef %898, ptr noundef %901, ptr noundef %902, ptr noundef %904, ptr noundef %906, ptr noundef %907, ptr noundef %71, ptr noundef %910, ptr noundef %911, ptr noundef %913, ptr noundef %72)
  br label %915

915:                                              ; preds = %887, %884
  %916 = load i64, ptr %79, align 8, !tbaa !9
  %917 = icmp ne i64 %916, 0
  br i1 %917, label %918, label %1067

918:                                              ; preds = %915
  %919 = load ptr, ptr %24, align 8, !tbaa !5
  %920 = load ptr, ptr %28, align 8, !tbaa !5
  %921 = load ptr, ptr %36, align 8, !tbaa !5
  %922 = load ptr, ptr %37, align 8, !tbaa !5
  %923 = load ptr, ptr %38, align 8, !tbaa !5
  %924 = getelementptr inbounds double, ptr %923, i64 1
  %925 = load ptr, ptr %28, align 8, !tbaa !5
  %926 = load ptr, ptr %32, align 8, !tbaa !5
  %927 = load i64, ptr %49, align 8, !tbaa !9
  %928 = getelementptr inbounds %struct.doublecomplex, ptr %926, i64 %927
  %929 = load ptr, ptr %33, align 8, !tbaa !5
  %930 = call i32 @zgebak_(ptr noundef %919, ptr noundef @.str.13, ptr noundef %920, ptr noundef %921, ptr noundef %922, ptr noundef %924, ptr noundef %925, ptr noundef %928, ptr noundef %929, ptr noundef %68)
  %931 = load ptr, ptr %28, align 8, !tbaa !5
  %932 = load i64, ptr %931, align 8, !tbaa !9
  store i64 %932, ptr %52, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %933

933:                                              ; preds = %1063, %918
  %934 = load i64, ptr %59, align 8, !tbaa !9
  %935 = load i64, ptr %52, align 8, !tbaa !9
  %936 = icmp sle i64 %934, %935
  br i1 %936, label %937, label %1066

937:                                              ; preds = %933
  %938 = load ptr, ptr %28, align 8, !tbaa !5
  %939 = load ptr, ptr %32, align 8, !tbaa !5
  %940 = load i64, ptr %59, align 8, !tbaa !9
  %941 = load i64, ptr %48, align 8, !tbaa !9
  %942 = mul nsw i64 %940, %941
  %943 = add nsw i64 %942, 1
  %944 = getelementptr inbounds %struct.doublecomplex, ptr %939, i64 %943
  %945 = call double @f2c_dznrm2(ptr noundef %938, ptr noundef %944, ptr noundef @c__1)
  %946 = fdiv double 1.000000e+00, %945
  store double %946, ptr %62, align 8, !tbaa !15
  %947 = load ptr, ptr %28, align 8, !tbaa !5
  %948 = load ptr, ptr %32, align 8, !tbaa !5
  %949 = load i64, ptr %59, align 8, !tbaa !9
  %950 = load i64, ptr %48, align 8, !tbaa !9
  %951 = mul nsw i64 %949, %950
  %952 = add nsw i64 %951, 1
  %953 = getelementptr inbounds %struct.doublecomplex, ptr %948, i64 %952
  %954 = call i32 @f2c_zdscal(ptr noundef %947, ptr noundef %62, ptr noundef %953, ptr noundef @c__1)
  %955 = load ptr, ptr %28, align 8, !tbaa !5
  %956 = load i64, ptr %955, align 8, !tbaa !9
  store i64 %956, ptr %53, align 8, !tbaa !9
  store i64 1, ptr %60, align 8, !tbaa !9
  br label %957

957:                                              ; preds = %989, %937
  %958 = load i64, ptr %60, align 8, !tbaa !9
  %959 = load i64, ptr %53, align 8, !tbaa !9
  %960 = icmp sle i64 %958, %959
  br i1 %960, label %961, label %992

961:                                              ; preds = %957
  %962 = load i64, ptr %60, align 8, !tbaa !9
  %963 = load i64, ptr %59, align 8, !tbaa !9
  %964 = load i64, ptr %48, align 8, !tbaa !9
  %965 = mul nsw i64 %963, %964
  %966 = add nsw i64 %962, %965
  store i64 %966, ptr %54, align 8, !tbaa !9
  %967 = load ptr, ptr %32, align 8, !tbaa !5
  %968 = load i64, ptr %54, align 8, !tbaa !9
  %969 = getelementptr inbounds %struct.doublecomplex, ptr %967, i64 %968
  %970 = getelementptr inbounds %struct.doublecomplex, ptr %969, i32 0, i32 0
  %971 = load double, ptr %970, align 8, !tbaa !11
  store double %971, ptr %55, align 8, !tbaa !15
  %972 = load ptr, ptr %32, align 8, !tbaa !5
  %973 = load i64, ptr %60, align 8, !tbaa !9
  %974 = load i64, ptr %59, align 8, !tbaa !9
  %975 = load i64, ptr %48, align 8, !tbaa !9
  %976 = mul nsw i64 %974, %975
  %977 = add nsw i64 %973, %976
  %978 = getelementptr inbounds %struct.doublecomplex, ptr %972, i64 %977
  %979 = call double @d_imag(ptr noundef %978)
  store double %979, ptr %56, align 8, !tbaa !15
  %980 = load double, ptr %55, align 8, !tbaa !15
  %981 = load double, ptr %55, align 8, !tbaa !15
  %982 = load double, ptr %56, align 8, !tbaa !15
  %983 = load double, ptr %56, align 8, !tbaa !15
  %984 = fmul double %982, %983
  %985 = call double @llvm.fmuladd.f64(double %980, double %981, double %984)
  %986 = load ptr, ptr %44, align 8, !tbaa !5
  %987 = load i64, ptr %60, align 8, !tbaa !9
  %988 = getelementptr inbounds double, ptr %986, i64 %987
  store double %985, ptr %988, align 8, !tbaa !15
  br label %989

989:                                              ; preds = %961
  %990 = load i64, ptr %60, align 8, !tbaa !9
  %991 = add nsw i64 %990, 1
  store i64 %991, ptr %60, align 8, !tbaa !9
  br label %957, !llvm.loop !17

992:                                              ; preds = %957
  %993 = load ptr, ptr %28, align 8, !tbaa !5
  %994 = load ptr, ptr %44, align 8, !tbaa !5
  %995 = getelementptr inbounds double, ptr %994, i64 1
  %996 = call i64 @f2c_idamax(ptr noundef %993, ptr noundef %995, ptr noundef @c__1)
  store i64 %996, ptr %60, align 8, !tbaa !9
  %997 = load ptr, ptr %32, align 8, !tbaa !5
  %998 = load i64, ptr %60, align 8, !tbaa !9
  %999 = load i64, ptr %59, align 8, !tbaa !9
  %1000 = load i64, ptr %48, align 8, !tbaa !9
  %1001 = mul nsw i64 %999, %1000
  %1002 = add nsw i64 %998, %1001
  %1003 = getelementptr inbounds %struct.doublecomplex, ptr %997, i64 %1002
  call void @d_cnjg(ptr noundef %58, ptr noundef %1003)
  %1004 = load ptr, ptr %44, align 8, !tbaa !5
  %1005 = load i64, ptr %60, align 8, !tbaa !9
  %1006 = getelementptr inbounds double, ptr %1004, i64 %1005
  %1007 = load double, ptr %1006, align 8, !tbaa !15
  %1008 = call double @sqrt(double noundef %1007) #5
  store double %1008, ptr %55, align 8, !tbaa !15
  %1009 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  %1010 = load double, ptr %1009, align 8, !tbaa !11
  %1011 = load double, ptr %55, align 8, !tbaa !15
  %1012 = fdiv double %1010, %1011
  %1013 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  store double %1012, ptr %1013, align 8, !tbaa !11
  %1014 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  %1015 = load double, ptr %1014, align 8, !tbaa !14
  %1016 = load double, ptr %55, align 8, !tbaa !15
  %1017 = fdiv double %1015, %1016
  %1018 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  store double %1017, ptr %1018, align 8, !tbaa !14
  %1019 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %1020 = load double, ptr %1019, align 8, !tbaa !11
  %1021 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  store double %1020, ptr %1021, align 8, !tbaa !11
  %1022 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %1023 = load double, ptr %1022, align 8, !tbaa !14
  %1024 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  store double %1023, ptr %1024, align 8, !tbaa !14
  %1025 = load ptr, ptr %28, align 8, !tbaa !5
  %1026 = load ptr, ptr %32, align 8, !tbaa !5
  %1027 = load i64, ptr %59, align 8, !tbaa !9
  %1028 = load i64, ptr %48, align 8, !tbaa !9
  %1029 = mul nsw i64 %1027, %1028
  %1030 = add nsw i64 %1029, 1
  %1031 = getelementptr inbounds %struct.doublecomplex, ptr %1026, i64 %1030
  %1032 = call i32 @f2c_zscal(ptr noundef %1025, ptr noundef %65, ptr noundef %1031, ptr noundef @c__1)
  %1033 = load i64, ptr %60, align 8, !tbaa !9
  %1034 = load i64, ptr %59, align 8, !tbaa !9
  %1035 = load i64, ptr %48, align 8, !tbaa !9
  %1036 = mul nsw i64 %1034, %1035
  %1037 = add nsw i64 %1033, %1036
  store i64 %1037, ptr %53, align 8, !tbaa !9
  %1038 = load i64, ptr %60, align 8, !tbaa !9
  %1039 = load i64, ptr %59, align 8, !tbaa !9
  %1040 = load i64, ptr %48, align 8, !tbaa !9
  %1041 = mul nsw i64 %1039, %1040
  %1042 = add nsw i64 %1038, %1041
  store i64 %1042, ptr %54, align 8, !tbaa !9
  %1043 = load ptr, ptr %32, align 8, !tbaa !5
  %1044 = load i64, ptr %54, align 8, !tbaa !9
  %1045 = getelementptr inbounds %struct.doublecomplex, ptr %1043, i64 %1044
  %1046 = getelementptr inbounds %struct.doublecomplex, ptr %1045, i32 0, i32 0
  %1047 = load double, ptr %1046, align 8, !tbaa !11
  store double %1047, ptr %55, align 8, !tbaa !15
  %1048 = load double, ptr %55, align 8, !tbaa !15
  %1049 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  store double %1048, ptr %1049, align 8, !tbaa !11
  %1050 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  store double 0.000000e+00, ptr %1050, align 8, !tbaa !14
  %1051 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %1052 = load double, ptr %1051, align 8, !tbaa !11
  %1053 = load ptr, ptr %32, align 8, !tbaa !5
  %1054 = load i64, ptr %53, align 8, !tbaa !9
  %1055 = getelementptr inbounds %struct.doublecomplex, ptr %1053, i64 %1054
  %1056 = getelementptr inbounds %struct.doublecomplex, ptr %1055, i32 0, i32 0
  store double %1052, ptr %1056, align 8, !tbaa !11
  %1057 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %1058 = load double, ptr %1057, align 8, !tbaa !14
  %1059 = load ptr, ptr %32, align 8, !tbaa !5
  %1060 = load i64, ptr %53, align 8, !tbaa !9
  %1061 = getelementptr inbounds %struct.doublecomplex, ptr %1059, i64 %1060
  %1062 = getelementptr inbounds %struct.doublecomplex, ptr %1061, i32 0, i32 1
  store double %1058, ptr %1062, align 8, !tbaa !14
  br label %1063

1063:                                             ; preds = %992
  %1064 = load i64, ptr %59, align 8, !tbaa !9
  %1065 = add nsw i64 %1064, 1
  store i64 %1065, ptr %59, align 8, !tbaa !9
  br label %933, !llvm.loop !19

1066:                                             ; preds = %933
  br label %1067

1067:                                             ; preds = %1066, %915
  %1068 = load i64, ptr %85, align 8, !tbaa !9
  %1069 = icmp ne i64 %1068, 0
  br i1 %1069, label %1070, label %1219

1070:                                             ; preds = %1067
  %1071 = load ptr, ptr %24, align 8, !tbaa !5
  %1072 = load ptr, ptr %28, align 8, !tbaa !5
  %1073 = load ptr, ptr %36, align 8, !tbaa !5
  %1074 = load ptr, ptr %37, align 8, !tbaa !5
  %1075 = load ptr, ptr %38, align 8, !tbaa !5
  %1076 = getelementptr inbounds double, ptr %1075, i64 1
  %1077 = load ptr, ptr %28, align 8, !tbaa !5
  %1078 = load ptr, ptr %34, align 8, !tbaa !5
  %1079 = load i64, ptr %51, align 8, !tbaa !9
  %1080 = getelementptr inbounds %struct.doublecomplex, ptr %1078, i64 %1079
  %1081 = load ptr, ptr %35, align 8, !tbaa !5
  %1082 = call i32 @zgebak_(ptr noundef %1071, ptr noundef @.str.16, ptr noundef %1072, ptr noundef %1073, ptr noundef %1074, ptr noundef %1076, ptr noundef %1077, ptr noundef %1080, ptr noundef %1081, ptr noundef %68)
  %1083 = load ptr, ptr %28, align 8, !tbaa !5
  %1084 = load i64, ptr %1083, align 8, !tbaa !9
  store i64 %1084, ptr %52, align 8, !tbaa !9
  store i64 1, ptr %59, align 8, !tbaa !9
  br label %1085

1085:                                             ; preds = %1215, %1070
  %1086 = load i64, ptr %59, align 8, !tbaa !9
  %1087 = load i64, ptr %52, align 8, !tbaa !9
  %1088 = icmp sle i64 %1086, %1087
  br i1 %1088, label %1089, label %1218

1089:                                             ; preds = %1085
  %1090 = load ptr, ptr %28, align 8, !tbaa !5
  %1091 = load ptr, ptr %34, align 8, !tbaa !5
  %1092 = load i64, ptr %59, align 8, !tbaa !9
  %1093 = load i64, ptr %50, align 8, !tbaa !9
  %1094 = mul nsw i64 %1092, %1093
  %1095 = add nsw i64 %1094, 1
  %1096 = getelementptr inbounds %struct.doublecomplex, ptr %1091, i64 %1095
  %1097 = call double @f2c_dznrm2(ptr noundef %1090, ptr noundef %1096, ptr noundef @c__1)
  %1098 = fdiv double 1.000000e+00, %1097
  store double %1098, ptr %62, align 8, !tbaa !15
  %1099 = load ptr, ptr %28, align 8, !tbaa !5
  %1100 = load ptr, ptr %34, align 8, !tbaa !5
  %1101 = load i64, ptr %59, align 8, !tbaa !9
  %1102 = load i64, ptr %50, align 8, !tbaa !9
  %1103 = mul nsw i64 %1101, %1102
  %1104 = add nsw i64 %1103, 1
  %1105 = getelementptr inbounds %struct.doublecomplex, ptr %1100, i64 %1104
  %1106 = call i32 @f2c_zdscal(ptr noundef %1099, ptr noundef %62, ptr noundef %1105, ptr noundef @c__1)
  %1107 = load ptr, ptr %28, align 8, !tbaa !5
  %1108 = load i64, ptr %1107, align 8, !tbaa !9
  store i64 %1108, ptr %53, align 8, !tbaa !9
  store i64 1, ptr %60, align 8, !tbaa !9
  br label %1109

1109:                                             ; preds = %1141, %1089
  %1110 = load i64, ptr %60, align 8, !tbaa !9
  %1111 = load i64, ptr %53, align 8, !tbaa !9
  %1112 = icmp sle i64 %1110, %1111
  br i1 %1112, label %1113, label %1144

1113:                                             ; preds = %1109
  %1114 = load i64, ptr %60, align 8, !tbaa !9
  %1115 = load i64, ptr %59, align 8, !tbaa !9
  %1116 = load i64, ptr %50, align 8, !tbaa !9
  %1117 = mul nsw i64 %1115, %1116
  %1118 = add nsw i64 %1114, %1117
  store i64 %1118, ptr %54, align 8, !tbaa !9
  %1119 = load ptr, ptr %34, align 8, !tbaa !5
  %1120 = load i64, ptr %54, align 8, !tbaa !9
  %1121 = getelementptr inbounds %struct.doublecomplex, ptr %1119, i64 %1120
  %1122 = getelementptr inbounds %struct.doublecomplex, ptr %1121, i32 0, i32 0
  %1123 = load double, ptr %1122, align 8, !tbaa !11
  store double %1123, ptr %55, align 8, !tbaa !15
  %1124 = load ptr, ptr %34, align 8, !tbaa !5
  %1125 = load i64, ptr %60, align 8, !tbaa !9
  %1126 = load i64, ptr %59, align 8, !tbaa !9
  %1127 = load i64, ptr %50, align 8, !tbaa !9
  %1128 = mul nsw i64 %1126, %1127
  %1129 = add nsw i64 %1125, %1128
  %1130 = getelementptr inbounds %struct.doublecomplex, ptr %1124, i64 %1129
  %1131 = call double @d_imag(ptr noundef %1130)
  store double %1131, ptr %56, align 8, !tbaa !15
  %1132 = load double, ptr %55, align 8, !tbaa !15
  %1133 = load double, ptr %55, align 8, !tbaa !15
  %1134 = load double, ptr %56, align 8, !tbaa !15
  %1135 = load double, ptr %56, align 8, !tbaa !15
  %1136 = fmul double %1134, %1135
  %1137 = call double @llvm.fmuladd.f64(double %1132, double %1133, double %1136)
  %1138 = load ptr, ptr %44, align 8, !tbaa !5
  %1139 = load i64, ptr %60, align 8, !tbaa !9
  %1140 = getelementptr inbounds double, ptr %1138, i64 %1139
  store double %1137, ptr %1140, align 8, !tbaa !15
  br label %1141

1141:                                             ; preds = %1113
  %1142 = load i64, ptr %60, align 8, !tbaa !9
  %1143 = add nsw i64 %1142, 1
  store i64 %1143, ptr %60, align 8, !tbaa !9
  br label %1109, !llvm.loop !20

1144:                                             ; preds = %1109
  %1145 = load ptr, ptr %28, align 8, !tbaa !5
  %1146 = load ptr, ptr %44, align 8, !tbaa !5
  %1147 = getelementptr inbounds double, ptr %1146, i64 1
  %1148 = call i64 @f2c_idamax(ptr noundef %1145, ptr noundef %1147, ptr noundef @c__1)
  store i64 %1148, ptr %60, align 8, !tbaa !9
  %1149 = load ptr, ptr %34, align 8, !tbaa !5
  %1150 = load i64, ptr %60, align 8, !tbaa !9
  %1151 = load i64, ptr %59, align 8, !tbaa !9
  %1152 = load i64, ptr %50, align 8, !tbaa !9
  %1153 = mul nsw i64 %1151, %1152
  %1154 = add nsw i64 %1150, %1153
  %1155 = getelementptr inbounds %struct.doublecomplex, ptr %1149, i64 %1154
  call void @d_cnjg(ptr noundef %58, ptr noundef %1155)
  %1156 = load ptr, ptr %44, align 8, !tbaa !5
  %1157 = load i64, ptr %60, align 8, !tbaa !9
  %1158 = getelementptr inbounds double, ptr %1156, i64 %1157
  %1159 = load double, ptr %1158, align 8, !tbaa !15
  %1160 = call double @sqrt(double noundef %1159) #5
  store double %1160, ptr %55, align 8, !tbaa !15
  %1161 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 0
  %1162 = load double, ptr %1161, align 8, !tbaa !11
  %1163 = load double, ptr %55, align 8, !tbaa !15
  %1164 = fdiv double %1162, %1163
  %1165 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  store double %1164, ptr %1165, align 8, !tbaa !11
  %1166 = getelementptr inbounds %struct.doublecomplex, ptr %58, i32 0, i32 1
  %1167 = load double, ptr %1166, align 8, !tbaa !14
  %1168 = load double, ptr %55, align 8, !tbaa !15
  %1169 = fdiv double %1167, %1168
  %1170 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  store double %1169, ptr %1170, align 8, !tbaa !14
  %1171 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %1172 = load double, ptr %1171, align 8, !tbaa !11
  %1173 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 0
  store double %1172, ptr %1173, align 8, !tbaa !11
  %1174 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %1175 = load double, ptr %1174, align 8, !tbaa !14
  %1176 = getelementptr inbounds %struct.doublecomplex, ptr %65, i32 0, i32 1
  store double %1175, ptr %1176, align 8, !tbaa !14
  %1177 = load ptr, ptr %28, align 8, !tbaa !5
  %1178 = load ptr, ptr %34, align 8, !tbaa !5
  %1179 = load i64, ptr %59, align 8, !tbaa !9
  %1180 = load i64, ptr %50, align 8, !tbaa !9
  %1181 = mul nsw i64 %1179, %1180
  %1182 = add nsw i64 %1181, 1
  %1183 = getelementptr inbounds %struct.doublecomplex, ptr %1178, i64 %1182
  %1184 = call i32 @f2c_zscal(ptr noundef %1177, ptr noundef %65, ptr noundef %1183, ptr noundef @c__1)
  %1185 = load i64, ptr %60, align 8, !tbaa !9
  %1186 = load i64, ptr %59, align 8, !tbaa !9
  %1187 = load i64, ptr %50, align 8, !tbaa !9
  %1188 = mul nsw i64 %1186, %1187
  %1189 = add nsw i64 %1185, %1188
  store i64 %1189, ptr %53, align 8, !tbaa !9
  %1190 = load i64, ptr %60, align 8, !tbaa !9
  %1191 = load i64, ptr %59, align 8, !tbaa !9
  %1192 = load i64, ptr %50, align 8, !tbaa !9
  %1193 = mul nsw i64 %1191, %1192
  %1194 = add nsw i64 %1190, %1193
  store i64 %1194, ptr %54, align 8, !tbaa !9
  %1195 = load ptr, ptr %34, align 8, !tbaa !5
  %1196 = load i64, ptr %54, align 8, !tbaa !9
  %1197 = getelementptr inbounds %struct.doublecomplex, ptr %1195, i64 %1196
  %1198 = getelementptr inbounds %struct.doublecomplex, ptr %1197, i32 0, i32 0
  %1199 = load double, ptr %1198, align 8, !tbaa !11
  store double %1199, ptr %55, align 8, !tbaa !15
  %1200 = load double, ptr %55, align 8, !tbaa !15
  %1201 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  store double %1200, ptr %1201, align 8, !tbaa !11
  %1202 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  store double 0.000000e+00, ptr %1202, align 8, !tbaa !14
  %1203 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 0
  %1204 = load double, ptr %1203, align 8, !tbaa !11
  %1205 = load ptr, ptr %34, align 8, !tbaa !5
  %1206 = load i64, ptr %53, align 8, !tbaa !9
  %1207 = getelementptr inbounds %struct.doublecomplex, ptr %1205, i64 %1206
  %1208 = getelementptr inbounds %struct.doublecomplex, ptr %1207, i32 0, i32 0
  store double %1204, ptr %1208, align 8, !tbaa !11
  %1209 = getelementptr inbounds %struct.doublecomplex, ptr %57, i32 0, i32 1
  %1210 = load double, ptr %1209, align 8, !tbaa !14
  %1211 = load ptr, ptr %34, align 8, !tbaa !5
  %1212 = load i64, ptr %53, align 8, !tbaa !9
  %1213 = getelementptr inbounds %struct.doublecomplex, ptr %1211, i64 %1212
  %1214 = getelementptr inbounds %struct.doublecomplex, ptr %1213, i32 0, i32 1
  store double %1210, ptr %1214, align 8, !tbaa !14
  br label %1215

1215:                                             ; preds = %1144
  %1216 = load i64, ptr %59, align 8, !tbaa !9
  %1217 = add nsw i64 %1216, 1
  store i64 %1217, ptr %59, align 8, !tbaa !9
  br label %1085, !llvm.loop !21

1218:                                             ; preds = %1085
  br label %1219

1219:                                             ; preds = %1218, %1067
  br label %1220

1220:                                             ; preds = %1219, %854
  %1221 = load i64, ptr %73, align 8, !tbaa !9
  %1222 = icmp ne i64 %1221, 0
  br i1 %1222, label %1223, label %1275

1223:                                             ; preds = %1220
  %1224 = load ptr, ptr %28, align 8, !tbaa !5
  %1225 = load i64, ptr %1224, align 8, !tbaa !9
  %1226 = load ptr, ptr %45, align 8, !tbaa !5
  %1227 = load i64, ptr %1226, align 8, !tbaa !9
  %1228 = sub nsw i64 %1225, %1227
  store i64 %1228, ptr %52, align 8, !tbaa !9
  %1229 = load ptr, ptr %28, align 8, !tbaa !5
  %1230 = load i64, ptr %1229, align 8, !tbaa !9
  %1231 = load ptr, ptr %45, align 8, !tbaa !5
  %1232 = load i64, ptr %1231, align 8, !tbaa !9
  %1233 = sub nsw i64 %1230, %1232
  store i64 %1233, ptr %54, align 8, !tbaa !9
  %1234 = load i64, ptr %54, align 8, !tbaa !9
  %1235 = icmp sge i64 %1234, 1
  br i1 %1235, label %1236, label %1238

1236:                                             ; preds = %1223
  %1237 = load i64, ptr %54, align 8, !tbaa !9
  br label %1239

1238:                                             ; preds = %1223
  br label %1239

1239:                                             ; preds = %1238, %1236
  %1240 = phi i64 [ %1237, %1236 ], [ 1, %1238 ]
  store i64 %1240, ptr %53, align 8, !tbaa !9
  %1241 = load ptr, ptr %31, align 8, !tbaa !5
  %1242 = load ptr, ptr %45, align 8, !tbaa !5
  %1243 = load i64, ptr %1242, align 8, !tbaa !9
  %1244 = add nsw i64 %1243, 1
  %1245 = getelementptr inbounds %struct.doublecomplex, ptr %1241, i64 %1244
  %1246 = call i32 @zlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %74, ptr noundef %67, ptr noundef %52, ptr noundef @c__1, ptr noundef %1245, ptr noundef %53, ptr noundef %68)
  %1247 = load ptr, ptr %45, align 8, !tbaa !5
  %1248 = load i64, ptr %1247, align 8, !tbaa !9
  %1249 = icmp eq i64 %1248, 0
  br i1 %1249, label %1250, label %1266

1250:                                             ; preds = %1239
  %1251 = load i64, ptr %87, align 8, !tbaa !9
  %1252 = icmp ne i64 %1251, 0
  br i1 %1252, label %1256, label %1253

1253:                                             ; preds = %1250
  %1254 = load i64, ptr %80, align 8, !tbaa !9
  %1255 = icmp ne i64 %1254, 0
  br i1 %1255, label %1256, label %1265

1256:                                             ; preds = %1253, %1250
  %1257 = load i64, ptr %72, align 8, !tbaa !9
  %1258 = icmp eq i64 %1257, 0
  br i1 %1258, label %1259, label %1265

1259:                                             ; preds = %1256
  %1260 = load ptr, ptr %28, align 8, !tbaa !5
  %1261 = load ptr, ptr %41, align 8, !tbaa !5
  %1262 = getelementptr inbounds double, ptr %1261, i64 1
  %1263 = load ptr, ptr %28, align 8, !tbaa !5
  %1264 = call i32 @dlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %74, ptr noundef %67, ptr noundef %1260, ptr noundef @c__1, ptr noundef %1262, ptr noundef %1263, ptr noundef %68)
  br label %1265

1265:                                             ; preds = %1259, %1256, %1253
  br label %1274

1266:                                             ; preds = %1239
  %1267 = load ptr, ptr %36, align 8, !tbaa !5
  %1268 = load i64, ptr %1267, align 8, !tbaa !9
  %1269 = sub nsw i64 %1268, 1
  store i64 %1269, ptr %52, align 8, !tbaa !9
  %1270 = load ptr, ptr %31, align 8, !tbaa !5
  %1271 = getelementptr inbounds %struct.doublecomplex, ptr %1270, i64 1
  %1272 = load ptr, ptr %28, align 8, !tbaa !5
  %1273 = call i32 @zlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %74, ptr noundef %67, ptr noundef %52, ptr noundef @c__1, ptr noundef %1271, ptr noundef %1272, ptr noundef %68)
  br label %1274

1274:                                             ; preds = %1266, %1265
  br label %1275

1275:                                             ; preds = %1274, %1220
  %1276 = load i64, ptr %78, align 8, !tbaa !9
  %1277 = sitofp i64 %1276 to double
  %1278 = load ptr, ptr %42, align 8, !tbaa !5
  %1279 = getelementptr inbounds %struct.doublecomplex, ptr %1278, i64 1
  %1280 = getelementptr inbounds %struct.doublecomplex, ptr %1279, i32 0, i32 0
  store double %1277, ptr %1280, align 8, !tbaa !11
  %1281 = load ptr, ptr %42, align 8, !tbaa !5
  %1282 = getelementptr inbounds %struct.doublecomplex, ptr %1281, i64 1
  %1283 = getelementptr inbounds %struct.doublecomplex, ptr %1282, i32 0, i32 1
  store double 0.000000e+00, ptr %1283, align 8, !tbaa !14
  store i32 0, ptr %23, align 4
  store i32 1, ptr %88, align 4
  br label %1284

1284:                                             ; preds = %1275, %580, %574, %566
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  %1285 = load i32, ptr %23, align 4
  ret i32 %1285
}

; 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 i64 @ilaenv_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

declare double @dlamch_(ptr noundef) #2

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

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

declare double @zlange_(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 @zgebal_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

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

declare i32 @ztrevc_(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 @ztrsna_(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 @zgebak_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

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

declare double @d_imag(ptr noundef) #2

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

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

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

declare i32 @f2c_zscal(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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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, !13, i64 0}
!12 = !{!"", !13, i64 0, !13, i64 8}
!13 = !{!"double", !7, i64 0}
!14 = !{!12, !13, i64 8}
!15 = !{!13, !13, i64 0}
!16 = !{!7, !7, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = distinct !{!20, !18}
!21 = distinct !{!21, !18}


; 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
@c__1 = external hidden global i64, align 8
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@c__0 = external hidden global i64, align 8
@c_n1 = external hidden global i64, align 8
@.str.8 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1

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

55:                                               ; preds = %22
  %56 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.4) #6
  %.not553 = icmp eq i64 %56, 0
  br i1 %.not553, label %57, label %61

57:                                               ; preds = %55
  %58 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.5) #6
  %.not554 = icmp eq i64 %58, 0
  br i1 %.not554, label %59, label %61

59:                                               ; preds = %57
  %60 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.3) #6
  %.not555 = icmp eq i64 %60, 0
  br i1 %.not555, label %.thread589.sink.split, label %61

61:                                               ; preds = %59, %57, %55, %22
  %62 = icmp ne i64 %48, 0
  br i1 %62, label %65, label %63

63:                                               ; preds = %61
  %64 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #6
  %.not556 = icmp eq i64 %64, 0
  br i1 %.not556, label %.thread589.sink.split, label %65

65:                                               ; preds = %63, %61
  %66 = icmp ne i64 %49, 0
  br i1 %66, label %69, label %67

67:                                               ; preds = %65
  %68 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.1) #6
  %.not557 = icmp eq i64 %68, 0
  br i1 %.not557, label %.thread589.sink.split, label %69

69:                                               ; preds = %67, %65
  %70 = icmp ne i64 %50, 0
  %71 = icmp ne i64 %51, 0
  %or.cond = select i1 %70, i1 true, i1 %71
  %72 = icmp ne i64 %53, 0
  %or.cond3 = select i1 %or.cond, i1 true, i1 %72
  %73 = icmp ne i64 %52, 0
  %or.cond5 = select i1 %or.cond3, i1 true, i1 %73
  br i1 %or.cond5, label %74, label %.thread589.sink.split

74:                                               ; preds = %69
  %or.cond7 = select i1 %71, i1 true, i1 %72
  %or.cond7.not = xor i1 %or.cond7, true
  %or.cond9 = and i1 %62, %66
  %or.cond579 = or i1 %or.cond9, %or.cond7.not
  br i1 %or.cond579, label %75, label %.thread589.sink.split

75:                                               ; preds = %74
  %76 = load i64, ptr %4, align 8, !tbaa !5
  %77 = icmp slt i64 %76, 0
  br i1 %77, label %.thread589.sink.split, label %78

78:                                               ; preds = %75
  %79 = load i64, ptr %6, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %76, i64 1)
  %80 = icmp slt i64 %79, %spec.select
  br i1 %80, label %.thread589.sink.split, label %81

81:                                               ; preds = %78
  %82 = load i64, ptr %9, align 8, !tbaa !5
  %83 = icmp slt i64 %82, 1
  %84 = icmp ult i64 %82, %76
  %or.cond600 = and i1 %62, %84
  %or.cond602 = or i1 %83, %or.cond600
  br i1 %or.cond602, label %.thread589.sink.split, label %85

85:                                               ; preds = %81
  %86 = load i64, ptr %11, align 8, !tbaa !5
  %87 = icmp slt i64 %86, 1
  %88 = icmp ult i64 %86, %76
  %or.cond601 = and i1 %66, %88
  %or.cond603 = or i1 %87, %or.cond601
  br i1 %or.cond603, label %.thread589.sink.split, label %89

89:                                               ; preds = %85
  %.pr = load i64, ptr %21, align 8, !tbaa !5
  %90 = icmp eq i64 %.pr, 0
  br i1 %90, label %91, label %.thread589

91:                                               ; preds = %89
  %92 = icmp eq i64 %76, 0
  br i1 %92, label %140, label %93

93:                                               ; preds = %91
  %94 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %4, ptr noundef nonnull @c__0) #6
  %95 = add i64 %94, 1
  %96 = mul i64 %95, %76
  %.not604 = icmp eq i64 %48, 0
  br i1 %.not604, label %99, label %97

97:                                               ; preds = %93
  %98 = tail call i32 @zhseqr_(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %18, ptr noundef nonnull @c_n1, ptr noundef nonnull %21) #6
  br label %.thread581

99:                                               ; preds = %93
  %.not558 = icmp eq i64 %49, 0
  br i1 %.not558, label %102, label %100

100:                                              ; preds = %99
  %101 = tail call i32 @zhseqr_(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef %10, ptr noundef nonnull %11, ptr noundef %18, ptr noundef nonnull @c_n1, ptr noundef nonnull %21) #6
  br label %.thread581

102:                                              ; preds = %99
  %.not559 = icmp eq i64 %50, 0
  %.str.4..str.2 = select i1 %.not559, ptr @.str.4, ptr @.str.2
  %103 = tail call i32 @zhseqr_(ptr noundef nonnull %.str.4..str.2, ptr noundef nonnull @.str.1, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef %10, ptr noundef nonnull %11, ptr noundef %18, ptr noundef nonnull @c_n1, ptr noundef nonnull %21) #6
  %104 = load double, ptr %18, align 8, !tbaa !9
  %105 = fptosi double %104 to i64
  %106 = load i64, ptr %4, align 8, !tbaa !5
  %107 = shl i64 %106, 1
  br i1 %or.cond, label %.thread583, label %113

.thread581:                                       ; preds = %97, %100
  %108 = load double, ptr %18, align 8, !tbaa !9
  %109 = fptosi double %108 to i64
  %110 = load i64, ptr %4, align 8, !tbaa !5
  %111 = shl i64 %110, 1
  br i1 %or.cond, label %123, label %119

.thread583:                                       ; preds = %102
  %112 = tail call i64 @llvm.smax.i64(i64 %96, i64 %105)
  br label %137

113:                                              ; preds = %102
  %114 = add i64 %106, 2
  %115 = mul i64 %114, %106
  %116 = tail call i64 @llvm.smax.i64(i64 %107, i64 %115)
  %117 = tail call i64 @llvm.smax.i64(i64 %96, i64 %105)
  store i64 %117, ptr %23, align 8, !tbaa !5
  store i64 %115, ptr %24, align 8, !tbaa !5
  %118 = tail call i64 @llvm.smax.i64(i64 %117, i64 %115)
  br label %137

119:                                              ; preds = %.thread581
  %120 = add i64 %110, 2
  %121 = mul i64 %120, %110
  %122 = tail call i64 @llvm.smax.i64(i64 %111, i64 %121)
  br label %123

123:                                              ; preds = %119, %.thread581
  %.1537 = phi i64 [ %111, %.thread581 ], [ %122, %119 ]
  %124 = tail call i64 @llvm.smax.i64(i64 %96, i64 %109)
  %125 = add nsw i64 %110, -1
  %126 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.7, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %4, ptr noundef nonnull @c_n1) #6
  %127 = mul nsw i64 %126, %125
  %128 = add nsw i64 %127, %110
  %129 = tail call i64 @llvm.smax.i64(i64 %124, i64 %128)
  %.pre = load i64, ptr %4, align 8, !tbaa !5
  br i1 %or.cond, label %134, label %130

130:                                              ; preds = %123
  %131 = add i64 %.pre, 2
  %132 = mul i64 %131, %.pre
  %133 = tail call i64 @llvm.smax.i64(i64 %129, i64 %132)
  br label %134

134:                                              ; preds = %130, %123
  %.0535 = phi i64 [ %129, %123 ], [ %133, %130 ]
  store i64 %.0535, ptr %23, align 8, !tbaa !5
  %135 = shl i64 %.pre, 1
  store i64 %135, ptr %24, align 8, !tbaa !5
  %136 = tail call i64 @llvm.smax.i64(i64 %.0535, i64 %135)
  br label %137

137:                                              ; preds = %.thread583, %113, %134
  %138 = phi i64 [ %.pre, %134 ], [ %106, %113 ], [ %106, %.thread583 ]
  %.2538 = phi i64 [ %.1537, %134 ], [ %116, %113 ], [ %107, %.thread583 ]
  %.1 = phi i64 [ %136, %134 ], [ %118, %113 ], [ %112, %.thread583 ]
  %139 = tail call i64 @llvm.smax.i64(i64 %.1, i64 %.2538)
  br label %140

140:                                              ; preds = %91, %137
  %141 = phi i64 [ %138, %137 ], [ 0, %91 ]
  %.3539 = phi i64 [ %.2538, %137 ], [ 1, %91 ]
  %.2 = phi i64 [ %139, %137 ], [ 1, %91 ]
  %142 = sitofp i64 %.2 to double
  store double %142, ptr %18, align 8, !tbaa !9
  %143 = getelementptr inbounds i8, ptr %18, i64 8
  store double 0.000000e+00, ptr %143, align 8, !tbaa !12
  %144 = load i64, ptr %19, align 8, !tbaa !5
  %145 = icmp sge i64 %144, %.3539
  %or.cond21 = select i1 %145, i1 true, i1 %47
  br i1 %or.cond21, label %.thread, label %.thread589.sink.split

.thread:                                          ; preds = %140
  %.pr586.pr = load i64, ptr %21, align 8, !tbaa !5
  %.not569 = icmp eq i64 %.pr586.pr, 0
  br i1 %.not569, label %149, label %.thread589

.thread589.sink.split:                            ; preds = %140, %85, %81, %78, %75, %69, %74, %67, %63, %59
  %.sink = phi i64 [ -1, %59 ], [ -2, %63 ], [ -3, %67 ], [ -4, %74 ], [ -4, %69 ], [ -5, %75 ], [ -7, %78 ], [ -10, %81 ], [ -12, %85 ], [ -20, %140 ]
  store i64 %.sink, ptr %21, align 8, !tbaa !5
  br label %.thread589

.thread589:                                       ; preds = %.thread589.sink.split, %89, %.thread
  %146 = phi i64 [ %.pr586.pr, %.thread ], [ %.pr, %89 ], [ %.sink, %.thread589.sink.split ]
  %147 = sub nsw i64 0, %146
  store i64 %147, ptr %23, align 8, !tbaa !5
  %148 = call i32 @xerbla_(ptr noundef nonnull @.str.9, ptr noundef nonnull %23) #6
  br label %287

149:                                              ; preds = %.thread
  %150 = icmp eq i64 %141, 0
  %or.cond629 = select i1 %47, i1 true, i1 %150
  br i1 %or.cond629, label %287, label %151

151:                                              ; preds = %149
  %152 = tail call double @dlamch_(ptr noundef nonnull @.str.5) #6
  %153 = tail call double @dlamch_(ptr noundef nonnull @.str.4) #6
  store double %153, ptr %38, align 8, !tbaa !13
  %154 = fdiv double 1.000000e+00, %153
  store double %154, ptr %37, align 8, !tbaa !13
  %155 = call i32 @dlabad_(ptr noundef nonnull %38, ptr noundef nonnull %37) #6
  %156 = load double, ptr %38, align 8, !tbaa !13
  %157 = call double @sqrt(double noundef %156) #6
  %158 = fdiv double %157, %152
  store double %158, ptr %38, align 8, !tbaa !13
  %159 = fdiv double 1.000000e+00, %158
  store double %159, ptr %37, align 8, !tbaa !13
  store i64 0, ptr %34, align 8, !tbaa !5
  %160 = call double @zlange_(ptr noundef nonnull @.str.10, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %28) #6
  store double %160, ptr %31, align 8, !tbaa !13
  %161 = fcmp ogt double %160, 0.000000e+00
  %162 = load double, ptr %38, align 8
  %163 = fcmp olt double %160, %162
  %or.cond606 = select i1 %161, i1 %163, i1 false
  br i1 %or.cond606, label %167, label %164

164:                                              ; preds = %151
  %165 = load double, ptr %37, align 8, !tbaa !13
  %166 = fcmp ogt double %160, %165
  br i1 %166, label %167, label %169

167:                                              ; preds = %151, %164
  %storemerge = phi double [ %165, %164 ], [ %162, %151 ]
  store double %storemerge, ptr %35, align 8, !tbaa !13
  %168 = call i32 @zlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %31, ptr noundef nonnull %35, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %32) #6
  br label %169

169:                                              ; preds = %164, %167
  %.not570596 = phi i1 [ false, %167 ], [ true, %164 ]
  %170 = call i32 @zgebal_(ptr noundef %0, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef nonnull %32) #6
  %171 = call double @zlange_(ptr noundef nonnull @.str.12, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %28) #6
  store double %171, ptr %15, align 8, !tbaa !13
  br i1 %.not570596, label %175, label %172

172:                                              ; preds = %169
  store double %171, ptr %28, align 8, !tbaa !13
  %173 = call i32 @dlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %35, ptr noundef nonnull %31, ptr noundef nonnull @c__1, ptr noundef nonnull @c__1, ptr noundef nonnull %28, ptr noundef nonnull @c__1, ptr noundef nonnull %32) #6
  %174 = load double, ptr %28, align 8, !tbaa !13
  store double %174, ptr %15, align 8, !tbaa !13
  br label %175

175:                                              ; preds = %172, %169
  %176 = load i64, ptr %4, align 8, !tbaa !5
  %177 = load i64, ptr %19, align 8, !tbaa !5
  %178 = sub i64 %177, %176
  store i64 %178, ptr %23, align 8, !tbaa !5
  %179 = getelementptr %struct.doublecomplex, ptr %18, i64 %176
  %180 = call i32 @zgehrd_(ptr noundef nonnull %4, ptr noundef %12, ptr noundef %13, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %18, ptr noundef %179, ptr noundef nonnull %23, ptr noundef nonnull %32) #6
  br i1 %62, label %181, label %190

181:                                              ; preds = %175
  store i8 76, ptr %30, align 1, !tbaa !14
  %182 = call i32 @zlacpy_(ptr noundef nonnull @.str.13, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %8, ptr noundef nonnull %9) #6
  %183 = load i64, ptr %19, align 8, !tbaa !5
  %184 = sub i64 %183, %176
  store i64 %184, ptr %23, align 8, !tbaa !5
  %185 = call i32 @zunghr_(ptr noundef nonnull %4, ptr noundef %12, ptr noundef %13, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %18, ptr noundef %179, ptr noundef nonnull %23, ptr noundef nonnull %32) #6
  %186 = load i64, ptr %19, align 8, !tbaa !5
  store i64 %186, ptr %23, align 8, !tbaa !5
  %187 = call i32 @zhseqr_(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str, ptr noundef nonnull %4, ptr noundef %12, ptr noundef %13, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %18, ptr noundef nonnull %23, ptr noundef nonnull %21) #6
  %.not573 = icmp eq i64 %49, 0
  br i1 %.not573, label %201, label %188

188:                                              ; preds = %181
  store i8 66, ptr %30, align 1, !tbaa !14
  %189 = call i32 @zlacpy_(ptr noundef nonnull @.str.14, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %10, ptr noundef nonnull %11) #6
  br label %201

190:                                              ; preds = %175
  %.not571 = icmp eq i64 %49, 0
  br i1 %.not571, label %198, label %191

191:                                              ; preds = %190
  store i8 82, ptr %30, align 1, !tbaa !14
  %192 = call i32 @zlacpy_(ptr noundef nonnull @.str.13, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %10, ptr noundef nonnull %11) #6
  %193 = load i64, ptr %19, align 8, !tbaa !5
  %194 = sub i64 %193, %176
  store i64 %194, ptr %23, align 8, !tbaa !5
  %195 = call i32 @zunghr_(ptr noundef nonnull %4, ptr noundef %12, ptr noundef %13, ptr noundef %10, ptr noundef nonnull %11, ptr noundef nonnull %18, ptr noundef %179, ptr noundef nonnull %23, ptr noundef nonnull %32) #6
  %196 = load i64, ptr %19, align 8, !tbaa !5
  store i64 %196, ptr %23, align 8, !tbaa !5
  %197 = call i32 @zhseqr_(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str, ptr noundef nonnull %4, ptr noundef %12, ptr noundef %13, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef %10, ptr noundef nonnull %11, ptr noundef nonnull %18, ptr noundef nonnull %23, ptr noundef nonnull %21) #6
  br label %201

198:                                              ; preds = %190
  %.not572 = icmp eq i64 %50, 0
  %. = select i1 %.not572, i8 83, i8 69
  store i8 %., ptr %26, align 1, !tbaa !14
  %199 = load i64, ptr %19, align 8, !tbaa !5
  store i64 %199, ptr %23, align 8, !tbaa !5
  %200 = call i32 @zhseqr_(ptr noundef nonnull %26, ptr noundef nonnull @.str.1, ptr noundef nonnull %4, ptr noundef %12, ptr noundef %13, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %7, ptr noundef %10, ptr noundef nonnull %11, ptr noundef nonnull %18, ptr noundef nonnull %23, ptr noundef nonnull %21) #6
  br label %201

201:                                              ; preds = %191, %198, %181, %188
  %202 = load i64, ptr %21, align 8, !tbaa !5
  %203 = icmp sgt i64 %202, 0
  br i1 %203, label %.loopexit, label %204

204:                                              ; preds = %201
  %205 = or i64 %48, %49
  %or.cond23.not = icmp eq i64 %205, 0
  br i1 %or.cond23.not, label %208, label %206

206:                                              ; preds = %204
  %207 = call i32 @ztrevc_(ptr noundef nonnull %30, ptr noundef nonnull @.str.3, ptr noundef nonnull %36, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %10, ptr noundef nonnull %11, ptr noundef nonnull %4, ptr noundef nonnull %33, ptr noundef nonnull %18, ptr noundef %20, ptr noundef nonnull %32) #6
  br label %208

208:                                              ; preds = %204, %206
  %.not574 = icmp eq i64 %50, 0
  br i1 %.not574, label %209, label %211

209:                                              ; preds = %208
  %210 = call i32 @ztrsna_(ptr noundef %3, ptr noundef nonnull @.str.15, ptr noundef nonnull %36, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %10, ptr noundef nonnull %11, ptr noundef %16, ptr noundef %17, ptr noundef nonnull %4, ptr noundef nonnull %33, ptr noundef nonnull %18, ptr noundef nonnull %4, ptr noundef %20, ptr noundef nonnull %34) #6
  br label %211

211:                                              ; preds = %209, %208
  br i1 %62, label %212, label %.loopexit607

212:                                              ; preds = %211
  %213 = call i32 @zgebak_(ptr noundef %0, ptr noundef nonnull @.str.13, ptr noundef nonnull %4, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef nonnull %4, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %32) #6
  %214 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %214, ptr %23, align 8, !tbaa !5
  %invariant.gep610 = getelementptr i8, ptr %41, i64 16
  %.not575612 = icmp slt i64 %214, 1
  br i1 %.not575612, label %.loopexit607, label %.lr.ph615

.lr.ph615:                                        ; preds = %212, %._crit_edge
  %.0544613 = phi i64 [ %238, %._crit_edge ], [ 1, %212 ]
  %215 = mul nsw i64 %.0544613, %39
  %gep611 = getelementptr %struct.doublecomplex, ptr %invariant.gep610, i64 %215
  %216 = call double @f2c_dznrm2(ptr noundef nonnull %4, ptr noundef %gep611, ptr noundef nonnull @c__1) #6
  %217 = fdiv double 1.000000e+00, %216
  store double %217, ptr %27, align 8, !tbaa !13
  %218 = call i32 @f2c_zdscal(ptr noundef nonnull %4, ptr noundef nonnull %27, ptr noundef %gep611, ptr noundef nonnull @c__1) #6
  %219 = load i64, ptr %4, align 8, !tbaa !5
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %41, i64 %215
  %.not578608 = icmp slt i64 %219, 1
  br i1 %.not578608, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph615, %.lr.ph
  %.0542609 = phi i64 [ %225, %.lr.ph ], [ 1, %.lr.ph615 ]
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.0542609
  %220 = load double, ptr %gep, align 8, !tbaa !9
  %221 = call double @d_imag(ptr noundef nonnull %gep) #6
  %222 = fmul double %221, %221
  %223 = call double @llvm.fmuladd.f64(double %220, double %220, double %222)
  %224 = getelementptr inbounds double, ptr %45, i64 %.0542609
  store double %223, ptr %224, align 8, !tbaa !13
  %225 = add nuw nsw i64 %.0542609, 1
  %.not578.not = icmp slt i64 %.0542609, %219
  br i1 %.not578.not, label %.lr.ph, label %._crit_edge, !llvm.loop !15

._crit_edge:                                      ; preds = %.lr.ph, %.lr.ph615
  %226 = call i64 @f2c_idamax(ptr noundef nonnull %4, ptr noundef %20, ptr noundef nonnull @c__1) #6
  %227 = add nsw i64 %226, %215
  %228 = getelementptr inbounds %struct.doublecomplex, ptr %41, i64 %227
  call void @d_cnjg(ptr noundef nonnull %25, ptr noundef %228) #6
  %229 = getelementptr inbounds double, ptr %45, i64 %226
  %230 = load double, ptr %229, align 8, !tbaa !13
  %231 = call double @sqrt(double noundef %230) #6
  %232 = load <2 x double>, ptr %25, align 16, !tbaa !13
  %233 = insertelement <2 x double> poison, double %231, i64 0
  %234 = shufflevector <2 x double> %233, <2 x double> poison, <2 x i32> zeroinitializer
  %235 = fdiv <2 x double> %232, %234
  store <2 x double> %235, ptr %29, align 16, !tbaa !13
  %236 = call i32 @f2c_zscal(ptr noundef nonnull %4, ptr noundef nonnull %29, ptr noundef %gep611, ptr noundef nonnull @c__1) #6
  store i64 %227, ptr %24, align 8, !tbaa !5
  %237 = getelementptr inbounds i8, ptr %228, i64 8
  store double 0.000000e+00, ptr %237, align 8, !tbaa !12
  %238 = add nuw nsw i64 %.0544613, 1
  %239 = load i64, ptr %23, align 8, !tbaa !5
  %.not575.not = icmp slt i64 %.0544613, %239
  br i1 %.not575.not, label %.lr.ph615, label %.loopexit607, !llvm.loop !17

.loopexit607:                                     ; preds = %._crit_edge, %212, %211
  br i1 %66, label %240, label %.loopexit

240:                                              ; preds = %.loopexit607
  %241 = call i32 @zgebak_(ptr noundef %0, ptr noundef nonnull @.str.16, ptr noundef nonnull %4, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef nonnull %4, ptr noundef %10, ptr noundef nonnull %11, ptr noundef nonnull %32) #6
  %242 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %242, ptr %23, align 8, !tbaa !5
  %invariant.gep623 = getelementptr i8, ptr %44, i64 16
  %.not576625 = icmp slt i64 %242, 1
  br i1 %.not576625, label %.loopexit, label %.lr.ph628

.lr.ph628:                                        ; preds = %240, %._crit_edge622
  %.1545626 = phi i64 [ %266, %._crit_edge622 ], [ 1, %240 ]
  %243 = mul nsw i64 %.1545626, %42
  %gep624 = getelementptr %struct.doublecomplex, ptr %invariant.gep623, i64 %243
  %244 = call double @f2c_dznrm2(ptr noundef nonnull %4, ptr noundef %gep624, ptr noundef nonnull @c__1) #6
  %245 = fdiv double 1.000000e+00, %244
  store double %245, ptr %27, align 8, !tbaa !13
  %246 = call i32 @f2c_zdscal(ptr noundef nonnull %4, ptr noundef nonnull %27, ptr noundef %gep624, ptr noundef nonnull @c__1) #6
  %247 = load i64, ptr %4, align 8, !tbaa !5
  %invariant.gep616 = getelementptr %struct.doublecomplex, ptr %44, i64 %243
  %.not577618 = icmp slt i64 %247, 1
  br i1 %.not577618, label %._crit_edge622, label %.lr.ph621

.lr.ph621:                                        ; preds = %.lr.ph628, %.lr.ph621
  %.1543619 = phi i64 [ %253, %.lr.ph621 ], [ 1, %.lr.ph628 ]
  %gep617 = getelementptr %struct.doublecomplex, ptr %invariant.gep616, i64 %.1543619
  %248 = load double, ptr %gep617, align 8, !tbaa !9
  %249 = call double @d_imag(ptr noundef nonnull %gep617) #6
  %250 = fmul double %249, %249
  %251 = call double @llvm.fmuladd.f64(double %248, double %248, double %250)
  %252 = getelementptr inbounds double, ptr %45, i64 %.1543619
  store double %251, ptr %252, align 8, !tbaa !13
  %253 = add nuw nsw i64 %.1543619, 1
  %.not577.not = icmp slt i64 %.1543619, %247
  br i1 %.not577.not, label %.lr.ph621, label %._crit_edge622, !llvm.loop !18

._crit_edge622:                                   ; preds = %.lr.ph621, %.lr.ph628
  %254 = call i64 @f2c_idamax(ptr noundef nonnull %4, ptr noundef %20, ptr noundef nonnull @c__1) #6
  %255 = add nsw i64 %254, %243
  %256 = getelementptr inbounds %struct.doublecomplex, ptr %44, i64 %255
  call void @d_cnjg(ptr noundef nonnull %25, ptr noundef %256) #6
  %257 = getelementptr inbounds double, ptr %45, i64 %254
  %258 = load double, ptr %257, align 8, !tbaa !13
  %259 = call double @sqrt(double noundef %258) #6
  %260 = load <2 x double>, ptr %25, align 16, !tbaa !13
  %261 = insertelement <2 x double> poison, double %259, i64 0
  %262 = shufflevector <2 x double> %261, <2 x double> poison, <2 x i32> zeroinitializer
  %263 = fdiv <2 x double> %260, %262
  store <2 x double> %263, ptr %29, align 16, !tbaa !13
  %264 = call i32 @f2c_zscal(ptr noundef nonnull %4, ptr noundef nonnull %29, ptr noundef %gep624, ptr noundef nonnull @c__1) #6
  store i64 %255, ptr %24, align 8, !tbaa !5
  %265 = getelementptr inbounds i8, ptr %256, i64 8
  store double 0.000000e+00, ptr %265, align 8, !tbaa !12
  %266 = add nuw nsw i64 %.1545626, 1
  %267 = load i64, ptr %23, align 8, !tbaa !5
  %.not576.not = icmp slt i64 %.1545626, %267
  br i1 %.not576.not, label %.lr.ph628, label %.loopexit, !llvm.loop !19

.loopexit:                                        ; preds = %._crit_edge622, %240, %.loopexit607, %201
  br i1 %.not570596, label %286, label %268

268:                                              ; preds = %.loopexit
  %269 = load i64, ptr %4, align 8, !tbaa !5
  %270 = load i64, ptr %21, align 8, !tbaa !5
  %271 = sub nsw i64 %269, %270
  store i64 %271, ptr %23, align 8, !tbaa !5
  %272 = call i64 @llvm.smax.i64(i64 %271, i64 1)
  store i64 %272, ptr %24, align 8, !tbaa !5
  %273 = getelementptr %struct.doublecomplex, ptr %7, i64 %270
  %274 = call i32 @zlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %35, ptr noundef nonnull %31, ptr noundef nonnull %23, ptr noundef nonnull @c__1, ptr noundef %273, ptr noundef nonnull %24, ptr noundef nonnull %32) #6
  %275 = load i64, ptr %21, align 8, !tbaa !5
  %276 = icmp eq i64 %275, 0
  br i1 %276, label %277, label %282

277:                                              ; preds = %268
  %or.cond25 = select i1 %73, i1 true, i1 %72
  %278 = load i64, ptr %34, align 8
  %279 = icmp eq i64 %278, 0
  %or.cond27 = select i1 %or.cond25, i1 %279, i1 false
  br i1 %or.cond27, label %280, label %286

280:                                              ; preds = %277
  %281 = call i32 @dlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %35, ptr noundef nonnull %31, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef %17, ptr noundef nonnull %4, ptr noundef nonnull %32) #6
  br label %286

282:                                              ; preds = %268
  %283 = load i64, ptr %12, align 8, !tbaa !5
  %284 = add nsw i64 %283, -1
  store i64 %284, ptr %23, align 8, !tbaa !5
  %285 = call i32 @zlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %35, ptr noundef nonnull %31, ptr noundef nonnull %23, ptr noundef nonnull @c__1, ptr noundef %7, ptr noundef nonnull %4, ptr noundef nonnull %32) #6
  br label %286

286:                                              ; preds = %282, %277, %280, %.loopexit
  store double %142, ptr %18, align 8, !tbaa !9
  store double 0.000000e+00, ptr %143, align 8, !tbaa !12
  br label %287

287:                                              ; preds = %149, %286, %.thread589
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 16, 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 1, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #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 i64 @ilaenv_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

declare i32 @dlabad_(ptr noundef, 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 @zlange_(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 @zgebal_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @dlascl_(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 @zgehrd_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, 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 @zunghr_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @ztrevc_(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 @ztrsna_(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 @zgebak_(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 double @f2c_dznrm2(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare double @d_imag(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #4

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

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

declare i32 @f2c_zscal(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.smax.i64(i64, i64) #5

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


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass