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

; 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
@c__1 = external hidden global i64, align 8
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@c__0 = external hidden global i64, align 8
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1
@c_n1 = external hidden global i64, align 8
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.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

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

113:                                              ; preds = %14
  %114 = load ptr, ptr %16, align 8, !tbaa !5
  %115 = call i64 @lsame_(ptr noundef %114, ptr noundef @.str.1)
  %116 = icmp ne i64 %115, 0
  br i1 %116, label %119, label %117

117:                                              ; preds = %113
  %118 = load ptr, ptr %29, align 8, !tbaa !5
  store i64 -1, ptr %118, align 8, !tbaa !9
  br label %184

119:                                              ; preds = %113, %14
  %120 = load i64, ptr %69, align 8, !tbaa !9
  %121 = icmp ne i64 %120, 0
  br i1 %121, label %128, label %122

122:                                              ; preds = %119
  %123 = load ptr, ptr %17, align 8, !tbaa !5
  %124 = call i64 @lsame_(ptr noundef %123, ptr noundef @.str.1)
  %125 = icmp ne i64 %124, 0
  br i1 %125, label %128, label %126

126:                                              ; preds = %122
  %127 = load ptr, ptr %29, align 8, !tbaa !5
  store i64 -2, ptr %127, align 8, !tbaa !9
  br label %183

128:                                              ; preds = %122, %119
  %129 = load ptr, ptr %18, align 8, !tbaa !5
  %130 = load i64, ptr %129, align 8, !tbaa !9
  %131 = icmp slt i64 %130, 0
  br i1 %131, label %132, label %134

132:                                              ; preds = %128
  %133 = load ptr, ptr %29, align 8, !tbaa !5
  store i64 -3, ptr %133, align 8, !tbaa !9
  br label %182

134:                                              ; preds = %128
  %135 = load ptr, ptr %20, align 8, !tbaa !5
  %136 = load i64, ptr %135, align 8, !tbaa !9
  %137 = load ptr, ptr %18, align 8, !tbaa !5
  %138 = load i64, ptr %137, align 8, !tbaa !9
  %139 = icmp sge i64 1, %138
  br i1 %139, label %140, label %141

140:                                              ; preds = %134
  br label %144

141:                                              ; preds = %134
  %142 = load ptr, ptr %18, align 8, !tbaa !5
  %143 = load i64, ptr %142, align 8, !tbaa !9
  br label %144

144:                                              ; preds = %141, %140
  %145 = phi i64 [ 1, %140 ], [ %143, %141 ]
  %146 = icmp slt i64 %136, %145
  br i1 %146, label %147, label %149

147:                                              ; preds = %144
  %148 = load ptr, ptr %29, align 8, !tbaa !5
  store i64 -5, ptr %148, align 8, !tbaa !9
  br label %181

149:                                              ; preds = %144
  %150 = load ptr, ptr %23, align 8, !tbaa !5
  %151 = load i64, ptr %150, align 8, !tbaa !9
  %152 = icmp slt i64 %151, 1
  br i1 %152, label %162, label %153

153:                                              ; preds = %149
  %154 = load i64, ptr %64, align 8, !tbaa !9
  %155 = icmp ne i64 %154, 0
  br i1 %155, label %156, label %164

156:                                              ; preds = %153
  %157 = load ptr, ptr %23, align 8, !tbaa !5
  %158 = load i64, ptr %157, align 8, !tbaa !9
  %159 = load ptr, ptr %18, align 8, !tbaa !5
  %160 = load i64, ptr %159, align 8, !tbaa !9
  %161 = icmp slt i64 %158, %160
  br i1 %161, label %162, label %164

162:                                              ; preds = %156, %149
  %163 = load ptr, ptr %29, align 8, !tbaa !5
  store i64 -8, ptr %163, align 8, !tbaa !9
  br label %180

164:                                              ; preds = %156, %153
  %165 = load ptr, ptr %25, align 8, !tbaa !5
  %166 = load i64, ptr %165, align 8, !tbaa !9
  %167 = icmp slt i64 %166, 1
  br i1 %167, label %177, label %168

168:                                              ; preds = %164
  %169 = load i64, ptr %69, align 8, !tbaa !9
  %170 = icmp ne i64 %169, 0
  br i1 %170, label %171, label %179

171:                                              ; preds = %168
  %172 = load ptr, ptr %25, align 8, !tbaa !5
  %173 = load i64, ptr %172, align 8, !tbaa !9
  %174 = load ptr, ptr %18, align 8, !tbaa !5
  %175 = load i64, ptr %174, align 8, !tbaa !9
  %176 = icmp slt i64 %173, %175
  br i1 %176, label %177, label %179

177:                                              ; preds = %171, %164
  %178 = load ptr, ptr %29, align 8, !tbaa !5
  store i64 -10, ptr %178, align 8, !tbaa !9
  br label %179

179:                                              ; preds = %177, %171, %168
  br label %180

180:                                              ; preds = %179, %162
  br label %181

181:                                              ; preds = %180, %147
  br label %182

182:                                              ; preds = %181, %132
  br label %183

183:                                              ; preds = %182, %126
  br label %184

184:                                              ; preds = %183, %117
  %185 = load ptr, ptr %29, align 8, !tbaa !5
  %186 = load i64, ptr %185, align 8, !tbaa !9
  %187 = icmp eq i64 %186, 0
  br i1 %187, label %188, label %346

188:                                              ; preds = %184
  %189 = load ptr, ptr %18, align 8, !tbaa !5
  %190 = load i64, ptr %189, align 8, !tbaa !9
  %191 = icmp eq i64 %190, 0
  br i1 %191, label %192, label %193

192:                                              ; preds = %188
  store i64 1, ptr %62, align 8, !tbaa !9
  store i64 1, ptr %63, align 8, !tbaa !9
  br label %327

193:                                              ; preds = %188
  %194 = load ptr, ptr %18, align 8, !tbaa !5
  %195 = load i64, ptr %194, align 8, !tbaa !9
  %196 = load ptr, ptr %18, align 8, !tbaa !5
  %197 = load i64, ptr %196, align 8, !tbaa !9
  %198 = load ptr, ptr %18, align 8, !tbaa !5
  %199 = load ptr, ptr %18, align 8, !tbaa !5
  %200 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %198, ptr noundef @c__1, ptr noundef %199, ptr noundef @c__0)
  %201 = mul nsw i64 %197, %200
  %202 = add nsw i64 %195, %201
  store i64 %202, ptr %63, align 8, !tbaa !9
  %203 = load ptr, ptr %18, align 8, !tbaa !5
  %204 = load i64, ptr %203, align 8, !tbaa !9
  %205 = shl i64 %204, 1
  store i64 %205, ptr %62, align 8, !tbaa !9
  %206 = load i64, ptr %64, align 8, !tbaa !9
  %207 = icmp ne i64 %206, 0
  br i1 %207, label %208, label %245

208:                                              ; preds = %193
  %209 = load i64, ptr %63, align 8, !tbaa !9
  store i64 %209, ptr %36, align 8, !tbaa !9
  %210 = load ptr, ptr %18, align 8, !tbaa !5
  %211 = load i64, ptr %210, align 8, !tbaa !9
  %212 = load ptr, ptr %18, align 8, !tbaa !5
  %213 = load i64, ptr %212, align 8, !tbaa !9
  %214 = sub nsw i64 %213, 1
  %215 = load ptr, ptr %18, align 8, !tbaa !5
  %216 = load ptr, ptr %18, align 8, !tbaa !5
  %217 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.4, ptr noundef @.str.3, ptr noundef %215, ptr noundef @c__1, ptr noundef %216, ptr noundef @c_n1)
  %218 = mul nsw i64 %214, %217
  %219 = add nsw i64 %211, %218
  store i64 %219, ptr %37, align 8, !tbaa !9
  %220 = load i64, ptr %36, align 8, !tbaa !9
  %221 = load i64, ptr %37, align 8, !tbaa !9
  %222 = icmp sge i64 %220, %221
  br i1 %222, label %223, label %225

223:                                              ; preds = %208
  %224 = load i64, ptr %36, align 8, !tbaa !9
  br label %227

225:                                              ; preds = %208
  %226 = load i64, ptr %37, align 8, !tbaa !9
  br label %227

227:                                              ; preds = %225, %223
  %228 = phi i64 [ %224, %223 ], [ %226, %225 ]
  store i64 %228, ptr %63, align 8, !tbaa !9
  %229 = load ptr, ptr %18, align 8, !tbaa !5
  %230 = load ptr, ptr %18, align 8, !tbaa !5
  %231 = load ptr, ptr %19, align 8, !tbaa !5
  %232 = load i64, ptr %31, align 8, !tbaa !9
  %233 = getelementptr inbounds %struct.doublecomplex, ptr %231, i64 %232
  %234 = load ptr, ptr %20, align 8, !tbaa !5
  %235 = load ptr, ptr %21, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.doublecomplex, ptr %235, i64 1
  %237 = load ptr, ptr %22, align 8, !tbaa !5
  %238 = load i64, ptr %33, align 8, !tbaa !9
  %239 = getelementptr inbounds %struct.doublecomplex, ptr %237, i64 %238
  %240 = load ptr, ptr %23, align 8, !tbaa !5
  %241 = load ptr, ptr %26, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.doublecomplex, ptr %241, i64 1
  %243 = load ptr, ptr %29, align 8, !tbaa !5
  %244 = call i32 @zhseqr_(ptr noundef @.str.5, ptr noundef @.str, ptr noundef %229, ptr noundef @c__1, ptr noundef %230, ptr noundef %233, ptr noundef %234, ptr noundef %236, ptr noundef %239, ptr noundef %240, ptr noundef %242, ptr noundef @c_n1, ptr noundef %243)
  br label %303

245:                                              ; preds = %193
  %246 = load i64, ptr %69, align 8, !tbaa !9
  %247 = icmp ne i64 %246, 0
  br i1 %247, label %248, label %285

248:                                              ; preds = %245
  %249 = load i64, ptr %63, align 8, !tbaa !9
  store i64 %249, ptr %36, align 8, !tbaa !9
  %250 = load ptr, ptr %18, align 8, !tbaa !5
  %251 = load i64, ptr %250, align 8, !tbaa !9
  %252 = load ptr, ptr %18, align 8, !tbaa !5
  %253 = load i64, ptr %252, align 8, !tbaa !9
  %254 = sub nsw i64 %253, 1
  %255 = load ptr, ptr %18, align 8, !tbaa !5
  %256 = load ptr, ptr %18, align 8, !tbaa !5
  %257 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.4, ptr noundef @.str.3, ptr noundef %255, ptr noundef @c__1, ptr noundef %256, ptr noundef @c_n1)
  %258 = mul nsw i64 %254, %257
  %259 = add nsw i64 %251, %258
  store i64 %259, ptr %37, align 8, !tbaa !9
  %260 = load i64, ptr %36, align 8, !tbaa !9
  %261 = load i64, ptr %37, align 8, !tbaa !9
  %262 = icmp sge i64 %260, %261
  br i1 %262, label %263, label %265

263:                                              ; preds = %248
  %264 = load i64, ptr %36, align 8, !tbaa !9
  br label %267

265:                                              ; preds = %248
  %266 = load i64, ptr %37, align 8, !tbaa !9
  br label %267

