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

118:                                              ; preds = %14
  %119 = load ptr, ptr %15, align 8, !tbaa !5
  %120 = call i32 @lsame_(ptr noundef %119, ptr noundef @.str.1)
  %121 = icmp ne i32 %120, 0
  br i1 %121, label %124, label %122

122:                                              ; preds = %118
  %123 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -1, ptr %123, align 4, !tbaa !9
  br label %189

124:                                              ; preds = %118, %14
  %125 = load i32, ptr %62, align 4, !tbaa !9
  %126 = icmp ne i32 %125, 0
  br i1 %126, label %133, label %127

127:                                              ; preds = %124
  %128 = load ptr, ptr %16, align 8, !tbaa !5
  %129 = call i32 @lsame_(ptr noundef %128, ptr noundef @.str.1)
  %130 = icmp ne i32 %129, 0
  br i1 %130, label %133, label %131

131:                                              ; preds = %127
  %132 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -2, ptr %132, align 4, !tbaa !9
  br label %188

133:                                              ; preds = %127, %124
  %134 = load ptr, ptr %17, align 8, !tbaa !5
  %135 = load i32, ptr %134, align 4, !tbaa !9
  %136 = icmp slt i32 %135, 0
  br i1 %136, label %137, label %139

137:                                              ; preds = %133
  %138 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -3, ptr %138, align 4, !tbaa !9
  br label %187

139:                                              ; preds = %133
  %140 = load ptr, ptr %19, align 8, !tbaa !5
  %141 = load i32, ptr %140, align 4, !tbaa !9
  %142 = load ptr, ptr %17, align 8, !tbaa !5
  %143 = load i32, ptr %142, align 4, !tbaa !9
  %144 = icmp sge i32 1, %143
  br i1 %144, label %145, label %146

145:                                              ; preds = %139
  br label %149

146:                                              ; preds = %139
  %147 = load ptr, ptr %17, align 8, !tbaa !5
  %148 = load i32, ptr %147, align 4, !tbaa !9
  br label %149

149:                                              ; preds = %146, %145
  %150 = phi i32 [ 1, %145 ], [ %148, %146 ]
  %151 = icmp slt i32 %141, %150
  br i1 %151, label %152, label %154

152:                                              ; preds = %149
  %153 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -5, ptr %153, align 4, !tbaa !9
  br label %186

154:                                              ; preds = %149
  %155 = load ptr, ptr %22, align 8, !tbaa !5
  %156 = load i32, ptr %155, align 4, !tbaa !9
  %157 = icmp slt i32 %156, 1
  br i1 %157, label %167, label %158

158:                                              ; preds = %154
  %159 = load i32, ptr %57, align 4, !tbaa !9
  %160 = icmp ne i32 %159, 0
  br i1 %160, label %161, label %169

161:                                              ; preds = %158
  %162 = load ptr, ptr %22, align 8, !tbaa !5
  %163 = load i32, ptr %162, align 4, !tbaa !9
  %164 = load ptr, ptr %17, align 8, !tbaa !5
  %165 = load i32, ptr %164, align 4, !tbaa !9
  %166 = icmp slt i32 %163, %165
  br i1 %166, label %167, label %169

167:                                              ; preds = %161, %154
  %168 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -8, ptr %168, align 4, !tbaa !9
  br label %185

169:                                              ; preds = %161, %158
  %170 = load ptr, ptr %24, align 8, !tbaa !5
  %171 = load i32, ptr %170, align 4, !tbaa !9
  %172 = icmp slt i32 %171, 1
  br i1 %172, label %182, label %173

173:                                              ; preds = %169
  %174 = load i32, ptr %62, align 4, !tbaa !9
  %175 = icmp ne i32 %174, 0
  br i1 %175, label %176, label %184

176:                                              ; preds = %173
  %177 = load ptr, ptr %24, align 8, !tbaa !5
  %178 = load i32, ptr %177, align 4, !tbaa !9
  %179 = load ptr, ptr %17, align 8, !tbaa !5
  %180 = load i32, ptr %179, align 4, !tbaa !9
  %181 = icmp slt i32 %178, %180
  br i1 %181, label %182, label %184

182:                                              ; preds = %176, %169
  %183 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -10, ptr %183, align 4, !tbaa !9
  br label %184

184:                                              ; preds = %182, %176, %173
  br label %185

185:                                              ; preds = %184, %167
  br label %186

186:                                              ; preds = %185, %152
  br label %187

187:                                              ; preds = %186, %137
  br label %188

188:                                              ; preds = %187, %131
  br label %189

189:                                              ; preds = %188, %122
  %190 = load ptr, ptr %28, align 8, !tbaa !5
  %191 = load i32, ptr %190, align 4, !tbaa !9
  %192 = icmp eq i32 %191, 0
  br i1 %192, label %193, label %436

193:                                              ; preds = %189
  %194 = load ptr, ptr %17, align 8, !tbaa !5
  %195 = load i32, ptr %194, align 4, !tbaa !9
  %196 = icmp eq i32 %195, 0
  br i1 %196, label %197, label %198

197:                                              ; preds = %193
  store i32 1, ptr %55, align 4, !tbaa !9
  store i32 1, ptr %56, align 4, !tbaa !9
  br label %417

198:                                              ; preds = %193
  %199 = load ptr, ptr %17, align 8, !tbaa !5
  %200 = load i32, ptr %199, align 4, !tbaa !9
  %201 = load ptr, ptr %17, align 8, !tbaa !5
  %202 = load i32, ptr %201, align 4, !tbaa !9
  %203 = load ptr, ptr %17, align 8, !tbaa !5
  %204 = load ptr, ptr %17, align 8, !tbaa !5
  %205 = call i32 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %203, ptr noundef @c__1, ptr noundef %204, ptr noundef @c__0, i32 noundef 6, i32 noundef 1)
  %206 = mul nsw i32 %202, %205
  %207 = add nsw i32 %200, %206
  store i32 %207, ptr %56, align 4, !tbaa !9
  %208 = load ptr, ptr %17, align 8, !tbaa !5
  %209 = load i32, ptr %208, align 4, !tbaa !9
  %210 = shl i32 %209, 1
  store i32 %210, ptr %55, align 4, !tbaa !9
  %211 = load i32, ptr %57, align 4, !tbaa !9
  %212 = icmp ne i32 %211, 0
  br i1 %212, label %213, label %292

213:                                              ; preds = %198
  %214 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %214, ptr %35, align 4, !tbaa !9
  %215 = load ptr, ptr %17, align 8, !tbaa !5
  %216 = load i32, ptr %215, align 4, !tbaa !9
  %217 = load ptr, ptr %17, align 8, !tbaa !5
  %218 = load i32, ptr %217, align 4, !tbaa !9
  %219 = sub nsw i32 %218, 1
  %220 = load ptr, ptr %17, align 8, !tbaa !5
  %221 = load ptr, ptr %17, align 8, !tbaa !5
  %222 = call i32 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.4, ptr noundef @.str.3, ptr noundef %220, ptr noundef @c__1, ptr noundef %221, ptr noundef @c_n1, i32 noundef 6, i32 noundef 1)
  %223 = mul nsw i32 %219, %222
  %224 = add nsw i32 %216, %223
  store i32 %224, ptr %36, align 4, !tbaa !9
  %225 = load i32, ptr %35, align 4, !tbaa !9
  %226 = load i32, ptr %36, align 4, !tbaa !9
  %227 = icmp sge i32 %225, %226
  br i1 %227, label %228, label %230

228:                                              ; preds = %213
  %229 = load i32, ptr %35, align 4, !tbaa !9
  br label %232

230:                                              ; preds = %213
  %231 = load i32, ptr %36, align 4, !tbaa !9
  br label %232

232:                                              ; preds = %230, %228
  %233 = phi i32 [ %229, %228 ], [ %231, %230 ]
  store i32 %233, ptr %56, align 4, !tbaa !9
  %234 = getelementptr inbounds [1 x i32], ptr %53, i64 0, i64 0
  %235 = load ptr, ptr %17, align 8, !tbaa !5
  %236 = load ptr, ptr %18, align 8, !tbaa !5
  %237 = load i32, ptr %30, align 4, !tbaa !9
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds %struct.doublecomplex, ptr %236, i64 %238
  %240 = load ptr, ptr %19, align 8, !tbaa !5
  %241 = load ptr, ptr %21, align 8, !tbaa !5
  %242 = load i32, ptr %32, align 4, !tbaa !9
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds %struct.doublecomplex, ptr %241, i64 %243
  %245 = load ptr, ptr %22, align 8, !tbaa !5
  %246 = load ptr, ptr %23, align 8, !tbaa !5
  %247 = load i32, ptr %34, align 4, !tbaa !9
  %248 = sext i32 %247 to i64
  %249 = getelementptr inbounds %struct.doublecomplex, ptr %246, i64 %248
  %250 = load ptr, ptr %24, align 8, !tbaa !5
  %251 = load ptr, ptr %17, align 8, !tbaa !5
  %252 = load ptr, ptr %25, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.doublecomplex, ptr %252, i64 1
  %254 = load ptr, ptr %27, align 8, !tbaa !5
  %255 = getelementptr inbounds double, ptr %254, i64 1
  call void @ztrevc3_(ptr noundef @.str.5, ptr noundef @.str.6, ptr noundef %234, ptr noundef %235, ptr noundef %239, ptr noundef %240, ptr noundef %244, ptr noundef %245, ptr noundef %249, ptr noundef %250, ptr noundef %251, ptr noundef %48, ptr noundef %253, ptr noundef @c_n1, ptr noundef %255, ptr noundef @c_n1, ptr noundef %45)
  %256 = load ptr, ptr %25, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.doublecomplex, ptr %256, i64 1
  %258 = getelementptr inbounds %struct.doublecomplex, ptr %257, i32 0, i32 0
  %259 = load double, ptr %258, align 8, !tbaa !11
  %260 = fptosi double %259 to i32
  store i32 %260, ptr %69, align 4, !tbaa !9
  %261 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %261, ptr %35, align 4, !tbaa !9
  %262 = load ptr, ptr %17, align 8, !tbaa !5
  %263 = load i32, ptr %262, align 4, !tbaa !9
  %264 = load i32, ptr %69, align 4, !tbaa !9
  %265 = add nsw i32 %263, %264
  store i32 %265, ptr %36, align 4, !tbaa !9
  %266 = load i32, ptr %35, align 4, !tbaa !9
  %267 = load i32, ptr %36, align 4, !tbaa !9
  %268 = icmp sge i32 %266, %267
  br i1 %268, label %269, label %271

269:                                              ; preds = %232
  %270 = load i32, ptr %35, align 4, !tbaa !9
  br label %273

271:                                              ; preds = %232
  %272 = load i32, ptr %36, align 4, !tbaa !9
  br label %273

273:                                              ; preds = %271, %269
  %274 = phi i32 [ %270, %269 ], [ %272, %271 ]
  store i32 %274, ptr %56, align 4, !tbaa !9
  %275 = load ptr, ptr %17, align 8, !tbaa !5
  %276 = load ptr, ptr %17, align 8, !tbaa !5
  %277 = load ptr, ptr %18, align 8, !tbaa !5
  %278 = load i32, ptr %30, align 4, !tbaa !9
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds %struct.doublecomplex, ptr %277, i64 %279
  %281 = load ptr, ptr %19, align 8, !tbaa !5
  %282 = load ptr, ptr %20, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.doublecomplex, ptr %282, i64 1
  %284 = load ptr, ptr %21, align 8, !tbaa !5
  %285 = load i32, ptr %32, align 4, !tbaa !9
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds %struct.doublecomplex, ptr %284, i64 %286
  %288 = load ptr, ptr %22, align 8, !tbaa !5
  %289 = load ptr, ptr %25, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.doublecomplex, ptr %289, i64 1
  %291 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zhseqr_(ptr noundef @.str.7, ptr noundef @.str, ptr noundef %275, ptr noundef @c__1, ptr noundef %276, ptr noundef %280, ptr noundef %281, ptr noundef %283, ptr noundef %287, ptr noundef %288, ptr noundef %290, ptr noundef @c_n1, ptr noundef %291)
  br label %393

292:                                              ; preds = %198
  %293 = load i32, ptr %62, align 4, !tbaa !9
  %294 = icmp ne i32 %293, 0
  br i1 %294, label %295, label %374

295:                                              ; preds = %292
  %296 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %296, ptr %35, align 4, !tbaa !9
  %297 = load ptr, ptr %17, align 8, !tbaa !5
  %298 = load i32, ptr %297, align 4, !tbaa !9
  %299 = load ptr, ptr %17, align 8, !tbaa !5
  %300 = load i32, ptr %299, align 4, !tbaa !9
  %301 = sub nsw i32 %300, 1
  %302 = load ptr, ptr %17, align 8, !tbaa !5
  %303 = load ptr, ptr %17, align 8, !tbaa !5
  %304 = call i32 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.4, ptr noundef @.str.3, ptr noundef %302, ptr noundef @c__1, ptr noundef %303, ptr noundef @c_n1, i32 noundef 6, i32 noundef 1)
  %305 = mul nsw i32 %301, %304
  %306 = add nsw i32 %298, %305
  store i32 %306, ptr %36, align 4, !tbaa !9
  %307 = load i32, ptr %35, align 4, !tbaa !9
  %308 = load i32, ptr %36, align 4, !tbaa !9
  %309 = icmp sge i32 %307, %308
  br i1 %309, label %310, label %312

