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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i64, align 8
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@c__0 = external hidden global i64, align 8
@c_n1 = external hidden global i64, align 8
@.str.7 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1

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

110:                                              ; preds = %18
  %111 = load ptr, ptr %20, align 8, !tbaa !5
  %112 = call i64 @lsame_(ptr noundef %111, ptr noundef @.str.2)
  %113 = icmp ne i64 %112, 0
  br i1 %113, label %116, label %114

114:                                              ; preds = %110
  %115 = load ptr, ptr %37, align 8, !tbaa !5
  store i64 -1, ptr %115, align 8, !tbaa !9
  br label %186

116:                                              ; preds = %110, %18
  %117 = load i64, ptr %67, align 8, !tbaa !9
  %118 = icmp ne i64 %117, 0
  br i1 %118, label %125, label %119

119:                                              ; preds = %116
  %120 = load ptr, ptr %21, align 8, !tbaa !5
  %121 = call i64 @lsame_(ptr noundef %120, ptr noundef @.str.2)
  %122 = icmp ne i64 %121, 0
  br i1 %122, label %125, label %123

123:                                              ; preds = %119
  %124 = load ptr, ptr %37, align 8, !tbaa !5
  store i64 -2, ptr %124, align 8, !tbaa !9
  br label %185

125:                                              ; preds = %119, %116
  %126 = load i64, ptr %64, align 8, !tbaa !9
  %127 = icmp ne i64 %126, 0
  br i1 %127, label %137, label %128

128:                                              ; preds = %125
  %129 = load i64, ptr %61, align 8, !tbaa !9
  %130 = icmp ne i64 %129, 0
  br i1 %130, label %137, label %131

131:                                              ; preds = %128
  %132 = load i64, ptr %68, align 8, !tbaa !9
  %133 = icmp ne i64 %132, 0
  br i1 %133, label %137, label %134

134:                                              ; preds = %131
  %135 = load i64, ptr %60, align 8, !tbaa !9
  %136 = icmp ne i64 %135, 0
  br i1 %136, label %137, label %143

137:                                              ; preds = %134, %131, %128, %125
  %138 = load i64, ptr %67, align 8, !tbaa !9
  %139 = icmp ne i64 %138, 0
  br i1 %139, label %145, label %140

140:                                              ; preds = %137
  %141 = load i64, ptr %64, align 8, !tbaa !9
  %142 = icmp ne i64 %141, 0
  br i1 %142, label %145, label %143

143:                                              ; preds = %140, %134
  %144 = load ptr, ptr %37, align 8, !tbaa !5
  store i64 -4, ptr %144, align 8, !tbaa !9
  br label %184

145:                                              ; preds = %140, %137
  %146 = load ptr, ptr %24, align 8, !tbaa !5
  %147 = load i64, ptr %146, align 8, !tbaa !9
  %148 = icmp slt i64 %147, 0
  br i1 %148, label %149, label %151

149:                                              ; preds = %145
  %150 = load ptr, ptr %37, align 8, !tbaa !5
  store i64 -5, ptr %150, align 8, !tbaa !9
  br label %183

151:                                              ; preds = %145
  %152 = load ptr, ptr %26, align 8, !tbaa !5
  %153 = load i64, ptr %152, align 8, !tbaa !9
  %154 = load ptr, ptr %24, align 8, !tbaa !5
  %155 = load i64, ptr %154, align 8, !tbaa !9
  %156 = icmp sge i64 1, %155
  br i1 %156, label %157, label %158

157:                                              ; preds = %151
  br label %161

158:                                              ; preds = %151
  %159 = load ptr, ptr %24, align 8, !tbaa !5
  %160 = load i64, ptr %159, align 8, !tbaa !9
  br label %161

161:                                              ; preds = %158, %157
  %162 = phi i64 [ 1, %157 ], [ %160, %158 ]
  %163 = icmp slt i64 %153, %162
  br i1 %163, label %164, label %166

164:                                              ; preds = %161
  %165 = load ptr, ptr %37, align 8, !tbaa !5
  store i64 -7, ptr %165, align 8, !tbaa !9
  br label %182

166:                                              ; preds = %161
  %167 = load ptr, ptr %30, align 8, !tbaa !5
  %168 = load i64, ptr %167, align 8, !tbaa !9
  %169 = icmp slt i64 %168, 1
  br i1 %169, label %179, label %170

170:                                              ; preds = %166
  %171 = load i64, ptr %69, align 8, !tbaa !9
  %172 = icmp ne i64 %171, 0
  br i1 %172, label %173, label %181

173:                                              ; preds = %170
  %174 = load ptr, ptr %30, align 8, !tbaa !5
  %175 = load i64, ptr %174, align 8, !tbaa !9
  %176 = load ptr, ptr %24, align 8, !tbaa !5
  %177 = load i64, ptr %176, align 8, !tbaa !9
  %178 = icmp slt i64 %175, %177
  br i1 %178, label %179, label %181

179:                                              ; preds = %173, %166
  %180 = load ptr, ptr %37, align 8, !tbaa !5
  store i64 -11, ptr %180, align 8, !tbaa !9
  br label %181

181:                                              ; preds = %179, %173, %170
  br label %182

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

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

184:                                              ; preds = %183, %143
  br label %185

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

186:                                              ; preds = %185, %114
  %187 = load ptr, ptr %37, align 8, !tbaa !5
  %188 = load i64, ptr %187, align 8, !tbaa !9
  %189 = icmp eq i64 %188, 0
  br i1 %189, label %190, label %309

190:                                              ; preds = %186
  %191 = load ptr, ptr %24, align 8, !tbaa !5
  %192 = load i64, ptr %191, align 8, !tbaa !9
  %193 = icmp eq i64 %192, 0
  br i1 %193, label %194, label %195

194:                                              ; preds = %190
  store i64 1, ptr %62, align 8, !tbaa !9
  store i64 1, ptr %54, align 8, !tbaa !9
  br label %293