267:                                              ; preds = %265, %263
  %268 = phi i64 [ %264, %263 ], [ %266, %265 ]
  store i64 %268, ptr %63, align 8, !tbaa !9
  %269 = load ptr, ptr %18, align 8, !tbaa !5
  %270 = load ptr, ptr %18, align 8, !tbaa !5
  %271 = load ptr, ptr %19, align 8, !tbaa !5
  %272 = load i64, ptr %31, align 8, !tbaa !9
  %273 = getelementptr inbounds %struct.doublecomplex, ptr %271, i64 %272
  %274 = load ptr, ptr %20, align 8, !tbaa !5
  %275 = load ptr, ptr %21, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.doublecomplex, ptr %275, i64 1
  %277 = load ptr, ptr %24, align 8, !tbaa !5
  %278 = load i64, ptr %35, align 8, !tbaa !9
  %279 = getelementptr inbounds %struct.doublecomplex, ptr %277, i64 %278
  %280 = load ptr, ptr %25, align 8, !tbaa !5
  %281 = load ptr, ptr %26, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.doublecomplex, ptr %281, i64 1
  %283 = load ptr, ptr %29, align 8, !tbaa !5
  %284 = call i32 @zhseqr_(ptr noundef @.str.5, ptr noundef @.str, ptr noundef %269, ptr noundef @c__1, ptr noundef %270, ptr noundef %273, ptr noundef %274, ptr noundef %276, ptr noundef %279, ptr noundef %280, ptr noundef %282, ptr noundef @c_n1, ptr noundef %283)
  br label %302

285:                                              ; preds = %245
  %286 = load ptr, ptr %18, align 8, !tbaa !5
  %287 = load ptr, ptr %18, align 8, !tbaa !5
  %288 = load ptr, ptr %19, align 8, !tbaa !5
  %289 = load i64, ptr %31, align 8, !tbaa !9
  %290 = getelementptr inbounds %struct.doublecomplex, ptr %288, i64 %289
  %291 = load ptr, ptr %20, align 8, !tbaa !5
  %292 = load ptr, ptr %21, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.doublecomplex, ptr %292, i64 1
  %294 = load ptr, ptr %24, align 8, !tbaa !5
  %295 = load i64, ptr %35, align 8, !tbaa !9
  %296 = getelementptr inbounds %struct.doublecomplex, ptr %294, i64 %295
  %297 = load ptr, ptr %25, align 8, !tbaa !5
  %298 = load ptr, ptr %26, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.doublecomplex, ptr %298, i64 1
  %300 = load ptr, ptr %29, align 8, !tbaa !5
  %301 = call i32 @zhseqr_(ptr noundef @.str.6, ptr noundef @.str.1, ptr noundef %286, ptr noundef @c__1, ptr noundef %287, ptr noundef %290, ptr noundef %291, ptr noundef %293, ptr noundef %296, ptr noundef %297, ptr noundef %299, ptr noundef @c_n1, ptr noundef %300)
  br label %302

302:                                              ; preds = %285, %267
  br label %303

303:                                              ; preds = %302, %227
  %304 = load ptr, ptr %26, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.doublecomplex, ptr %304, i64 1
  %306 = getelementptr inbounds %struct.doublecomplex, ptr %305, i32 0, i32 0
  %307 = load double, ptr %306, align 8, !tbaa !11
  %308 = fptosi double %307 to i64
  store i64 %308, ptr %66, align 8, !tbaa !9
  %309 = load i64, ptr %63, align 8, !tbaa !9
  %310 = load i64, ptr %66, align 8, !tbaa !9
  %311 = icmp sge i64 %309, %310
  br i1 %311, label %312, label %314

312:                                              ; preds = %303
  %313 = load i64, ptr %63, align 8, !tbaa !9
  br label %316

314:                                              ; preds = %303
  %315 = load i64, ptr %66, align 8, !tbaa !9
  br label %316

316:                                              ; preds = %314, %312
  %317 = phi i64 [ %313, %312 ], [ %315, %314 ]
  store i64 %317, ptr %36, align 8, !tbaa !9
  %318 = load i64, ptr %36, align 8, !tbaa !9
  %319 = load i64, ptr %62, align 8, !tbaa !9
  %320 = icmp sge i64 %318, %319
  br i1 %320, label %321, label %323

321:                                              ; preds = %316
  %322 = load i64, ptr %36, align 8, !tbaa !9
  br label %325

323:                                              ; preds = %316
  %324 = load i64, ptr %62, align 8, !tbaa !9
  br label %325

325:                                              ; preds = %323, %321
  %326 = phi i64 [ %322, %321 ], [ %324, %323 ]
  store i64 %326, ptr %63, align 8, !tbaa !9
  br label %327

327:                                              ; preds = %325, %192
  %328 = load i64, ptr %63, align 8, !tbaa !9
  %329 = sitofp i64 %328 to double
  %330 = load ptr, ptr %26, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.doublecomplex, ptr %330, i64 1
  %332 = getelementptr inbounds %struct.doublecomplex, ptr %331, i32 0, i32 0
  store double %329, ptr %332, align 8, !tbaa !11
  %333 = load ptr, ptr %26, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.doublecomplex, ptr %333, i64 1
  %335 = getelementptr inbounds %struct.doublecomplex, ptr %334, i32 0, i32 1
  store double 0.000000e+00, ptr %335, align 8, !tbaa !14
  %336 = load ptr, ptr %27, align 8, !tbaa !5
  %337 = load i64, ptr %336, align 8, !tbaa !9
  %338 = load i64, ptr %62, align 8, !tbaa !9
  %339 = icmp slt i64 %337, %338
  br i1 %339, label %340, label %345

340:                                              ; preds = %327
  %341 = load i64, ptr %68, align 8, !tbaa !9
  %342 = icmp ne i64 %341, 0
  br i1 %342, label %345, label %343

343:                                              ; preds = %340
  %344 = load ptr, ptr %29, align 8, !tbaa !5
  store i64 -12, ptr %344, align 8, !tbaa !9
  br label %345

345:                                              ; preds = %343, %340, %327
  br label %346

346:                                              ; preds = %345, %184
  %347 = load ptr, ptr %29, align 8, !tbaa !5
  %348 = load i64, ptr %347, align 8, !tbaa !9
  %349 = icmp ne i64 %348, 0
  br i1 %349, label %350, label %355

350:                                              ; preds = %346
  %351 = load ptr, ptr %29, align 8, !tbaa !5
  %352 = load i64, ptr %351, align 8, !tbaa !9
  %353 = sub nsw i64 0, %352
  store i64 %353, ptr %36, align 8, !tbaa !9
  %354 = call i32 @xerbla_(ptr noundef @.str.7, ptr noundef %36)
  store i32 0, ptr %15, align 4
  store i32 1, ptr %70, align 4
  br label %992

355:                                              ; preds = %346
  %356 = load i64, ptr %68, align 8, !tbaa !9
  %357 = icmp ne i64 %356, 0
  br i1 %357, label %358, label %359

358:                                              ; preds = %355
  store i32 0, ptr %15, align 4
  store i32 1, ptr %70, align 4
  br label %992

359:                                              ; preds = %355
  br label %360

360:                                              ; preds = %359
  %361 = load ptr, ptr %18, align 8, !tbaa !5
  %362 = load i64, ptr %361, align 8, !tbaa !9
  %363 = icmp eq i64 %362, 0
  br i1 %363, label %364, label %365

364:                                              ; preds = %360
  store i32 0, ptr %15, align 4
  store i32 1, ptr %70, align 4
  br label %992

365:                                              ; preds = %360
  %366 = call double @dlamch_(ptr noundef @.str.8)
  store double %366, ptr %49, align 8, !tbaa !15
  %367 = call double @dlamch_(ptr noundef @.str.5)
  store double %367, ptr %65, align 8, !tbaa !15
  %368 = load double, ptr %65, align 8, !tbaa !15
  %369 = fdiv double 1.000000e+00, %368
  store double %369, ptr %61, align 8, !tbaa !15
  %370 = call i32 @dlabad_(ptr noundef %65, ptr noundef %61)
  %371 = load double, ptr %65, align 8, !tbaa !15
  %372 = call double @sqrt(double noundef %371) #5
  %373 = load double, ptr %49, align 8, !tbaa !15
  %374 = fdiv double %372, %373
  store double %374, ptr %65, align 8, !tbaa !15
  %375 = load double, ptr %65, align 8, !tbaa !15
  %376 = fdiv double 1.000000e+00, %375
  store double %376, ptr %61, align 8, !tbaa !15
  %377 = load ptr, ptr %18, align 8, !tbaa !5
  %378 = load ptr, ptr %18, align 8, !tbaa !5
  %379 = load ptr, ptr %19, align 8, !tbaa !5
  %380 = load i64, ptr %31, align 8, !tbaa !9
  %381 = getelementptr inbounds %struct.doublecomplex, ptr %379, i64 %380
  %382 = load ptr, ptr %20, align 8, !tbaa !5
  %383 = getelementptr inbounds [1 x double], ptr %48, i64 0, i64 0
  %384 = call double @zlange_(ptr noundef @.str.9, ptr noundef %377, ptr noundef %378, ptr noundef %381, ptr noundef %382, ptr noundef %383)
  store double %384, ptr %53, align 8, !tbaa !15
  store i64 0, ptr %58, align 8, !tbaa !9
  %385 = load double, ptr %53, align 8, !tbaa !15
  %386 = fcmp ogt double %385, 0.000000e+00
  br i1 %386, label %387, label %393

387:                                              ; preds = %365
  %388 = load double, ptr %53, align 8, !tbaa !15
  %389 = load double, ptr %65, align 8, !tbaa !15
  %390 = fcmp olt double %388, %389
  br i1 %390, label %391, label %393

391:                                              ; preds = %387
  store i64 1, ptr %58, align 8, !tbaa !9
  %392 = load double, ptr %65, align 8, !tbaa !15
  store double %392, ptr %59, align 8, !tbaa !15
  br label %400

393:                                              ; preds = %387, %365
  %394 = load double, ptr %53, align 8, !tbaa !15
  %395 = load double, ptr %61, align 8, !tbaa !15
  %396 = fcmp ogt double %394, %395
  br i1 %396, label %397, label %399

397:                                              ; preds = %393
  store i64 1, ptr %58, align 8, !tbaa !9
  %398 = load double, ptr %61, align 8, !tbaa !15
  store double %398, ptr %59, align 8, !tbaa !15
  br label %399

399:                                              ; preds = %397, %393
  br label %400

400:                                              ; preds = %399, %391
  %401 = load i64, ptr %58, align 8, !tbaa !9
  %402 = icmp ne i64 %401, 0
  br i1 %402, label %403, label %411

403:                                              ; preds = %400
  %404 = load ptr, ptr %18, align 8, !tbaa !5
  %405 = load ptr, ptr %18, align 8, !tbaa !5
  %406 = load ptr, ptr %19, align 8, !tbaa !5
  %407 = load i64, ptr %31, align 8, !tbaa !9
  %408 = getelementptr inbounds %struct.doublecomplex, ptr %406, i64 %407
  %409 = load ptr, ptr %20, align 8, !tbaa !5
  %410 = call i32 @zlascl_(ptr noundef @.str.10, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %53, ptr noundef %59, ptr noundef %404, ptr noundef %405, ptr noundef %408, ptr noundef %409, ptr noundef %54)
  br label %411