310:                                              ; preds = %295
  %311 = load i32, ptr %35, align 4, !tbaa !9
  br label %314

312:                                              ; preds = %295
  %313 = load i32, ptr %36, align 4, !tbaa !9
  br label %314

314:                                              ; preds = %312, %310
  %315 = phi i32 [ %311, %310 ], [ %313, %312 ]
  store i32 %315, ptr %56, align 4, !tbaa !9
  %316 = getelementptr inbounds [1 x i32], ptr %53, i64 0, i64 0
  %317 = load ptr, ptr %17, align 8, !tbaa !5
  %318 = load ptr, ptr %18, align 8, !tbaa !5
  %319 = load i32, ptr %30, align 4, !tbaa !9
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds %struct.doublecomplex, ptr %318, i64 %320
  %322 = load ptr, ptr %19, align 8, !tbaa !5
  %323 = load ptr, ptr %21, align 8, !tbaa !5
  %324 = load i32, ptr %32, align 4, !tbaa !9
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds %struct.doublecomplex, ptr %323, i64 %325
  %327 = load ptr, ptr %22, align 8, !tbaa !5
  %328 = load ptr, ptr %23, align 8, !tbaa !5
  %329 = load i32, ptr %34, align 4, !tbaa !9
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds %struct.doublecomplex, ptr %328, i64 %330
  %332 = load ptr, ptr %24, align 8, !tbaa !5
  %333 = load ptr, ptr %17, align 8, !tbaa !5
  %334 = load ptr, ptr %25, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.doublecomplex, ptr %334, i64 1
  %336 = load ptr, ptr %27, align 8, !tbaa !5
  %337 = getelementptr inbounds double, ptr %336, i64 1
  call void @ztrevc3_(ptr noundef @.str.8, ptr noundef @.str.6, ptr noundef %316, ptr noundef %317, ptr noundef %321, ptr noundef %322, ptr noundef %326, ptr noundef %327, ptr noundef %331, ptr noundef %332, ptr noundef %333, ptr noundef %48, ptr noundef %335, ptr noundef @c_n1, ptr noundef %337, ptr noundef @c_n1, ptr noundef %45)
  %338 = load ptr, ptr %25, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.doublecomplex, ptr %338, i64 1
  %340 = getelementptr inbounds %struct.doublecomplex, ptr %339, i32 0, i32 0
  %341 = load double, ptr %340, align 8, !tbaa !11
  %342 = fptosi double %341 to i32
  store i32 %342, ptr %69, align 4, !tbaa !9
  %343 = load i32, ptr %56, align 4, !tbaa !9
  store i32 %343, ptr %35, align 4, !tbaa !9
  %344 = load ptr, ptr %17, align 8, !tbaa !5
  %345 = load i32, ptr %344, align 4, !tbaa !9
  %346 = load i32, ptr %69, align 4, !tbaa !9
  %347 = add nsw i32 %345, %346
  store i32 %347, ptr %36, align 4, !tbaa !9
  %348 = load i32, ptr %35, align 4, !tbaa !9
  %349 = load i32, ptr %36, align 4, !tbaa !9
  %350 = icmp sge i32 %348, %349
  br i1 %350, label %351, label %353

351:                                              ; preds = %314
  %352 = load i32, ptr %35, align 4, !tbaa !9
  br label %355

353:                                              ; preds = %314
  %354 = load i32, ptr %36, align 4, !tbaa !9
  br label %355

355:                                              ; preds = %353, %351
  %356 = phi i32 [ %352, %351 ], [ %354, %353 ]
  store i32 %356, ptr %56, align 4, !tbaa !9
  %357 = load ptr, ptr %17, align 8, !tbaa !5
  %358 = load ptr, ptr %17, align 8, !tbaa !5
  %359 = load ptr, ptr %18, align 8, !tbaa !5
  %360 = load i32, ptr %30, align 4, !tbaa !9
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds %struct.doublecomplex, ptr %359, i64 %361
  %363 = load ptr, ptr %19, align 8, !tbaa !5
  %364 = load ptr, ptr %20, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.doublecomplex, ptr %364, i64 1
  %366 = load ptr, ptr %23, align 8, !tbaa !5
  %367 = load i32, ptr %34, align 4, !tbaa !9
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds %struct.doublecomplex, ptr %366, i64 %368
  %370 = load ptr, ptr %24, align 8, !tbaa !5
  %371 = load ptr, ptr %25, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.doublecomplex, ptr %371, i64 1
  %373 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zhseqr_(ptr noundef @.str.7, ptr noundef @.str, ptr noundef %357, ptr noundef @c__1, ptr noundef %358, ptr noundef %362, ptr noundef %363, ptr noundef %365, ptr noundef %369, ptr noundef %370, ptr noundef %372, ptr noundef @c_n1, ptr noundef %373)
  br label %392

374:                                              ; preds = %292
  %375 = load ptr, ptr %17, align 8, !tbaa !5
  %376 = load ptr, ptr %17, align 8, !tbaa !5
  %377 = load ptr, ptr %18, align 8, !tbaa !5
  %378 = load i32, ptr %30, align 4, !tbaa !9
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds %struct.doublecomplex, ptr %377, i64 %379
  %381 = load ptr, ptr %19, align 8, !tbaa !5
  %382 = load ptr, ptr %20, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.doublecomplex, ptr %382, i64 1
  %384 = load ptr, ptr %23, align 8, !tbaa !5
  %385 = load i32, ptr %34, align 4, !tbaa !9
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds %struct.doublecomplex, ptr %384, i64 %386
  %388 = load ptr, ptr %24, align 8, !tbaa !5
  %389 = load ptr, ptr %25, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.doublecomplex, ptr %389, i64 1
  %391 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zhseqr_(ptr noundef @.str.9, ptr noundef @.str.1, ptr noundef %375, ptr noundef @c__1, ptr noundef %376, ptr noundef %380, ptr noundef %381, ptr noundef %383, ptr noundef %387, ptr noundef %388, ptr noundef %390, ptr noundef @c_n1, ptr noundef %391)
  br label %392

392:                                              ; preds = %374, %355
  br label %393

393:                                              ; preds = %392, %273
  %394 = load ptr, ptr %25, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.doublecomplex, ptr %394, i64 1
  %396 = getelementptr inbounds %struct.doublecomplex, ptr %395, i32 0, i32 0
  %397 = load double, ptr %396, align 8, !tbaa !11
  %398 = fptosi double %397 to i32
  store i32 %398, ptr %59, align 4, !tbaa !9
  %399 = load i32, ptr %56, align 4, !tbaa !9
  %400 = load i32, ptr %59, align 4, !tbaa !9
  %401 = icmp sge i32 %399, %400
  br i1 %401, label %402, label %404

402:                                              ; preds = %393
  %403 = load i32, ptr %56, align 4, !tbaa !9
  br label %406

404:                                              ; preds = %393
  %405 = load i32, ptr %59, align 4, !tbaa !9
  br label %406

406:                                              ; preds = %404, %402
  %407 = phi i32 [ %403, %402 ], [ %405, %404 ]
  store i32 %407, ptr %35, align 4, !tbaa !9
  %408 = load i32, ptr %35, align 4, !tbaa !9
  %409 = load i32, ptr %55, align 4, !tbaa !9
  %410 = icmp sge i32 %408, %409
  br i1 %410, label %411, label %413

411:                                              ; preds = %406
  %412 = load i32, ptr %35, align 4, !tbaa !9
  br label %415

413:                                              ; preds = %406
  %414 = load i32, ptr %55, align 4, !tbaa !9
  br label %415

415:                                              ; preds = %413, %411
  %416 = phi i32 [ %412, %411 ], [ %414, %413 ]
  store i32 %416, ptr %56, align 4, !tbaa !9
  br label %417

417:                                              ; preds = %415, %197
  %418 = load i32, ptr %56, align 4, !tbaa !9
  %419 = sitofp i32 %418 to double
  %420 = load ptr, ptr %25, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.doublecomplex, ptr %420, i64 1
  %422 = getelementptr inbounds %struct.doublecomplex, ptr %421, i32 0, i32 0
  store double %419, ptr %422, align 8, !tbaa !11
  %423 = load ptr, ptr %25, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.doublecomplex, ptr %423, i64 1
  %425 = getelementptr inbounds %struct.doublecomplex, ptr %424, i32 0, i32 1
  store double 0.000000e+00, ptr %425, align 8, !tbaa !14
  %426 = load ptr, ptr %26, align 8, !tbaa !5
  %427 = load i32, ptr %426, align 4, !tbaa !9
  %428 = load i32, ptr %55, align 4, !tbaa !9
  %429 = icmp slt i32 %427, %428
  br i1 %429, label %430, label %435

430:                                              ; preds = %417
  %431 = load i32, ptr %61, align 4, !tbaa !9
  %432 = icmp ne i32 %431, 0
  br i1 %432, label %435, label %433

433:                                              ; preds = %430
  %434 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -12, ptr %434, align 4, !tbaa !9
  br label %435

435:                                              ; preds = %433, %430, %417
  br label %436

436:                                              ; preds = %435, %189
  %437 = load ptr, ptr %28, align 8, !tbaa !5
  %438 = load i32, ptr %437, align 4, !tbaa !9
  %439 = icmp ne i32 %438, 0
  br i1 %439, label %440, label %445

440:                                              ; preds = %436
  %441 = load ptr, ptr %28, align 8, !tbaa !5
  %442 = load i32, ptr %441, align 4, !tbaa !9
  %443 = sub nsw i32 0, %442
  store i32 %443, ptr %35, align 4, !tbaa !9
  %444 = call i32 @xerbla_(ptr noundef @.str.10, ptr noundef %35, i32 noundef 6)
  store i32 1, ptr %70, align 4
  br label %1147

445:                                              ; preds = %436
  %446 = load i32, ptr %61, align 4, !tbaa !9
  %447 = icmp ne i32 %446, 0
  br i1 %447, label %448, label %449

448:                                              ; preds = %445
  store i32 1, ptr %70, align 4
  br label %1147

449:                                              ; preds = %445
  br label %450

450:                                              ; preds = %449
  %451 = load ptr, ptr %17, align 8, !tbaa !5
  %452 = load i32, ptr %451, align 4, !tbaa !9
  %453 = icmp eq i32 %452, 0
  br i1 %453, label %454, label %455

454:                                              ; preds = %450
  store i32 1, ptr %70, align 4
  br label %1147

455:                                              ; preds = %450
  %456 = call double @dlamch_(ptr noundef @.str.11)
  store double %456, ptr %67, align 8, !tbaa !15
  %457 = call double @dlamch_(ptr noundef @.str.7)
  store double %457, ptr %58, align 8, !tbaa !15
  %458 = load double, ptr %58, align 8, !tbaa !15
  %459 = fdiv double 1.000000e+00, %458
  store double %459, ptr %54, align 8, !tbaa !15
  call void @dlabad_(ptr noundef %58, ptr noundef %54)
  %460 = load double, ptr %58, align 8, !tbaa !15
  %461 = call double @sqrt(double noundef %460) #6
  %462 = load double, ptr %67, align 8, !tbaa !15
  %463 = fdiv double %461, %462
  store double %463, ptr %58, align 8, !tbaa !15
  %464 = load double, ptr %58, align 8, !tbaa !15
  %465 = fdiv double 1.000000e+00, %464
  store double %465, ptr %54, align 8, !tbaa !15
  %466 = load ptr, ptr %17, align 8, !tbaa !5
  %467 = load ptr, ptr %17, align 8, !tbaa !5
  %468 = load ptr, ptr %18, align 8, !tbaa !5
  %469 = load i32, ptr %30, align 4, !tbaa !9
  %470 = sext i32 %469 to i64
  %471 = getelementptr inbounds %struct.doublecomplex, ptr %468, i64 %470
  %472 = load ptr, ptr %19, align 8, !tbaa !5
  %473 = getelementptr inbounds [1 x double], ptr %66, i64 0, i64 0
  %474 = call double @zlange_(ptr noundef @.str.12, ptr noundef %466, ptr noundef %467, ptr noundef %471, ptr noundef %472, ptr noundef %473)
  store double %474, ptr %44, align 8, !tbaa !15
  store i32 0, ptr %51, align 4, !tbaa !9
  %475 = load double, ptr %44, align 8, !tbaa !15
  %476 = fcmp ogt double %475, 0.000000e+00
  br i1 %476, label %477, label %483

477:                                              ; preds = %455
  %478 = load double, ptr %44, align 8, !tbaa !15
  %479 = load double, ptr %58, align 8, !tbaa !15
  %480 = fcmp olt double %478, %479
  br i1 %480, label %481, label %483