195:                                              ; preds = %190
  %196 = load ptr, ptr %24, align 8, !tbaa !5
  %197 = load i64, ptr %196, align 8, !tbaa !9
  %198 = load ptr, ptr %24, align 8, !tbaa !5
  %199 = load i64, ptr %198, align 8, !tbaa !9
  %200 = load ptr, ptr %24, align 8, !tbaa !5
  %201 = load ptr, ptr %24, align 8, !tbaa !5
  %202 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.5, ptr noundef @.str.6, ptr noundef %200, ptr noundef @c__1, ptr noundef %201, ptr noundef @c__0)
  %203 = mul nsw i64 %199, %202
  %204 = add nsw i64 %197, %203
  store i64 %204, ptr %63, align 8, !tbaa !9
  %205 = load ptr, ptr %24, align 8, !tbaa !5
  %206 = load i64, ptr %205, align 8, !tbaa !9
  %207 = shl i64 %206, 1
  store i64 %207, ptr %62, align 8, !tbaa !9
  %208 = load ptr, ptr %20, align 8, !tbaa !5
  %209 = load ptr, ptr %24, align 8, !tbaa !5
  %210 = load ptr, ptr %24, align 8, !tbaa !5
  %211 = load ptr, ptr %25, align 8, !tbaa !5
  %212 = load i64, ptr %39, align 8, !tbaa !9
  %213 = getelementptr inbounds %struct.doublecomplex, ptr %211, i64 %212
  %214 = load ptr, ptr %26, align 8, !tbaa !5
  %215 = load ptr, ptr %28, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.doublecomplex, ptr %215, i64 1
  %217 = load ptr, ptr %29, align 8, !tbaa !5
  %218 = load i64, ptr %41, align 8, !tbaa !9
  %219 = getelementptr inbounds %struct.doublecomplex, ptr %217, i64 %218
  %220 = load ptr, ptr %30, align 8, !tbaa !5
  %221 = load ptr, ptr %33, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.doublecomplex, ptr %221, i64 1
  %223 = call i32 @zhseqr_(ptr noundef @.str.1, ptr noundef %208, ptr noundef %209, ptr noundef @c__1, ptr noundef %210, ptr noundef %213, ptr noundef %214, ptr noundef %216, ptr noundef %219, ptr noundef %220, ptr noundef %222, ptr noundef @c_n1, ptr noundef %56)
  %224 = load ptr, ptr %33, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.doublecomplex, ptr %224, i64 1
  %226 = getelementptr inbounds %struct.doublecomplex, ptr %225, i32 0, i32 0
  %227 = load double, ptr %226, align 8, !tbaa !11
  %228 = fptosi double %227 to i64
  store i64 %228, ptr %66, align 8, !tbaa !9
  %229 = load i64, ptr %69, align 8, !tbaa !9
  %230 = icmp ne i64 %229, 0
  br i1 %230, label %241, label %231

231:                                              ; preds = %195
  %232 = load i64, ptr %63, align 8, !tbaa !9
  %233 = load i64, ptr %66, align 8, !tbaa !9
  %234 = icmp sge i64 %232, %233
  br i1 %234, label %235, label %237

235:                                              ; preds = %231
  %236 = load i64, ptr %63, align 8, !tbaa !9
  br label %239

237:                                              ; preds = %231
  %238 = load i64, ptr %66, align 8, !tbaa !9
  br label %239

239:                                              ; preds = %237, %235
  %240 = phi i64 [ %236, %235 ], [ %238, %237 ]
  store i64 %240, ptr %63, align 8, !tbaa !9
  br label %271

241:                                              ; preds = %195
  %242 = load i64, ptr %63, align 8, !tbaa !9
  store i64 %242, ptr %42, align 8, !tbaa !9
  %243 = load ptr, ptr %24, align 8, !tbaa !5
  %244 = load i64, ptr %243, align 8, !tbaa !9
  %245 = load ptr, ptr %24, align 8, !tbaa !5
  %246 = load i64, ptr %245, align 8, !tbaa !9
  %247 = sub nsw i64 %246, 1
  %248 = load ptr, ptr %24, align 8, !tbaa !5
  %249 = load ptr, ptr %24, align 8, !tbaa !5
  %250 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str.7, ptr noundef @.str.6, ptr noundef %248, ptr noundef @c__1, ptr noundef %249, ptr noundef @c_n1)
  %251 = mul nsw i64 %247, %250
  %252 = add nsw i64 %244, %251
  store i64 %252, ptr %43, align 8, !tbaa !9
  %253 = load i64, ptr %42, align 8, !tbaa !9
  %254 = load i64, ptr %43, align 8, !tbaa !9
  %255 = icmp sge i64 %253, %254
  br i1 %255, label %256, label %258

256:                                              ; preds = %241
  %257 = load i64, ptr %42, align 8, !tbaa !9
  br label %260

258:                                              ; preds = %241
  %259 = load i64, ptr %43, align 8, !tbaa !9
  br label %260

260:                                              ; preds = %258, %256
  %261 = phi i64 [ %257, %256 ], [ %259, %258 ]
  store i64 %261, ptr %63, align 8, !tbaa !9
  %262 = load i64, ptr %63, align 8, !tbaa !9
  %263 = load i64, ptr %66, align 8, !tbaa !9
  %264 = icmp sge i64 %262, %263
  br i1 %264, label %265, label %267

265:                                              ; preds = %260
  %266 = load i64, ptr %63, align 8, !tbaa !9
  br label %269

267:                                              ; preds = %260
  %268 = load i64, ptr %66, align 8, !tbaa !9
  br label %269

269:                                              ; preds = %267, %265
  %270 = phi i64 [ %266, %265 ], [ %268, %267 ]
  store i64 %270, ptr %63, align 8, !tbaa !9
  br label %271

271:                                              ; preds = %269, %239
  %272 = load i64, ptr %63, align 8, !tbaa !9
  store i64 %272, ptr %54, align 8, !tbaa !9
  %273 = load i64, ptr %64, align 8, !tbaa !9
  %274 = icmp ne i64 %273, 0
  br i1 %274, label %292, label %275

275:                                              ; preds = %271
  %276 = load i64, ptr %54, align 8, !tbaa !9
  store i64 %276, ptr %42, align 8, !tbaa !9
  %277 = load ptr, ptr %24, align 8, !tbaa !5
  %278 = load i64, ptr %277, align 8, !tbaa !9
  %279 = load ptr, ptr %24, align 8, !tbaa !5
  %280 = load i64, ptr %279, align 8, !tbaa !9
  %281 = mul nsw i64 %278, %280
  %282 = sdiv i64 %281, 2
  store i64 %282, ptr %43, align 8, !tbaa !9
  %283 = load i64, ptr %42, align 8, !tbaa !9
  %284 = load i64, ptr %43, align 8, !tbaa !9
  %285 = icmp sge i64 %283, %284
  br i1 %285, label %286, label %288

286:                                              ; preds = %275
  %287 = load i64, ptr %42, align 8, !tbaa !9
  br label %290

288:                                              ; preds = %275
  %289 = load i64, ptr %43, align 8, !tbaa !9
  br label %290

290:                                              ; preds = %288, %286
  %291 = phi i64 [ %287, %286 ], [ %289, %288 ]
  store i64 %291, ptr %54, align 8, !tbaa !9
  br label %292

292:                                              ; preds = %290, %271
  br label %293

293:                                              ; preds = %292, %194
  %294 = load i64, ptr %54, align 8, !tbaa !9
  %295 = sitofp i64 %294 to double
  %296 = load ptr, ptr %33, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.doublecomplex, ptr %296, i64 1
  %298 = getelementptr inbounds %struct.doublecomplex, ptr %297, i32 0, i32 0
  store double %295, ptr %298, align 8, !tbaa !11
  %299 = load ptr, ptr %33, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.doublecomplex, ptr %299, i64 1
  %301 = getelementptr inbounds %struct.doublecomplex, ptr %300, i32 0, i32 1
  store double 0.000000e+00, ptr %301, align 8, !tbaa !14
  %302 = load ptr, ptr %34, align 8, !tbaa !5
  %303 = load i64, ptr %302, align 8, !tbaa !9
  %304 = load i64, ptr %62, align 8, !tbaa !9
  %305 = icmp slt i64 %303, %304
  br i1 %305, label %306, label %308