411:                                              ; preds = %403, %400
  store i64 1, ptr %51, align 8, !tbaa !9
  %412 = load ptr, ptr %18, align 8, !tbaa !5
  %413 = load ptr, ptr %19, align 8, !tbaa !5
  %414 = load i64, ptr %31, align 8, !tbaa !9
  %415 = getelementptr inbounds %struct.doublecomplex, ptr %413, i64 %414
  %416 = load ptr, ptr %20, align 8, !tbaa !5
  %417 = load ptr, ptr %28, align 8, !tbaa !5
  %418 = load i64, ptr %51, align 8, !tbaa !9
  %419 = getelementptr inbounds double, ptr %417, i64 %418
  %420 = call i32 @zgebal_(ptr noundef @.str.11, ptr noundef %412, ptr noundef %415, ptr noundef %416, ptr noundef %47, ptr noundef %45, ptr noundef %419, ptr noundef %54)
  store i64 1, ptr %55, align 8, !tbaa !9
  %421 = load i64, ptr %55, align 8, !tbaa !9
  %422 = load ptr, ptr %18, align 8, !tbaa !5
  %423 = load i64, ptr %422, align 8, !tbaa !9
  %424 = add nsw i64 %421, %423
  store i64 %424, ptr %56, align 8, !tbaa !9
  %425 = load ptr, ptr %27, align 8, !tbaa !5
  %426 = load i64, ptr %425, align 8, !tbaa !9
  %427 = load i64, ptr %56, align 8, !tbaa !9
  %428 = sub nsw i64 %426, %427
  %429 = add nsw i64 %428, 1
  store i64 %429, ptr %36, align 8, !tbaa !9
  %430 = load ptr, ptr %18, align 8, !tbaa !5
  %431 = load ptr, ptr %19, align 8, !tbaa !5
  %432 = load i64, ptr %31, align 8, !tbaa !9
  %433 = getelementptr inbounds %struct.doublecomplex, ptr %431, i64 %432
  %434 = load ptr, ptr %20, align 8, !tbaa !5
  %435 = load ptr, ptr %26, align 8, !tbaa !5
  %436 = load i64, ptr %55, align 8, !tbaa !9
  %437 = getelementptr inbounds %struct.doublecomplex, ptr %435, i64 %436
  %438 = load ptr, ptr %26, align 8, !tbaa !5
  %439 = load i64, ptr %56, align 8, !tbaa !9
  %440 = getelementptr inbounds %struct.doublecomplex, ptr %438, i64 %439
  %441 = call i32 @zgehrd_(ptr noundef %430, ptr noundef %47, ptr noundef %45, ptr noundef %433, ptr noundef %434, ptr noundef %437, ptr noundef %440, ptr noundef %36, ptr noundef %54)
  %442 = load i64, ptr %64, align 8, !tbaa !9
  %443 = icmp ne i64 %442, 0
  br i1 %443, label %444, label %512

444:                                              ; preds = %411
  %445 = getelementptr inbounds [1 x i8], ptr %52, i64 0, i64 0
  store i8 76, ptr %445, align 1, !tbaa !16
  %446 = load ptr, ptr %18, align 8, !tbaa !5
  %447 = load ptr, ptr %18, align 8, !tbaa !5
  %448 = load ptr, ptr %19, align 8, !tbaa !5
  %449 = load i64, ptr %31, align 8, !tbaa !9
  %450 = getelementptr inbounds %struct.doublecomplex, ptr %448, i64 %449
  %451 = load ptr, ptr %20, align 8, !tbaa !5
  %452 = load ptr, ptr %22, align 8, !tbaa !5
  %453 = load i64, ptr %33, align 8, !tbaa !9
  %454 = getelementptr inbounds %struct.doublecomplex, ptr %452, i64 %453
  %455 = load ptr, ptr %23, align 8, !tbaa !5
  %456 = call i32 @zlacpy_(ptr noundef @.str.12, ptr noundef %446, ptr noundef %447, ptr noundef %450, ptr noundef %451, ptr noundef %454, ptr noundef %455)
  %457 = load ptr, ptr %27, align 8, !tbaa !5
  %458 = load i64, ptr %457, align 8, !tbaa !9
  %459 = load i64, ptr %56, align 8, !tbaa !9
  %460 = sub nsw i64 %458, %459
  %461 = add nsw i64 %460, 1
  store i64 %461, ptr %36, align 8, !tbaa !9
  %462 = load ptr, ptr %18, align 8, !tbaa !5
  %463 = load ptr, ptr %22, align 8, !tbaa !5
  %464 = load i64, ptr %33, align 8, !tbaa !9
  %465 = getelementptr inbounds %struct.doublecomplex, ptr %463, i64 %464
  %466 = load ptr, ptr %23, align 8, !tbaa !5
  %467 = load ptr, ptr %26, align 8, !tbaa !5
  %468 = load i64, ptr %55, align 8, !tbaa !9
  %469 = getelementptr inbounds %struct.doublecomplex, ptr %467, i64 %468
  %470 = load ptr, ptr %26, align 8, !tbaa !5
  %471 = load i64, ptr %56, align 8, !tbaa !9
  %472 = getelementptr inbounds %struct.doublecomplex, ptr %470, i64 %471
  %473 = call i32 @zunghr_(ptr noundef %462, ptr noundef %47, ptr noundef %45, ptr noundef %465, ptr noundef %466, ptr noundef %469, ptr noundef %472, ptr noundef %36, ptr noundef %54)
  %474 = load i64, ptr %55, align 8, !tbaa !9
  store i64 %474, ptr %56, align 8, !tbaa !9
  %475 = load ptr, ptr %27, align 8, !tbaa !5
  %476 = load i64, ptr %475, align 8, !tbaa !9
  %477 = load i64, ptr %56, align 8, !tbaa !9
  %478 = sub nsw i64 %476, %477
  %479 = add nsw i64 %478, 1
  store i64 %479, ptr %36, align 8, !tbaa !9
  %480 = load ptr, ptr %18, align 8, !tbaa !5
  %481 = load ptr, ptr %19, align 8, !tbaa !5
  %482 = load i64, ptr %31, align 8, !tbaa !9
  %483 = getelementptr inbounds %struct.doublecomplex, ptr %481, i64 %482
  %484 = load ptr, ptr %20, align 8, !tbaa !5
  %485 = load ptr, ptr %21, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.doublecomplex, ptr %485, i64 1
  %487 = load ptr, ptr %22, align 8, !tbaa !5
  %488 = load i64, ptr %33, align 8, !tbaa !9
  %489 = getelementptr inbounds %struct.doublecomplex, ptr %487, i64 %488
  %490 = load ptr, ptr %23, align 8, !tbaa !5
  %491 = load ptr, ptr %26, align 8, !tbaa !5
  %492 = load i64, ptr %56, align 8, !tbaa !9
  %493 = getelementptr inbounds %struct.doublecomplex, ptr %491, i64 %492
  %494 = load ptr, ptr %29, align 8, !tbaa !5
  %495 = call i32 @zhseqr_(ptr noundef @.str.5, ptr noundef @.str, ptr noundef %480, ptr noundef %47, ptr noundef %45, ptr noundef %483, ptr noundef %484, ptr noundef %486, ptr noundef %489, ptr noundef %490, ptr noundef %493, ptr noundef %36, ptr noundef %494)
  %496 = load i64, ptr %69, align 8, !tbaa !9
  %497 = icmp ne i64 %496, 0
  br i1 %497, label %498, label %511

498:                                              ; preds = %444
  %499 = getelementptr inbounds [1 x i8], ptr %52, i64 0, i64 0
  store i8 66, ptr %499, align 1, !tbaa !16
  %500 = load ptr, ptr %18, align 8, !tbaa !5
  %501 = load ptr, ptr %18, align 8, !tbaa !5
  %502 = load ptr, ptr %22, align 8, !tbaa !5
  %503 = load i64, ptr %33, align 8, !tbaa !9
  %504 = getelementptr inbounds %struct.doublecomplex, ptr %502, i64 %503
  %505 = load ptr, ptr %23, align 8, !tbaa !5
  %506 = load ptr, ptr %24, align 8, !tbaa !5
  %507 = load i64, ptr %35, align 8, !tbaa !9
  %508 = getelementptr inbounds %struct.doublecomplex, ptr %506, i64 %507
  %509 = load ptr, ptr %25, align 8, !tbaa !5
  %510 = call i32 @zlacpy_(ptr noundef @.str.13, ptr noundef %500, ptr noundef %501, ptr noundef %504, ptr noundef %505, ptr noundef %508, ptr noundef %509)
  br label %511

511:                                              ; preds = %498, %444
  br label %591

512:                                              ; preds = %411
  %513 = load i64, ptr %69, align 8, !tbaa !9
  %514 = icmp ne i64 %513, 0
  br i1 %514, label %515, label %567

515:                                              ; preds = %512
  %516 = getelementptr inbounds [1 x i8], ptr %52, i64 0, i64 0
  store i8 82, ptr %516, align 1, !tbaa !16
  %517 = load ptr, ptr %18, align 8, !tbaa !5
  %518 = load ptr, ptr %18, align 8, !tbaa !5
  %519 = load ptr, ptr %19, align 8, !tbaa !5
  %520 = load i64, ptr %31, align 8, !tbaa !9
  %521 = getelementptr inbounds %struct.doublecomplex, ptr %519, i64 %520
  %522 = load ptr, ptr %20, align 8, !tbaa !5
  %523 = load ptr, ptr %24, align 8, !tbaa !5
  %524 = load i64, ptr %35, align 8, !tbaa !9
  %525 = getelementptr inbounds %struct.doublecomplex, ptr %523, i64 %524
  %526 = load ptr, ptr %25, align 8, !tbaa !5
  %527 = call i32 @zlacpy_(ptr noundef @.str.12, ptr noundef %517, ptr noundef %518, ptr noundef %521, ptr noundef %522, ptr noundef %525, ptr noundef %526)
  %528 = load ptr, ptr %27, align 8, !tbaa !5
  %529 = load i64, ptr %528, align 8, !tbaa !9
  %530 = load i64, ptr %56, align 8, !tbaa !9
  %531 = sub nsw i64 %529, %530
  %532 = add nsw i64 %531, 1
  store i64 %532, ptr %36, align 8, !tbaa !9
  %533 = load ptr, ptr %18, align 8, !tbaa !5
  %534 = load ptr, ptr %24, align 8, !tbaa !5
  %535 = load i64, ptr %35, align 8, !tbaa !9
  %536 = getelementptr inbounds %struct.doublecomplex, ptr %534, i64 %535
  %537 = load ptr, ptr %25, align 8, !tbaa !5
  %538 = load ptr, ptr %26, align 8, !tbaa !5
  %539 = load i64, ptr %55, align 8, !tbaa !9
  %540 = getelementptr inbounds %struct.doublecomplex, ptr %538, i64 %539
  %541 = load ptr, ptr %26, align 8, !tbaa !5
  %542 = load i64, ptr %56, align 8, !tbaa !9
  %543 = getelementptr inbounds %struct.doublecomplex, ptr %541, i64 %542
  %544 = call i32 @zunghr_(ptr noundef %533, ptr noundef %47, ptr noundef %45, ptr noundef %536, ptr noundef %537, ptr noundef %540, ptr noundef %543, ptr noundef %36, ptr noundef %54)
  %545 = load i64, ptr %55, align 8, !tbaa !9
  store i64 %545, ptr %56, align 8, !tbaa !9
  %546 = load ptr, ptr %27, align 8, !tbaa !5
  %547 = load i64, ptr %546, align 8, !tbaa !9
  %548 = load i64, ptr %56, align 8, !tbaa !9
  %549 = sub nsw i64 %547, %548
  %550 = add nsw i64 %549, 1
  store i64 %550, ptr %36, align 8, !tbaa !9
  %551 = load ptr, ptr %18, align 8, !tbaa !5
  %552 = load ptr, ptr %19, align 8, !tbaa !5
  %553 = load i64, ptr %31, align 8, !tbaa !9
  %554 = getelementptr inbounds %struct.doublecomplex, ptr %552, i64 %553
  %555 = load ptr, ptr %20, align 8, !tbaa !5
  %556 = load ptr, ptr %21, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.doublecomplex, ptr %556, i64 1
  %558 = load ptr, ptr %24, align 8, !tbaa !5
  %559 = load i64, ptr %35, align 8, !tbaa !9
  %560 = getelementptr inbounds %struct.doublecomplex, ptr %558, i64 %559
  %561 = load ptr, ptr %25, align 8, !tbaa !5
  %562 = load ptr, ptr %26, align 8, !tbaa !5
  %563 = load i64, ptr %56, align 8, !tbaa !9
  %564 = getelementptr inbounds %struct.doublecomplex, ptr %562, i64 %563
  %565 = load ptr, ptr %29, align 8, !tbaa !5
  %566 = call i32 @zhseqr_(ptr noundef @.str.5, ptr noundef @.str, ptr noundef %551, ptr noundef %47, ptr noundef %45, ptr noundef %554, ptr noundef %555, ptr noundef %557, ptr noundef %560, ptr noundef %561, ptr noundef %564, ptr noundef %36, ptr noundef %565)
  br label %590