481:                                              ; preds = %477
  store i32 1, ptr %51, align 4, !tbaa !9
  %482 = load double, ptr %58, align 8, !tbaa !15
  store double %482, ptr %52, align 8, !tbaa !15
  br label %490

483:                                              ; preds = %477, %455
  %484 = load double, ptr %44, align 8, !tbaa !15
  %485 = load double, ptr %54, align 8, !tbaa !15
  %486 = fcmp ogt double %484, %485
  br i1 %486, label %487, label %489

487:                                              ; preds = %483
  store i32 1, ptr %51, align 4, !tbaa !9
  %488 = load double, ptr %54, align 8, !tbaa !15
  store double %488, ptr %52, align 8, !tbaa !15
  br label %489

489:                                              ; preds = %487, %483
  br label %490

490:                                              ; preds = %489, %481
  %491 = load i32, ptr %51, align 4, !tbaa !9
  %492 = icmp ne i32 %491, 0
  br i1 %492, label %493, label %501

493:                                              ; preds = %490
  %494 = load ptr, ptr %17, align 8, !tbaa !5
  %495 = load ptr, ptr %17, align 8, !tbaa !5
  %496 = load ptr, ptr %18, align 8, !tbaa !5
  %497 = load i32, ptr %30, align 4, !tbaa !9
  %498 = sext i32 %497 to i64
  %499 = getelementptr inbounds %struct.doublecomplex, ptr %496, i64 %498
  %500 = load ptr, ptr %19, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.13, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %44, ptr noundef %52, ptr noundef %494, ptr noundef %495, ptr noundef %499, ptr noundef %500, ptr noundef %45)
  br label %501

501:                                              ; preds = %493, %490
  store i32 1, ptr %42, align 4, !tbaa !9
  %502 = load ptr, ptr %17, align 8, !tbaa !5
  %503 = load ptr, ptr %18, align 8, !tbaa !5
  %504 = load i32, ptr %30, align 4, !tbaa !9
  %505 = sext i32 %504 to i64
  %506 = getelementptr inbounds %struct.doublecomplex, ptr %503, i64 %505
  %507 = load ptr, ptr %19, align 8, !tbaa !5
  %508 = load ptr, ptr %27, align 8, !tbaa !5
  %509 = load i32, ptr %42, align 4, !tbaa !9
  %510 = sext i32 %509 to i64
  %511 = getelementptr inbounds double, ptr %508, i64 %510
  call void @zgebal_(ptr noundef @.str.6, ptr noundef %502, ptr noundef %506, ptr noundef %507, ptr noundef %65, ptr noundef %63, ptr noundef %511, ptr noundef %45)
  store i32 1, ptr %46, align 4, !tbaa !9
  %512 = load i32, ptr %46, align 4, !tbaa !9
  %513 = load ptr, ptr %17, align 8, !tbaa !5
  %514 = load i32, ptr %513, align 4, !tbaa !9
  %515 = add nsw i32 %512, %514
  store i32 %515, ptr %47, align 4, !tbaa !9
  %516 = load ptr, ptr %26, align 8, !tbaa !5
  %517 = load i32, ptr %516, align 4, !tbaa !9
  %518 = load i32, ptr %47, align 4, !tbaa !9
  %519 = sub nsw i32 %517, %518
  %520 = add nsw i32 %519, 1
  store i32 %520, ptr %35, align 4, !tbaa !9
  %521 = load ptr, ptr %17, align 8, !tbaa !5
  %522 = load ptr, ptr %18, align 8, !tbaa !5
  %523 = load i32, ptr %30, align 4, !tbaa !9
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds %struct.doublecomplex, ptr %522, i64 %524
  %526 = load ptr, ptr %19, align 8, !tbaa !5
  %527 = load ptr, ptr %25, align 8, !tbaa !5
  %528 = load i32, ptr %46, align 4, !tbaa !9
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds %struct.doublecomplex, ptr %527, i64 %529
  %531 = load ptr, ptr %25, align 8, !tbaa !5
  %532 = load i32, ptr %47, align 4, !tbaa !9
  %533 = sext i32 %532 to i64
  %534 = getelementptr inbounds %struct.doublecomplex, ptr %531, i64 %533
  call void @zgehrd_(ptr noundef %521, ptr noundef %65, ptr noundef %63, ptr noundef %525, ptr noundef %526, ptr noundef %530, ptr noundef %534, ptr noundef %35, ptr noundef %45)
  %535 = load i32, ptr %57, align 4, !tbaa !9
  %536 = icmp ne i32 %535, 0
  br i1 %536, label %537, label %611

537:                                              ; preds = %501
  %538 = getelementptr inbounds [1 x i8], ptr %43, i64 0, i64 0
  store i8 76, ptr %538, align 1, !tbaa !16
  %539 = load ptr, ptr %17, align 8, !tbaa !5
  %540 = load ptr, ptr %17, align 8, !tbaa !5
  %541 = load ptr, ptr %18, align 8, !tbaa !5
  %542 = load i32, ptr %30, align 4, !tbaa !9
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds %struct.doublecomplex, ptr %541, i64 %543
  %545 = load ptr, ptr %19, align 8, !tbaa !5
  %546 = load ptr, ptr %21, align 8, !tbaa !5
  %547 = load i32, ptr %32, align 4, !tbaa !9
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds %struct.doublecomplex, ptr %546, i64 %548
  %550 = load ptr, ptr %22, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.5, ptr noundef %539, ptr noundef %540, ptr noundef %544, ptr noundef %545, ptr noundef %549, ptr noundef %550)
  %551 = load ptr, ptr %26, align 8, !tbaa !5
  %552 = load i32, ptr %551, align 4, !tbaa !9
  %553 = load i32, ptr %47, align 4, !tbaa !9
  %554 = sub nsw i32 %552, %553
  %555 = add nsw i32 %554, 1
  store i32 %555, ptr %35, align 4, !tbaa !9
  %556 = load ptr, ptr %17, align 8, !tbaa !5
  %557 = load ptr, ptr %21, align 8, !tbaa !5
  %558 = load i32, ptr %32, align 4, !tbaa !9
  %559 = sext i32 %558 to i64
  %560 = getelementptr inbounds %struct.doublecomplex, ptr %557, i64 %559
  %561 = load ptr, ptr %22, align 8, !tbaa !5
  %562 = load ptr, ptr %25, align 8, !tbaa !5
  %563 = load i32, ptr %46, align 4, !tbaa !9
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds %struct.doublecomplex, ptr %562, i64 %564
  %566 = load ptr, ptr %25, align 8, !tbaa !5
  %567 = load i32, ptr %47, align 4, !tbaa !9
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds %struct.doublecomplex, ptr %566, i64 %568
  call void @zunghr_(ptr noundef %556, ptr noundef %65, ptr noundef %63, ptr noundef %560, ptr noundef %561, ptr noundef %565, ptr noundef %569, ptr noundef %35, ptr noundef %45)
  %570 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %570, ptr %47, align 4, !tbaa !9
  %571 = load ptr, ptr %26, align 8, !tbaa !5
  %572 = load i32, ptr %571, align 4, !tbaa !9
  %573 = load i32, ptr %47, align 4, !tbaa !9
  %574 = sub nsw i32 %572, %573
  %575 = add nsw i32 %574, 1
  store i32 %575, ptr %35, align 4, !tbaa !9
  %576 = load ptr, ptr %17, align 8, !tbaa !5
  %577 = load ptr, ptr %18, align 8, !tbaa !5
  %578 = load i32, ptr %30, align 4, !tbaa !9
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds %struct.doublecomplex, ptr %577, i64 %579
  %581 = load ptr, ptr %19, align 8, !tbaa !5
  %582 = load ptr, ptr %20, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.doublecomplex, ptr %582, i64 1
  %584 = load ptr, ptr %21, align 8, !tbaa !5
  %585 = load i32, ptr %32, align 4, !tbaa !9
  %586 = sext i32 %585 to i64
  %587 = getelementptr inbounds %struct.doublecomplex, ptr %584, i64 %586
  %588 = load ptr, ptr %22, align 8, !tbaa !5
  %589 = load ptr, ptr %25, align 8, !tbaa !5
  %590 = load i32, ptr %47, align 4, !tbaa !9
  %591 = sext i32 %590 to i64
  %592 = getelementptr inbounds %struct.doublecomplex, ptr %589, i64 %591
  %593 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zhseqr_(ptr noundef @.str.7, ptr noundef @.str, ptr noundef %576, ptr noundef %65, ptr noundef %63, ptr noundef %580, ptr noundef %581, ptr noundef %583, ptr noundef %587, ptr noundef %588, ptr noundef %592, ptr noundef %35, ptr noundef %593)
  %594 = load i32, ptr %62, align 4, !tbaa !9
  %595 = icmp ne i32 %594, 0
  br i1 %595, label %596, label %610

596:                                              ; preds = %537
  %597 = getelementptr inbounds [1 x i8], ptr %43, i64 0, i64 0
  store i8 66, ptr %597, align 1, !tbaa !16
  %598 = load ptr, ptr %17, align 8, !tbaa !5
  %599 = load ptr, ptr %17, align 8, !tbaa !5
  %600 = load ptr, ptr %21, align 8, !tbaa !5
  %601 = load i32, ptr %32, align 4, !tbaa !9
  %602 = sext i32 %601 to i64
  %603 = getelementptr inbounds %struct.doublecomplex, ptr %600, i64 %602
  %604 = load ptr, ptr %22, align 8, !tbaa !5
  %605 = load ptr, ptr %23, align 8, !tbaa !5
  %606 = load i32, ptr %34, align 4, !tbaa !9
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds %struct.doublecomplex, ptr %605, i64 %607
  %609 = load ptr, ptr %24, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.14, ptr noundef %598, ptr noundef %599, ptr noundef %603, ptr noundef %604, ptr noundef %608, ptr noundef %609)
  br label %610

610:                                              ; preds = %596, %537
  br label %697

611:                                              ; preds = %501
  %612 = load i32, ptr %62, align 4, !tbaa !9
  %613 = icmp ne i32 %612, 0
  br i1 %613, label %614, label %671

614:                                              ; preds = %611
  %615 = getelementptr inbounds [1 x i8], ptr %43, i64 0, i64 0
  store i8 82, ptr %615, align 1, !tbaa !16
  %616 = load ptr, ptr %17, align 8, !tbaa !5
  %617 = load ptr, ptr %17, align 8, !tbaa !5
  %618 = load ptr, ptr %18, align 8, !tbaa !5
  %619 = load i32, ptr %30, align 4, !tbaa !9
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds %struct.doublecomplex, ptr %618, i64 %620
  %622 = load ptr, ptr %19, align 8, !tbaa !5
  %623 = load ptr, ptr %23, align 8, !tbaa !5
  %624 = load i32, ptr %34, align 4, !tbaa !9
  %625 = sext i32 %624 to i64
  %626 = getelementptr inbounds %struct.doublecomplex, ptr %623, i64 %625
  %627 = load ptr, ptr %24, align 8, !tbaa !5
  call void @zlacpy_(ptr noundef @.str.5, ptr noundef %616, ptr noundef %617, ptr noundef %621, ptr noundef %622, ptr noundef %626, ptr noundef %627)
  %628 = load ptr, ptr %26, align 8, !tbaa !5
  %629 = load i32, ptr %628, align 4, !tbaa !9
  %630 = load i32, ptr %47, align 4, !tbaa !9
  %631 = sub nsw i32 %629, %630
  %632 = add nsw i32 %631, 1
  store i32 %632, ptr %35, align 4, !tbaa !9
  %633 = load ptr, ptr %17, align 8, !tbaa !5
  %634 = load ptr, ptr %23, align 8, !tbaa !5
  %635 = load i32, ptr %34, align 4, !tbaa !9
  %636 = sext i32 %635 to i64
  %637 = getelementptr inbounds %struct.doublecomplex, ptr %634, i64 %636
  %638 = load ptr, ptr %24, align 8, !tbaa !5
  %639 = load ptr, ptr %25, align 8, !tbaa !5
  %640 = load i32, ptr %46, align 4, !tbaa !9
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds %struct.doublecomplex, ptr %639, i64 %641
  %643 = load ptr, ptr %25, align 8, !tbaa !5
  %644 = load i32, ptr %47, align 4, !tbaa !9
  %645 = sext i32 %644 to i64
  %646 = getelementptr inbounds %struct.doublecomplex, ptr %643, i64 %645
  call void @zunghr_(ptr noundef %633, ptr noundef %65, ptr noundef %63, ptr noundef %637, ptr noundef %638, ptr noundef %642, ptr noundef %646, ptr noundef %35, ptr noundef %45)
  %647 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %647, ptr %47, align 4, !tbaa !9
  %648 = load ptr, ptr %26, align 8, !tbaa !5
  %649 = load i32, ptr %648, align 4, !tbaa !9
  %650 = load i32, ptr %47, align 4, !tbaa !9
  %651 = sub nsw i32 %649, %650
  %652 = add nsw i32 %651, 1
  store i32 %652, ptr %35, align 4, !tbaa !9
  %653 = load ptr, ptr %17, align 8, !tbaa !5
  %654 = load ptr, ptr %18, align 8, !tbaa !5
  %655 = load i32, ptr %30, align 4, !tbaa !9
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds %struct.doublecomplex, ptr %654, i64 %656
  %658 = load ptr, ptr %19, align 8, !tbaa !5
  %659 = load ptr, ptr %20, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.doublecomplex, ptr %659, i64 1
  %661 = load ptr, ptr %23, align 8, !tbaa !5
  %662 = load i32, ptr %34, align 4, !tbaa !9
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds %struct.doublecomplex, ptr %661, i64 %663
  %665 = load ptr, ptr %24, align 8, !tbaa !5
  %666 = load ptr, ptr %25, align 8, !tbaa !5
  %667 = load i32, ptr %47, align 4, !tbaa !9
  %668 = sext i32 %667 to i64
  %669 = getelementptr inbounds %struct.doublecomplex, ptr %666, i64 %668
  %670 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zhseqr_(ptr noundef @.str.7, ptr noundef @.str, ptr noundef %653, ptr noundef %65, ptr noundef %63, ptr noundef %657, ptr noundef %658, ptr noundef %660, ptr noundef %664, ptr noundef %665, ptr noundef %669, ptr noundef %35, ptr noundef %670)
  br label %696