306:                                              ; preds = %293
  %307 = load ptr, ptr %37, align 8, !tbaa !5
  store i64 -15, ptr %307, align 8, !tbaa !9
  br label %308

308:                                              ; preds = %306, %293
  br label %309

309:                                              ; preds = %308, %186
  %310 = load ptr, ptr %37, align 8, !tbaa !5
  %311 = load i64, ptr %310, align 8, !tbaa !9
  %312 = icmp ne i64 %311, 0
  br i1 %312, label %313, label %318

313:                                              ; preds = %309
  %314 = load ptr, ptr %37, align 8, !tbaa !5
  %315 = load i64, ptr %314, align 8, !tbaa !9
  %316 = sub nsw i64 0, %315
  store i64 %316, ptr %42, align 8, !tbaa !9
  %317 = call i32 @xerbla_(ptr noundef @.str.8, ptr noundef %42)
  store i32 0, ptr %19, align 4
  store i32 1, ptr %70, align 4
  br label %615

318:                                              ; preds = %309
  %319 = load ptr, ptr %24, align 8, !tbaa !5
  %320 = load i64, ptr %319, align 8, !tbaa !9
  %321 = icmp eq i64 %320, 0
  br i1 %321, label %322, label %324

322:                                              ; preds = %318
  %323 = load ptr, ptr %27, align 8, !tbaa !5
  store i64 0, ptr %323, align 8, !tbaa !9
  store i32 0, ptr %19, align 4
  store i32 1, ptr %70, align 4
  br label %615

324:                                              ; preds = %318
  %325 = call double @dlamch_(ptr noundef @.str.9)
  store double %325, ptr %48, align 8, !tbaa !15
  %326 = call double @dlamch_(ptr noundef @.str.1)
  store double %326, ptr %65, align 8, !tbaa !15
  %327 = load double, ptr %65, align 8, !tbaa !15
  %328 = fdiv double 1.000000e+00, %327
  store double %328, ptr %59, align 8, !tbaa !15
  %329 = call i32 @dlabad_(ptr noundef %65, ptr noundef %59)
  %330 = load double, ptr %65, align 8, !tbaa !15
  %331 = call double @sqrt(double noundef %330) #4
  %332 = load double, ptr %48, align 8, !tbaa !15
  %333 = fdiv double %331, %332
  store double %333, ptr %65, align 8, !tbaa !15
  %334 = load double, ptr %65, align 8, !tbaa !15
  %335 = fdiv double 1.000000e+00, %334
  store double %335, ptr %59, align 8, !tbaa !15
  %336 = load ptr, ptr %24, align 8, !tbaa !5
  %337 = load ptr, ptr %24, align 8, !tbaa !5
  %338 = load ptr, ptr %25, align 8, !tbaa !5
  %339 = load i64, ptr %39, align 8, !tbaa !9
  %340 = getelementptr inbounds %struct.doublecomplex, ptr %338, i64 %339
  %341 = load ptr, ptr %26, align 8, !tbaa !5
  %342 = getelementptr inbounds [1 x double], ptr %47, i64 0, i64 0
  %343 = call double @zlange_(ptr noundef @.str.10, ptr noundef %336, ptr noundef %337, ptr noundef %340, ptr noundef %341, ptr noundef %342)
  store double %343, ptr %50, align 8, !tbaa !15
  store i64 0, ptr %57, align 8, !tbaa !9
  %344 = load double, ptr %50, align 8, !tbaa !15
  %345 = fcmp ogt double %344, 0.000000e+00
  br i1 %345, label %346, label %352

346:                                              ; preds = %324
  %347 = load double, ptr %50, align 8, !tbaa !15
  %348 = load double, ptr %65, align 8, !tbaa !15
  %349 = fcmp olt double %347, %348
  br i1 %349, label %350, label %352

350:                                              ; preds = %346
  store i64 1, ptr %57, align 8, !tbaa !9
  %351 = load double, ptr %65, align 8, !tbaa !15
  store double %351, ptr %58, align 8, !tbaa !15
  br label %359

352:                                              ; preds = %346, %324
  %353 = load double, ptr %50, align 8, !tbaa !15
  %354 = load double, ptr %59, align 8, !tbaa !15
  %355 = fcmp ogt double %353, %354
  br i1 %355, label %356, label %358

356:                                              ; preds = %352
  store i64 1, ptr %57, align 8, !tbaa !9
  %357 = load double, ptr %59, align 8, !tbaa !15
  store double %357, ptr %58, align 8, !tbaa !15
  br label %358

358:                                              ; preds = %356, %352
  br label %359

359:                                              ; preds = %358, %350
  %360 = load i64, ptr %57, align 8, !tbaa !9
  %361 = icmp ne i64 %360, 0
  br i1 %361, label %362, label %370

362:                                              ; preds = %359
  %363 = load ptr, ptr %24, align 8, !tbaa !5
  %364 = load ptr, ptr %24, align 8, !tbaa !5
  %365 = load ptr, ptr %25, align 8, !tbaa !5
  %366 = load i64, ptr %39, align 8, !tbaa !9
  %367 = getelementptr inbounds %struct.doublecomplex, ptr %365, i64 %366
  %368 = load ptr, ptr %26, align 8, !tbaa !5
  %369 = call i32 @zlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %50, ptr noundef %58, ptr noundef %363, ptr noundef %364, ptr noundef %367, ptr noundef %368, ptr noundef %51)
  br label %370

370:                                              ; preds = %362, %359
  store i64 1, ptr %49, align 8, !tbaa !9
  %371 = load ptr, ptr %24, align 8, !tbaa !5
  %372 = load ptr, ptr %25, align 8, !tbaa !5
  %373 = load i64, ptr %39, align 8, !tbaa !9
  %374 = getelementptr inbounds %struct.doublecomplex, ptr %372, i64 %373
  %375 = load ptr, ptr %26, align 8, !tbaa !5
  %376 = load ptr, ptr %35, align 8, !tbaa !5
  %377 = load i64, ptr %49, align 8, !tbaa !9
  %378 = getelementptr inbounds double, ptr %376, i64 %377
  %379 = call i32 @zgebal_(ptr noundef @.str.9, ptr noundef %371, ptr noundef %374, ptr noundef %375, ptr noundef %46, ptr noundef %45, ptr noundef %378, ptr noundef %51)
  store i64 1, ptr %52, align 8, !tbaa !9
  %380 = load ptr, ptr %24, align 8, !tbaa !5
  %381 = load i64, ptr %380, align 8, !tbaa !9
  %382 = load i64, ptr %52, align 8, !tbaa !9
  %383 = add nsw i64 %381, %382
  store i64 %383, ptr %53, align 8, !tbaa !9
  %384 = load ptr, ptr %34, align 8, !tbaa !5
  %385 = load i64, ptr %384, align 8, !tbaa !9
  %386 = load i64, ptr %53, align 8, !tbaa !9
  %387 = sub nsw i64 %385, %386
  %388 = add nsw i64 %387, 1
  store i64 %388, ptr %42, align 8, !tbaa !9
  %389 = load ptr, ptr %24, align 8, !tbaa !5
  %390 = load ptr, ptr %25, align 8, !tbaa !5
  %391 = load i64, ptr %39, align 8, !tbaa !9
  %392 = getelementptr inbounds %struct.doublecomplex, ptr %390, i64 %391
  %393 = load ptr, ptr %26, align 8, !tbaa !5
  %394 = load ptr, ptr %33, align 8, !tbaa !5
  %395 = load i64, ptr %52, align 8, !tbaa !9
  %396 = getelementptr inbounds %struct.doublecomplex, ptr %394, i64 %395
  %397 = load ptr, ptr %33, align 8, !tbaa !5
  %398 = load i64, ptr %53, align 8, !tbaa !9
  %399 = getelementptr inbounds %struct.doublecomplex, ptr %397, i64 %398
  %400 = call i32 @zgehrd_(ptr noundef %389, ptr noundef %46, ptr noundef %45, ptr noundef %392, ptr noundef %393, ptr noundef %396, ptr noundef %399, ptr noundef %42, ptr noundef %51)
  %401 = load i64, ptr %69, align 8, !tbaa !9
  %402 = icmp ne i64 %401, 0
  br i1 %402, label %403, label %432