567:                                              ; preds = %512
  %568 = load i64, ptr %55, align 8, !tbaa !9
  store i64 %568, ptr %56, align 8, !tbaa !9
  %569 = load ptr, ptr %27, align 8, !tbaa !5
  %570 = load i64, ptr %569, align 8, !tbaa !9
  %571 = load i64, ptr %56, align 8, !tbaa !9
  %572 = sub nsw i64 %570, %571
  %573 = add nsw i64 %572, 1
  store i64 %573, ptr %36, align 8, !tbaa !9
  %574 = load ptr, ptr %18, align 8, !tbaa !5
  %575 = load ptr, ptr %19, align 8, !tbaa !5
  %576 = load i64, ptr %31, align 8, !tbaa !9
  %577 = getelementptr inbounds %struct.doublecomplex, ptr %575, i64 %576
  %578 = load ptr, ptr %20, align 8, !tbaa !5
  %579 = load ptr, ptr %21, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.doublecomplex, ptr %579, i64 1
  %581 = load ptr, ptr %24, align 8, !tbaa !5
  %582 = load i64, ptr %35, align 8, !tbaa !9
  %583 = getelementptr inbounds %struct.doublecomplex, ptr %581, i64 %582
  %584 = load ptr, ptr %25, align 8, !tbaa !5
  %585 = load ptr, ptr %26, align 8, !tbaa !5
  %586 = load i64, ptr %56, align 8, !tbaa !9
  %587 = getelementptr inbounds %struct.doublecomplex, ptr %585, i64 %586
  %588 = load ptr, ptr %29, align 8, !tbaa !5
  %589 = call i32 @zhseqr_(ptr noundef @.str.6, ptr noundef @.str.1, ptr noundef %574, ptr noundef %47, ptr noundef %45, ptr noundef %577, ptr noundef %578, ptr noundef %580, ptr noundef %583, ptr noundef %584, ptr noundef %587, ptr noundef %36, ptr noundef %588)
  br label %590

590:                                              ; preds = %567, %515
  br label %591

591:                                              ; preds = %590, %511
  %592 = load ptr, ptr %29, align 8, !tbaa !5
  %593 = load i64, ptr %592, align 8, !tbaa !9
  %594 = icmp sgt i64 %593, 0
  br i1 %594, label %595, label %596

595:                                              ; preds = %591
  br label %945

596:                                              ; preds = %591
  %597 = load i64, ptr %64, align 8, !tbaa !9
  %598 = icmp ne i64 %597, 0
  br i1 %598, label %602, label %599

599:                                              ; preds = %596
  %600 = load i64, ptr %69, align 8, !tbaa !9
  %601 = icmp ne i64 %600, 0
  br i1 %601, label %602, label %630

602:                                              ; preds = %599, %596
  %603 = load i64, ptr %51, align 8, !tbaa !9
  %604 = load ptr, ptr %18, align 8, !tbaa !5
  %605 = load i64, ptr %604, align 8, !tbaa !9
  %606 = add nsw i64 %603, %605
  store i64 %606, ptr %67, align 8, !tbaa !9
  %607 = getelementptr inbounds [1 x i8], ptr %52, i64 0, i64 0
  %608 = getelementptr inbounds [1 x i64], ptr %60, i64 0, i64 0
  %609 = load ptr, ptr %18, align 8, !tbaa !5
  %610 = load ptr, ptr %19, align 8, !tbaa !5
  %611 = load i64, ptr %31, align 8, !tbaa !9
  %612 = getelementptr inbounds %struct.doublecomplex, ptr %610, i64 %611
  %613 = load ptr, ptr %20, align 8, !tbaa !5
  %614 = load ptr, ptr %22, align 8, !tbaa !5
  %615 = load i64, ptr %33, align 8, !tbaa !9
  %616 = getelementptr inbounds %struct.doublecomplex, ptr %614, i64 %615
  %617 = load ptr, ptr %23, align 8, !tbaa !5
  %618 = load ptr, ptr %24, align 8, !tbaa !5
  %619 = load i64, ptr %35, align 8, !tbaa !9
  %620 = getelementptr inbounds %struct.doublecomplex, ptr %618, i64 %619
  %621 = load ptr, ptr %25, align 8, !tbaa !5
  %622 = load ptr, ptr %18, align 8, !tbaa !5
  %623 = load ptr, ptr %26, align 8, !tbaa !5
  %624 = load i64, ptr %56, align 8, !tbaa !9
  %625 = getelementptr inbounds %struct.doublecomplex, ptr %623, i64 %624
  %626 = load ptr, ptr %28, align 8, !tbaa !5
  %627 = load i64, ptr %67, align 8, !tbaa !9
  %628 = getelementptr inbounds double, ptr %626, i64 %627
  %629 = call i32 @ztrevc_(ptr noundef %607, ptr noundef @.str.11, ptr noundef %608, ptr noundef %609, ptr noundef %612, ptr noundef %613, ptr noundef %616, ptr noundef %617, ptr noundef %620, ptr noundef %621, ptr noundef %622, ptr noundef %57, ptr noundef %625, ptr noundef %628, ptr noundef %54)
  br label %630

630:                                              ; preds = %602, %599
  %631 = load i64, ptr %64, align 8, !tbaa !9
  %632 = icmp ne i64 %631, 0
  br i1 %632, label %633, label %787

633:                                              ; preds = %630
  %634 = load ptr, ptr %18, align 8, !tbaa !5
  %635 = load ptr, ptr %28, align 8, !tbaa !5
  %636 = load i64, ptr %51, align 8, !tbaa !9
  %637 = getelementptr inbounds double, ptr %635, i64 %636
  %638 = load ptr, ptr %18, align 8, !tbaa !5
  %639 = load ptr, ptr %22, align 8, !tbaa !5
  %640 = load i64, ptr %33, align 8, !tbaa !9
  %641 = getelementptr inbounds %struct.doublecomplex, ptr %639, i64 %640
  %642 = load ptr, ptr %23, align 8, !tbaa !5
  %643 = call i32 @zgebak_(ptr noundef @.str.11, ptr noundef @.str.12, ptr noundef %634, ptr noundef %47, ptr noundef %45, ptr noundef %637, ptr noundef %638, ptr noundef %641, ptr noundef %642, ptr noundef %54)
  %644 = load ptr, ptr %18, align 8, !tbaa !5
  %645 = load i64, ptr %644, align 8, !tbaa !9
  store i64 %645, ptr %36, align 8, !tbaa !9
  store i64 1, ptr %43, align 8, !tbaa !9
  br label %646

646:                                              ; preds = %783, %633
  %647 = load i64, ptr %43, align 8, !tbaa !9
  %648 = load i64, ptr %36, align 8, !tbaa !9
  %649 = icmp sle i64 %647, %648
  br i1 %649, label %650, label %786

650:                                              ; preds = %646
  %651 = load ptr, ptr %18, align 8, !tbaa !5
  %652 = load ptr, ptr %22, align 8, !tbaa !5
  %653 = load i64, ptr %43, align 8, !tbaa !9
  %654 = load i64, ptr %32, align 8, !tbaa !9
  %655 = mul nsw i64 %653, %654
  %656 = add nsw i64 %655, 1
  %657 = getelementptr inbounds %struct.doublecomplex, ptr %652, i64 %656
  %658 = call double @f2c_dznrm2(ptr noundef %651, ptr noundef %657, ptr noundef @c__1)
  %659 = fdiv double 1.000000e+00, %658
  store double %659, ptr %46, align 8, !tbaa !15
  %660 = load ptr, ptr %18, align 8, !tbaa !5
  %661 = load ptr, ptr %22, align 8, !tbaa !5
  %662 = load i64, ptr %43, align 8, !tbaa !9
  %663 = load i64, ptr %32, align 8, !tbaa !9
  %664 = mul nsw i64 %662, %663
  %665 = add nsw i64 %664, 1
  %666 = getelementptr inbounds %struct.doublecomplex, ptr %661, i64 %665
  %667 = call i32 @f2c_zdscal(ptr noundef %660, ptr noundef %46, ptr noundef %666, ptr noundef @c__1)
  %668 = load ptr, ptr %18, align 8, !tbaa !5
  %669 = load i64, ptr %668, align 8, !tbaa !9
  store i64 %669, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %670

670:                                              ; preds = %705, %650
  %671 = load i64, ptr %44, align 8, !tbaa !9
  %672 = load i64, ptr %37, align 8, !tbaa !9
  %673 = icmp sle i64 %671, %672
  br i1 %673, label %674, label %708

674:                                              ; preds = %670
  %675 = load i64, ptr %44, align 8, !tbaa !9
  %676 = load i64, ptr %43, align 8, !tbaa !9
  %677 = load i64, ptr %32, align 8, !tbaa !9
  %678 = mul nsw i64 %676, %677
  %679 = add nsw i64 %675, %678
  store i64 %679, ptr %38, align 8, !tbaa !9
  %680 = load ptr, ptr %22, align 8, !tbaa !5
  %681 = load i64, ptr %38, align 8, !tbaa !9
  %682 = getelementptr inbounds %struct.doublecomplex, ptr %680, i64 %681
  %683 = getelementptr inbounds %struct.doublecomplex, ptr %682, i32 0, i32 0
  %684 = load double, ptr %683, align 8, !tbaa !11
  store double %684, ptr %39, align 8, !tbaa !15
  %685 = load ptr, ptr %22, align 8, !tbaa !5
  %686 = load i64, ptr %44, align 8, !tbaa !9
  %687 = load i64, ptr %43, align 8, !tbaa !9
  %688 = load i64, ptr %32, align 8, !tbaa !9
  %689 = mul nsw i64 %687, %688
  %690 = add nsw i64 %686, %689
  %691 = getelementptr inbounds %struct.doublecomplex, ptr %685, i64 %690
  %692 = call double @d_imag(ptr noundef %691)
  store double %692, ptr %40, align 8, !tbaa !15
  %693 = load double, ptr %39, align 8, !tbaa !15
  %694 = load double, ptr %39, align 8, !tbaa !15
  %695 = load double, ptr %40, align 8, !tbaa !15
  %696 = load double, ptr %40, align 8, !tbaa !15
  %697 = fmul double %695, %696
  %698 = call double @llvm.fmuladd.f64(double %693, double %694, double %697)
  %699 = load ptr, ptr %28, align 8, !tbaa !5
  %700 = load i64, ptr %67, align 8, !tbaa !9
  %701 = load i64, ptr %44, align 8, !tbaa !9
  %702 = add nsw i64 %700, %701
  %703 = sub nsw i64 %702, 1
  %704 = getelementptr inbounds double, ptr %699, i64 %703
  store double %698, ptr %704, align 8, !tbaa !15
  br label %705