671:                                              ; preds = %611
  %672 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %672, ptr %47, align 4, !tbaa !9
  %673 = load ptr, ptr %26, align 8, !tbaa !5
  %674 = load i32, ptr %673, align 4, !tbaa !9
  %675 = load i32, ptr %47, align 4, !tbaa !9
  %676 = sub nsw i32 %674, %675
  %677 = add nsw i32 %676, 1
  store i32 %677, ptr %35, align 4, !tbaa !9
  %678 = load ptr, ptr %17, align 8, !tbaa !5
  %679 = load ptr, ptr %18, align 8, !tbaa !5
  %680 = load i32, ptr %30, align 4, !tbaa !9
  %681 = sext i32 %680 to i64
  %682 = getelementptr inbounds %struct.doublecomplex, ptr %679, i64 %681
  %683 = load ptr, ptr %19, align 8, !tbaa !5
  %684 = load ptr, ptr %20, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.doublecomplex, ptr %684, i64 1
  %686 = load ptr, ptr %23, align 8, !tbaa !5
  %687 = load i32, ptr %34, align 4, !tbaa !9
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds %struct.doublecomplex, ptr %686, i64 %688
  %690 = load ptr, ptr %24, align 8, !tbaa !5
  %691 = load ptr, ptr %25, align 8, !tbaa !5
  %692 = load i32, ptr %47, align 4, !tbaa !9
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds %struct.doublecomplex, ptr %691, i64 %693
  %695 = load ptr, ptr %28, align 8, !tbaa !5
  call void @zhseqr_(ptr noundef @.str.9, ptr noundef @.str.1, ptr noundef %678, ptr noundef %65, ptr noundef %63, ptr noundef %682, ptr noundef %683, ptr noundef %685, ptr noundef %689, ptr noundef %690, ptr noundef %694, ptr noundef %35, ptr noundef %695)
  br label %696

696:                                              ; preds = %671, %614
  br label %697

697:                                              ; preds = %696, %610
  %698 = load ptr, ptr %28, align 8, !tbaa !5
  %699 = load i32, ptr %698, align 4, !tbaa !9
  %700 = icmp ne i32 %699, 0
  br i1 %700, label %701, label %702

701:                                              ; preds = %697
  br label %1101

702:                                              ; preds = %697
  %703 = load i32, ptr %57, align 4, !tbaa !9
  %704 = icmp ne i32 %703, 0
  br i1 %704, label %708, label %705

705:                                              ; preds = %702
  %706 = load i32, ptr %62, align 4, !tbaa !9
  %707 = icmp ne i32 %706, 0
  br i1 %707, label %708, label %746

708:                                              ; preds = %705, %702
  %709 = load i32, ptr %42, align 4, !tbaa !9
  %710 = load ptr, ptr %17, align 8, !tbaa !5
  %711 = load i32, ptr %710, align 4, !tbaa !9
  %712 = add nsw i32 %709, %711
  store i32 %712, ptr %60, align 4, !tbaa !9
  %713 = load ptr, ptr %26, align 8, !tbaa !5
  %714 = load i32, ptr %713, align 4, !tbaa !9
  %715 = load i32, ptr %47, align 4, !tbaa !9
  %716 = sub nsw i32 %714, %715
  %717 = add nsw i32 %716, 1
  store i32 %717, ptr %35, align 4, !tbaa !9
  %718 = getelementptr inbounds [1 x i8], ptr %43, i64 0, i64 0
  %719 = getelementptr inbounds [1 x i32], ptr %53, i64 0, i64 0
  %720 = load ptr, ptr %17, align 8, !tbaa !5
  %721 = load ptr, ptr %18, align 8, !tbaa !5
  %722 = load i32, ptr %30, align 4, !tbaa !9
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds %struct.doublecomplex, ptr %721, i64 %723
  %725 = load ptr, ptr %19, align 8, !tbaa !5
  %726 = load ptr, ptr %21, align 8, !tbaa !5
  %727 = load i32, ptr %32, align 4, !tbaa !9
  %728 = sext i32 %727 to i64
  %729 = getelementptr inbounds %struct.doublecomplex, ptr %726, i64 %728
  %730 = load ptr, ptr %22, align 8, !tbaa !5
  %731 = load ptr, ptr %23, align 8, !tbaa !5
  %732 = load i32, ptr %34, align 4, !tbaa !9
  %733 = sext i32 %732 to i64
  %734 = getelementptr inbounds %struct.doublecomplex, ptr %731, i64 %733
  %735 = load ptr, ptr %24, align 8, !tbaa !5
  %736 = load ptr, ptr %17, align 8, !tbaa !5
  %737 = load ptr, ptr %25, align 8, !tbaa !5
  %738 = load i32, ptr %47, align 4, !tbaa !9
  %739 = sext i32 %738 to i64
  %740 = getelementptr inbounds %struct.doublecomplex, ptr %737, i64 %739
  %741 = load ptr, ptr %27, align 8, !tbaa !5
  %742 = load i32, ptr %60, align 4, !tbaa !9
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds double, ptr %741, i64 %743
  %745 = load ptr, ptr %17, align 8, !tbaa !5
  call void @ztrevc3_(ptr noundef %718, ptr noundef @.str.6, ptr noundef %719, ptr noundef %720, ptr noundef %724, ptr noundef %725, ptr noundef %729, ptr noundef %730, ptr noundef %734, ptr noundef %735, ptr noundef %736, ptr noundef %48, ptr noundef %740, ptr noundef %35, ptr noundef %744, ptr noundef %745, ptr noundef %45)
  br label %746

746:                                              ; preds = %708, %705
  %747 = load i32, ptr %57, align 4, !tbaa !9
  %748 = icmp ne i32 %747, 0
  br i1 %748, label %749, label %923

749:                                              ; preds = %746
  %750 = load ptr, ptr %17, align 8, !tbaa !5
  %751 = load ptr, ptr %27, align 8, !tbaa !5
  %752 = load i32, ptr %42, align 4, !tbaa !9
  %753 = sext i32 %752 to i64
  %754 = getelementptr inbounds double, ptr %751, i64 %753
  %755 = load ptr, ptr %17, align 8, !tbaa !5
  %756 = load ptr, ptr %21, align 8, !tbaa !5
  %757 = load i32, ptr %32, align 4, !tbaa !9
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds %struct.doublecomplex, ptr %756, i64 %758
  %760 = load ptr, ptr %22, align 8, !tbaa !5
  call void @zgebak_(ptr noundef @.str.6, ptr noundef @.str.5, ptr noundef %750, ptr noundef %65, ptr noundef %63, ptr noundef %754, ptr noundef %755, ptr noundef %759, ptr noundef %760, ptr noundef %45)
  %761 = load ptr, ptr %17, align 8, !tbaa !5
  %762 = load i32, ptr %761, align 4, !tbaa !9
  store i32 %762, ptr %35, align 4, !tbaa !9
  store i32 1, ptr %49, align 4, !tbaa !9
  br label %763

763:                                              ; preds = %919, %749
  %764 = load i32, ptr %49, align 4, !tbaa !9
  %765 = load i32, ptr %35, align 4, !tbaa !9
  %766 = icmp sle i32 %764, %765
  br i1 %766, label %767, label %922

767:                                              ; preds = %763
  %768 = load ptr, ptr %17, align 8, !tbaa !5
  %769 = load ptr, ptr %21, align 8, !tbaa !5
  %770 = load i32, ptr %49, align 4, !tbaa !9
  %771 = load i32, ptr %31, align 4, !tbaa !9
  %772 = mul nsw i32 %770, %771
  %773 = add nsw i32 %772, 1
  %774 = sext i32 %773 to i64
  %775 = getelementptr inbounds %struct.doublecomplex, ptr %769, i64 %774
  %776 = call double @dznrm2_(ptr noundef %768, ptr noundef %775, ptr noundef @c__1)
  %777 = fdiv double 1.000000e+00, %776
  store double %777, ptr %64, align 8, !tbaa !15
  %778 = load ptr, ptr %17, align 8, !tbaa !5
  %779 = load ptr, ptr %21, align 8, !tbaa !5
  %780 = load i32, ptr %49, align 4, !tbaa !9
  %781 = load i32, ptr %31, align 4, !tbaa !9
  %782 = mul nsw i32 %780, %781
  %783 = add nsw i32 %782, 1
  %784 = sext i32 %783 to i64
  %785 = getelementptr inbounds %struct.doublecomplex, ptr %779, i64 %784
  call void @zdscal_(ptr noundef %778, ptr noundef %64, ptr noundef %785, ptr noundef @c__1)
  %786 = load ptr, ptr %17, align 8, !tbaa !5
  %787 = load i32, ptr %786, align 4, !tbaa !9
  store i32 %787, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %50, align 4, !tbaa !9
  br label %788

788:                                              ; preds = %828, %767
  %789 = load i32, ptr %50, align 4, !tbaa !9
  %790 = load i32, ptr %36, align 4, !tbaa !9
  %791 = icmp sle i32 %789, %790
  br i1 %791, label %792, label %831

792:                                              ; preds = %788
  %793 = load i32, ptr %50, align 4, !tbaa !9
  %794 = load i32, ptr %49, align 4, !tbaa !9
  %795 = load i32, ptr %31, align 4, !tbaa !9
  %796 = mul nsw i32 %794, %795
  %797 = add nsw i32 %793, %796
  store i32 %797, ptr %37, align 4, !tbaa !9
  %798 = load ptr, ptr %21, align 8, !tbaa !5
  %799 = load i32, ptr %37, align 4, !tbaa !9
  %800 = sext i32 %799 to i64
  %801 = getelementptr inbounds %struct.doublecomplex, ptr %798, i64 %800
  %802 = getelementptr inbounds %struct.doublecomplex, ptr %801, i32 0, i32 0
  %803 = load double, ptr %802, align 8, !tbaa !11
  store double %803, ptr %38, align 8, !tbaa !15
  %804 = load ptr, ptr %21, align 8, !tbaa !5
  %805 = load i32, ptr %50, align 4, !tbaa !9
  %806 = load i32, ptr %49, align 4, !tbaa !9
  %807 = load i32, ptr %31, align 4, !tbaa !9
  %808 = mul nsw i32 %806, %807
  %809 = add nsw i32 %805, %808
  %810 = sext i32 %809 to i64
  %811 = getelementptr inbounds %struct.doublecomplex, ptr %804, i64 %810
  %812 = call { double, double } @Cd(ptr noundef %811)
  %813 = extractvalue { double, double } %812, 0
  %814 = extractvalue { double, double } %812, 1
  store double %814, ptr %39, align 8, !tbaa !15
  %815 = load double, ptr %38, align 8, !tbaa !15
  %816 = load double, ptr %38, align 8, !tbaa !15
  %817 = load double, ptr %39, align 8, !tbaa !15
  %818 = load double, ptr %39, align 8, !tbaa !15
  %819 = fmul double %817, %818
  %820 = call double @llvm.fmuladd.f64(double %815, double %816, double %819)
  %821 = load ptr, ptr %27, align 8, !tbaa !5
  %822 = load i32, ptr %60, align 4, !tbaa !9
  %823 = load i32, ptr %50, align 4, !tbaa !9
  %824 = add nsw i32 %822, %823
  %825 = sub nsw i32 %824, 1
  %826 = sext i32 %825 to i64
  %827 = getelementptr inbounds double, ptr %821, i64 %826
  store double %820, ptr %827, align 8, !tbaa !15
  br label %828

828:                                              ; preds = %792
  %829 = load i32, ptr %50, align 4, !tbaa !9
  %830 = add nsw i32 %829, 1
  store i32 %830, ptr %50, align 4, !tbaa !9
  br label %788, !llvm.loop !17