403:                                              ; preds = %370
  %404 = load ptr, ptr %24, align 8, !tbaa !5
  %405 = load ptr, ptr %24, align 8, !tbaa !5
  %406 = load ptr, ptr %25, align 8, !tbaa !5
  %407 = load i64, ptr %39, align 8, !tbaa !9
  %408 = getelementptr inbounds %struct.doublecomplex, ptr %406, i64 %407
  %409 = load ptr, ptr %26, align 8, !tbaa !5
  %410 = load ptr, ptr %29, align 8, !tbaa !5
  %411 = load i64, ptr %41, align 8, !tbaa !9
  %412 = getelementptr inbounds %struct.doublecomplex, ptr %410, i64 %411
  %413 = load ptr, ptr %30, align 8, !tbaa !5
  %414 = call i32 @zlacpy_(ptr noundef @.str.12, ptr noundef %404, ptr noundef %405, ptr noundef %408, ptr noundef %409, ptr noundef %412, ptr noundef %413)
  %415 = load ptr, ptr %34, align 8, !tbaa !5
  %416 = load i64, ptr %415, align 8, !tbaa !9
  %417 = load i64, ptr %53, align 8, !tbaa !9
  %418 = sub nsw i64 %416, %417
  %419 = add nsw i64 %418, 1
  store i64 %419, ptr %42, align 8, !tbaa !9
  %420 = load ptr, ptr %24, align 8, !tbaa !5
  %421 = load ptr, ptr %29, align 8, !tbaa !5
  %422 = load i64, ptr %41, align 8, !tbaa !9
  %423 = getelementptr inbounds %struct.doublecomplex, ptr %421, i64 %422
  %424 = load ptr, ptr %30, align 8, !tbaa !5
  %425 = load ptr, ptr %33, align 8, !tbaa !5
  %426 = load i64, ptr %52, align 8, !tbaa !9
  %427 = getelementptr inbounds %struct.doublecomplex, ptr %425, i64 %426
  %428 = load ptr, ptr %33, align 8, !tbaa !5
  %429 = load i64, ptr %53, align 8, !tbaa !9
  %430 = getelementptr inbounds %struct.doublecomplex, ptr %428, i64 %429
  %431 = call i32 @zunghr_(ptr noundef %420, ptr noundef %46, ptr noundef %45, ptr noundef %423, ptr noundef %424, ptr noundef %427, ptr noundef %430, ptr noundef %42, ptr noundef %51)
  br label %432

432:                                              ; preds = %403, %370
  %433 = load ptr, ptr %27, align 8, !tbaa !5
  store i64 0, ptr %433, align 8, !tbaa !9
  %434 = load i64, ptr %52, align 8, !tbaa !9
  store i64 %434, ptr %53, align 8, !tbaa !9
  %435 = load ptr, ptr %34, align 8, !tbaa !5
  %436 = load i64, ptr %435, align 8, !tbaa !9
  %437 = load i64, ptr %53, align 8, !tbaa !9
  %438 = sub nsw i64 %436, %437
  %439 = add nsw i64 %438, 1
  store i64 %439, ptr %42, align 8, !tbaa !9
  %440 = load ptr, ptr %20, align 8, !tbaa !5
  %441 = load ptr, ptr %24, align 8, !tbaa !5
  %442 = load ptr, ptr %25, align 8, !tbaa !5
  %443 = load i64, ptr %39, align 8, !tbaa !9
  %444 = getelementptr inbounds %struct.doublecomplex, ptr %442, i64 %443
  %445 = load ptr, ptr %26, align 8, !tbaa !5
  %446 = load ptr, ptr %28, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.doublecomplex, ptr %446, i64 1
  %448 = load ptr, ptr %29, align 8, !tbaa !5
  %449 = load i64, ptr %41, align 8, !tbaa !9
  %450 = getelementptr inbounds %struct.doublecomplex, ptr %448, i64 %449
  %451 = load ptr, ptr %30, align 8, !tbaa !5
  %452 = load ptr, ptr %33, align 8, !tbaa !5
  %453 = load i64, ptr %53, align 8, !tbaa !9
  %454 = getelementptr inbounds %struct.doublecomplex, ptr %452, i64 %453
  %455 = call i32 @zhseqr_(ptr noundef @.str.1, ptr noundef %440, ptr noundef %441, ptr noundef %46, ptr noundef %45, ptr noundef %444, ptr noundef %445, ptr noundef %447, ptr noundef %450, ptr noundef %451, ptr noundef %454, ptr noundef %42, ptr noundef %56)
  %456 = load i64, ptr %56, align 8, !tbaa !9
  %457 = icmp sgt i64 %456, 0
  br i1 %457, label %458, label %461

458:                                              ; preds = %432
  %459 = load i64, ptr %56, align 8, !tbaa !9
  %460 = load ptr, ptr %37, align 8, !tbaa !5
  store i64 %459, ptr %460, align 8, !tbaa !9
  br label %461

461:                                              ; preds = %458, %432
  %462 = load i64, ptr %67, align 8, !tbaa !9
  %463 = icmp ne i64 %462, 0
  br i1 %463, label %464, label %552

464:                                              ; preds = %461
  %465 = load ptr, ptr %37, align 8, !tbaa !5
  %466 = load i64, ptr %465, align 8, !tbaa !9
  %467 = icmp eq i64 %466, 0
  br i1 %467, label %468, label %552

468:                                              ; preds = %464
  %469 = load i64, ptr %57, align 8, !tbaa !9
  %470 = icmp ne i64 %469, 0
  br i1 %470, label %471, label %477

471:                                              ; preds = %468
  %472 = load ptr, ptr %24, align 8, !tbaa !5
  %473 = load ptr, ptr %28, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.doublecomplex, ptr %473, i64 1
  %475 = load ptr, ptr %24, align 8, !tbaa !5
  %476 = call i32 @zlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %58, ptr noundef %50, ptr noundef %472, ptr noundef @c__1, ptr noundef %474, ptr noundef %475, ptr noundef %51)
  br label %477

477:                                              ; preds = %471, %468
  %478 = load ptr, ptr %24, align 8, !tbaa !5
  %479 = load i64, ptr %478, align 8, !tbaa !9
  store i64 %479, ptr %42, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %480