705:                                              ; preds = %674
  %706 = load i64, ptr %44, align 8, !tbaa !9
  %707 = add nsw i64 %706, 1
  store i64 %707, ptr %44, align 8, !tbaa !9
  br label %670, !llvm.loop !17

708:                                              ; preds = %670
  %709 = load ptr, ptr %18, align 8, !tbaa !5
  %710 = load ptr, ptr %28, align 8, !tbaa !5
  %711 = load i64, ptr %67, align 8, !tbaa !9
  %712 = getelementptr inbounds double, ptr %710, i64 %711
  %713 = call i64 @f2c_idamax(ptr noundef %709, ptr noundef %712, ptr noundef @c__1)
  store i64 %713, ptr %44, align 8, !tbaa !9
  %714 = load ptr, ptr %22, align 8, !tbaa !5
  %715 = load i64, ptr %44, align 8, !tbaa !9
  %716 = load i64, ptr %43, align 8, !tbaa !9
  %717 = load i64, ptr %32, align 8, !tbaa !9
  %718 = mul nsw i64 %716, %717
  %719 = add nsw i64 %715, %718
  %720 = getelementptr inbounds %struct.doublecomplex, ptr %714, i64 %719
  call void @d_cnjg(ptr noundef %42, ptr noundef %720)
  %721 = load ptr, ptr %28, align 8, !tbaa !5
  %722 = load i64, ptr %67, align 8, !tbaa !9
  %723 = load i64, ptr %44, align 8, !tbaa !9
  %724 = add nsw i64 %722, %723
  %725 = sub nsw i64 %724, 1
  %726 = getelementptr inbounds double, ptr %721, i64 %725
  %727 = load double, ptr %726, align 8, !tbaa !15
  %728 = call double @sqrt(double noundef %727) #5
  store double %728, ptr %39, align 8, !tbaa !15
  %729 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %730 = load double, ptr %729, align 8, !tbaa !11
  %731 = load double, ptr %39, align 8, !tbaa !15
  %732 = fdiv double %730, %731
  %733 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  store double %732, ptr %733, align 8, !tbaa !11
  %734 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %735 = load double, ptr %734, align 8, !tbaa !14
  %736 = load double, ptr %39, align 8, !tbaa !15
  %737 = fdiv double %735, %736
  %738 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  store double %737, ptr %738, align 8, !tbaa !14
  %739 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %740 = load double, ptr %739, align 8, !tbaa !11
  %741 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  store double %740, ptr %741, align 8, !tbaa !11
  %742 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %743 = load double, ptr %742, align 8, !tbaa !14
  %744 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  store double %743, ptr %744, align 8, !tbaa !14
  %745 = load ptr, ptr %18, align 8, !tbaa !5
  %746 = load ptr, ptr %22, align 8, !tbaa !5
  %747 = load i64, ptr %43, align 8, !tbaa !9
  %748 = load i64, ptr %32, align 8, !tbaa !9
  %749 = mul nsw i64 %747, %748
  %750 = add nsw i64 %749, 1
  %751 = getelementptr inbounds %struct.doublecomplex, ptr %746, i64 %750
  %752 = call i32 @f2c_zscal(ptr noundef %745, ptr noundef %50, ptr noundef %751, ptr noundef @c__1)
  %753 = load i64, ptr %44, align 8, !tbaa !9
  %754 = load i64, ptr %43, align 8, !tbaa !9
  %755 = load i64, ptr %32, align 8, !tbaa !9
  %756 = mul nsw i64 %754, %755
  %757 = add nsw i64 %753, %756
  store i64 %757, ptr %37, align 8, !tbaa !9
  %758 = load i64, ptr %44, align 8, !tbaa !9
  %759 = load i64, ptr %43, align 8, !tbaa !9
  %760 = load i64, ptr %32, align 8, !tbaa !9
  %761 = mul nsw i64 %759, %760
  %762 = add nsw i64 %758, %761
  store i64 %762, ptr %38, align 8, !tbaa !9
  %763 = load ptr, ptr %22, align 8, !tbaa !5
  %764 = load i64, ptr %38, align 8, !tbaa !9
  %765 = getelementptr inbounds %struct.doublecomplex, ptr %763, i64 %764
  %766 = getelementptr inbounds %struct.doublecomplex, ptr %765, i32 0, i32 0
  %767 = load double, ptr %766, align 8, !tbaa !11
  store double %767, ptr %39, align 8, !tbaa !15
  %768 = load double, ptr %39, align 8, !tbaa !15
  %769 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  store double %768, ptr %769, align 8, !tbaa !11
  %770 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  store double 0.000000e+00, ptr %770, align 8, !tbaa !14
  %771 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %772 = load double, ptr %771, align 8, !tbaa !11
  %773 = load ptr, ptr %22, align 8, !tbaa !5
  %774 = load i64, ptr %37, align 8, !tbaa !9
  %775 = getelementptr inbounds %struct.doublecomplex, ptr %773, i64 %774
  %776 = getelementptr inbounds %struct.doublecomplex, ptr %775, i32 0, i32 0
  store double %772, ptr %776, align 8, !tbaa !11
  %777 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %778 = load double, ptr %777, align 8, !tbaa !14
  %779 = load ptr, ptr %22, align 8, !tbaa !5
  %780 = load i64, ptr %37, align 8, !tbaa !9
  %781 = getelementptr inbounds %struct.doublecomplex, ptr %779, i64 %780
  %782 = getelementptr inbounds %struct.doublecomplex, ptr %781, i32 0, i32 1
  store double %778, ptr %782, align 8, !tbaa !14
  br label %783

783:                                              ; preds = %708
  %784 = load i64, ptr %43, align 8, !tbaa !9
  %785 = add nsw i64 %784, 1
  store i64 %785, ptr %43, align 8, !tbaa !9
  br label %646, !llvm.loop !19

786:                                              ; preds = %646
  br label %787

787:                                              ; preds = %786, %630
  %788 = load i64, ptr %69, align 8, !tbaa !9
  %789 = icmp ne i64 %788, 0
  br i1 %789, label %790, label %944

790:                                              ; preds = %787
  %791 = load ptr, ptr %18, align 8, !tbaa !5
  %792 = load ptr, ptr %28, align 8, !tbaa !5
  %793 = load i64, ptr %51, align 8, !tbaa !9
  %794 = getelementptr inbounds double, ptr %792, i64 %793
  %795 = load ptr, ptr %18, align 8, !tbaa !5
  %796 = load ptr, ptr %24, align 8, !tbaa !5
  %797 = load i64, ptr %35, align 8, !tbaa !9
  %798 = getelementptr inbounds %struct.doublecomplex, ptr %796, i64 %797
  %799 = load ptr, ptr %25, align 8, !tbaa !5
  %800 = call i32 @zgebak_(ptr noundef @.str.11, ptr noundef @.str.14, ptr noundef %791, ptr noundef %47, ptr noundef %45, ptr noundef %794, ptr noundef %795, ptr noundef %798, ptr noundef %799, ptr noundef %54)
  %801 = load ptr, ptr %18, align 8, !tbaa !5
  %802 = load i64, ptr %801, align 8, !tbaa !9
  store i64 %802, ptr %36, align 8, !tbaa !9
  store i64 1, ptr %43, align 8, !tbaa !9
  br label %803

803:                                              ; preds = %940, %790
  %804 = load i64, ptr %43, align 8, !tbaa !9
  %805 = load i64, ptr %36, align 8, !tbaa !9
  %806 = icmp sle i64 %804, %805
  br i1 %806, label %807, label %943

807:                                              ; preds = %803
  %808 = load ptr, ptr %18, align 8, !tbaa !5
  %809 = load ptr, ptr %24, align 8, !tbaa !5
  %810 = load i64, ptr %43, align 8, !tbaa !9
  %811 = load i64, ptr %34, align 8, !tbaa !9
  %812 = mul nsw i64 %810, %811
  %813 = add nsw i64 %812, 1
  %814 = getelementptr inbounds %struct.doublecomplex, ptr %809, i64 %813
  %815 = call double @f2c_dznrm2(ptr noundef %808, ptr noundef %814, ptr noundef @c__1)
  %816 = fdiv double 1.000000e+00, %815
  store double %816, ptr %46, align 8, !tbaa !15
  %817 = load ptr, ptr %18, align 8, !tbaa !5
  %818 = load ptr, ptr %24, align 8, !tbaa !5
  %819 = load i64, ptr %43, align 8, !tbaa !9
  %820 = load i64, ptr %34, align 8, !tbaa !9
  %821 = mul nsw i64 %819, %820
  %822 = add nsw i64 %821, 1
  %823 = getelementptr inbounds %struct.doublecomplex, ptr %818, i64 %822
  %824 = call i32 @f2c_zdscal(ptr noundef %817, ptr noundef %46, ptr noundef %823, ptr noundef @c__1)
  %825 = load ptr, ptr %18, align 8, !tbaa !5
  %826 = load i64, ptr %825, align 8, !tbaa !9
  store i64 %826, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %827

827:                                              ; preds = %862, %807
  %828 = load i64, ptr %44, align 8, !tbaa !9
  %829 = load i64, ptr %37, align 8, !tbaa !9
  %830 = icmp sle i64 %828, %829
  br i1 %830, label %831, label %865

831:                                              ; preds = %827
  %832 = load i64, ptr %44, align 8, !tbaa !9
  %833 = load i64, ptr %43, align 8, !tbaa !9
  %834 = load i64, ptr %34, align 8, !tbaa !9
  %835 = mul nsw i64 %833, %834
  %836 = add nsw i64 %832, %835
  store i64 %836, ptr %38, align 8, !tbaa !9
  %837 = load ptr, ptr %24, align 8, !tbaa !5
  %838 = load i64, ptr %38, align 8, !tbaa !9
  %839 = getelementptr inbounds %struct.doublecomplex, ptr %837, i64 %838
  %840 = getelementptr inbounds %struct.doublecomplex, ptr %839, i32 0, i32 0
  %841 = load double, ptr %840, align 8, !tbaa !11
  store double %841, ptr %39, align 8, !tbaa !15
  %842 = load ptr, ptr %24, align 8, !tbaa !5
  %843 = load i64, ptr %44, align 8, !tbaa !9
  %844 = load i64, ptr %43, align 8, !tbaa !9
  %845 = load i64, ptr %34, align 8, !tbaa !9
  %846 = mul nsw i64 %844, %845
  %847 = add nsw i64 %843, %846
  %848 = getelementptr inbounds %struct.doublecomplex, ptr %842, i64 %847
  %849 = call double @d_imag(ptr noundef %848)
  store double %849, ptr %40, align 8, !tbaa !15
  %850 = load double, ptr %39, align 8, !tbaa !15
  %851 = load double, ptr %39, align 8, !tbaa !15
  %852 = load double, ptr %40, align 8, !tbaa !15
  %853 = load double, ptr %40, align 8, !tbaa !15
  %854 = fmul double %852, %853
  %855 = call double @llvm.fmuladd.f64(double %850, double %851, double %854)
  %856 = load ptr, ptr %28, align 8, !tbaa !5
  %857 = load i64, ptr %67, align 8, !tbaa !9
  %858 = load i64, ptr %44, align 8, !tbaa !9
  %859 = add nsw i64 %857, %858
  %860 = sub nsw i64 %859, 1
  %861 = getelementptr inbounds double, ptr %856, i64 %860
  store double %855, ptr %861, align 8, !tbaa !15
  br label %862