831:                                              ; preds = %788
  %832 = load ptr, ptr %17, align 8, !tbaa !5
  %833 = load ptr, ptr %27, align 8, !tbaa !5
  %834 = load i32, ptr %60, align 4, !tbaa !9
  %835 = sext i32 %834 to i64
  %836 = getelementptr inbounds double, ptr %833, i64 %835
  %837 = call i32 @idamax_(ptr noundef %832, ptr noundef %836, ptr noundef @c__1)
  store i32 %837, ptr %50, align 4, !tbaa !9
  %838 = load ptr, ptr %21, align 8, !tbaa !5
  %839 = load i32, ptr %50, align 4, !tbaa !9
  %840 = load i32, ptr %49, align 4, !tbaa !9
  %841 = load i32, ptr %31, align 4, !tbaa !9
  %842 = mul nsw i32 %840, %841
  %843 = add nsw i32 %839, %842
  %844 = sext i32 %843 to i64
  %845 = getelementptr inbounds %struct.doublecomplex, ptr %838, i64 %844
  %846 = call { double, double } @Cd(ptr noundef %845)
  %847 = extractvalue { double, double } %846, 0
  %848 = extractvalue { double, double } %846, 1
  %849 = fneg double %848
  %850 = call ptr @_pCd(ptr noundef %41)
  %851 = getelementptr inbounds { double, double }, ptr %850, i32 0, i32 0
  %852 = getelementptr inbounds { double, double }, ptr %850, i32 0, i32 1
  store double %847, ptr %851, align 8
  store double %849, ptr %852, align 8
  %853 = load ptr, ptr %27, align 8, !tbaa !5
  %854 = load i32, ptr %60, align 4, !tbaa !9
  %855 = load i32, ptr %50, align 4, !tbaa !9
  %856 = add nsw i32 %854, %855
  %857 = sub nsw i32 %856, 1
  %858 = sext i32 %857 to i64
  %859 = getelementptr inbounds double, ptr %853, i64 %858
  %860 = load double, ptr %859, align 8, !tbaa !15
  %861 = call double @sqrt(double noundef %860) #6
  store double %861, ptr %38, align 8, !tbaa !15
  %862 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %863 = load double, ptr %862, align 8, !tbaa !11
  %864 = load double, ptr %38, align 8, !tbaa !15
  %865 = fdiv double %863, %864
  %866 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 0
  store double %865, ptr %866, align 8, !tbaa !11
  %867 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %868 = load double, ptr %867, align 8, !tbaa !14
  %869 = load double, ptr %38, align 8, !tbaa !15
  %870 = fdiv double %868, %869
  %871 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 1
  store double %870, ptr %871, align 8, !tbaa !14
  %872 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 0
  %873 = load double, ptr %872, align 8, !tbaa !11
  %874 = getelementptr inbounds %struct.doublecomplex, ptr %68, i32 0, i32 0
  store double %873, ptr %874, align 8, !tbaa !11
  %875 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 1
  %876 = load double, ptr %875, align 8, !tbaa !14
  %877 = getelementptr inbounds %struct.doublecomplex, ptr %68, i32 0, i32 1
  store double %876, ptr %877, align 8, !tbaa !14
  %878 = load ptr, ptr %17, align 8, !tbaa !5
  %879 = load ptr, ptr %21, align 8, !tbaa !5
  %880 = load i32, ptr %49, align 4, !tbaa !9
  %881 = load i32, ptr %31, align 4, !tbaa !9
  %882 = mul nsw i32 %880, %881
  %883 = add nsw i32 %882, 1
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds %struct.doublecomplex, ptr %879, i64 %884
  call void @zscal_(ptr noundef %878, ptr noundef %68, ptr noundef %885, ptr noundef @c__1)
  %886 = load i32, ptr %50, align 4, !tbaa !9
  %887 = load i32, ptr %49, align 4, !tbaa !9
  %888 = load i32, ptr %31, align 4, !tbaa !9
  %889 = mul nsw i32 %887, %888
  %890 = add nsw i32 %886, %889
  store i32 %890, ptr %36, align 4, !tbaa !9
  %891 = load i32, ptr %50, align 4, !tbaa !9
  %892 = load i32, ptr %49, align 4, !tbaa !9
  %893 = load i32, ptr %31, align 4, !tbaa !9
  %894 = mul nsw i32 %892, %893
  %895 = add nsw i32 %891, %894
  store i32 %895, ptr %37, align 4, !tbaa !9
  %896 = load ptr, ptr %21, align 8, !tbaa !5
  %897 = load i32, ptr %37, align 4, !tbaa !9
  %898 = sext i32 %897 to i64
  %899 = getelementptr inbounds %struct.doublecomplex, ptr %896, i64 %898
  %900 = getelementptr inbounds %struct.doublecomplex, ptr %899, i32 0, i32 0
  %901 = load double, ptr %900, align 8, !tbaa !11
  store double %901, ptr %38, align 8, !tbaa !15
  %902 = load double, ptr %38, align 8, !tbaa !15
  %903 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 0
  store double %902, ptr %903, align 8, !tbaa !11
  %904 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 1
  store double 0.000000e+00, ptr %904, align 8, !tbaa !14
  %905 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 0
  %906 = load double, ptr %905, align 8, !tbaa !11
  %907 = load ptr, ptr %21, align 8, !tbaa !5
  %908 = load i32, ptr %36, align 4, !tbaa !9
  %909 = sext i32 %908 to i64
  %910 = getelementptr inbounds %struct.doublecomplex, ptr %907, i64 %909
  %911 = getelementptr inbounds %struct.doublecomplex, ptr %910, i32 0, i32 0
  store double %906, ptr %911, align 8, !tbaa !11
  %912 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 1
  %913 = load double, ptr %912, align 8, !tbaa !14
  %914 = load ptr, ptr %21, align 8, !tbaa !5
  %915 = load i32, ptr %36, align 4, !tbaa !9
  %916 = sext i32 %915 to i64
  %917 = getelementptr inbounds %struct.doublecomplex, ptr %914, i64 %916
  %918 = getelementptr inbounds %struct.doublecomplex, ptr %917, i32 0, i32 1
  store double %913, ptr %918, align 8, !tbaa !14
  br label %919

919:                                              ; preds = %831
  %920 = load i32, ptr %49, align 4, !tbaa !9
  %921 = add nsw i32 %920, 1
  store i32 %921, ptr %49, align 4, !tbaa !9
  br label %763, !llvm.loop !19

922:                                              ; preds = %763
  br label %923

923:                                              ; preds = %922, %746
  %924 = load i32, ptr %62, align 4, !tbaa !9
  %925 = icmp ne i32 %924, 0
  br i1 %925, label %926, label %1100

926:                                              ; preds = %923
  %927 = load ptr, ptr %17, align 8, !tbaa !5
  %928 = load ptr, ptr %27, align 8, !tbaa !5
  %929 = load i32, ptr %42, align 4, !tbaa !9
  %930 = sext i32 %929 to i64
  %931 = getelementptr inbounds double, ptr %928, i64 %930
  %932 = load ptr, ptr %17, align 8, !tbaa !5
  %933 = load ptr, ptr %23, align 8, !tbaa !5
  %934 = load i32, ptr %34, align 4, !tbaa !9
  %935 = sext i32 %934 to i64
  %936 = getelementptr inbounds %struct.doublecomplex, ptr %933, i64 %935
  %937 = load ptr, ptr %24, align 8, !tbaa !5
  call void @zgebak_(ptr noundef @.str.6, ptr noundef @.str.8, ptr noundef %927, ptr noundef %65, ptr noundef %63, ptr noundef %931, ptr noundef %932, ptr noundef %936, ptr noundef %937, ptr noundef %45)
  %938 = load ptr, ptr %17, align 8, !tbaa !5
  %939 = load i32, ptr %938, align 4, !tbaa !9
  store i32 %939, ptr %35, align 4, !tbaa !9
  store i32 1, ptr %49, align 4, !tbaa !9
  br label %940

940:                                              ; preds = %1096, %926
  %941 = load i32, ptr %49, align 4, !tbaa !9
  %942 = load i32, ptr %35, align 4, !tbaa !9
  %943 = icmp sle i32 %941, %942
  br i1 %943, label %944, label %1099

944:                                              ; preds = %940
  %945 = load ptr, ptr %17, align 8, !tbaa !5
  %946 = load ptr, ptr %23, align 8, !tbaa !5
  %947 = load i32, ptr %49, align 4, !tbaa !9
  %948 = load i32, ptr %33, align 4, !tbaa !9
  %949 = mul nsw i32 %947, %948
  %950 = add nsw i32 %949, 1
  %951 = sext i32 %950 to i64
  %952 = getelementptr inbounds %struct.doublecomplex, ptr %946, i64 %951
  %953 = call double @dznrm2_(ptr noundef %945, ptr noundef %952, ptr noundef @c__1)
  %954 = fdiv double 1.000000e+00, %953
  store double %954, ptr %64, align 8, !tbaa !15
  %955 = load ptr, ptr %17, align 8, !tbaa !5
  %956 = load ptr, ptr %23, align 8, !tbaa !5
  %957 = load i32, ptr %49, align 4, !tbaa !9
  %958 = load i32, ptr %33, align 4, !tbaa !9
  %959 = mul nsw i32 %957, %958
  %960 = add nsw i32 %959, 1
  %961 = sext i32 %960 to i64
  %962 = getelementptr inbounds %struct.doublecomplex, ptr %956, i64 %961
  call void @zdscal_(ptr noundef %955, ptr noundef %64, ptr noundef %962, ptr noundef @c__1)
  %963 = load ptr, ptr %17, align 8, !tbaa !5
  %964 = load i32, ptr %963, align 4, !tbaa !9
  store i32 %964, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %50, align 4, !tbaa !9
  br label %965

965:                                              ; preds = %1005, %944
  %966 = load i32, ptr %50, align 4, !tbaa !9
  %967 = load i32, ptr %36, align 4, !tbaa !9
  %968 = icmp sle i32 %966, %967
  br i1 %968, label %969, label %1008

969:                                              ; preds = %965
  %970 = load i32, ptr %50, align 4, !tbaa !9
  %971 = load i32, ptr %49, align 4, !tbaa !9
  %972 = load i32, ptr %33, align 4, !tbaa !9
  %973 = mul nsw i32 %971, %972
  %974 = add nsw i32 %970, %973
  store i32 %974, ptr %37, align 4, !tbaa !9
  %975 = load ptr, ptr %23, align 8, !tbaa !5
  %976 = load i32, ptr %37, align 4, !tbaa !9
  %977 = sext i32 %976 to i64
  %978 = getelementptr inbounds %struct.doublecomplex, ptr %975, i64 %977
  %979 = getelementptr inbounds %struct.doublecomplex, ptr %978, i32 0, i32 0
  %980 = load double, ptr %979, align 8, !tbaa !11
  store double %980, ptr %38, align 8, !tbaa !15
  %981 = load ptr, ptr %23, align 8, !tbaa !5
  %982 = load i32, ptr %50, align 4, !tbaa !9
  %983 = load i32, ptr %49, align 4, !tbaa !9
  %984 = load i32, ptr %33, align 4, !tbaa !9
  %985 = mul nsw i32 %983, %984
  %986 = add nsw i32 %982, %985
  %987 = sext i32 %986 to i64
  %988 = getelementptr inbounds %struct.doublecomplex, ptr %981, i64 %987
  %989 = call { double, double } @Cd(ptr noundef %988)
  %990 = extractvalue { double, double } %989, 0
  %991 = extractvalue { double, double } %989, 1
  store double %991, ptr %39, align 8, !tbaa !15
  %992 = load double, ptr %38, align 8, !tbaa !15
  %993 = load double, ptr %38, align 8, !tbaa !15
  %994 = load double, ptr %39, align 8, !tbaa !15
  %995 = load double, ptr %39, align 8, !tbaa !15
  %996 = fmul double %994, %995
  %997 = call double @llvm.fmuladd.f64(double %992, double %993, double %996)
  %998 = load ptr, ptr %27, align 8, !tbaa !5
  %999 = load i32, ptr %60, align 4, !tbaa !9
  %1000 = load i32, ptr %50, align 4, !tbaa !9
  %1001 = add nsw i32 %999, %1000
  %1002 = sub nsw i32 %1001, 1
  %1003 = sext i32 %1002 to i64
  %1004 = getelementptr inbounds double, ptr %998, i64 %1003
  store double %997, ptr %1004, align 8, !tbaa !15
  br label %1005

1005:                                             ; preds = %969
  %1006 = load i32, ptr %50, align 4, !tbaa !9
  %1007 = add nsw i32 %1006, 1
  store i32 %1007, ptr %50, align 4, !tbaa !9
  br label %965, !llvm.loop !20