480:                                              ; preds = %493, %477
  %481 = load i64, ptr %44, align 8, !tbaa !9
  %482 = load i64, ptr %42, align 8, !tbaa !9
  %483 = icmp sle i64 %481, %482
  br i1 %483, label %484, label %496

484:                                              ; preds = %480
  %485 = load ptr, ptr %22, align 8, !tbaa !5
  %486 = load ptr, ptr %28, align 8, !tbaa !5
  %487 = load i64, ptr %44, align 8, !tbaa !9
  %488 = getelementptr inbounds %struct.doublecomplex, ptr %486, i64 %487
  %489 = call i64 (ptr, ...) %485(ptr noundef %488)
  %490 = load ptr, ptr %36, align 8, !tbaa !5
  %491 = load i64, ptr %44, align 8, !tbaa !9
  %492 = getelementptr inbounds i64, ptr %490, i64 %491
  store i64 %489, ptr %492, align 8, !tbaa !9
  br label %493

493:                                              ; preds = %484
  %494 = load i64, ptr %44, align 8, !tbaa !9
  %495 = add nsw i64 %494, 1
  store i64 %495, ptr %44, align 8, !tbaa !9
  br label %480, !llvm.loop !16

496:                                              ; preds = %480
  %497 = load ptr, ptr %34, align 8, !tbaa !5
  %498 = load i64, ptr %497, align 8, !tbaa !9
  %499 = load i64, ptr %53, align 8, !tbaa !9
  %500 = sub nsw i64 %498, %499
  %501 = add nsw i64 %500, 1
  store i64 %501, ptr %42, align 8, !tbaa !9
  %502 = load ptr, ptr %23, align 8, !tbaa !5
  %503 = load ptr, ptr %20, align 8, !tbaa !5
  %504 = load ptr, ptr %36, align 8, !tbaa !5
  %505 = getelementptr inbounds i64, ptr %504, i64 1
  %506 = load ptr, ptr %24, align 8, !tbaa !5
  %507 = load ptr, ptr %25, align 8, !tbaa !5
  %508 = load i64, ptr %39, align 8, !tbaa !9
  %509 = getelementptr inbounds %struct.doublecomplex, ptr %507, i64 %508
  %510 = load ptr, ptr %26, align 8, !tbaa !5
  %511 = load ptr, ptr %29, align 8, !tbaa !5
  %512 = load i64, ptr %41, align 8, !tbaa !9
  %513 = getelementptr inbounds %struct.doublecomplex, ptr %511, i64 %512
  %514 = load ptr, ptr %30, align 8, !tbaa !5
  %515 = load ptr, ptr %28, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.doublecomplex, ptr %515, i64 1
  %517 = load ptr, ptr %27, align 8, !tbaa !5
  %518 = load ptr, ptr %31, align 8, !tbaa !5
  %519 = load ptr, ptr %32, align 8, !tbaa !5
  %520 = load ptr, ptr %33, align 8, !tbaa !5
  %521 = load i64, ptr %53, align 8, !tbaa !9
  %522 = getelementptr inbounds %struct.doublecomplex, ptr %520, i64 %521
  %523 = call i32 @ztrsen_(ptr noundef %502, ptr noundef %503, ptr noundef %505, ptr noundef %506, ptr noundef %509, ptr noundef %510, ptr noundef %513, ptr noundef %514, ptr noundef %516, ptr noundef %517, ptr noundef %518, ptr noundef %519, ptr noundef %522, ptr noundef %42, ptr noundef %55)
  %524 = load i64, ptr %64, align 8, !tbaa !9
  %525 = icmp ne i64 %524, 0
  br i1 %525, label %546, label %526

526:                                              ; preds = %496
  %527 = load i64, ptr %63, align 8, !tbaa !9
  store i64 %527, ptr %42, align 8, !tbaa !9
  %528 = load ptr, ptr %27, align 8, !tbaa !5
  %529 = load i64, ptr %528, align 8, !tbaa !9
  %530 = shl i64 %529, 1
  %531 = load ptr, ptr %24, align 8, !tbaa !5
  %532 = load i64, ptr %531, align 8, !tbaa !9
  %533 = load ptr, ptr %27, align 8, !tbaa !5
  %534 = load i64, ptr %533, align 8, !tbaa !9
  %535 = sub nsw i64 %532, %534
  %536 = mul nsw i64 %530, %535
  store i64 %536, ptr %43, align 8, !tbaa !9
  %537 = load i64, ptr %42, align 8, !tbaa !9
  %538 = load i64, ptr %43, align 8, !tbaa !9
  %539 = icmp sge i64 %537, %538
  br i1 %539, label %540, label %542

540:                                              ; preds = %526
  %541 = load i64, ptr %42, align 8, !tbaa !9
  br label %544

542:                                              ; preds = %526
  %543 = load i64, ptr %43, align 8, !tbaa !9
  br label %544

544:                                              ; preds = %542, %540
  %545 = phi i64 [ %541, %540 ], [ %543, %542 ]
  store i64 %545, ptr %63, align 8, !tbaa !9
  br label %546

546:                                              ; preds = %544, %496
  %547 = load i64, ptr %55, align 8, !tbaa !9
  %548 = icmp eq i64 %547, -14
  br i1 %548, label %549, label %551

549:                                              ; preds = %546
  %550 = load ptr, ptr %37, align 8, !tbaa !5
  store i64 -15, ptr %550, align 8, !tbaa !9
  br label %551

551:                                              ; preds = %549, %546
  br label %552

552:                                              ; preds = %551, %464, %461
  %553 = load i64, ptr %69, align 8, !tbaa !9
  %554 = icmp ne i64 %553, 0
  br i1 %554, label %555, label %566

555:                                              ; preds = %552
  %556 = load ptr, ptr %24, align 8, !tbaa !5
  %557 = load ptr, ptr %35, align 8, !tbaa !5
  %558 = load i64, ptr %49, align 8, !tbaa !9
  %559 = getelementptr inbounds double, ptr %557, i64 %558
  %560 = load ptr, ptr %24, align 8, !tbaa !5
  %561 = load ptr, ptr %29, align 8, !tbaa !5
  %562 = load i64, ptr %41, align 8, !tbaa !9
  %563 = getelementptr inbounds %struct.doublecomplex, ptr %561, i64 %562
  %564 = load ptr, ptr %30, align 8, !tbaa !5
  %565 = call i32 @zgebak_(ptr noundef @.str.9, ptr noundef @.str.13, ptr noundef %556, ptr noundef %46, ptr noundef %45, ptr noundef %559, ptr noundef %560, ptr noundef %563, ptr noundef %564, ptr noundef %51)
  br label %566

566:                                              ; preds = %555, %552
  %567 = load i64, ptr %57, align 8, !tbaa !9
  %568 = icmp ne i64 %567, 0
  br i1 %568, label %569, label %606