862:                                              ; preds = %831
  %863 = load i64, ptr %44, align 8, !tbaa !9
  %864 = add nsw i64 %863, 1
  store i64 %864, ptr %44, align 8, !tbaa !9
  br label %827, !llvm.loop !20

865:                                              ; preds = %827
  %866 = load ptr, ptr %18, align 8, !tbaa !5
  %867 = load ptr, ptr %28, align 8, !tbaa !5
  %868 = load i64, ptr %67, align 8, !tbaa !9
  %869 = getelementptr inbounds double, ptr %867, i64 %868
  %870 = call i64 @f2c_idamax(ptr noundef %866, ptr noundef %869, ptr noundef @c__1)
  store i64 %870, ptr %44, align 8, !tbaa !9
  %871 = load ptr, ptr %24, align 8, !tbaa !5
  %872 = load i64, ptr %44, align 8, !tbaa !9
  %873 = load i64, ptr %43, align 8, !tbaa !9
  %874 = load i64, ptr %34, align 8, !tbaa !9
  %875 = mul nsw i64 %873, %874
  %876 = add nsw i64 %872, %875
  %877 = getelementptr inbounds %struct.doublecomplex, ptr %871, i64 %876
  call void @d_cnjg(ptr noundef %42, ptr noundef %877)
  %878 = load ptr, ptr %28, align 8, !tbaa !5
  %879 = load i64, ptr %67, align 8, !tbaa !9
  %880 = load i64, ptr %44, align 8, !tbaa !9
  %881 = add nsw i64 %879, %880
  %882 = sub nsw i64 %881, 1
  %883 = getelementptr inbounds double, ptr %878, i64 %882
  %884 = load double, ptr %883, align 8, !tbaa !15
  %885 = call double @sqrt(double noundef %884) #5
  store double %885, ptr %39, align 8, !tbaa !15
  %886 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 0
  %887 = load double, ptr %886, align 8, !tbaa !11
  %888 = load double, ptr %39, align 8, !tbaa !15
  %889 = fdiv double %887, %888
  %890 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  store double %889, ptr %890, align 8, !tbaa !11
  %891 = getelementptr inbounds %struct.doublecomplex, ptr %42, i32 0, i32 1
  %892 = load double, ptr %891, align 8, !tbaa !14
  %893 = load double, ptr %39, align 8, !tbaa !15
  %894 = fdiv double %892, %893
  %895 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  store double %894, ptr %895, align 8, !tbaa !14
  %896 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %897 = load double, ptr %896, align 8, !tbaa !11
  %898 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 0
  store double %897, ptr %898, align 8, !tbaa !11
  %899 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %900 = load double, ptr %899, align 8, !tbaa !14
  %901 = getelementptr inbounds %struct.doublecomplex, ptr %50, i32 0, i32 1
  store double %900, ptr %901, align 8, !tbaa !14
  %902 = load ptr, ptr %18, align 8, !tbaa !5
  %903 = load ptr, ptr %24, align 8, !tbaa !5
  %904 = load i64, ptr %43, align 8, !tbaa !9
  %905 = load i64, ptr %34, align 8, !tbaa !9
  %906 = mul nsw i64 %904, %905
  %907 = add nsw i64 %906, 1
  %908 = getelementptr inbounds %struct.doublecomplex, ptr %903, i64 %907
  %909 = call i32 @f2c_zscal(ptr noundef %902, ptr noundef %50, ptr noundef %908, ptr noundef @c__1)
  %910 = load i64, ptr %44, align 8, !tbaa !9
  %911 = load i64, ptr %43, align 8, !tbaa !9
  %912 = load i64, ptr %34, align 8, !tbaa !9
  %913 = mul nsw i64 %911, %912
  %914 = add nsw i64 %910, %913
  store i64 %914, ptr %37, align 8, !tbaa !9
  %915 = load i64, ptr %44, align 8, !tbaa !9
  %916 = load i64, ptr %43, align 8, !tbaa !9
  %917 = load i64, ptr %34, align 8, !tbaa !9
  %918 = mul nsw i64 %916, %917
  %919 = add nsw i64 %915, %918
  store i64 %919, ptr %38, align 8, !tbaa !9
  %920 = load ptr, ptr %24, align 8, !tbaa !5
  %921 = load i64, ptr %38, align 8, !tbaa !9
  %922 = getelementptr inbounds %struct.doublecomplex, ptr %920, i64 %921
  %923 = getelementptr inbounds %struct.doublecomplex, ptr %922, i32 0, i32 0
  %924 = load double, ptr %923, align 8, !tbaa !11
  store double %924, ptr %39, align 8, !tbaa !15
  %925 = load double, ptr %39, align 8, !tbaa !15
  %926 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  store double %925, ptr %926, align 8, !tbaa !11
  %927 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  store double 0.000000e+00, ptr %927, align 8, !tbaa !14
  %928 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %929 = load double, ptr %928, align 8, !tbaa !11
  %930 = load ptr, ptr %24, align 8, !tbaa !5
  %931 = load i64, ptr %37, align 8, !tbaa !9
  %932 = getelementptr inbounds %struct.doublecomplex, ptr %930, i64 %931
  %933 = getelementptr inbounds %struct.doublecomplex, ptr %932, i32 0, i32 0
  store double %929, ptr %933, align 8, !tbaa !11
  %934 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %935 = load double, ptr %934, align 8, !tbaa !14
  %936 = load ptr, ptr %24, align 8, !tbaa !5
  %937 = load i64, ptr %37, align 8, !tbaa !9
  %938 = getelementptr inbounds %struct.doublecomplex, ptr %936, i64 %937
  %939 = getelementptr inbounds %struct.doublecomplex, ptr %938, i32 0, i32 1
  store double %935, ptr %939, align 8, !tbaa !14
  br label %940

940:                                              ; preds = %865
  %941 = load i64, ptr %43, align 8, !tbaa !9
  %942 = add nsw i64 %941, 1
  store i64 %942, ptr %43, align 8, !tbaa !9
  br label %803, !llvm.loop !21

943:                                              ; preds = %803
  br label %944

944:                                              ; preds = %943, %787
  br label %945

945:                                              ; preds = %944, %595
  %946 = load i64, ptr %58, align 8, !tbaa !9
  %947 = icmp ne i64 %946, 0
  br i1 %947, label %948, label %983

948:                                              ; preds = %945
  %949 = load ptr, ptr %18, align 8, !tbaa !5
  %950 = load i64, ptr %949, align 8, !tbaa !9
  %951 = load ptr, ptr %29, align 8, !tbaa !5
  %952 = load i64, ptr %951, align 8, !tbaa !9
  %953 = sub nsw i64 %950, %952
  store i64 %953, ptr %36, align 8, !tbaa !9
  %954 = load ptr, ptr %18, align 8, !tbaa !5
  %955 = load i64, ptr %954, align 8, !tbaa !9
  %956 = load ptr, ptr %29, align 8, !tbaa !5
  %957 = load i64, ptr %956, align 8, !tbaa !9
  %958 = sub nsw i64 %955, %957
  store i64 %958, ptr %38, align 8, !tbaa !9
  %959 = load i64, ptr %38, align 8, !tbaa !9
  %960 = icmp sge i64 %959, 1
  br i1 %960, label %961, label %963

961:                                              ; preds = %948
  %962 = load i64, ptr %38, align 8, !tbaa !9
  br label %964

963:                                              ; preds = %948
  br label %964

964:                                              ; preds = %963, %961
  %965 = phi i64 [ %962, %961 ], [ 1, %963 ]
  store i64 %965, ptr %37, align 8, !tbaa !9
  %966 = load ptr, ptr %21, align 8, !tbaa !5
  %967 = load ptr, ptr %29, align 8, !tbaa !5
  %968 = load i64, ptr %967, align 8, !tbaa !9
  %969 = add nsw i64 %968, 1
  %970 = getelementptr inbounds %struct.doublecomplex, ptr %966, i64 %969
  %971 = call i32 @zlascl_(ptr noundef @.str.10, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %59, ptr noundef %53, ptr noundef %36, ptr noundef @c__1, ptr noundef %970, ptr noundef %37, ptr noundef %54)
  %972 = load ptr, ptr %29, align 8, !tbaa !5
  %973 = load i64, ptr %972, align 8, !tbaa !9
  %974 = icmp sgt i64 %973, 0
  br i1 %974, label %975, label %982

975:                                              ; preds = %964
  %976 = load i64, ptr %47, align 8, !tbaa !9
  %977 = sub nsw i64 %976, 1
  store i64 %977, ptr %36, align 8, !tbaa !9
  %978 = load ptr, ptr %21, align 8, !tbaa !5
  %979 = getelementptr inbounds %struct.doublecomplex, ptr %978, i64 1
  %980 = load ptr, ptr %18, align 8, !tbaa !5
  %981 = call i32 @zlascl_(ptr noundef @.str.10, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %59, ptr noundef %53, ptr noundef %36, ptr noundef @c__1, ptr noundef %979, ptr noundef %980, ptr noundef %54)
  br label %982

982:                                              ; preds = %975, %964
  br label %983

983:                                              ; preds = %982, %945
  %984 = load i64, ptr %63, align 8, !tbaa !9
  %985 = sitofp i64 %984 to double
  %986 = load ptr, ptr %26, align 8, !tbaa !5
  %987 = getelementptr inbounds %struct.doublecomplex, ptr %986, i64 1
  %988 = getelementptr inbounds %struct.doublecomplex, ptr %987, i32 0, i32 0
  store double %985, ptr %988, align 8, !tbaa !11
  %989 = load ptr, ptr %26, align 8, !tbaa !5
  %990 = getelementptr inbounds %struct.doublecomplex, ptr %989, i64 1
  %991 = getelementptr inbounds %struct.doublecomplex, ptr %990, i32 0, i32 1
  store double 0.000000e+00, ptr %991, align 8, !tbaa !14
  store i32 0, ptr %15, align 4
  store i32 1, ptr %70, align 4
  br label %992

992:                                              ; preds = %983, %364, %358, %350
  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 8, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 8, 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 8, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 1, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 16, 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
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  %993 = load i32, ptr %15, align 4
  ret i32 %993
}

; 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 @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 @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
@c__1 = external hidden global i64, align 8
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@c__0 = external hidden global i64, align 8
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1
@c_n1 = external hidden global i64, align 8
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.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

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

42:                                               ; preds = %14
  %43 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #6
  %.not = icmp eq i64 %43, 0
  br i1 %.not, label %.thread439.sink.split, label %44

44:                                               ; preds = %42, %14
  %.not420 = icmp ne i64 %40, 0
  br i1 %.not420, label %47, label %45

45:                                               ; preds = %44
  %46 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #6
  %.not421 = icmp eq i64 %46, 0
  br i1 %.not421, label %.thread439.sink.split, label %47