1008:                                             ; preds = %965
  %1009 = load ptr, ptr %17, align 8, !tbaa !5
  %1010 = load ptr, ptr %27, align 8, !tbaa !5
  %1011 = load i32, ptr %60, align 4, !tbaa !9
  %1012 = sext i32 %1011 to i64
  %1013 = getelementptr inbounds double, ptr %1010, i64 %1012
  %1014 = call i32 @idamax_(ptr noundef %1009, ptr noundef %1013, ptr noundef @c__1)
  store i32 %1014, ptr %50, align 4, !tbaa !9
  %1015 = load ptr, ptr %23, align 8, !tbaa !5
  %1016 = load i32, ptr %50, align 4, !tbaa !9
  %1017 = load i32, ptr %49, align 4, !tbaa !9
  %1018 = load i32, ptr %33, align 4, !tbaa !9
  %1019 = mul nsw i32 %1017, %1018
  %1020 = add nsw i32 %1016, %1019
  %1021 = sext i32 %1020 to i64
  %1022 = getelementptr inbounds %struct.doublecomplex, ptr %1015, i64 %1021
  %1023 = call { double, double } @Cd(ptr noundef %1022)
  %1024 = extractvalue { double, double } %1023, 0
  %1025 = extractvalue { double, double } %1023, 1
  %1026 = fneg double %1025
  %1027 = call ptr @_pCd(ptr noundef %41)
  %1028 = getelementptr inbounds { double, double }, ptr %1027, i32 0, i32 0
  %1029 = getelementptr inbounds { double, double }, ptr %1027, i32 0, i32 1
  store double %1024, ptr %1028, align 8
  store double %1026, ptr %1029, align 8
  %1030 = load ptr, ptr %27, align 8, !tbaa !5
  %1031 = load i32, ptr %60, align 4, !tbaa !9
  %1032 = load i32, ptr %50, align 4, !tbaa !9
  %1033 = add nsw i32 %1031, %1032
  %1034 = sub nsw i32 %1033, 1
  %1035 = sext i32 %1034 to i64
  %1036 = getelementptr inbounds double, ptr %1030, i64 %1035
  %1037 = load double, ptr %1036, align 8, !tbaa !15
  %1038 = call double @sqrt(double noundef %1037) #6
  store double %1038, ptr %38, align 8, !tbaa !15
  %1039 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %1040 = load double, ptr %1039, align 8, !tbaa !11
  %1041 = load double, ptr %38, align 8, !tbaa !15
  %1042 = fdiv double %1040, %1041
  %1043 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 0
  store double %1042, ptr %1043, align 8, !tbaa !11
  %1044 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %1045 = load double, ptr %1044, align 8, !tbaa !14
  %1046 = load double, ptr %38, align 8, !tbaa !15
  %1047 = fdiv double %1045, %1046
  %1048 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 1
  store double %1047, ptr %1048, align 8, !tbaa !14
  %1049 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 0
  %1050 = load double, ptr %1049, align 8, !tbaa !11
  %1051 = getelementptr inbounds %struct.doublecomplex, ptr %68, i32 0, i32 0
  store double %1050, ptr %1051, align 8, !tbaa !11
  %1052 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 1
  %1053 = load double, ptr %1052, align 8, !tbaa !14
  %1054 = getelementptr inbounds %struct.doublecomplex, ptr %68, i32 0, i32 1
  store double %1053, ptr %1054, align 8, !tbaa !14
  %1055 = load ptr, ptr %17, align 8, !tbaa !5
  %1056 = load ptr, ptr %23, align 8, !tbaa !5
  %1057 = load i32, ptr %49, align 4, !tbaa !9
  %1058 = load i32, ptr %33, align 4, !tbaa !9
  %1059 = mul nsw i32 %1057, %1058
  %1060 = add nsw i32 %1059, 1
  %1061 = sext i32 %1060 to i64
  %1062 = getelementptr inbounds %struct.doublecomplex, ptr %1056, i64 %1061
  call void @zscal_(ptr noundef %1055, ptr noundef %68, ptr noundef %1062, ptr noundef @c__1)
  %1063 = load i32, ptr %50, align 4, !tbaa !9
  %1064 = load i32, ptr %49, align 4, !tbaa !9
  %1065 = load i32, ptr %33, align 4, !tbaa !9
  %1066 = mul nsw i32 %1064, %1065
  %1067 = add nsw i32 %1063, %1066
  store i32 %1067, ptr %36, align 4, !tbaa !9
  %1068 = load i32, ptr %50, align 4, !tbaa !9
  %1069 = load i32, ptr %49, align 4, !tbaa !9
  %1070 = load i32, ptr %33, align 4, !tbaa !9
  %1071 = mul nsw i32 %1069, %1070
  %1072 = add nsw i32 %1068, %1071
  store i32 %1072, ptr %37, align 4, !tbaa !9
  %1073 = load ptr, ptr %23, align 8, !tbaa !5
  %1074 = load i32, ptr %37, align 4, !tbaa !9
  %1075 = sext i32 %1074 to i64
  %1076 = getelementptr inbounds %struct.doublecomplex, ptr %1073, i64 %1075
  %1077 = getelementptr inbounds %struct.doublecomplex, ptr %1076, i32 0, i32 0
  %1078 = load double, ptr %1077, align 8, !tbaa !11
  store double %1078, ptr %38, align 8, !tbaa !15
  %1079 = load double, ptr %38, align 8, !tbaa !15
  %1080 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 0
  store double %1079, ptr %1080, align 8, !tbaa !11
  %1081 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 1
  store double 0.000000e+00, ptr %1081, align 8, !tbaa !14
  %1082 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 0
  %1083 = load double, ptr %1082, align 8, !tbaa !11
  %1084 = load ptr, ptr %23, align 8, !tbaa !5
  %1085 = load i32, ptr %36, align 4, !tbaa !9
  %1086 = sext i32 %1085 to i64
  %1087 = getelementptr inbounds %struct.doublecomplex, ptr %1084, i64 %1086
  %1088 = getelementptr inbounds %struct.doublecomplex, ptr %1087, i32 0, i32 0
  store double %1083, ptr %1088, align 8, !tbaa !11
  %1089 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 1
  %1090 = load double, ptr %1089, align 8, !tbaa !14
  %1091 = load ptr, ptr %23, align 8, !tbaa !5
  %1092 = load i32, ptr %36, align 4, !tbaa !9
  %1093 = sext i32 %1092 to i64
  %1094 = getelementptr inbounds %struct.doublecomplex, ptr %1091, i64 %1093
  %1095 = getelementptr inbounds %struct.doublecomplex, ptr %1094, i32 0, i32 1
  store double %1090, ptr %1095, align 8, !tbaa !14
  br label %1096

1096:                                             ; preds = %1008
  %1097 = load i32, ptr %49, align 4, !tbaa !9
  %1098 = add nsw i32 %1097, 1
  store i32 %1098, ptr %49, align 4, !tbaa !9
  br label %940, !llvm.loop !21

1099:                                             ; preds = %940
  br label %1100

1100:                                             ; preds = %1099, %923
  br label %1101

1101:                                             ; preds = %1100, %701
  %1102 = load i32, ptr %51, align 4, !tbaa !9
  %1103 = icmp ne i32 %1102, 0
  br i1 %1103, label %1104, label %1138

1104:                                             ; preds = %1101
  %1105 = load ptr, ptr %17, align 8, !tbaa !5
  %1106 = load i32, ptr %1105, align 4, !tbaa !9
  %1107 = load ptr, ptr %28, align 8, !tbaa !5
  %1108 = load i32, ptr %1107, align 4, !tbaa !9
  %1109 = sub nsw i32 %1106, %1108
  store i32 %1109, ptr %35, align 4, !tbaa !9
  %1110 = load ptr, ptr %17, align 8, !tbaa !5
  %1111 = load i32, ptr %1110, align 4, !tbaa !9
  %1112 = load ptr, ptr %28, align 8, !tbaa !5
  %1113 = load i32, ptr %1112, align 4, !tbaa !9
  %1114 = sub nsw i32 %1111, %1113
  store i32 %1114, ptr %37, align 4, !tbaa !9
  %1115 = load i32, ptr %37, align 4, !tbaa !9
  %1116 = icmp sge i32 %1115, 1
  br i1 %1116, label %1117, label %1119

1117:                                             ; preds = %1104
  %1118 = load i32, ptr %37, align 4, !tbaa !9
  br label %1120

1119:                                             ; preds = %1104
  br label %1120

1120:                                             ; preds = %1119, %1117
  %1121 = phi i32 [ %1118, %1117 ], [ 1, %1119 ]
  store i32 %1121, ptr %36, align 4, !tbaa !9
  %1122 = load ptr, ptr %20, align 8, !tbaa !5
  %1123 = load ptr, ptr %28, align 8, !tbaa !5
  %1124 = load i32, ptr %1123, align 4, !tbaa !9
  %1125 = add nsw i32 %1124, 1
  %1126 = sext i32 %1125 to i64
  %1127 = getelementptr inbounds %struct.doublecomplex, ptr %1122, i64 %1126
  call void @zlascl_(ptr noundef @.str.13, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %52, ptr noundef %44, ptr noundef %35, ptr noundef @c__1, ptr noundef %1127, ptr noundef %36, ptr noundef %45)
  %1128 = load ptr, ptr %28, align 8, !tbaa !5
  %1129 = load i32, ptr %1128, align 4, !tbaa !9
  %1130 = icmp sgt i32 %1129, 0
  br i1 %1130, label %1131, label %1137

1131:                                             ; preds = %1120
  %1132 = load i32, ptr %65, align 4, !tbaa !9
  %1133 = sub nsw i32 %1132, 1
  store i32 %1133, ptr %35, align 4, !tbaa !9
  %1134 = load ptr, ptr %20, align 8, !tbaa !5
  %1135 = getelementptr inbounds %struct.doublecomplex, ptr %1134, i64 1
  %1136 = load ptr, ptr %17, align 8, !tbaa !5
  call void @zlascl_(ptr noundef @.str.13, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %52, ptr noundef %44, ptr noundef %35, ptr noundef @c__1, ptr noundef %1135, ptr noundef %1136, ptr noundef %45)
  br label %1137

1137:                                             ; preds = %1131, %1120
  br label %1138

1138:                                             ; preds = %1137, %1101
  %1139 = load i32, ptr %56, align 4, !tbaa !9
  %1140 = sitofp i32 %1139 to double
  %1141 = load ptr, ptr %25, align 8, !tbaa !5
  %1142 = getelementptr inbounds %struct.doublecomplex, ptr %1141, i64 1
  %1143 = getelementptr inbounds %struct.doublecomplex, ptr %1142, i32 0, i32 0
  store double %1140, ptr %1143, align 8, !tbaa !11
  %1144 = load ptr, ptr %25, align 8, !tbaa !5
  %1145 = getelementptr inbounds %struct.doublecomplex, ptr %1144, i64 1
  %1146 = getelementptr inbounds %struct.doublecomplex, ptr %1145, i32 0, i32 1
  store double 0.000000e+00, ptr %1146, align 8, !tbaa !14
  store i32 1, ptr %70, align 4
  br label %1147

1147:                                             ; preds = %1138, %454, %448, %440
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %68) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  ret void
}

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

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

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

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

declare void @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, i32 noundef) #2

declare double @dlamch_(ptr noundef) #2

declare void @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 void @zlascl_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

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

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

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

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden { double, double } @Cd(ptr noundef) #4

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @_pCd(ptr noundef) #4