569:                                              ; preds = %566
  %570 = load ptr, ptr %24, align 8, !tbaa !5
  %571 = load ptr, ptr %24, align 8, !tbaa !5
  %572 = load ptr, ptr %25, align 8, !tbaa !5
  %573 = load i64, ptr %39, align 8, !tbaa !9
  %574 = getelementptr inbounds %struct.doublecomplex, ptr %572, i64 %573
  %575 = load ptr, ptr %26, align 8, !tbaa !5
  %576 = call i32 @zlascl_(ptr noundef @.str.14, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %58, ptr noundef %50, ptr noundef %570, ptr noundef %571, ptr noundef %574, ptr noundef %575, ptr noundef %51)
  %577 = load ptr, ptr %26, align 8, !tbaa !5
  %578 = load i64, ptr %577, align 8, !tbaa !9
  %579 = add nsw i64 %578, 1
  store i64 %579, ptr %42, align 8, !tbaa !9
  %580 = load ptr, ptr %24, align 8, !tbaa !5
  %581 = load ptr, ptr %25, align 8, !tbaa !5
  %582 = load i64, ptr %39, align 8, !tbaa !9
  %583 = getelementptr inbounds %struct.doublecomplex, ptr %581, i64 %582
  %584 = load ptr, ptr %28, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.doublecomplex, ptr %584, i64 1
  %586 = call i32 @f2c_zcopy(ptr noundef %580, ptr noundef %583, ptr noundef %42, ptr noundef %585, ptr noundef @c__1)
  %587 = load i64, ptr %68, align 8, !tbaa !9
  %588 = icmp ne i64 %587, 0
  br i1 %588, label %592, label %589

589:                                              ; preds = %569
  %590 = load i64, ptr %60, align 8, !tbaa !9
  %591 = icmp ne i64 %590, 0
  br i1 %591, label %592, label %605

592:                                              ; preds = %589, %569
  %593 = load ptr, ptr %37, align 8, !tbaa !5
  %594 = load i64, ptr %593, align 8, !tbaa !9
  %595 = icmp eq i64 %594, 0
  br i1 %595, label %596, label %605

596:                                              ; preds = %592
  %597 = load ptr, ptr %32, align 8, !tbaa !5
  %598 = load double, ptr %597, align 8, !tbaa !15
  %599 = getelementptr inbounds [1 x double], ptr %47, i64 0, i64 0
  store double %598, ptr %599, align 8, !tbaa !15
  %600 = getelementptr inbounds [1 x double], ptr %47, i64 0, i64 0
  %601 = call i32 @dlascl_(ptr noundef @.str.11, ptr noundef @c__0, ptr noundef @c__0, ptr noundef %58, ptr noundef %50, ptr noundef @c__1, ptr noundef @c__1, ptr noundef %600, ptr noundef @c__1, ptr noundef %51)
  %602 = getelementptr inbounds [1 x double], ptr %47, i64 0, i64 0
  %603 = load double, ptr %602, align 8, !tbaa !15
  %604 = load ptr, ptr %32, align 8, !tbaa !5
  store double %603, ptr %604, align 8, !tbaa !15
  br label %605

605:                                              ; preds = %596, %592, %589
  br label %606

606:                                              ; preds = %605, %566
  %607 = load i64, ptr %63, align 8, !tbaa !9
  %608 = sitofp i64 %607 to double
  %609 = load ptr, ptr %33, align 8, !tbaa !5
  %610 = getelementptr inbounds %struct.doublecomplex, ptr %609, i64 1
  %611 = getelementptr inbounds %struct.doublecomplex, ptr %610, i32 0, i32 0
  store double %608, ptr %611, align 8, !tbaa !11
  %612 = load ptr, ptr %33, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.doublecomplex, ptr %612, i64 1
  %614 = getelementptr inbounds %struct.doublecomplex, ptr %613, i32 0, i32 1
  store double 0.000000e+00, ptr %614, align 8, !tbaa !14
  store i32 0, ptr %19, align 4
  store i32 1, ptr %70, align 4
  br label %615

615:                                              ; preds = %606, %322, %313
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  %616 = load i32, ptr %19, align 4
  ret i32 %616
}

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

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

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

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

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

declare double @dlamch_(ptr noundef) #2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i64, align 8
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@c__0 = external hidden global i64, align 8
@c_n1 = external hidden global i64, align 8
@.str.7 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @zgeesx_(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr nocapture noundef readonly %14, ptr noundef %15, ptr noundef %16, ptr nocapture noundef %17) local_unnamed_addr #0 {
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca [1 x double], align 8
  %23 = alloca double, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #5
  %30 = getelementptr inbounds i8, ptr %8, i64 -16
  %31 = getelementptr inbounds i8, ptr %16, i64 -8
  store i64 0, ptr %17, align 8, !tbaa !5
  %32 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %33 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #5
  %34 = tail call i64 @lsame_(ptr noundef %3, ptr noundef nonnull @.str.2) #5
  %35 = tail call i64 @lsame_(ptr noundef %3, ptr noundef nonnull @.str.3) #5
  %36 = tail call i64 @lsame_(ptr noundef %3, ptr noundef nonnull @.str) #5
  %37 = tail call i64 @lsame_(ptr noundef %3, ptr noundef nonnull @.str.4) #5
  %.not = icmp ne i64 %32, 0
  br i1 %.not, label %40, label %38

38:                                               ; preds = %18
  %39 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #5
  %.not248 = icmp eq i64 %39, 0
  br i1 %.not248, label %.thread267.sink.split, label %40

40:                                               ; preds = %38, %18
  %.not250 = icmp eq i64 %33, 0
  br i1 %.not250, label %41, label %43

41:                                               ; preds = %40
  %42 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.2) #5
  %.not249 = icmp eq i64 %42, 0
  br i1 %.not249, label %.thread267.sink.split, label %43

43:                                               ; preds = %41, %40
  %44 = icmp eq i64 %34, 0
  %45 = icmp eq i64 %35, 0
  %or.cond.not285 = select i1 %44, i1 %45, i1 false
  %46 = icmp eq i64 %36, 0
  %or.cond3.not282 = select i1 %or.cond.not285, i1 %46, i1 false
  %47 = icmp eq i64 %37, 0
  %or.cond5.not280 = select i1 %or.cond3.not282, i1 %47, i1 false
  %48 = or i64 %34, %33
  %or.cond7.not = icmp eq i64 %48, 0
  %or.cond262 = select i1 %or.cond5.not280, i1 true, i1 %or.cond7.not
  br i1 %or.cond262, label %.thread267.sink.split, label %49

49:                                               ; preds = %43
  %50 = load i64, ptr %4, align 8, !tbaa !5
  %51 = icmp slt i64 %50, 0
  br i1 %51, label %.thread267.sink.split, label %52

52:                                               ; preds = %49
  %53 = load i64, ptr %6, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %50, i64 1)
  %54 = icmp slt i64 %53, %spec.select
  br i1 %54, label %.thread267.sink.split, label %55

55:                                               ; preds = %52
  %56 = load i64, ptr %10, align 8, !tbaa !5
  %57 = icmp slt i64 %56, 1
  %58 = icmp ult i64 %56, %50
  %or.cond278 = and i1 %.not, %58
  %or.cond = or i1 %57, %or.cond278
  br i1 %or.cond, label %.thread267.sink.split, label %59