47:                                               ; preds = %45, %44
  %48 = load i64, ptr %2, align 8, !tbaa !5
  %49 = icmp slt i64 %48, 0
  br i1 %49, label %.thread439.sink.split, label %50

50:                                               ; preds = %47
  %51 = load i64, ptr %4, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %48, i64 1)
  %52 = icmp slt i64 %51, %spec.select
  br i1 %52, label %.thread439.sink.split, label %53

53:                                               ; preds = %50
  %54 = load i64, ptr %7, align 8, !tbaa !5
  %55 = icmp slt i64 %54, 1
  %56 = icmp ult i64 %54, %48
  %or.cond455 = and i1 %41, %56
  %or.cond457 = or i1 %55, %or.cond455
  br i1 %or.cond457, label %.thread439.sink.split, label %57

57:                                               ; preds = %53
  %58 = load i64, ptr %9, align 8, !tbaa !5
  %59 = icmp slt i64 %58, 1
  %60 = icmp ult i64 %58, %48
  %or.cond456 = and i1 %.not420, %60
  %or.cond458 = or i1 %59, %or.cond456
  br i1 %or.cond458, label %.thread439.sink.split, label %61

61:                                               ; preds = %57
  %.pr = load i64, ptr %13, align 8, !tbaa !5
  %62 = icmp eq i64 %.pr, 0
  br i1 %62, label %63, label %.thread439

63:                                               ; preds = %61
  %64 = icmp eq i64 %48, 0
  br i1 %64, label %94, label %65

65:                                               ; preds = %63
  %66 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef nonnull %2, ptr noundef nonnull @c__0) #6
  %67 = add i64 %66, 1
  %68 = mul i64 %67, %48
  %69 = load i64, ptr %2, align 8, !tbaa !5
  %70 = shl i64 %69, 1
  br i1 %41, label %71, label %78

71:                                               ; preds = %65
  %72 = add nsw i64 %69, -1
  %73 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.3, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef nonnull %2, ptr noundef nonnull @c_n1) #6
  %74 = mul nsw i64 %73, %72
  %75 = add nsw i64 %74, %69
  store i64 %75, ptr %16, align 8, !tbaa !5
  %76 = tail call i64 @llvm.smax.i64(i64 %68, i64 %75)
  %77 = tail call i32 @zhseqr_(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %10, ptr noundef nonnull @c_n1, ptr noundef nonnull %13) #6
  br label %88

78:                                               ; preds = %65
  %.not422 = icmp eq i64 %40, 0
  br i1 %.not422, label %86, label %79

79:                                               ; preds = %78
  %80 = add nsw i64 %69, -1
  %81 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.3, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef nonnull %2, ptr noundef nonnull @c_n1) #6
  %82 = mul nsw i64 %81, %80
  %83 = add nsw i64 %82, %69
  store i64 %83, ptr %16, align 8, !tbaa !5
  %84 = tail call i64 @llvm.smax.i64(i64 %68, i64 %83)
  %85 = tail call i32 @zhseqr_(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %10, ptr noundef nonnull @c_n1, ptr noundef nonnull %13) #6
  br label %88

86:                                               ; preds = %78
  %87 = tail call i32 @zhseqr_(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, ptr noundef nonnull %2, ptr noundef nonnull @c__1, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %10, ptr noundef nonnull @c_n1, ptr noundef nonnull %13) #6
  br label %88

88:                                               ; preds = %79, %86, %71
  %.0405 = phi i64 [ %76, %71 ], [ %84, %79 ], [ %68, %86 ]
  %89 = load double, ptr %10, align 8, !tbaa !9
  %90 = fptosi double %89 to i64
  %91 = tail call i64 @llvm.smax.i64(i64 %.0405, i64 %90)
  store i64 %91, ptr %15, align 8, !tbaa !5
  %92 = tail call i64 @llvm.smax.i64(i64 %91, i64 %70)
  %93 = sitofp i64 %92 to double
  br label %94

94:                                               ; preds = %63, %88
  %.0406 = phi i64 [ %70, %88 ], [ 1, %63 ]
  %.1 = phi double [ %93, %88 ], [ 1.000000e+00, %63 ]
  store double %.1, ptr %10, align 8, !tbaa !9
  %95 = getelementptr inbounds i8, ptr %10, i64 8
  store double 0.000000e+00, ptr %95, align 8, !tbaa !12
  %96 = load i64, ptr %11, align 8, !tbaa !5
  %97 = icmp sge i64 %96, %.0406
  %or.cond = select i1 %97, i1 true, i1 %38
  br i1 %or.cond, label %.thread, label %.thread439.sink.split

.thread:                                          ; preds = %94
  %.pr436.pr = load i64, ptr %13, align 8, !tbaa !5
  %.not427 = icmp eq i64 %.pr436.pr, 0
  br i1 %.not427, label %101, label %.thread439

.thread439.sink.split:                            ; preds = %94, %57, %53, %50, %47, %45, %42
  %.sink = phi i64 [ -1, %42 ], [ -2, %45 ], [ -3, %47 ], [ -5, %50 ], [ -8, %53 ], [ -10, %57 ], [ -12, %94 ]
  store i64 %.sink, ptr %13, align 8, !tbaa !5
  br label %.thread439

.thread439:                                       ; preds = %.thread439.sink.split, %61, %.thread
  %98 = phi i64 [ %.pr436.pr, %.thread ], [ %.pr, %61 ], [ %.sink, %.thread439.sink.split ]
  %99 = sub nsw i64 0, %98
  store i64 %99, ptr %15, align 8, !tbaa !5
  %100 = call i32 @xerbla_(ptr noundef nonnull @.str.7, ptr noundef nonnull %15) #6
  br label %226

101:                                              ; preds = %.thread
  br i1 %38, label %226, label %102

102:                                              ; preds = %101
  %103 = load i64, ptr %2, align 8, !tbaa !5
  %104 = icmp eq i64 %103, 0
  br i1 %104, label %226, label %105

105:                                              ; preds = %102
  %106 = tail call double @dlamch_(ptr noundef nonnull @.str.8) #6
  %107 = tail call double @dlamch_(ptr noundef nonnull @.str.5) #6
  store double %107, ptr %30, align 8, !tbaa !13
  %108 = fdiv double 1.000000e+00, %107
  store double %108, ptr %29, align 8, !tbaa !13
  %109 = call i32 @dlabad_(ptr noundef nonnull %30, ptr noundef nonnull %29) #6
  %110 = load double, ptr %30, align 8, !tbaa !13
  %111 = call double @sqrt(double noundef %110) #6
  %112 = fdiv double %111, %106
  store double %112, ptr %30, align 8, !tbaa !13
  %113 = fdiv double 1.000000e+00, %112
  store double %113, ptr %29, align 8, !tbaa !13
  %114 = call double @zlange_(ptr noundef nonnull @.str.9, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef nonnull %21) #6
  store double %114, ptr %24, align 8, !tbaa !13
  %115 = fcmp ogt double %114, 0.000000e+00
  %116 = load double, ptr %30, align 8
  %117 = fcmp olt double %114, %116
  %or.cond460 = select i1 %115, i1 %117, i1 false
  br i1 %or.cond460, label %121, label %118

118:                                              ; preds = %105
  %119 = load double, ptr %29, align 8, !tbaa !13
  %120 = fcmp ogt double %114, %119
  br i1 %120, label %121, label %123

121:                                              ; preds = %105, %118
  %storemerge = phi double [ %119, %118 ], [ %116, %105 ]
  store double %storemerge, ptr %27, align 8, !tbaa !13
  %122 = call i32 @zlascl_(ptr noundef nonnull @.str.10, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %24, ptr noundef nonnull %27, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef nonnull %25) #6
  br label %123

123:                                              ; preds = %118, %121
  %.not428446 = phi i1 [ false, %121 ], [ true, %118 ]
  %124 = call i32 @zgebal_(ptr noundef nonnull @.str.11, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef nonnull %20, ptr noundef nonnull %18, ptr noundef %12, ptr noundef nonnull %25) #6
  %125 = load i64, ptr %2, align 8, !tbaa !5
  %126 = load i64, ptr %11, align 8, !tbaa !5
  %127 = sub i64 %126, %125
  store i64 %127, ptr %15, align 8, !tbaa !5
  %128 = getelementptr %struct.doublecomplex, ptr %10, i64 %125
  %129 = call i32 @zgehrd_(ptr noundef nonnull %2, ptr noundef nonnull %20, ptr noundef nonnull %18, ptr noundef %3, ptr noundef nonnull %4, ptr noundef nonnull %10, ptr noundef %128, ptr noundef nonnull %15, ptr noundef nonnull %25) #6
  br i1 %41, label %130, label %139

130:                                              ; preds = %123
  store i8 76, ptr %23, align 1, !tbaa !14
  %131 = call i32 @zlacpy_(ptr noundef nonnull @.str.12, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %6, ptr noundef nonnull %7) #6
  %132 = load i64, ptr %11, align 8, !tbaa !5
  %133 = sub i64 %132, %125
  store i64 %133, ptr %15, align 8, !tbaa !5
  %134 = call i32 @zunghr_(ptr noundef nonnull %2, ptr noundef nonnull %20, ptr noundef nonnull %18, ptr noundef %6, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef %128, ptr noundef nonnull %15, ptr noundef nonnull %25) #6
  %135 = load i64, ptr %11, align 8, !tbaa !5
  store i64 %135, ptr %15, align 8, !tbaa !5
  %136 = call i32 @zhseqr_(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str, ptr noundef nonnull %2, ptr noundef nonnull %20, ptr noundef nonnull %18, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %6, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef nonnull %15, ptr noundef nonnull %13) #6
  %.not430 = icmp eq i64 %40, 0
  br i1 %.not430, label %150, label %137

137:                                              ; preds = %130
  store i8 66, ptr %23, align 1, !tbaa !14
  %138 = call i32 @zlacpy_(ptr noundef nonnull @.str.13, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef nonnull %9) #6
  br label %150

139:                                              ; preds = %123
  %.not429 = icmp eq i64 %40, 0
  br i1 %.not429, label %147, label %140

140:                                              ; preds = %139
  store i8 82, ptr %23, align 1, !tbaa !14
  %141 = call i32 @zlacpy_(ptr noundef nonnull @.str.12, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %8, ptr noundef nonnull %9) #6
  %142 = load i64, ptr %11, align 8, !tbaa !5
  %143 = sub i64 %142, %125
  store i64 %143, ptr %15, align 8, !tbaa !5
  %144 = call i32 @zunghr_(ptr noundef nonnull %2, ptr noundef nonnull %20, ptr noundef nonnull %18, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef %128, ptr noundef nonnull %15, ptr noundef nonnull %25) #6
  %145 = load i64, ptr %11, align 8, !tbaa !5
  store i64 %145, ptr %15, align 8, !tbaa !5
  %146 = call i32 @zhseqr_(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str, ptr noundef nonnull %2, ptr noundef nonnull %20, ptr noundef nonnull %18, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull %15, ptr noundef nonnull %13) #6
  br label %150

147:                                              ; preds = %139
  %148 = load i64, ptr %11, align 8, !tbaa !5
  store i64 %148, ptr %15, align 8, !tbaa !5
  %149 = call i32 @zhseqr_(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, ptr noundef nonnull %2, ptr noundef nonnull %20, ptr noundef nonnull %18, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull %15, ptr noundef nonnull %13) #6
  br label %150