declare void @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 = { inlinehint 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 #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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !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 i32, align 4
@.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 i32, align 4
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1
@c_n1 = external hidden global i32, align 4
@.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 [2 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 [7 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 void @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 i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca %struct.doublecomplex, align 16
  %18 = alloca [1 x i8], align 1
  %19 = alloca double, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca double, align 8
  %23 = alloca [1 x i32], align 4
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca i32, align 4
  %27 = alloca double, align 8
  %28 = alloca i32, align 4
  %29 = alloca [1 x double], align 8
  %30 = alloca %struct.doublecomplex, align 16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #7
  %31 = getelementptr inbounds i8, ptr %5, i64 -16
  %32 = load i32, ptr %7, align 4, !tbaa !5
  %narrow = xor i32 %32, -1
  %33 = sext i32 %narrow to i64
  %34 = getelementptr inbounds %struct.doublecomplex, ptr %6, i64 %33
  %35 = load i32, ptr %9, align 4, !tbaa !5
  %narrow471 = xor i32 %35, -1
  %36 = sext i32 %narrow471 to i64
  %37 = getelementptr inbounds %struct.doublecomplex, ptr %8, i64 %36
  %38 = getelementptr inbounds i8, ptr %10, i64 -16
  %39 = getelementptr inbounds i8, ptr %12, i64 -8
  store i32 0, ptr %13, align 4, !tbaa !5
  %40 = load i32, ptr %11, align 4, !tbaa !5
  %41 = icmp eq i32 %40, -1
  %42 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #7
  %43 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str) #7
  %44 = icmp ne i32 %42, 0
  br i1 %44, label %47, label %45

45:                                               ; preds = %14
  %46 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #7
  %.not = icmp eq i32 %46, 0
  br i1 %.not, label %.thread479.sink.split, label %47

47:                                               ; preds = %45, %14
  %.not456 = icmp ne i32 %43, 0
  br i1 %.not456, label %50, label %48

48:                                               ; preds = %47
  %49 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #7
  %.not457 = icmp eq i32 %49, 0
  br i1 %.not457, label %.thread479.sink.split, label %50

50:                                               ; preds = %48, %47
  %51 = load i32, ptr %2, align 4, !tbaa !5
  %52 = icmp slt i32 %51, 0
  br i1 %52, label %.thread479.sink.split, label %53

53:                                               ; preds = %50
  %54 = load i32, ptr %4, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %51, i32 1)
  %55 = icmp slt i32 %54, %spec.select
  br i1 %55, label %.thread479.sink.split, label %56

56:                                               ; preds = %53
  %57 = load i32, ptr %7, align 4, !tbaa !5
  %58 = icmp slt i32 %57, 1
  %59 = icmp ult i32 %57, %51
  %or.cond495 = and i1 %44, %59
  %or.cond497 = or i1 %58, %or.cond495
  br i1 %or.cond497, label %.thread479.sink.split, label %60

60:                                               ; preds = %56
  %61 = load i32, ptr %9, align 4, !tbaa !5
  %62 = icmp slt i32 %61, 1
  %63 = icmp ult i32 %61, %51
  %or.cond496 = and i1 %.not456, %63
  %or.cond498 = or i1 %62, %or.cond496
  br i1 %or.cond498, label %.thread479.sink.split, label %64

64:                                               ; preds = %60
  %.pr = load i32, ptr %13, align 4, !tbaa !5
  %65 = icmp eq i32 %.pr, 0
  br i1 %65, label %66, label %.thread479

66:                                               ; preds = %64
  %67 = icmp eq i32 %51, 0
  br i1 %67, label %104, label %68

68:                                               ; preds = %66
  %69 = tail call i32 @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, i32 noundef 6, i32 noundef 1) #7
  %70 = add i32 %69, 1
  %71 = mul i32 %70, %51
  %72 = load i32, ptr %2, align 4, !tbaa !5
  %73 = shl i32 %72, 1
  br i1 %44, label %74, label %85

74:                                               ; preds = %68
  store i32 %71, ptr %15, align 4, !tbaa !5
  %75 = add nsw i32 %72, -1
  %76 = tail call i32 @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, i32 noundef 6, i32 noundef 1) #7
  %77 = mul nsw i32 %76, %75
  %78 = add nsw i32 %77, %72
  %79 = tail call i32 @llvm.smax.i32(i32 %71, i32 %78)
  call void @ztrevc3_(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.6, ptr noundef nonnull %23, 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 %21, ptr noundef %10, ptr noundef nonnull @c_n1, ptr noundef %12, ptr noundef nonnull @c_n1, ptr noundef nonnull %20) #7
  %80 = load double, ptr %10, align 8, !tbaa !9
  %81 = fptosi double %80 to i32
  store i32 %79, ptr %15, align 4, !tbaa !5
  %82 = load i32, ptr %2, align 4, !tbaa !5
  %83 = add nsw i32 %82, %81
  store i32 %83, ptr %16, align 4, !tbaa !5
  %84 = call i32 @llvm.smax.i32(i32 %79, i32 %83)
  call void @zhseqr_(ptr noundef nonnull @.str.7, 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 nonnull %10, ptr noundef nonnull @c_n1, ptr noundef nonnull %13) #7
  br label %98

85:                                               ; preds = %68
  %.not458 = icmp eq i32 %43, 0
  br i1 %.not458, label %97, label %86

86:                                               ; preds = %85
  store i32 %71, ptr %15, align 4, !tbaa !5
  %87 = add nsw i32 %72, -1
  %88 = tail call i32 @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, i32 noundef 6, i32 noundef 1) #7
  %89 = mul nsw i32 %88, %87
  %90 = add nsw i32 %89, %72
  %91 = tail call i32 @llvm.smax.i32(i32 %71, i32 %90)
  call void @ztrevc3_(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.6, ptr noundef nonnull %23, 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 %21, ptr noundef %10, ptr noundef nonnull @c_n1, ptr noundef %12, ptr noundef nonnull @c_n1, ptr noundef nonnull %20) #7
  %92 = load double, ptr %10, align 8, !tbaa !9
  %93 = fptosi double %92 to i32
  store i32 %91, ptr %15, align 4, !tbaa !5
  %94 = load i32, ptr %2, align 4, !tbaa !5
  %95 = add nsw i32 %94, %93
  store i32 %95, ptr %16, align 4, !tbaa !5
  %96 = call i32 @llvm.smax.i32(i32 %91, i32 %95)
  call void @zhseqr_(ptr noundef nonnull @.str.7, 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 nonnull %10, ptr noundef nonnull @c_n1, ptr noundef nonnull %13) #7
  br label %98

97:                                               ; preds = %85
  tail call void @zhseqr_(ptr noundef nonnull @.str.9, 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) #7
  br label %98

98:                                               ; preds = %86, %97, %74
  %.0440 = phi i32 [ %84, %74 ], [ %96, %86 ], [ %71, %97 ]
  %99 = load double, ptr %10, align 8, !tbaa !9
  %100 = fptosi double %99 to i32
  %101 = call i32 @llvm.smax.i32(i32 %.0440, i32 %100)
  store i32 %101, ptr %15, align 4, !tbaa !5
  %102 = call i32 @llvm.smax.i32(i32 %101, i32 %73)
  %103 = sitofp i32 %102 to double
  br label %104

104:                                              ; preds = %66, %98
  %.0441 = phi i32 [ %73, %98 ], [ 1, %66 ]
  %.1 = phi double [ %103, %98 ], [ 1.000000e+00, %66 ]
  store double %.1, ptr %10, align 8, !tbaa !9
  %105 = getelementptr inbounds i8, ptr %10, i64 8
  store double 0.000000e+00, ptr %105, align 8, !tbaa !12
  %106 = load i32, ptr %11, align 4, !tbaa !5
  %107 = icmp sge i32 %106, %.0441
  %or.cond = select i1 %107, i1 true, i1 %41
  br i1 %or.cond, label %.thread, label %.thread479.sink.split

.thread:                                          ; preds = %104
  %.pr476.pr = load i32, ptr %13, align 4, !tbaa !5
  %.not465 = icmp eq i32 %.pr476.pr, 0
  br i1 %.not465, label %111, label %.thread479

.thread479.sink.split:                            ; preds = %104, %60, %56, %53, %50, %48, %45
  %.sink = phi i32 [ -1, %45 ], [ -2, %48 ], [ -3, %50 ], [ -5, %53 ], [ -8, %56 ], [ -10, %60 ], [ -12, %104 ]
  store i32 %.sink, ptr %13, align 4, !tbaa !5
  br label %.thread479

.thread479:                                       ; preds = %.thread479.sink.split, %64, %.thread
  %108 = phi i32 [ %.pr476.pr, %.thread ], [ %.pr, %64 ], [ %.sink, %.thread479.sink.split ]
  %109 = sub nsw i32 0, %108
  store i32 %109, ptr %15, align 4, !tbaa !5
  %110 = call i32 @xerbla_(ptr noundef nonnull @.str.10, ptr noundef nonnull %15, i32 noundef 6) #7
  br label %245

111:                                              ; preds = %.thread
  br i1 %41, label %245, label %112

112:                                              ; preds = %111
  %113 = load i32, ptr %2, align 4, !tbaa !5
  %114 = icmp eq i32 %113, 0
  br i1 %114, label %245, label %115

115:                                              ; preds = %112
  %116 = call double @dlamch_(ptr noundef nonnull @.str.11) #7
  %117 = call double @dlamch_(ptr noundef nonnull @.str.7) #7
  store double %117, ptr %25, align 8, !tbaa !13
  %118 = fdiv double 1.000000e+00, %117
  store double %118, ptr %24, align 8, !tbaa !13
  call void @dlabad_(ptr noundef nonnull %25, ptr noundef nonnull %24) #7
  %119 = load double, ptr %25, align 8, !tbaa !13
  %120 = call double @sqrt(double noundef %119) #7
  %121 = fdiv double %120, %116
  store double %121, ptr %25, align 8, !tbaa !13
  %122 = fdiv double 1.000000e+00, %121
  store double %122, ptr %24, align 8, !tbaa !13
  %123 = call double @zlange_(ptr noundef nonnull @.str.12, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef nonnull %29) #7
  store double %123, ptr %19, align 8, !tbaa !13
  %124 = fcmp ogt double %123, 0.000000e+00
  %125 = load double, ptr %25, align 8
  %126 = fcmp olt double %123, %125
  %or.cond500 = select i1 %124, i1 %126, i1 false
  br i1 %or.cond500, label %130, label %127

127:                                              ; preds = %115
  %128 = load double, ptr %24, align 8, !tbaa !13
  %129 = fcmp ogt double %123, %128
  br i1 %129, label %130, label %131

130:                                              ; preds = %115, %127
  %storemerge = phi double [ %128, %127 ], [ %125, %115 ]
  store double %storemerge, ptr %22, align 8, !tbaa !13
  call void @zlascl_(ptr noundef nonnull @.str.13, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %19, ptr noundef nonnull %22, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef nonnull %20) #7
  br label %131

131:                                              ; preds = %127, %130
  %.not466486 = phi i1 [ false, %130 ], [ true, %127 ]
  call void @zgebal_(ptr noundef nonnull @.str.6, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef nonnull %28, ptr noundef nonnull %26, ptr noundef %12, ptr noundef nonnull %20) #7
  %132 = load i32, ptr %2, align 4, !tbaa !5
  %133 = load i32, ptr %11, align 4, !tbaa !5
  %134 = sub i32 %133, %132
  store i32 %134, ptr %15, align 4, !tbaa !5
  %135 = sext i32 %132 to i64
  %136 = getelementptr %struct.doublecomplex, ptr %38, i64 %135
  %137 = getelementptr i8, ptr %136, i64 16
  call void @zgehrd_(ptr noundef nonnull %2, ptr noundef nonnull %28, ptr noundef nonnull %26, ptr noundef %3, ptr noundef nonnull %4, ptr noundef nonnull %10, ptr noundef nonnull %137, ptr noundef nonnull %15, ptr noundef nonnull %20) #7
  br i1 %44, label %138, label %143

138:                                              ; preds = %131
  store i8 76, ptr %18, align 1, !tbaa !14
  call void @zlacpy_(ptr noundef nonnull @.str.5, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %6, ptr noundef nonnull %7) #7
  %139 = load i32, ptr %11, align 4, !tbaa !5
  %140 = sub i32 %139, %132
  store i32 %140, ptr %15, align 4, !tbaa !5
  call void @zunghr_(ptr noundef nonnull %2, ptr noundef nonnull %28, ptr noundef nonnull %26, ptr noundef %6, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef nonnull %137, ptr noundef nonnull %15, ptr noundef nonnull %20) #7
  %141 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %141, ptr %15, align 4, !tbaa !5
  call void @zhseqr_(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str, ptr noundef nonnull %2, ptr noundef nonnull %28, ptr noundef nonnull %26, 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) #7
  %.not468 = icmp eq i32 %43, 0
  br i1 %.not468, label %150, label %142

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

143:                                              ; preds = %131
  %.not467 = icmp eq i32 %43, 0
  br i1 %.not467, label %148, label %144

144:                                              ; preds = %143
  store i8 82, ptr %18, align 1, !tbaa !14
  call void @zlacpy_(ptr noundef nonnull @.str.5, ptr noundef nonnull %2, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %8, ptr noundef nonnull %9) #7
  %145 = load i32, ptr %11, align 4, !tbaa !5
  %146 = sub i32 %145, %132
  store i32 %146, ptr %15, align 4, !tbaa !5
  call void @zunghr_(ptr noundef nonnull %2, ptr noundef nonnull %28, ptr noundef nonnull %26, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull %137, ptr noundef nonnull %15, ptr noundef nonnull %20) #7
  %147 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %147, ptr %15, align 4, !tbaa !5
  call void @zhseqr_(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str, ptr noundef nonnull %2, ptr noundef nonnull %28, ptr noundef nonnull %26, 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) #7
  br label %150

148:                                              ; preds = %143
  %149 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %149, ptr %15, align 4, !tbaa !5
  call void @zhseqr_(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, ptr noundef nonnull %2, ptr noundef nonnull %28, ptr noundef nonnull %26, 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) #7
  br label %150

150:                                              ; preds = %144, %148, %138, %142
  %151 = load i32, ptr %13, align 4, !tbaa !5
  %.not469 = icmp ne i32 %151, 0
  %152 = or i32 %42, %43
  %or.cond3.not = icmp eq i32 %152, 0
  %or.cond542 = select i1 %.not469, i1 true, i1 %or.cond3.not
  br i1 %or.cond542, label %.thread490, label %153