59:                                               ; preds = %55
  %.pr = load i64, ptr %17, align 8, !tbaa !5
  %60 = icmp eq i64 %.pr, 0
  br i1 %60, label %61, label %.thread267

61:                                               ; preds = %59
  %62 = icmp eq i64 %50, 0
  br i1 %62, label %87, label %63

63:                                               ; preds = %61
  %64 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.6, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %4, ptr noundef nonnull @c__0) #5
  %65 = add i64 %64, 1
  %66 = mul i64 %65, %50
  %67 = load i64, ptr %4, align 8, !tbaa !5
  %68 = shl i64 %67, 1
  %69 = call i32 @zhseqr_(ptr noundef nonnull @.str.1, ptr noundef %0, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %8, ptr noundef %9, ptr noundef nonnull %10, ptr noundef %13, ptr noundef nonnull @c_n1, ptr noundef nonnull %26) #5
  %70 = load double, ptr %13, align 8, !tbaa !9
  %71 = fptosi double %70 to i64
  br i1 %.not, label %72, label %80

72:                                               ; preds = %63
  store i64 %66, ptr %19, align 8, !tbaa !5
  %73 = load i64, ptr %4, align 8, !tbaa !5
  %74 = add nsw i64 %73, -1
  %75 = call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.6, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef nonnull %4, ptr noundef nonnull @c_n1) #5
  %76 = mul nsw i64 %74, %75
  %77 = add nsw i64 %76, %73
  %78 = load i64, ptr %19, align 8
  %79 = call i64 @llvm.smax.i64(i64 %78, i64 %77)
  br label %80

80:                                               ; preds = %63, %72
  %.sink = phi i64 [ %79, %72 ], [ %66, %63 ]
  %81 = call i64 @llvm.smax.i64(i64 %.sink, i64 %71)
  br i1 %44, label %82, label %87

82:                                               ; preds = %80
  store i64 %81, ptr %19, align 8, !tbaa !5
  %83 = load i64, ptr %4, align 8, !tbaa !5
  %84 = mul nsw i64 %83, %83
  %85 = lshr i64 %84, 1
  %86 = call i64 @llvm.smax.i64(i64 %81, i64 %85)
  br label %87

87:                                               ; preds = %61, %80, %82
  %.0239 = phi i64 [ %81, %80 ], [ %86, %82 ], [ 1, %61 ]
  %.0237 = phi i64 [ %68, %80 ], [ %68, %82 ], [ 1, %61 ]
  %.1 = phi i64 [ %81, %80 ], [ %81, %82 ], [ undef, %61 ]
  %88 = sitofp i64 %.0239 to double
  store double %88, ptr %13, align 8, !tbaa !9
  %89 = getelementptr inbounds i8, ptr %13, i64 8
  store double 0.000000e+00, ptr %89, align 8, !tbaa !12
  %90 = load i64, ptr %14, align 8, !tbaa !5
  %91 = icmp slt i64 %90, %.0237
  br i1 %91, label %.thread267.sink.split, label %.thread

.thread:                                          ; preds = %87
  %.pr264.pr = load i64, ptr %17, align 8, !tbaa !5
  %.not256 = icmp eq i64 %.pr264.pr, 0
  br i1 %.not256, label %95, label %.thread267

.thread267.sink.split:                            ; preds = %87, %55, %52, %49, %43, %41, %38
  %.sink290 = phi i64 [ -1, %38 ], [ -2, %41 ], [ -4, %43 ], [ -5, %49 ], [ -7, %52 ], [ -11, %55 ], [ -15, %87 ]
  store i64 %.sink290, ptr %17, align 8, !tbaa !5
  br label %.thread267

.thread267:                                       ; preds = %.thread267.sink.split, %59, %.thread
  %92 = phi i64 [ %.pr264.pr, %.thread ], [ %.pr, %59 ], [ %.sink290, %.thread267.sink.split ]
  %93 = sub nsw i64 0, %92
  store i64 %93, ptr %19, align 8, !tbaa !5
  %94 = call i32 @xerbla_(ptr noundef nonnull @.str.8, ptr noundef nonnull %19) #5
  br label %182

95:                                               ; preds = %.thread
  %96 = load i64, ptr %4, align 8, !tbaa !5
  %97 = icmp eq i64 %96, 0
  br i1 %97, label %98, label %99

98:                                               ; preds = %95
  store i64 0, ptr %7, align 8, !tbaa !5
  br label %182

99:                                               ; preds = %95
  %100 = call double @dlamch_(ptr noundef nonnull @.str.9) #5
  %101 = call double @dlamch_(ptr noundef nonnull @.str.1) #5
  store double %101, ptr %29, align 8, !tbaa !13
  %102 = fdiv double 1.000000e+00, %101
  store double %102, ptr %28, align 8, !tbaa !13
  %103 = call i32 @dlabad_(ptr noundef nonnull %29, ptr noundef nonnull %28) #5
  %104 = load double, ptr %29, align 8, !tbaa !13
  %105 = call double @sqrt(double noundef %104) #5
  %106 = fdiv double %105, %100
  store double %106, ptr %29, align 8, !tbaa !13
  %107 = fdiv double 1.000000e+00, %106
  store double %107, ptr %28, align 8, !tbaa !13
  %108 = call double @zlange_(ptr noundef nonnull @.str.10, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %22) #5
  store double %108, ptr %23, align 8, !tbaa !13
  %109 = fcmp ogt double %108, 0.000000e+00
  %110 = load double, ptr %29, align 8
  %111 = fcmp olt double %108, %110
  %or.cond287 = select i1 %109, i1 %111, i1 false
  br i1 %or.cond287, label %115, label %112

112:                                              ; preds = %99
  %113 = load double, ptr %28, align 8, !tbaa !13
  %114 = fcmp ogt double %108, %113
  br i1 %114, label %115, label %117

115:                                              ; preds = %99, %112
  %storemerge = phi double [ %113, %112 ], [ %110, %99 ]
  store double %storemerge, ptr %27, align 8, !tbaa !13
  %116 = call i32 @zlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %23, ptr noundef nonnull %27, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %24) #5
  br label %117

117:                                              ; preds = %112, %115
  %.not257274 = phi i1 [ false, %115 ], [ true, %112 ]
  %118 = call i32 @zgebal_(ptr noundef nonnull @.str.9, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %21, ptr noundef nonnull %20, ptr noundef %15, ptr noundef nonnull %24) #5
  %119 = load i64, ptr %4, align 8, !tbaa !5
  %120 = load i64, ptr %14, align 8, !tbaa !5
  %121 = sub i64 %120, %119
  store i64 %121, ptr %19, align 8, !tbaa !5
  %122 = getelementptr %struct.doublecomplex, ptr %13, i64 %119
  %123 = call i32 @zgehrd_(ptr noundef nonnull %4, ptr noundef nonnull %21, ptr noundef nonnull %20, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %13, ptr noundef %122, ptr noundef nonnull %19, ptr noundef nonnull %24) #5
  br i1 %.not, label %124, label %129

124:                                              ; preds = %117
  %125 = call i32 @zlacpy_(ptr noundef nonnull @.str.12, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %9, ptr noundef nonnull %10) #5
  %126 = load i64, ptr %14, align 8, !tbaa !5
  %127 = sub i64 %126, %119
  store i64 %127, ptr %19, align 8, !tbaa !5
  %128 = call i32 @zunghr_(ptr noundef nonnull %4, ptr noundef nonnull %21, ptr noundef nonnull %20, ptr noundef %9, ptr noundef nonnull %10, ptr noundef nonnull %13, ptr noundef %122, ptr noundef nonnull %19, ptr noundef nonnull %24) #5
  br label %129

129:                                              ; preds = %124, %117
  store i64 0, ptr %7, align 8, !tbaa !5
  %130 = load i64, ptr %14, align 8, !tbaa !5
  store i64 %130, ptr %19, align 8, !tbaa !5
  %131 = call i32 @zhseqr_(ptr noundef nonnull @.str.1, ptr noundef %0, ptr noundef nonnull %4, ptr noundef nonnull %21, ptr noundef nonnull %20, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %8, ptr noundef %9, ptr noundef nonnull %10, ptr noundef nonnull %13, ptr noundef nonnull %19, ptr noundef nonnull %26) #5
  %132 = load i64, ptr %26, align 8, !tbaa !5
  %133 = icmp sgt i64 %132, 0
  br i1 %133, label %134, label %135

134:                                              ; preds = %129
  store i64 %132, ptr %17, align 8, !tbaa !5
  br label %135

135:                                              ; preds = %134, %129
  br i1 %.not250, label %162, label %136

136:                                              ; preds = %135
  %137 = load i64, ptr %17, align 8, !tbaa !5
  %138 = icmp eq i64 %137, 0
  br i1 %138, label %139, label %162

139:                                              ; preds = %136
  br i1 %.not257274, label %142, label %140

140:                                              ; preds = %139
  %141 = call i32 @zlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %27, ptr noundef nonnull %23, ptr noundef nonnull %4, ptr noundef nonnull @c__1, ptr noundef %8, ptr noundef nonnull %4, ptr noundef nonnull %24) #5
  br label %142

142:                                              ; preds = %140, %139
  %143 = load i64, ptr %4, align 8, !tbaa !5
  store i64 %143, ptr %19, align 8, !tbaa !5
  %.not259288 = icmp slt i64 %143, 1
  br i1 %.not259288, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %142, %.lr.ph
  %.0240289 = phi i64 [ %147, %.lr.ph ], [ 1, %142 ]
  %144 = getelementptr inbounds %struct.doublecomplex, ptr %30, i64 %.0240289
  %145 = call i64 (ptr, ...) %2(ptr noundef nonnull %144) #5
  %146 = getelementptr inbounds i64, ptr %31, i64 %.0240289
  store i64 %145, ptr %146, align 8, !tbaa !5
  %147 = add nuw nsw i64 %.0240289, 1
  %148 = load i64, ptr %19, align 8, !tbaa !5
  %.not259.not = icmp slt i64 %.0240289, %148
  br i1 %.not259.not, label %.lr.ph, label %._crit_edge, !llvm.loop !14

._crit_edge:                                      ; preds = %.lr.ph, %142
  %149 = load i64, ptr %14, align 8, !tbaa !5
  store i64 %149, ptr %19, align 8, !tbaa !5
  %150 = call i32 @ztrsen_(ptr noundef %3, ptr noundef %0, ptr noundef %16, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %9, ptr noundef nonnull %10, ptr noundef %8, ptr noundef nonnull %7, ptr noundef %11, ptr noundef %12, ptr noundef nonnull %13, ptr noundef nonnull %19, ptr noundef nonnull %25) #5
  br i1 %44, label %151, label %158

151:                                              ; preds = %._crit_edge
  store i64 %.1, ptr %19, align 8, !tbaa !5
  %152 = load i64, ptr %7, align 8, !tbaa !5
  %153 = shl i64 %152, 1
  %154 = load i64, ptr %4, align 8, !tbaa !5
  %155 = sub nsw i64 %154, %152
  %156 = mul nsw i64 %153, %155
  %157 = call i64 @llvm.smax.i64(i64 %.1, i64 %156)
  br label %158

158:                                              ; preds = %151, %._crit_edge
  %.3 = phi i64 [ %.1, %._crit_edge ], [ %157, %151 ]
  %159 = load i64, ptr %25, align 8, !tbaa !5
  %160 = icmp eq i64 %159, -14
  br i1 %160, label %161, label %162

161:                                              ; preds = %158
  store i64 -15, ptr %17, align 8, !tbaa !5
  br label %162

162:                                              ; preds = %158, %161, %136, %135
  %.4 = phi i64 [ %.3, %161 ], [ %.3, %158 ], [ %.1, %136 ], [ %.1, %135 ]
  br i1 %.not, label %163, label %165

163:                                              ; preds = %162
  %164 = call i32 @zgebak_(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.13, ptr noundef nonnull %4, ptr noundef nonnull %21, ptr noundef nonnull %20, ptr noundef %15, ptr noundef nonnull %4, ptr noundef %9, ptr noundef nonnull %10, ptr noundef nonnull %24) #5
  br label %165

165:                                              ; preds = %163, %162
  br i1 %.not257274, label %180, label %166

166:                                              ; preds = %165
  %167 = call i32 @zlascl_(ptr noundef nonnull @.str.14, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %27, ptr noundef nonnull %23, ptr noundef nonnull %4, ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %24) #5
  %168 = load i64, ptr %6, align 8, !tbaa !5
  %169 = add nsw i64 %168, 1
  store i64 %169, ptr %19, align 8, !tbaa !5
  %170 = call i32 @f2c_zcopy(ptr noundef nonnull %4, ptr noundef %5, ptr noundef nonnull %19, ptr noundef %8, ptr noundef nonnull @c__1) #5
  %171 = icmp ne i64 %36, 0
  %172 = icmp ne i64 %37, 0
  %or.cond9 = select i1 %171, i1 true, i1 %172
  br i1 %or.cond9, label %173, label %180

173:                                              ; preds = %166
  %174 = load i64, ptr %17, align 8, !tbaa !5
  %175 = icmp eq i64 %174, 0
  br i1 %175, label %176, label %180

176:                                              ; preds = %173
  %177 = load double, ptr %12, align 8, !tbaa !13
  store double %177, ptr %22, align 8, !tbaa !13
  %178 = call i32 @dlascl_(ptr noundef nonnull @.str.11, ptr noundef nonnull @c__0, ptr noundef nonnull @c__0, ptr noundef nonnull %27, ptr noundef nonnull %23, ptr noundef nonnull @c__1, ptr noundef nonnull @c__1, ptr noundef nonnull %22, ptr noundef nonnull @c__1, ptr noundef nonnull %24) #5
  %179 = load double, ptr %22, align 8, !tbaa !13
  store double %179, ptr %12, align 8, !tbaa !13
  br label %180

180:                                              ; preds = %173, %176, %166, %165
  %181 = sitofp i64 %.4 to double
  store double %181, ptr %13, align 8, !tbaa !9
  store double 0.000000e+00, ptr %89, align 8, !tbaa !12
  br label %182

182:                                              ; preds = %180, %98, %.thread267
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #5
  ret i32 0
}

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

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

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

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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