150:                                              ; preds = %140, %147, %130, %137
  %151 = load i64, ptr %13, align 8, !tbaa !5
  %152 = icmp sgt i64 %151, 0
  %153 = or i64 %39, %40
  %or.cond3.not = icmp eq i64 %153, 0
  %or.cond490 = select i1 %152, i1 true, i1 %or.cond3.not
  br i1 %or.cond490, label %.thread450, label %154

154:                                              ; preds = %150
  %155 = load i64, ptr %2, align 8, !tbaa !5
  %156 = getelementptr double, ptr %12, i64 %155
  %157 = call i32 @ztrevc_(ptr noundef nonnull %23, ptr noundef nonnull @.str.11, ptr noundef nonnull %28, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %2, ptr noundef nonnull %26, ptr noundef nonnull %10, ptr noundef %156, ptr noundef nonnull %25) #6
  br i1 %41, label %158, label %.loopexit

158:                                              ; preds = %154
  %159 = call i32 @zgebak_(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.12, ptr noundef nonnull %2, ptr noundef nonnull %20, ptr noundef nonnull %18, ptr noundef %12, ptr noundef nonnull %2, ptr noundef %6, ptr noundef nonnull %7, ptr noundef nonnull %25) #6
  %160 = load i64, ptr %2, align 8, !tbaa !5
  store i64 %160, ptr %15, align 8, !tbaa !5
  %invariant.gep465 = getelementptr i8, ptr %33, i64 16
  %.not431467 = icmp slt i64 %160, 1
  br i1 %.not431467, label %.loopexit, label %.lr.ph470

.lr.ph470:                                        ; preds = %158
  %invariant.gep463 = getelementptr i8, ptr %156, i64 -8
  br label %161

161:                                              ; preds = %.lr.ph470, %._crit_edge
  %.0411468 = phi i64 [ 1, %.lr.ph470 ], [ %183, %._crit_edge ]
  %162 = mul nsw i64 %.0411468, %31
  %gep466 = getelementptr %struct.doublecomplex, ptr %invariant.gep465, i64 %162
  %163 = call double @f2c_dznrm2(ptr noundef nonnull %2, ptr noundef %gep466, ptr noundef nonnull @c__1) #6
  %164 = fdiv double 1.000000e+00, %163
  store double %164, ptr %19, align 8, !tbaa !13
  %165 = call i32 @f2c_zdscal(ptr noundef nonnull %2, ptr noundef nonnull %19, ptr noundef %gep466, ptr noundef nonnull @c__1) #6
  %166 = load i64, ptr %2, align 8, !tbaa !5
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %33, i64 %162
  %.not434461 = icmp slt i64 %166, 1
  br i1 %.not434461, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %161, %.lr.ph
  %.0409462 = phi i64 [ %171, %.lr.ph ], [ 1, %161 ]
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.0409462
  %167 = load double, ptr %gep, align 8, !tbaa !9
  %168 = call double @d_imag(ptr noundef nonnull %gep) #6
  %169 = fmul double %168, %168
  %170 = call double @llvm.fmuladd.f64(double %167, double %167, double %169)
  %gep464 = getelementptr double, ptr %invariant.gep463, i64 %.0409462
  store double %170, ptr %gep464, align 8, !tbaa !13
  %171 = add nuw nsw i64 %.0409462, 1
  %.not434.not = icmp slt i64 %.0409462, %166
  br i1 %.not434.not, label %.lr.ph, label %._crit_edge, !llvm.loop !15

._crit_edge:                                      ; preds = %.lr.ph, %161
  %172 = call i64 @f2c_idamax(ptr noundef nonnull %2, ptr noundef nonnull %156, ptr noundef nonnull @c__1) #6
  %173 = add nsw i64 %172, %162
  %174 = getelementptr inbounds %struct.doublecomplex, ptr %33, i64 %173
  call void @d_cnjg(ptr noundef nonnull %17, ptr noundef %174) #6
  %gep472 = getelementptr double, ptr %invariant.gep463, i64 %172
  %175 = load double, ptr %gep472, align 8, !tbaa !13
  %176 = call double @sqrt(double noundef %175) #6
  %177 = load <2 x double>, ptr %17, align 16, !tbaa !13
  %178 = insertelement <2 x double> poison, double %176, i64 0
  %179 = shufflevector <2 x double> %178, <2 x double> poison, <2 x i32> zeroinitializer
  %180 = fdiv <2 x double> %177, %179
  store <2 x double> %180, ptr %22, align 16, !tbaa !13
  %181 = call i32 @f2c_zscal(ptr noundef nonnull %2, ptr noundef nonnull %22, ptr noundef %gep466, ptr noundef nonnull @c__1) #6
  store i64 %173, ptr %16, align 8, !tbaa !5
  %182 = getelementptr inbounds i8, ptr %174, i64 8
  store double 0.000000e+00, ptr %182, align 8, !tbaa !12
  %183 = add nuw nsw i64 %.0411468, 1
  %184 = load i64, ptr %15, align 8, !tbaa !5
  %.not431.not = icmp slt i64 %.0411468, %184
  br i1 %.not431.not, label %161, label %.loopexit, !llvm.loop !17

.loopexit:                                        ; preds = %._crit_edge, %158, %154
  br i1 %.not420, label %185, label %.thread450

185:                                              ; preds = %.loopexit
  %186 = call i32 @zgebak_(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.14, ptr noundef nonnull %2, ptr noundef nonnull %20, ptr noundef nonnull %18, ptr noundef %12, ptr noundef nonnull %2, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %25) #6
  %187 = load i64, ptr %2, align 8, !tbaa !5
  store i64 %187, ptr %15, align 8, !tbaa !5
  %invariant.gep482 = getelementptr i8, ptr %36, i64 16
  %.not432484 = icmp slt i64 %187, 1
  br i1 %.not432484, label %.thread450, label %.lr.ph487

.lr.ph487:                                        ; preds = %185
  %invariant.gep480 = getelementptr i8, ptr %156, i64 -8
  br label %188

188:                                              ; preds = %.lr.ph487, %._crit_edge479
  %.1412485 = phi i64 [ 1, %.lr.ph487 ], [ %210, %._crit_edge479 ]
  %189 = mul nsw i64 %.1412485, %34
  %gep483 = getelementptr %struct.doublecomplex, ptr %invariant.gep482, i64 %189
  %190 = call double @f2c_dznrm2(ptr noundef nonnull %2, ptr noundef %gep483, ptr noundef nonnull @c__1) #6
  %191 = fdiv double 1.000000e+00, %190
  store double %191, ptr %19, align 8, !tbaa !13
  %192 = call i32 @f2c_zdscal(ptr noundef nonnull %2, ptr noundef nonnull %19, ptr noundef %gep483, ptr noundef nonnull @c__1) #6
  %193 = load i64, ptr %2, align 8, !tbaa !5
  %invariant.gep473 = getelementptr %struct.doublecomplex, ptr %36, i64 %189
  %.not433475 = icmp slt i64 %193, 1
  br i1 %.not433475, label %._crit_edge479, label %.lr.ph478

.lr.ph478:                                        ; preds = %188, %.lr.ph478
  %.1410476 = phi i64 [ %198, %.lr.ph478 ], [ 1, %188 ]
  %gep474 = getelementptr %struct.doublecomplex, ptr %invariant.gep473, i64 %.1410476
  %194 = load double, ptr %gep474, align 8, !tbaa !9
  %195 = call double @d_imag(ptr noundef nonnull %gep474) #6
  %196 = fmul double %195, %195
  %197 = call double @llvm.fmuladd.f64(double %194, double %194, double %196)
  %gep481 = getelementptr double, ptr %invariant.gep480, i64 %.1410476
  store double %197, ptr %gep481, align 8, !tbaa !13
  %198 = add nuw nsw i64 %.1410476, 1
  %.not433.not = icmp slt i64 %.1410476, %193
  br i1 %.not433.not, label %.lr.ph478, label %._crit_edge479, !llvm.loop !18

._crit_edge479:                                   ; preds = %.lr.ph478, %188
  %199 = call i64 @f2c_idamax(ptr noundef nonnull %2, ptr noundef nonnull %156, ptr noundef nonnull @c__1) #6
  %200 = add nsw i64 %199, %189
  %201 = getelementptr inbounds %struct.doublecomplex, ptr %36, i64 %200
  call void @d_cnjg(ptr noundef nonnull %17, ptr noundef %201) #6
  %gep489 = getelementptr double, ptr %invariant.gep480, i64 %199
  %202 = load double, ptr %gep489, align 8, !tbaa !13
  %203 = call double @sqrt(double noundef %202) #6
  %204 = load <2 x double>, ptr %17, align 16, !tbaa !13
  %205 = insertelement <2 x double> poison, double %203, i64 0
  %206 = shufflevector <2 x double> %205, <2 x double> poison, <2 x i32> zeroinitializer
  %207 = fdiv <2 x double> %204, %206
  store <2 x double> %207, ptr %22, align 16, !tbaa !13
  %208 = call i32 @f2c_zscal(ptr noundef nonnull %2, ptr noundef nonnull %22, ptr noundef %gep483, ptr noundef nonnull @c__1) #6
  store i64 %200, ptr %16, align 8, !tbaa !5
  %209 = getelementptr inbounds i8, ptr %201, i64 8
  store double 0.000000e+00, ptr %209, align 8, !tbaa !12
  %210 = add nuw nsw i64 %.1412485, 1
  %211 = load i64, ptr %15, align 8, !tbaa !5
  %.not432.not = icmp slt i64 %.1412485, %211
  br i1 %.not432.not, label %188, label %.thread450, !llvm.loop !19

.thread450:                                       ; preds = %._crit_edge479, %185, %.loopexit, %150
  br i1 %.not428446, label %225, label %212

212:                                              ; preds = %.thread450
  %213 = load i64, ptr %2, align 8, !tbaa !5
  %214 = load i64, ptr %13, align 8, !tbaa !5
  %215 = sub nsw i64 %213, %214
  store i64 %215, ptr %15, align 8, !tbaa !5
  %216 = call i64 @llvm.smax.i64(i64 %215, i64 1)
  store i64 %216, ptr %16, align 8, !tbaa !5
  %217 = getelementptr %struct.doublecomplex, ptr %5, i64 %214
  %218 = call i32 @zlascl_(ptr noundef nonnull @.str.10, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %27, ptr noundef nonnull %24, ptr noundef nonnull %15, ptr noundef nonnull @c__1, ptr noundef %217, ptr noundef nonnull %16, ptr noundef nonnull %25) #6
  %219 = load i64, ptr %13, align 8, !tbaa !5
  %220 = icmp sgt i64 %219, 0
  br i1 %220, label %221, label %225

221:                                              ; preds = %212
  %222 = load i64, ptr %20, align 8, !tbaa !5
  %223 = add nsw i64 %222, -1
  store i64 %223, ptr %15, align 8, !tbaa !5
  %224 = call i32 @zlascl_(ptr noundef nonnull @.str.10, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %27, ptr noundef nonnull %24, ptr noundef nonnull %15, ptr noundef nonnull @c__1, ptr noundef %5, ptr noundef nonnull %2, ptr noundef nonnull %25) #6
  br label %225

225:                                              ; preds = %212, %221, %.thread450
  store double %.1, ptr %10, align 8, !tbaa !9
  store double 0.000000e+00, ptr %95, align 8, !tbaa !12
  br label %226

226:                                              ; preds = %102, %101, %225, %.thread439
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #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 @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 @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