153:                                              ; preds = %150
  %154 = load i32, ptr %2, align 4, !tbaa !5
  %155 = add nsw i32 %154, 1
  %156 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %156, ptr %15, align 4, !tbaa !5
  %157 = sext i32 %155 to i64
  %158 = getelementptr inbounds double, ptr %39, i64 %157
  call void @ztrevc3_(ptr noundef nonnull %18, ptr noundef nonnull @.str.6, ptr noundef nonnull %23, 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 %21, ptr noundef nonnull %10, ptr noundef nonnull %15, ptr noundef nonnull %158, ptr noundef nonnull %2, ptr noundef nonnull %20) #7
  br i1 %44, label %159, label %.loopexit

159:                                              ; preds = %153
  call void @zgebak_(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.5, ptr noundef nonnull %2, ptr noundef nonnull %28, ptr noundef nonnull %26, ptr noundef %12, ptr noundef nonnull %2, ptr noundef %6, ptr noundef nonnull %7, ptr noundef nonnull %20) #7
  %160 = load i32, ptr %2, align 4, !tbaa !5
  store i32 %160, ptr %15, align 4, !tbaa !5
  %invariant.gep503 = getelementptr i8, ptr %34, i64 16
  %invariant.gep505 = getelementptr i8, ptr %12, i64 -16
  %.not470507 = icmp slt i32 %160, 1
  br i1 %.not470507, label %.loopexit, label %.lr.ph510

.lr.ph510:                                        ; preds = %159
  %161 = sext i32 %32 to i64
  %invariant.gep537 = getelementptr double, ptr %invariant.gep505, i64 %157
  br label %162

162:                                              ; preds = %.lr.ph510, %._crit_edge
  %indvars.iv527 = phi i64 [ 1, %.lr.ph510 ], [ %indvars.iv.next528, %._crit_edge ]
  %163 = mul nsw i64 %indvars.iv527, %161
  %gep504 = getelementptr %struct.doublecomplex, ptr %invariant.gep503, i64 %163
  %164 = call double @dznrm2_(ptr noundef nonnull %2, ptr noundef %gep504, ptr noundef nonnull @c__1) #7
  %165 = fdiv double 1.000000e+00, %164
  store double %165, ptr %27, align 8, !tbaa !13
  call void @zdscal_(ptr noundef nonnull %2, ptr noundef nonnull %27, ptr noundef %gep504, ptr noundef nonnull @c__1) #7
  %166 = load i32, ptr %2, align 4, !tbaa !5
  %.not474501 = icmp slt i32 %166, 1
  br i1 %.not474501, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %162
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %34, i64 %163
  %167 = zext nneg i32 %166 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %gep536 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %indvars.iv
  %168 = load double, ptr %gep536, align 8, !tbaa !9
  %169 = call { double, double } @Cd(ptr noundef nonnull %gep536)
  %170 = extractvalue { double, double } %169, 1
  %171 = fmul double %170, %170
  %172 = call double @llvm.fmuladd.f64(double %168, double %168, double %171)
  %gep538 = getelementptr double, ptr %invariant.gep537, i64 %indvars.iv
  store double %172, ptr %gep538, align 8, !tbaa !13
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %.not474.not = icmp ult i64 %indvars.iv, %167
  br i1 %.not474.not, label %.lr.ph, label %._crit_edge, !llvm.loop !15

._crit_edge:                                      ; preds = %.lr.ph, %162
  %173 = call i32 @idamax_(ptr noundef nonnull %2, ptr noundef nonnull %158, ptr noundef nonnull @c__1) #7
  %174 = trunc nsw i64 %163 to i32
  %175 = add nsw i32 %173, %174
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds %struct.doublecomplex, ptr %34, i64 %176
  %178 = call { double, double } @Cd(ptr noundef %177)
  %179 = extractvalue { double, double } %178, 0
  %180 = extractvalue { double, double } %178, 1
  %181 = fneg double %180
  %182 = call ptr @_pCd(ptr noundef nonnull %17)
  %183 = getelementptr inbounds i8, ptr %182, i64 8
  store double %179, ptr %182, align 8
  store double %181, ptr %183, align 8
  %184 = add nsw i32 %173, %155
  %185 = sext i32 %184 to i64
  %gep506 = getelementptr double, ptr %invariant.gep505, i64 %185
  %186 = load double, ptr %gep506, align 8, !tbaa !13
  %187 = call double @sqrt(double noundef %186) #7
  %188 = load <2 x double>, ptr %17, align 16, !tbaa !13
  %189 = insertelement <2 x double> poison, double %187, i64 0
  %190 = shufflevector <2 x double> %189, <2 x double> poison, <2 x i32> zeroinitializer
  %191 = fdiv <2 x double> %188, %190
  store <2 x double> %191, ptr %30, align 16, !tbaa !13
  call void @zscal_(ptr noundef nonnull %2, ptr noundef nonnull %30, ptr noundef %gep504, ptr noundef nonnull @c__1) #7
  store i32 %175, ptr %16, align 4, !tbaa !5
  %192 = getelementptr inbounds i8, ptr %177, i64 8
  store double 0.000000e+00, ptr %192, align 8, !tbaa !12
  %indvars.iv.next528 = add nuw nsw i64 %indvars.iv527, 1
  %193 = load i32, ptr %15, align 4, !tbaa !5
  %194 = sext i32 %193 to i64
  %.not470.not = icmp slt i64 %indvars.iv527, %194
  br i1 %.not470.not, label %162, label %.loopexit, !llvm.loop !17

.loopexit:                                        ; preds = %._crit_edge, %159, %153
  br i1 %.not456, label %195, label %.thread490

195:                                              ; preds = %.loopexit
  call void @zgebak_(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.8, ptr noundef nonnull %2, ptr noundef nonnull %28, ptr noundef nonnull %26, ptr noundef %12, ptr noundef nonnull %2, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull %20) #7
  %196 = load i32, ptr %2, align 4, !tbaa !5
  store i32 %196, ptr %15, align 4, !tbaa !5
  %invariant.gep518 = getelementptr i8, ptr %37, i64 16
  %invariant.gep520 = getelementptr i8, ptr %12, i64 -16
  %.not472522 = icmp slt i32 %196, 1
  br i1 %.not472522, label %.thread490, label %.lr.ph525

.lr.ph525:                                        ; preds = %195
  %197 = sext i32 %35 to i64
  %invariant.gep540 = getelementptr double, ptr %invariant.gep520, i64 %157
  br label %198

198:                                              ; preds = %.lr.ph525, %._crit_edge517
  %indvars.iv533 = phi i64 [ 1, %.lr.ph525 ], [ %indvars.iv.next534, %._crit_edge517 ]
  %199 = mul nsw i64 %indvars.iv533, %197
  %gep519 = getelementptr %struct.doublecomplex, ptr %invariant.gep518, i64 %199
  %200 = call double @dznrm2_(ptr noundef nonnull %2, ptr noundef %gep519, ptr noundef nonnull @c__1) #7
  %201 = fdiv double 1.000000e+00, %200
  store double %201, ptr %27, align 8, !tbaa !13
  call void @zdscal_(ptr noundef nonnull %2, ptr noundef nonnull %27, ptr noundef %gep519, ptr noundef nonnull @c__1) #7
  %202 = load i32, ptr %2, align 4, !tbaa !5
  %.not473513 = icmp slt i32 %202, 1
  br i1 %.not473513, label %._crit_edge517, label %.lr.ph516.preheader

.lr.ph516.preheader:                              ; preds = %198
  %invariant.gep539 = getelementptr %struct.doublecomplex, ptr %37, i64 %199
  %203 = zext nneg i32 %202 to i64
  br label %.lr.ph516

.lr.ph516:                                        ; preds = %.lr.ph516.preheader, %.lr.ph516
  %indvars.iv530 = phi i64 [ 1, %.lr.ph516.preheader ], [ %indvars.iv.next531, %.lr.ph516 ]
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep539, i64 %indvars.iv530
  %204 = load double, ptr %gep, align 8, !tbaa !9
  %205 = call { double, double } @Cd(ptr noundef nonnull %gep)
  %206 = extractvalue { double, double } %205, 1
  %207 = fmul double %206, %206
  %208 = call double @llvm.fmuladd.f64(double %204, double %204, double %207)
  %gep541 = getelementptr double, ptr %invariant.gep540, i64 %indvars.iv530
  store double %208, ptr %gep541, align 8, !tbaa !13
  %indvars.iv.next531 = add nuw nsw i64 %indvars.iv530, 1
  %.not473.not = icmp ult i64 %indvars.iv530, %203
  br i1 %.not473.not, label %.lr.ph516, label %._crit_edge517, !llvm.loop !18

._crit_edge517:                                   ; preds = %.lr.ph516, %198
  %209 = call i32 @idamax_(ptr noundef nonnull %2, ptr noundef nonnull %158, ptr noundef nonnull @c__1) #7
  %210 = trunc nsw i64 %199 to i32
  %211 = add nsw i32 %209, %210
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds %struct.doublecomplex, ptr %37, i64 %212
  %214 = call { double, double } @Cd(ptr noundef %213)
  %215 = extractvalue { double, double } %214, 0
  %216 = extractvalue { double, double } %214, 1
  %217 = fneg double %216
  %218 = call ptr @_pCd(ptr noundef nonnull %17)
  %219 = getelementptr inbounds i8, ptr %218, i64 8
  store double %215, ptr %218, align 8
  store double %217, ptr %219, align 8
  %220 = add nsw i32 %209, %155
  %221 = sext i32 %220 to i64
  %gep521 = getelementptr double, ptr %invariant.gep520, i64 %221
  %222 = load double, ptr %gep521, align 8, !tbaa !13
  %223 = call double @sqrt(double noundef %222) #7
  %224 = load <2 x double>, ptr %17, align 16, !tbaa !13
  %225 = insertelement <2 x double> poison, double %223, i64 0
  %226 = shufflevector <2 x double> %225, <2 x double> poison, <2 x i32> zeroinitializer
  %227 = fdiv <2 x double> %224, %226
  store <2 x double> %227, ptr %30, align 16, !tbaa !13
  call void @zscal_(ptr noundef nonnull %2, ptr noundef nonnull %30, ptr noundef %gep519, ptr noundef nonnull @c__1) #7
  store i32 %211, ptr %16, align 4, !tbaa !5
  %228 = getelementptr inbounds i8, ptr %213, i64 8
  store double 0.000000e+00, ptr %228, align 8, !tbaa !12
  %indvars.iv.next534 = add nuw nsw i64 %indvars.iv533, 1
  %229 = load i32, ptr %15, align 4, !tbaa !5
  %230 = sext i32 %229 to i64
  %.not472.not = icmp slt i64 %indvars.iv533, %230
  br i1 %.not472.not, label %198, label %.thread490, !llvm.loop !19

.thread490:                                       ; preds = %._crit_edge517, %195, %.loopexit, %150
  br i1 %.not466486, label %244, label %231

231:                                              ; preds = %.thread490
  %232 = load i32, ptr %2, align 4, !tbaa !5
  %233 = load i32, ptr %13, align 4, !tbaa !5
  %234 = sub nsw i32 %232, %233
  store i32 %234, ptr %15, align 4, !tbaa !5
  %235 = call i32 @llvm.smax.i32(i32 %234, i32 1)
  store i32 %235, ptr %16, align 4, !tbaa !5
  %236 = sext i32 %233 to i64
  %237 = getelementptr %struct.doublecomplex, ptr %31, i64 %236
  %238 = getelementptr i8, ptr %237, i64 16
  call void @zlascl_(ptr noundef nonnull @.str.13, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %22, ptr noundef nonnull %19, ptr noundef nonnull %15, ptr noundef nonnull @c__1, ptr noundef %238, ptr noundef nonnull %16, ptr noundef nonnull %20) #7
  %239 = load i32, ptr %13, align 4, !tbaa !5
  %240 = icmp sgt i32 %239, 0
  br i1 %240, label %241, label %244

241:                                              ; preds = %231
  %242 = load i32, ptr %28, align 4, !tbaa !5
  %243 = add nsw i32 %242, -1
  store i32 %243, ptr %15, align 4, !tbaa !5
  call void @zlascl_(ptr noundef nonnull @.str.13, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %22, ptr noundef nonnull %19, ptr noundef nonnull %15, ptr noundef nonnull @c__1, ptr noundef %5, ptr noundef nonnull %2, ptr noundef nonnull %20) #7
  br label %244

244:                                              ; preds = %231, %241, %.thread490
  store double %.1, ptr %10, align 8, !tbaa !9
  store double 0.000000e+00, ptr %105, align 8, !tbaa !12
  br label %245

245:                                              ; preds = %112, %111, %244, %.thread479
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #7
  ret void
}

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

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

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

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

declare void @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, i32 noundef) local_unnamed_addr #2

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

declare void @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 @dznrm2_(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden { double, double } @Cd(ptr noundef) local_unnamed_addr #4

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @_pCd(ptr noundef) local_unnamed_addr #4

declare void @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 i32 @llvm.smax.i32(i32, i32) #6

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

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 = { inlinehint 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 #5 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { 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 = !{!"int", !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,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass